>From 5e66a9b9704dc488cada780ee8bce19074c1ebf9 Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Tue, 21 Oct 2014 22:36:59 +0200 Subject: [PATCH 2/3] UTIL: Remove more code duplication setting up child processes 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. --- 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