[SSSD] [PATCH] MONITOR: Fix start up with closed standard input

Lukas Slebodnik lslebodn at redhat.com
Thu Apr 17 08:21:41 UTC 2014


ehlo,

The attached patch fixes my use case. (sssd in container without tty)
I am not sure whether other processes use stdin, therefore I disable monitorin
of stdin only in main process.

LS
-------------- next part --------------
>From 47f1a4009e869e844f0edf1fb0fe749463e8d7cc Mon Sep 17 00:00:00 2001
From: Lukas Slebodnik <lslebodn at redhat.com>
Date: Thu, 17 Apr 2014 09:19:11 +0200
Subject: [PATCH] MONITOR: Fix start up with closed standard input

Monitor does not read data from stdin. We should not monitor on stdin in this
process.

Resolves:
https://fedorahosted.org/sssd/ticket/2312
---
 src/monitor/monitor.c             | 3 ++-
 src/providers/data_provider_be.c  | 2 +-
 src/providers/proxy/proxy_child.c | 2 +-
 src/responder/autofs/autofssrv.c  | 3 ++-
 src/responder/ifp/ifpsrv.c        | 2 +-
 src/responder/nss/nsssrv.c        | 2 +-
 src/responder/pac/pacsrv.c        | 2 +-
 src/responder/pam/pamsrv.c        | 2 +-
 src/responder/ssh/sshsrv.c        | 2 +-
 src/responder/sudo/sudosrv.c      | 3 ++-
 src/util/server.c                 | 9 ++++++---
 src/util/util.h                   | 3 ++-
 12 files changed, 21 insertions(+), 14 deletions(-)

diff --git a/src/monitor/monitor.c b/src/monitor/monitor.c
index 845968dff1035d7f5f2f9bbf171fb987d7401532..e89fdcbeb78eb0a487574d1c694c773d3cda6a63 100644
--- a/src/monitor/monitor.c
+++ b/src/monitor/monitor.c
@@ -2834,7 +2834,8 @@ int main(int argc, const char *argv[])
 
     /* set up things like debug , signals, daemonization, etc... */
     monitor->conf_path = CONFDB_MONITOR_CONF_ENTRY;
-    ret = server_setup(MONITOR_NAME, flags, monitor->conf_path, &main_ctx);
+    ret = server_setup(MONITOR_NAME, flags, monitor->conf_path, &main_ctx,
+                       false);
     if (ret != EOK) return 2;
 
     monitor->is_daemon = !opt_interactive;
diff --git a/src/providers/data_provider_be.c b/src/providers/data_provider_be.c
index 5c2b480db4cec8bdd0d0dfc71f01885396f822fb..8ba5bd7d3ea1a7e043dfcb4b9fe8f773654385c1 100644
--- a/src/providers/data_provider_be.c
+++ b/src/providers/data_provider_be.c
@@ -2785,7 +2785,7 @@ int main(int argc, const char *argv[])
     confdb_path = talloc_asprintf(NULL, CONFDB_DOMAIN_PATH_TMPL, be_domain);
     if (!confdb_path) return 2;
 
-    ret = server_setup(srv_name, 0, confdb_path, &main_ctx);
+    ret = server_setup(srv_name, 0, confdb_path, &main_ctx, true);
     if (ret != EOK) {
         DEBUG(SSSDBG_FATAL_FAILURE, "Could not set up mainloop [%d]\n", ret);
         return 2;
diff --git a/src/providers/proxy/proxy_child.c b/src/providers/proxy/proxy_child.c
index 6bee1c7f63c4bb5b33f11601c2be32df05206756..8147e91e2521caa908135aa247bc64d25728b371 100644
--- a/src/providers/proxy/proxy_child.c
+++ b/src/providers/proxy/proxy_child.c
@@ -557,7 +557,7 @@ int main(int argc, const char *argv[])
     conf_entry = talloc_asprintf(NULL, CONFDB_DOMAIN_PATH_TMPL, domain);
     if (!conf_entry) return 2;
 
-    ret = server_setup(srv_name, 0, conf_entry, &main_ctx);
+    ret = server_setup(srv_name, 0, conf_entry, &main_ctx, true);
     if (ret != EOK) {
         DEBUG(SSSDBG_FATAL_FAILURE, "Could not set up mainloop [%d]\n", ret);
         return 2;
diff --git a/src/responder/autofs/autofssrv.c b/src/responder/autofs/autofssrv.c
index 9b5aa02dd53772a569da71a79e600dfa2ba5f1ef..f45a00fe102d19ebbeb03cd5b041ceb3cefcdee2 100644
--- a/src/responder/autofs/autofssrv.c
+++ b/src/responder/autofs/autofssrv.c
@@ -234,7 +234,8 @@ int main(int argc, const char *argv[])
     /* set up things like debug, signals, daemonization, etc... */
     debug_log_file = "sssd_autofs";
 
-    ret = server_setup("sssd[autofs]", 0, CONFDB_AUTOFS_CONF_ENTRY, &main_ctx);
+    ret = server_setup("sssd[autofs]", 0, CONFDB_AUTOFS_CONF_ENTRY, &main_ctx,
+                       true);
     if (ret != EOK) {
         return 2;
     }
diff --git a/src/responder/ifp/ifpsrv.c b/src/responder/ifp/ifpsrv.c
index e76f3bdb0afb997ee2bbc0122199e127da34de84..5b259c364330403e96384cf66baa4c21b9416841 100644
--- a/src/responder/ifp/ifpsrv.c
+++ b/src/responder/ifp/ifpsrv.c
@@ -314,7 +314,7 @@ int main(int argc, const char *argv[])
     /* set up things like debug, signals, daemonization, etc... */
     debug_log_file = "sssd_ifp";
 
-    ret = server_setup("sssd[ifp]", 0, CONFDB_IFP_CONF_ENTRY, &main_ctx);
+    ret = server_setup("sssd[ifp]", 0, CONFDB_IFP_CONF_ENTRY, &main_ctx, true);
     if (ret != EOK) return 2;
 
     ret = die_if_parent_died();
diff --git a/src/responder/nss/nsssrv.c b/src/responder/nss/nsssrv.c
index e4896a79dc8a15554cdb1a7616d5353650eca209..1e64d263a6f6ac56cc224a221b2df36747ee0461 100644
--- a/src/responder/nss/nsssrv.c
+++ b/src/responder/nss/nsssrv.c
@@ -558,7 +558,7 @@ int main(int argc, const char *argv[])
     /* set up things like debug, signals, daemonization, etc... */
     debug_log_file = "sssd_nss";
 
-    ret = server_setup("sssd[nss]", 0, CONFDB_NSS_CONF_ENTRY, &main_ctx);
+    ret = server_setup("sssd[nss]", 0, CONFDB_NSS_CONF_ENTRY, &main_ctx, true);
     if (ret != EOK) return 2;
 
     ret = die_if_parent_died();
diff --git a/src/responder/pac/pacsrv.c b/src/responder/pac/pacsrv.c
index bff15058a2092677441812c73117387afd125600..7937e03e2a8864213a794151a24444a548a364ce 100644
--- a/src/responder/pac/pacsrv.c
+++ b/src/responder/pac/pacsrv.c
@@ -243,7 +243,7 @@ int main(int argc, const char *argv[])
     /* set up things like debug, signals, daemonization, etc... */
     debug_log_file = "sssd_pac";
 
-    ret = server_setup("sssd[pac]", 0, CONFDB_PAC_CONF_ENTRY, &main_ctx);
+    ret = server_setup("sssd[pac]", 0, CONFDB_PAC_CONF_ENTRY, &main_ctx, true);
     if (ret != EOK) return 2;
 
     ret = die_if_parent_died();
diff --git a/src/responder/pam/pamsrv.c b/src/responder/pam/pamsrv.c
index 2823f01a0c15c5c468c5b1177c1c3b2844c25e4c..548d0b9788592071fbd327b10dc67e45305f3114 100644
--- a/src/responder/pam/pamsrv.c
+++ b/src/responder/pam/pamsrv.c
@@ -249,7 +249,7 @@ int main(int argc, const char *argv[])
     /* set up things like debug, signals, daemonization, etc... */
     debug_log_file = "sssd_pam";
 
-    ret = server_setup("sssd[pam]", 0, CONFDB_PAM_CONF_ENTRY, &main_ctx);
+    ret = server_setup("sssd[pam]", 0, CONFDB_PAM_CONF_ENTRY, &main_ctx, true);
     if (ret != EOK) return 2;
 
     ret = die_if_parent_died();
diff --git a/src/responder/ssh/sshsrv.c b/src/responder/ssh/sshsrv.c
index 30142ae0d8f57f86c76dd85f25020b599d90bbdf..94ec81425e995c68456bb42a085b110a6b1f1bbb 100644
--- a/src/responder/ssh/sshsrv.c
+++ b/src/responder/ssh/sshsrv.c
@@ -211,7 +211,7 @@ int main(int argc, const char *argv[])
     /* set up things like debug, signals, daemonization, etc... */
     debug_log_file = "sssd_ssh";
 
-    ret = server_setup("sssd[ssh]", 0, CONFDB_SSH_CONF_ENTRY, &main_ctx);
+    ret = server_setup("sssd[ssh]", 0, CONFDB_SSH_CONF_ENTRY, &main_ctx, true);
     if (ret != EOK) {
         return 2;
     }
diff --git a/src/responder/sudo/sudosrv.c b/src/responder/sudo/sudosrv.c
index a70d944a9e06a3236c85aff56c06c39b6888dac0..798f03fea4a6234b0c3f517657a7c216ff2f804a 100644
--- a/src/responder/sudo/sudosrv.c
+++ b/src/responder/sudo/sudosrv.c
@@ -193,7 +193,8 @@ int main(int argc, const char *argv[])
     /* set up things like debug, signals, daemonization, etc... */
     debug_log_file = "sssd_sudo";
 
-    ret = server_setup("sssd[sudo]", 0, CONFDB_SUDO_CONF_ENTRY, &main_ctx);
+    ret = server_setup("sssd[sudo]", 0, CONFDB_SUDO_CONF_ENTRY, &main_ctx,
+                       true);
     if (ret != EOK) {
         return 2;
     }
diff --git a/src/util/server.c b/src/util/server.c
index 24c3548ed32112a55e1b69202da3e7ff88bb0f15..68bc4370c96acabaf559664d253034e93aa5a7bc 100644
--- a/src/util/server.c
+++ b/src/util/server.c
@@ -379,7 +379,8 @@ static void te_server_hup(struct tevent_context *ev,
 
 int server_setup(const char *name, int flags,
                  const char *conf_entry,
-                 struct main_context **main_ctx)
+                 struct main_context **main_ctx,
+                 bool need_stdin)
 {
     struct tevent_context *event_ctx;
     struct main_context *ctx;
@@ -573,8 +574,10 @@ int server_setup(const char *name, int flags,
 #ifdef SIGTTIN
     signal(SIGTTIN, SIG_IGN);
 #endif
-    tevent_add_fd(event_ctx, event_ctx, 0, stdin_event_flags,
-                 server_stdin_handler, discard_const(name));
+    if (need_stdin) {
+        tevent_add_fd(event_ctx, event_ctx, 0, stdin_event_flags,
+                      server_stdin_handler, discard_const(name));
+    }
 
     *main_ctx = ctx;
     return EOK;
diff --git a/src/util/util.h b/src/util/util.h
index c74ff5b56fdcb362386e4bb01bd293d7e3bf42a1..e6c8eb73476549e5719b40b0b23150ea34adf7a2 100644
--- a/src/util/util.h
+++ b/src/util/util.h
@@ -228,7 +228,8 @@ int die_if_parent_died(void);
 int pidfile(const char *path, const char *name);
 int server_setup(const char *name, int flags,
                  const char *conf_entry,
-                 struct main_context **main_ctx);
+                 struct main_context **main_ctx,
+                 bool need_stdin);
 void server_loop(struct main_context *main_ctx);
 void orderly_shutdown(int status);
 
-- 
1.9.0



More information about the sssd-devel mailing list