Blob Blame History Raw
From b95d9cbd6959a3174c4fb963be642f770938e4b7 Mon Sep 17 00:00:00 2001
From: Jakub Hrozek <jhrozek@redhat.com>
Date: Tue, 21 Oct 2014 22:36:59 +0200
Subject: [PATCH 70/71] UTIL: Remove more code duplication setting up child
 processes
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

All our child processes duplicated the same code that set up the
debugging all around. Instead of adding yet another copy for the
selinux_child, add a common utility function.

Reviewed-by: Michal Židek <mzidek@redhat.com>
---
 src/providers/ad/ad_gpo.c               | 23 ++---------------------
 src/providers/krb5/krb5_init_shared.c   | 24 ++++++++----------------
 src/providers/ldap/sdap_child_helpers.c | 22 +---------------------
 src/util/child_common.c                 | 29 +++++++++++++++++++++++++++++
 src/util/child_common.h                 |  2 ++
 5 files changed, 42 insertions(+), 58 deletions(-)

diff --git a/src/providers/ad/ad_gpo.c b/src/providers/ad/ad_gpo.c
index 80b0d45c2861a64f01fe7835cccee4348084c7da..83edbe4fb5a7e617cab95c0330ceae31392b18b2 100644
--- a/src/providers/ad/ad_gpo.c
+++ b/src/providers/ad/ad_gpo.c
@@ -1313,29 +1313,10 @@ ad_gpo_access_check(TALLOC_CTX *mem_ctx,
 }
 
 #define GPO_CHILD_LOG_FILE "gpo_child"
+
 static errno_t gpo_child_init(void)
 {
-    int ret;
-    FILE *debug_filep;
-
-    if (debug_to_file != 0 && gpo_child_debug_fd == -1) {
-        ret = open_debug_file_ex(GPO_CHILD_LOG_FILE, &debug_filep, false);
-        if (ret != EOK) {
-            DEBUG(SSSDBG_FATAL_FAILURE, "Error setting up logging (%d) [%s]\n",
-                        ret, strerror(ret));
-            return ret;
-        }
-
-        gpo_child_debug_fd = fileno(debug_filep);
-        if (gpo_child_debug_fd == -1) {
-            DEBUG(SSSDBG_FATAL_FAILURE,
-                  "fileno failed [%d][%s]\n", errno, strerror(errno));
-            ret = errno;
-            return ret;
-        }
-    }
-
-    return EOK;
+    return child_debug_init(GPO_CHILD_LOG_FILE, &gpo_child_debug_fd);
 }
 
 /*
diff --git a/src/providers/krb5/krb5_init_shared.c b/src/providers/krb5/krb5_init_shared.c
index 340eab1f0d432d411e2b807f66b03bffcbd14d1d..3b4bf096ef49d0f2d369fda20462b7fd56d61127 100644
--- a/src/providers/krb5/krb5_init_shared.c
+++ b/src/providers/krb5/krb5_init_shared.c
@@ -30,7 +30,6 @@ errno_t krb5_child_init(struct krb5_ctx *krb5_auth_ctx,
                         struct be_ctx *bectx)
 {
     errno_t ret;
-    FILE *debug_filep;
     time_t renew_intv = 0;
     krb5_deltat renew_interval_delta;
     char *renew_interval_str;
@@ -83,23 +82,16 @@ errno_t krb5_child_init(struct krb5_ctx *krb5_auth_ctx,
         goto done;
     }
 
-    if (debug_to_file != 0) {
-        ret = open_debug_file_ex(KRB5_CHILD_LOG_FILE, &debug_filep, false);
-        if (ret != EOK) {
-            DEBUG(SSSDBG_FATAL_FAILURE, "Error setting up logging (%d) [%s]\n",
-                    ret, strerror(ret));
-            goto done;
-        }
-
-        krb5_auth_ctx->child_debug_fd = fileno(debug_filep);
-        if (krb5_auth_ctx->child_debug_fd == -1) {
-            DEBUG(SSSDBG_FATAL_FAILURE,
-                  "fileno failed [%d][%s]\n", errno, strerror(errno));
-            ret = errno;
-            goto done;
-        }
+    krb5_auth_ctx->child_debug_fd = -1; /* -1 means not initialized */
+    ret = child_debug_init(KRB5_CHILD_LOG_FILE,
+                           &krb5_auth_ctx->child_debug_fd);
+    if (ret != EOK) {
+        DEBUG(SSSDBG_OP_FAILURE, "Could not set krb5_child debugging!\n");
+        goto done;
     }
 
+    ret = EOK;
+
 done:
     return ret;
 }
diff --git a/src/providers/ldap/sdap_child_helpers.c b/src/providers/ldap/sdap_child_helpers.c
index e5d46b9b756cd50fadb212da72ad1cc9bdd93330..40010989021eb7cf77b96876b2d1c4119ed39163 100644
--- a/src/providers/ldap/sdap_child_helpers.c
+++ b/src/providers/ldap/sdap_child_helpers.c
@@ -466,25 +466,5 @@ static errno_t set_tgt_child_timeout(struct tevent_req *req,
 /* Setup child logging */
 int sdap_setup_child(void)
 {
-    int ret;
-    FILE *debug_filep;
-
-    if (debug_to_file != 0 && ldap_child_debug_fd == -1) {
-        ret = open_debug_file_ex(LDAP_CHILD_LOG_FILE, &debug_filep, false);
-        if (ret != EOK) {
-            DEBUG(SSSDBG_FATAL_FAILURE, "Error setting up logging (%d) [%s]\n",
-                        ret, strerror(ret));
-            return ret;
-        }
-
-        ldap_child_debug_fd = fileno(debug_filep);
-        if (ldap_child_debug_fd == -1) {
-            DEBUG(SSSDBG_FATAL_FAILURE,
-                  "fileno failed [%d][%s]\n", errno, strerror(errno));
-            ret = errno;
-            return ret;
-        }
-    }
-
-    return EOK;
+    return child_debug_init(LDAP_CHILD_LOG_FILE, &ldap_child_debug_fd);
 }
diff --git a/src/util/child_common.c b/src/util/child_common.c
index e4a885b6e6e4a1a8a0cabd12ba1544a7c8f0f160..cc6a8fa758bfa6efa511c28cd9121e759b590342 100644
--- a/src/util/child_common.c
+++ b/src/util/child_common.c
@@ -801,3 +801,32 @@ int child_io_destructor(void *ptr)
 
     return EOK;
 }
+
+errno_t child_debug_init(const char *logfile, int *debug_fd)
+{
+    int ret;
+    FILE *debug_filep;
+
+    if (debug_fd == NULL) {
+        return EOK;
+    }
+
+    if (debug_to_file != 0 && *debug_fd == -1) {
+        ret = open_debug_file_ex(logfile, &debug_filep, false);
+        if (ret != EOK) {
+            DEBUG(SSSDBG_FATAL_FAILURE, "Error setting up logging (%d) [%s]\n",
+                        ret, sss_strerror(ret));
+            return ret;
+        }
+
+        *debug_fd = fileno(debug_filep);
+        if (*debug_fd == -1) {
+            DEBUG(SSSDBG_FATAL_FAILURE,
+                  "fileno failed [%d][%s]\n", errno, strerror(errno));
+            ret = errno;
+            return ret;
+        }
+    }
+
+    return EOK;
+}
diff --git a/src/util/child_common.h b/src/util/child_common.h
index 261da7f9c546ddfdb38506e5285024ad201bdd4d..e159719a2fca70a4ea044d79530a0d21cb3577e8 100644
--- a/src/util/child_common.h
+++ b/src/util/child_common.h
@@ -120,4 +120,6 @@ void child_cleanup(int readfd, int writefd);
 
 int child_io_destructor(void *ptr);
 
+errno_t child_debug_init(const char *logfile, int *debug_fd);
+
 #endif /* __CHILD_COMMON_H__ */
-- 
1.9.3