From d6b65c36b2b0391a37a78963fd679460b5bba60a Mon Sep 17 00:00:00 2001 From: Stephen Gallagher Date: Thu, 14 May 2009 12:21:37 -0400 Subject: Treat the local provider as a special case The local provider needs no backend, so we'll create a special provider entry for it called "local" that will not attempt to retrieve provider configuration but will remain in the service list so it can be updated when the config file changes. --- server/examples/sssd.conf | 1 + server/monitor/monitor.c | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/server/examples/sssd.conf b/server/examples/sssd.conf index a480b549d..1841152a9 100644 --- a/server/examples/sssd.conf +++ b/server/examples/sssd.conf @@ -60,6 +60,7 @@ description = Domains served by SSSD ; [domains/LOCAL] ; description = LOCAL Users domain +; provider = local ; enumerate = 3 ; minId = 500 ; maxId = 999 diff --git a/server/monitor/monitor.c b/server/monitor/monitor.c index 1d8f33e4a..910154106 100644 --- a/server/monitor/monitor.c +++ b/server/monitor/monitor.c @@ -516,6 +516,11 @@ static int service_signal_reload(struct mt_svc *svc) DBusConnection *conn; DBusPendingCall *pending_reply; + if (svc->provider && strcasecmp(svc->provider, "local") == 0) { + /* The local provider requires no signaling */ + return EOK; + } + conn = sbus_get_connection(svc->mt_conn->conn_ctx); msg = dbus_message_new_method_call(NULL, SERVICE_PATH, @@ -954,7 +959,7 @@ static int update_monitor_config(struct mt_ctx *ctx) cur_svc = cur_svc->next; } if (cur_svc == NULL) { - DEBUG(0, ("Service entry missing data\n")); + DEBUG(0, ("Service entry missing data for [%s]\n", new_dom->name)); /* This shouldn't be possible */ talloc_free(new_config); @@ -1911,6 +1916,16 @@ static void service_startup_handler(struct tevent_context *ev, return; } + if (mt_svc->provider && strcasecmp(mt_svc->provider, "local") == 0) { + /* The LOCAL provider requires no back-end currently + * We'll add it to the service list, but we don't need + * to poll it. + */ + DLIST_ADD(mt_svc->mt_ctx->svc_list, mt_svc); + talloc_set_destructor((TALLOC_CTX *)mt_svc, delist_service); + return; + } + mt_svc->pid = fork(); if (mt_svc->pid != 0) { if (mt_svc->pid == -1) { -- cgit