URL: https://github.com/SSSD/sssd/pull/144 Author: fidencio Title: #144: SSSD does not start if using only the local provider and services line is empty Action: synchronized
To pull the PR as Git branch: git remote add ghsssd https://github.com/SSSD/sssd git fetch ghsssd pull/144/head:pr144 git checkout pr144
From 927e4b84ab0c364e6038944ceef67792fcb40666 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= <[email protected]> Date: Sun, 5 Feb 2017 01:48:35 +0100 Subject: [PATCH 1/2] MONITOR: Wrap up sending sd_notify "ready" into a new function MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This new function will be used later on in this series as we also will need to notify systemd that we're up in at least one more scenario (for now). Related: https://fedorahosted.org/sssd/ticket/3299 Signed-off-by: Fabiano FidĂȘncio <[email protected]> --- src/monitor/monitor.c | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/src/monitor/monitor.c b/src/monitor/monitor.c index b82c6e5..214ce34 100644 --- a/src/monitor/monitor.c +++ b/src/monitor/monitor.c @@ -487,6 +487,29 @@ static void svc_child_info(struct mt_svc *svc, int wait_status) } } +static int notify_startup(void) +{ +#ifdef HAVE_SYSTEMD + int ret; + + DEBUG(SSSDBG_TRACE_FUNC, "Sending startup notification to systemd\n"); + ret = sd_notify(0, "READY=1"); + if (ret < 0) { + ret = -ret; + DEBUG(SSSDBG_CRIT_FAILURE, + "Error sending notification to systemd %d: %s\n", + ret, sss_strerror(ret)); + + goto done; + } + + ret = EOK; + +done: + return ret; +#endif +} + static int mark_service_as_started(struct mt_svc *svc) { struct mt_ctx *ctx = svc->mt_ctx; @@ -557,15 +580,7 @@ static int mark_service_as_started(struct mt_svc *svc) ctx->pid_file_created = true; -#ifdef HAVE_SYSTEMD - DEBUG(SSSDBG_TRACE_FUNC, "Sending startup notification to systemd\n"); - ret = sd_notify(0, "READY=1"); - if (ret < 0) { - DEBUG(SSSDBG_CRIT_FAILURE, - "Error sending notification to systemd %d: %s\n", - -ret, strerror(-ret)); - } -#endif + notify_startup(); /* Initialization is complete, terminate parent process if in daemon * mode. Make sure we send the signal to the right process */ From 210347a586db0aa6d70c451d0e2de75c41d24ea9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= <[email protected]> Date: Sun, 5 Feb 2017 01:55:56 +0100 Subject: [PATCH 2/2] MONITOR: Don't timeout if using local provider + socket-activated responders MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When using only the local provider with socket-activated services SSSD ends up never notifying systemd its startup has been done, as notifying systemd is done *only* when a service (provider or responder) is started up, leading SSSD's startup to fail due to a timeout. So, in order to avoid this situation, let's just notify the startup earlier in case we have *only* socket-activated services and the *only* provider set up is the LOCAL one. Resolves: https://fedorahosted.org/sssd/ticket/3299 Signed-off-by: Fabiano FidĂȘncio <[email protected]> --- src/monitor/monitor.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/monitor/monitor.c b/src/monitor/monitor.c index 214ce34..a450dc2 100644 --- a/src/monitor/monitor.c +++ b/src/monitor/monitor.c @@ -2406,6 +2406,15 @@ static int monitor_process_init(struct mt_ctx *ctx, } } + /* When the only provider set up is the local one (num_providers == 0) and + * there's no responder explicitly set up it means that we should notify + * systemd that SSSD is ready right now as any other provider/responder + * would be able to do so and the SSSD would end up hitting a systemd + * timeout! */ + if (num_providers == 0 && ctx->services == NULL) { + ret = notify_startup(); + } + return EOK; }
_______________________________________________ sssd-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]
