summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorSumit Bose <sbose@redhat.com>2009-09-02 12:21:55 +0200
committerSimo Sorce <ssorce@redhat.com>2009-09-02 09:13:02 -0400
commit74ecf832de5bb406ecea702e9aaeec3eb4484631 (patch)
tree9c90ba50975f1df325c64a9d1624ed899ea92b1f /server
parentb641864b0250923e279dadd1866c7b8cea6c1372 (diff)
downloadsssd-74ecf832de5bb406ecea702e9aaeec3eb4484631.tar.gz
sssd-74ecf832de5bb406ecea702e9aaeec3eb4484631.tar.xz
sssd-74ecf832de5bb406ecea702e9aaeec3eb4484631.zip
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.
Diffstat (limited to 'server')
-rw-r--r--server/monitor/monitor.c4
-rw-r--r--server/providers/data_provider.c19
-rw-r--r--server/providers/data_provider_be.c48
-rw-r--r--server/providers/dp_backend.h1
4 files changed, 41 insertions, 31 deletions
diff --git a/server/monitor/monitor.c b/server/monitor/monitor.c
index 67e5b6e39..893de9b11 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 4cb39bfb6..f8efcc8d8 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 7df900201..8428954a3 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 987e53653..cce854eff 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;