Hi,

I just wanted to change the the prefix of the log messages of the
backends from [sssd[be[ID_PROVIDER_NAME]]] to [sssd[be[DOMAIN_NAME]]].
Then I wondered why we need to store the name of the id provider at all
and as a result I removed it.

Now the backends identify themselves with the domain name. Maybe in a
next step the D-BUS client registration calls can be simplified by using
only a single id field instead of a name and a domain field.

While most of the patch is related to the identification of the
backend to the data provider the expansion of 'provider=files' is
affected, too. So tests which uses 'provider=files' might fail if I have
messed up the expansion.

bye,
Sumit
>From 79ffba6e5d1ee01fe8474aacaec412e9387a85df Mon Sep 17 00:00:00 2001
From: Sumit Bose <sb...@redhat.com>
Date: Wed, 2 Sep 2009 12:21:55 +0200
Subject: [PATCH] remove the concept of a backend name

The data provider backends stored a name value besides the domain
name to identify themselves to the data provider. This was the name
of the id provider. Currently the backends can have different
providers for id, authentication etc. So the name may be missleading.
Also when there are more domains with the same id provider the name
is not enough to identify the backend but the domain name is. As a
consequence the backend name is removed completely and only the
domain name is used for identification.
---
 server/monitor/monitor.c            |    4 +-
 server/providers/data_provider.c    |   19 ++++++--------
 server/providers/data_provider_be.c |   48 ++++++++++++++++++++++------------
 server/providers/dp_backend.h       |    1 -
 4 files changed, 41 insertions(+), 31 deletions(-)

diff --git a/server/monitor/monitor.c b/server/monitor/monitor.c
index 67e5b6e..893de9b 100644
--- a/server/monitor/monitor.c
+++ b/server/monitor/monitor.c
@@ -1040,10 +1040,10 @@ static int get_provider_config(struct mt_ctx *ctx, 
const char *name,
     /* if there are no custom commands, build a default one */
     if (!svc->command) {
         svc->command = talloc_asprintf(svc,
-                            "%s/sssd_be -d %d%s --provider %s --domain %s",
+                            "%s/sssd_be -d %d%s --domain %s",
                             SSSD_LIBEXEC_PATH, debug_level,
                             (debug_timestamps?" --debug-timestamps":""),
-                            svc->provider, svc->name);
+                            svc->name);
         if (!svc->command) {
             talloc_free(svc);
             return ENOMEM;
diff --git a/server/providers/data_provider.c b/server/providers/data_provider.c
index 4cb39bf..f8efcc8 100644
--- a/server/providers/data_provider.c
+++ b/server/providers/data_provider.c
@@ -64,7 +64,6 @@ struct dp_client {
 struct dp_backend {
     struct dp_backend *prev;
     struct dp_backend *next;
-    char *name;
     char *domain;
     struct dp_client *dpcli;
 };
@@ -282,9 +281,8 @@ static int client_registration(DBusMessage *message,
             return ENOMEM;
         }
 
-        dpbe->name = talloc_strdup(dpbe, cli_name);
         dpbe->domain = talloc_strdup(dpbe, cli_domain);
-        if (!dpbe->name || !dpbe->domain) {
+        if (!dpbe->domain) {
             DEBUG(0, ("Out of memory!\n"));
             sbus_disconnect(conn);
             return ENOMEM;
@@ -294,8 +292,7 @@ static int client_registration(DBusMessage *message,
 
         DLIST_ADD(dpcli->dpctx->be_list, dpbe);
 
-        DEBUG(4, ("Added Backend client [%s], for domain [%s]\n",
-                  dpbe->name, dpbe->domain));
+        DEBUG(4, ("Added Backend client for domain [%s]\n", dpbe->domain));
 
         talloc_set_destructor((TALLOC_CTX *)dpbe, dp_backend_destructor);
         break;
@@ -398,9 +395,9 @@ static void be_got_account_info(DBusPendingCall *pending, 
void *data)
             goto done;
         }
 
-        DEBUG(4, ("Got reply (%u, %u, %s) from %s(%s)\n",
+        DEBUG(4, ("Got reply (%u, %u, %s) from (%s)\n",
                   (unsigned int)err_maj, (unsigned int)err_min, err_msg,
-                  bereq->be->name, bereq->be->domain));
+                  bereq->be->domain));
 
         break;
 
@@ -712,8 +709,8 @@ static void be_got_pam_reply(DBusPendingCall *pending, void 
*data)
             goto done;
         }
 
-        DEBUG(4, ("Got reply (%d, %s) from %s(%s)\n", pd->pam_status, 
pd->domain,
-                  bereq->be->name, bereq->be->domain));
+        DEBUG(4, ("Got reply (%d, %s) from (%s)\n", pd->pam_status, pd->domain,
+                  bereq->be->domain));
 
         break;
 
@@ -909,8 +906,8 @@ static int dp_backend_destructor(void *ctx)
     struct dp_backend *dpbe = talloc_get_type(ctx, struct dp_backend);
     if (dpbe->dpcli && dpbe->dpcli->dpctx && dpbe->dpcli->dpctx->be_list) {
         DLIST_REMOVE(dpbe->dpcli->dpctx->be_list, dpbe);
-        DEBUG(4, ("Removed Backend client [%s], for domain [%s]\n",
-                  dpbe->name, dpbe->domain));
+        DEBUG(4, ("Removed Backend client for domain [%s]\n",
+                  dpbe->domain));
     }
     return 0;
 }
diff --git a/server/providers/data_provider_be.c 
b/server/providers/data_provider_be.c
index 7df9002..8428954 100644
--- a/server/providers/data_provider_be.c
+++ b/server/providers/data_provider_be.c
@@ -622,7 +622,7 @@ static int be_cli_init(struct be_ctx *ctx)
     /* Identify ourselves to the data provider */
     ret = dp_common_send_id(ctx->dp_conn,
                             DP_CLI_BACKEND, DATA_PROVIDER_VERSION,
-                            ctx->name, ctx->domain->name);
+                            "", ctx->domain->name);
     if (ret != EOK) {
         DEBUG(0, ("Failed to identify to the data provider!\n"));
         return ret;
@@ -657,7 +657,7 @@ static void be_cli_reconnect_init(struct sbus_connection 
*conn, int status, void
         /* Identify ourselves to the data provider */
         ret = dp_common_send_id(be_ctx->dp_conn,
                                 DP_CLI_BACKEND, DATA_PROVIDER_VERSION,
-                                be_ctx->name, be_ctx->domain->name);
+                                "", be_ctx->domain->name);
         if (ret != EOK) {
             DEBUG(0, ("Failed to send id to the data provider!\n"));
         } else {
@@ -879,13 +879,26 @@ static int be_rewrite(struct be_ctx *ctx)
     int ret;
     const char *val[2];
     val[1] = NULL;
+    char **get_values = NULL;
 
     /* "files" is a special case that means:
      *  provider = proxy
      *  libName  = files
      */
-    if (strcasecmp(ctx->name, "files") == 0) {
-        DEBUG(5, ("Rewriting provider %s\n", ctx->name));
+    ret = confdb_get_param(ctx->cdb, ctx, ctx->conf_path, "provider",
+                           &get_values);
+    if (ret != EOK) {
+        DEBUG(1, ("Failed to read provider from confdb.\n"));
+        return ret;
+    }
+    if (get_values[0] == NULL) {
+        DEBUG(1, ("Missing provider.\n"));
+        return EINVAL;
+    }
+
+    if (strcasecmp(get_values[0], "files") == 0) {
+        DEBUG(5, ("Rewriting provider %s\n", get_values[0]));
+        talloc_zfree(get_values);
 
         val[0] = "proxy";
         ret = confdb_add_param(ctx->cdb, true,
@@ -910,7 +923,6 @@ static int be_rewrite(struct be_ctx *ctx)
 }
 
 int be_process_init(TALLOC_CTX *mem_ctx,
-                    const char *be_name,
                     const char *be_domain,
                     struct tevent_context *ev,
                     struct confdb_ctx *cdb)
@@ -925,10 +937,9 @@ int be_process_init(TALLOC_CTX *mem_ctx,
     }
     ctx->ev = ev;
     ctx->cdb = cdb;
-    ctx->name = talloc_strdup(ctx, be_name);
     ctx->identity = talloc_asprintf(ctx, "%%BE_%s", be_domain);
     ctx->conf_path = talloc_asprintf(ctx, "config/domains/%s", be_domain);
-    if (!ctx->name || !ctx->identity || !ctx->conf_path) {
+    if (!ctx->identity || !ctx->conf_path) {
         DEBUG(0, ("Out of memory!?\n"));
         return ENOMEM;
     }
@@ -1016,20 +1027,17 @@ int main(int argc, const char *argv[])
 {
     int opt;
     poptContext pc;
-    char *be_name;
-    char *be_domain;
-    char *srv_name;
-    char *conf_entry;
+    char *be_domain = NULL;
+    char *srv_name = NULL;
+    char *conf_entry = NULL;
     struct main_context *main_ctx;
     int ret;
 
     struct poptOption long_options[] = {
         POPT_AUTOHELP
         SSSD_MAIN_OPTS
-        {"provider", 0, POPT_ARG_STRING, &be_name, 0,
-         "Information Provider", NULL },
         {"domain", 0, POPT_ARG_STRING, &be_domain, 0,
-         "Domain of the information provider", NULL },
+         "Domain of the information provider (mandatory)", NULL },
         POPT_TABLEEND
     };
 
@@ -1044,10 +1052,16 @@ int main(int argc, const char *argv[])
         }
     }
 
+    if (be_domain == NULL) {
+        fprintf(stderr, "\nMissing option, --domain is a mandatory 
option.\n\n");
+            poptPrintUsage(pc, stderr, 0);
+            return 1;
+    }
+
     poptFreeContext(pc);
 
     /* set up things like debug , signals, daemonization, etc... */
-    srv_name = talloc_asprintf(NULL, "sssd[be[%s]]", be_name);
+    srv_name = talloc_asprintf(NULL, "sssd[be[%s]]", be_domain);
     if (!srv_name) return 2;
 
     conf_entry = talloc_asprintf(NULL, BE_CONF_ENTRY, be_domain);
@@ -1066,7 +1080,7 @@ int main(int argc, const char *argv[])
     }
 
     ret = be_process_init(main_ctx,
-                          be_name, be_domain,
+                          be_domain,
                           main_ctx->event_ctx,
                           main_ctx->confdb_ctx);
     if (ret != EOK) {
@@ -1074,7 +1088,7 @@ int main(int argc, const char *argv[])
         return 3;
     }
 
-    DEBUG(1, ("Backend provider %s(%s) started!\n", be_name, be_domain));
+    DEBUG(1, ("Backend provider (%s) started!\n", be_domain));
 
     /* loop on main */
     server_loop(main_ctx);
diff --git a/server/providers/dp_backend.h b/server/providers/dp_backend.h
index 987e536..cce854e 100644
--- a/server/providers/dp_backend.h
+++ b/server/providers/dp_backend.h
@@ -66,7 +66,6 @@ struct be_ctx {
     struct confdb_ctx *cdb;
     struct sysdb_ctx *sysdb;
     struct sss_domain_info *domain;
-    const char *name;
     const char *identity;
     const char *conf_path;
 
-- 
1.6.2.5

_______________________________________________
sssd-devel mailing list
sssd-devel@lists.fedorahosted.org
https://fedorahosted.org/mailman/listinfo/sssd-devel

Reply via email to