From 8bface1e8935788831d20d152ad959d1d92233e4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pavel=20B=C5=99ezina?= <pbrezina@redhat.com>
Date: Wed, 5 Sep 2012 14:55:44 +0200
Subject: [PATCH 2/2] be_process_init(): free ctx on error

---
 src/providers/data_provider_be.c | 35 ++++++++++++++++++++---------------
 1 file changed, 20 insertions(+), 15 deletions(-)

diff --git a/src/providers/data_provider_be.c b/src/providers/data_provider_be.c
index 0d0c69593f27985f1977ed1acc7d105301686dd1..4bd75a00d7dcba139409096efe587603637cc07e 100644
--- a/src/providers/data_provider_be.c
+++ b/src/providers/data_provider_be.c
@@ -2106,21 +2106,21 @@ int be_process_init(TALLOC_CTX *mem_ctx,
     if (ret != EOK) {
         DEBUG(SSSDBG_FATAL_FAILURE,
               ("Unable to read from confdb [%d]: %s\n", ret, strerror(ret)));
-        return ret;
+        goto fail;
     }
 
     ret = be_init_failover(ctx);
     if (ret != EOK) {
         DEBUG(SSSDBG_FATAL_FAILURE,
               ("fatal error initializing failover context\n"));
-        return ret;
+        goto fail;
     }
 
     ret = sysdb_init_domain_and_sysdb(ctx, cdb, be_domain, DB_PATH,
                                       &ctx->domain, &ctx->sysdb);
     if (ret != EOK) {
         DEBUG(SSSDBG_FATAL_FAILURE, ("fatal error opening cache database\n"));
-        return ret;
+        goto fail;
     }
 
     ret = sss_monitor_init(ctx, ctx->ev, &monitor_be_interface,
@@ -2129,13 +2129,13 @@ int be_process_init(TALLOC_CTX *mem_ctx,
     if (ret != EOK) {
         DEBUG(SSSDBG_FATAL_FAILURE,
               ("fatal error setting up monitor bus\n"));
-        return ret;
+        goto fail;
     }
 
     ret = be_srv_init(ctx);
     if (ret != EOK) {
         DEBUG(SSSDBG_FATAL_FAILURE, ("fatal error setting up server bus\n"));
-        return ret;
+        goto fail;
     }
 
     ret = load_backend_module(ctx, BET_ID,
@@ -2143,7 +2143,7 @@ int be_process_init(TALLOC_CTX *mem_ctx,
     if (ret != EOK) {
         DEBUG(SSSDBG_FATAL_FAILURE,
               ("fatal error initializing data providers\n"));
-        return ret;
+        goto fail;
     }
     DEBUG(SSSDBG_TRACE_INTERNAL,
           ("ID backend target successfully loaded from provider [%s].\n",
@@ -2156,7 +2156,7 @@ int be_process_init(TALLOC_CTX *mem_ctx,
         if (ret != ENOENT) {
             DEBUG(SSSDBG_FATAL_FAILURE,
                   ("fatal error initializing data providers\n"));
-            return ret;
+            goto fail;
         }
         DEBUG(SSSDBG_MINOR_FAILURE,
               ("No authentication module provided for [%s] !!\n",
@@ -2172,7 +2172,7 @@ int be_process_init(TALLOC_CTX *mem_ctx,
     if (ret != EOK) {
         DEBUG(SSSDBG_FATAL_FAILURE,
               ("Failed to setup ACCESS backend.\n"));
-        return ret;
+        goto fail;
     }
     DEBUG(SSSDBG_TRACE_INTERNAL,
           ("ACCESS backend target successfully loaded "
@@ -2185,7 +2185,7 @@ int be_process_init(TALLOC_CTX *mem_ctx,
         if (ret != ENOENT) {
             DEBUG(SSSDBG_FATAL_FAILURE,
                   ("fatal error initializing data providers\n"));
-            return ret;
+            goto fail;
         }
         DEBUG(SSSDBG_MINOR_FAILURE,
               ("No change password module provided for [%s] !!\n",
@@ -2203,7 +2203,7 @@ int be_process_init(TALLOC_CTX *mem_ctx,
             if (ret != ENOENT) {
                 DEBUG(SSSDBG_FATAL_FAILURE,
                       ("fatal error initializing data providers\n"));
-                return ret;
+                goto fail;
             }
             DEBUG(SSSDBG_MINOR_FAILURE,
                   ("No SUDO module provided for [%s] !!\n", be_domain));
@@ -2221,7 +2221,7 @@ int be_process_init(TALLOC_CTX *mem_ctx,
         if (ret != ENOENT) {
             DEBUG(SSSDBG_FATAL_FAILURE,
                   ("fatal error initializing data providers\n"));
-            return ret;
+            goto fail;
         }
         DEBUG(SSSDBG_MINOR_FAILURE,
               ("No autofs module provided for [%s] !!\n", be_domain));
@@ -2237,7 +2237,7 @@ int be_process_init(TALLOC_CTX *mem_ctx,
     if (ret != EOK) {
         if (ret != ENOENT) {
             DEBUG(SSSDBG_FATAL_FAILURE, ("fatal error initializing data providers\n"));
-            return ret;
+            goto fail;
         }
         DEBUG(SSSDBG_CRIT_FAILURE, ("No selinux module provided for [%s] !!\n",
                   be_domain));
@@ -2253,7 +2253,7 @@ int be_process_init(TALLOC_CTX *mem_ctx,
         if (ret != ENOENT) {
             DEBUG(SSSDBG_FATAL_FAILURE,
                   ("fatal error initializing data providers\n"));
-            return ret;
+            goto fail;
         }
         DEBUG(SSSDBG_CRIT_FAILURE,
               ("No host info module provided for [%s] !!\n", be_domain));
@@ -2278,7 +2278,8 @@ int be_process_init(TALLOC_CTX *mem_ctx,
     tes = tevent_add_signal(ctx->ev, ctx, SIGUSR1, 0,
                             signal_be_offline, ctx);
     if (tes == NULL) {
-        return EIO;
+        ret = EIO;
+        goto fail;
     }
 
     ret = sss_sigchld_init(ctx, ctx->ev, &ctx->sigchld_ctx);
@@ -2286,11 +2287,15 @@ int be_process_init(TALLOC_CTX *mem_ctx,
         DEBUG(SSSDBG_FATAL_FAILURE,
               ("Could not initialize sigchld context: [%s]\n",
                strerror(ret)));
-        return ret;
+        goto fail;
     }
 
     talloc_free(services);
     return EOK;
+
+fail:
+    talloc_free(ctx);
+    return ret;
 }
 
 int main(int argc, const char *argv[])
-- 
1.7.11.4

