URL: https://github.com/SSSD/sssd/pull/441
Author: lslebodn
 Title: #441: CHILD: Pass information about logger to children
Action: opened

PR body:
"""
Variables debug_to_file or debug_to_stderr were not set
because back-end already user parameter --logger=%s.
And therefore logs were not sent to files.
    
It could only work in case of direct usage of --debug-to-files in back-end via
command configuration option.
    
Resolves:
https://pagure.io/SSSD/sssd/issue/3433
"""

To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/441/head:pr441
git checkout pr441
From 699327f61a3698d6ba82e6c6ce1dd46a2b0663f1 Mon Sep 17 00:00:00 2001
From: Lukas Slebodnik <[email protected]>
Date: Tue, 7 Nov 2017 17:11:52 +0100
Subject: [PATCH 1/2] BUILD: Properly expand variables in sssd-ifp.service

systemd[1]: [/usr/lib/systemd/system/sssd-ifp.service:9]
    Path '-@environment_file@' is not absolute, ignoring.

sh-4.2# systemctl cat sssd-ifp.service
 # /usr/lib/systemd/system/sssd-ifp.service
[Unit]
Description=SSSD IFP Service responder
Documentation=man:sssd-ifp(5)
After=sssd.service
BindsTo=sssd.service

[Service]
Environment=DEBUG_LOGGER=--logger=files
EnvironmentFile=-@environment_file@
Type=dbus
BusName=org.freedesktop.sssd.infopipe
ExecStart=/usr/libexec/sssd/sssd_ifp --uid 0 --gid 0 --dbus-activated ${DEBUG_LOGGER}

Resolves:
https://pagure.io/SSSD/sssd/issue/3433
---
 Makefile.am | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Makefile.am b/Makefile.am
index 286ba47e3..bbc90d9ba 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1491,7 +1491,7 @@ EXTRA_DIST += \
     src/responder/ifp/org.freedesktop.sssd.infopipe.service.in \
     $(NULL)
 
-ifp_edit_cmd = $(SED) \
+ifp_edit_cmd = $(edit_cmd) \
         -e 's|@ifp_exec_cmd[@]|$(ifp_exec_cmd)|g' \
         -e 's|@ifp_systemdservice[@]|$(ifp_systemdservice)|g' \
         -e 's|@ifp_restart[@]|$(ifp_restart)|g'

From 582c048b56801d8abf08aebb110e77a3060c4de4 Mon Sep 17 00:00:00 2001
From: Lukas Slebodnik <[email protected]>
Date: Wed, 8 Nov 2017 08:13:02 +0100
Subject: [PATCH 2/2] CHILD: Pass information about logger to children

Variables debug_to_file or debug_to_stderr were not set
because back-end already user parameter --logger=%s.
And therefore logs were not sent to files.

It could only work in case of direct usage of --debug-to-files in back-end via
command configuration option.

Resolves:
https://pagure.io/SSSD/sssd/issue/3433
---
 src/p11_child/p11_child_nss.c     |  4 +++-
 src/providers/ad/ad_gpo_child.c   |  3 ++-
 src/providers/ipa/selinux_child.c |  3 ++-
 src/providers/krb5/krb5_child.c   |  3 ++-
 src/providers/ldap/ldap_child.c   |  3 ++-
 src/util/child_common.c           | 20 ++++++++------------
 6 files changed, 19 insertions(+), 17 deletions(-)

diff --git a/src/p11_child/p11_child_nss.c b/src/p11_child/p11_child_nss.c
index e7dbcb689..b0ec69be3 100644
--- a/src/p11_child/p11_child_nss.c
+++ b/src/p11_child/p11_child_nss.c
@@ -537,7 +537,7 @@ int main(int argc, const char *argv[])
     int opt;
     poptContext pc;
     int debug_fd = -1;
-    char *opt_logger = NULL;
+    const char *opt_logger = NULL;
     errno_t ret;
     TALLOC_CTX *main_ctx = NULL;
     char *cert;
@@ -673,7 +673,9 @@ int main(int argc, const char *argv[])
         if (ret != EOK) {
             DEBUG(SSSDBG_CRIT_FAILURE, "set_debug_file_from_fd failed.\n");
         }
+        opt_logger = sss_logger_str[FILES_LOGGER];
     }
+
     sss_set_logger(opt_logger);
 
     DEBUG(SSSDBG_TRACE_FUNC, "p11_child started.\n");
diff --git a/src/providers/ad/ad_gpo_child.c b/src/providers/ad/ad_gpo_child.c
index 5375cc691..a0bd6e13a 100644
--- a/src/providers/ad/ad_gpo_child.c
+++ b/src/providers/ad/ad_gpo_child.c
@@ -687,7 +687,7 @@ main(int argc, const char *argv[])
     int opt;
     poptContext pc;
     int debug_fd = -1;
-    char *opt_logger = NULL;
+    const char *opt_logger = NULL;
     errno_t ret;
     int sysvol_gpt_version;
     int result;
@@ -744,6 +744,7 @@ main(int argc, const char *argv[])
         if (ret != EOK) {
             DEBUG(SSSDBG_CRIT_FAILURE, "set_debug_file_from_fd failed.\n");
         }
+        opt_logger = sss_logger_str[FILES_LOGGER];
     }
 
     sss_set_logger(opt_logger);
diff --git a/src/providers/ipa/selinux_child.c b/src/providers/ipa/selinux_child.c
index 120492686..a7e20f715 100644
--- a/src/providers/ipa/selinux_child.c
+++ b/src/providers/ipa/selinux_child.c
@@ -206,7 +206,7 @@ int main(int argc, const char *argv[])
     struct response *resp = NULL;
     ssize_t written;
     bool needs_update;
-    char *opt_logger = NULL;
+    const char *opt_logger = NULL;
 
     struct poptOption long_options[] = {
         POPT_AUTOHELP
@@ -254,6 +254,7 @@ int main(int argc, const char *argv[])
         if (ret != EOK) {
             DEBUG(SSSDBG_CRIT_FAILURE, "set_debug_file_from_fd failed.\n");
         }
+        opt_logger = sss_logger_str[FILES_LOGGER];
     }
 
     sss_set_logger(opt_logger);
diff --git a/src/providers/krb5/krb5_child.c b/src/providers/krb5/krb5_child.c
index b44f3a20f..306d53452 100644
--- a/src/providers/krb5/krb5_child.c
+++ b/src/providers/krb5/krb5_child.c
@@ -3020,7 +3020,7 @@ int main(int argc, const char *argv[])
     int opt;
     poptContext pc;
     int debug_fd = -1;
-    char *opt_logger = NULL;
+    const char *opt_logger = NULL;
     errno_t ret;
     krb5_error_code kerr;
     uid_t fast_uid;
@@ -3097,6 +3097,7 @@ int main(int argc, const char *argv[])
         if (ret != EOK) {
             DEBUG(SSSDBG_CRIT_FAILURE, "set_debug_file_from_fd failed.\n");
         }
+        opt_logger = sss_logger_str[FILES_LOGGER] ;
     }
 
     sss_set_logger(opt_logger);
diff --git a/src/providers/ldap/ldap_child.c b/src/providers/ldap/ldap_child.c
index baeed239d..c0618d6d8 100644
--- a/src/providers/ldap/ldap_child.c
+++ b/src/providers/ldap/ldap_child.c
@@ -599,7 +599,7 @@ int main(int argc, const char *argv[])
     int kerr;
     int opt;
     int debug_fd = -1;
-    char *opt_logger = NULL;
+    const char *opt_logger = NULL;
     poptContext pc;
     TALLOC_CTX *main_ctx = NULL;
     uint8_t *buf = NULL;
@@ -657,6 +657,7 @@ int main(int argc, const char *argv[])
         if (ret != EOK) {
             DEBUG(SSSDBG_CRIT_FAILURE, "set_debug_file_from_fd failed.\n");
         }
+        opt_logger = sss_logger_str[FILES_LOGGER];
     }
 
     sss_set_logger(opt_logger);
diff --git a/src/util/child_common.c b/src/util/child_common.c
index dc070f264..203c115f9 100644
--- a/src/util/child_common.c
+++ b/src/util/child_common.c
@@ -630,14 +630,11 @@ static errno_t prepare_child_argv(TALLOC_CTX *mem_ctx,
     }
 
     /* Save the current state in case an interrupt changes it */
-    bool child_debug_to_file = debug_to_file;
     bool child_debug_timestamps = debug_timestamps;
     bool child_debug_microseconds = debug_microseconds;
-    bool child_debug_stderr = debug_to_stderr;
 
     if (!extra_args_only) {
-        if (child_debug_to_file) argc++;
-        if (child_debug_stderr) argc++;
+        argc++;
     }
 
     if (extra_argv) {
@@ -675,17 +672,16 @@ static errno_t prepare_child_argv(TALLOC_CTX *mem_ctx,
             goto fail;
         }
 
-        if (child_debug_stderr) {
-            argv[--argc] = talloc_strdup(argv, "--logger=stderr");
+        if (sss_logger == FILES_LOGGER) {
+            argv[--argc] = talloc_asprintf(argv, "--debug-fd=%d",
+                                           child_debug_fd);
             if (argv[argc] == NULL) {
                 ret = ENOMEM;
                 goto fail;
             }
-        }
-
-        if (child_debug_to_file) {
-            argv[--argc] = talloc_asprintf(argv, "--debug-fd=%d",
-                                           child_debug_fd);
+        } else {
+            argv[--argc] = talloc_asprintf(argv, "--logger=%s",
+                                           sss_logger_str[sss_logger]);
             if (argv[argc] == NULL) {
                 ret = ENOMEM;
                 goto fail;
@@ -816,7 +812,7 @@ errno_t child_debug_init(const char *logfile, int *debug_fd)
         return EOK;
     }
 
-    if (debug_to_file != 0 && *debug_fd == -1) {
+    if (sss_logger == FILES_LOGGER && *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",
_______________________________________________
sssd-devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to