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

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/3] 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 47d79781893454336130295298c505725c8e57bc Mon Sep 17 00:00:00 2001
From: Lukas Slebodnik <[email protected]>
Date: Wed, 8 Nov 2017 14:09:36 +0100
Subject: [PATCH 2/3] SYSTEMD: Clean pid file in corner cases

SSSD can cleanup pid file in case of standard stopping of daemon.
It's done in function monitor_cleanup. However monitor does not have a
change to cleanup file in case of OOM or sending SIGKILL to monitor.

Even though PIDFile is not necessary for services with Type notify
we should let systemd to clean this file in unexpected situations.

Resolves:
https://pagure.io/SSSD/sssd/issue/3528
---
 src/sysv/systemd/sssd.service.in | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/sysv/systemd/sssd.service.in b/src/sysv/systemd/sssd.service.in
index cea848fac..0c515d34c 100644
--- a/src/sysv/systemd/sssd.service.in
+++ b/src/sysv/systemd/sssd.service.in
@@ -10,6 +10,7 @@ EnvironmentFile=-@environment_file@
 ExecStart=@sbindir@/sssd -i ${DEBUG_LOGGER}
 Type=notify
 NotifyAccess=main
+PIDFile=@localstatedir@/run/sssd.pid
 
 [Install]
 WantedBy=multi-user.target

From dc4f6af0057de05b76352b920919436b6e9c96b6 Mon Sep 17 00:00:00 2001
From: Lukas Slebodnik <[email protected]>
Date: Wed, 8 Nov 2017 08:13:02 +0100
Subject: [PATCH 3/3] 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