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