diff options
Diffstat (limited to 'server')
-rw-r--r-- | server/examples/sssd.conf | 3 | ||||
-rw-r--r-- | server/man/sssd.conf.5.xml | 12 | ||||
-rw-r--r-- | server/providers/data_provider_be.c | 43 | ||||
-rw-r--r-- | server/tools/tools_util.c | 3 |
4 files changed, 57 insertions, 4 deletions
diff --git a/server/examples/sssd.conf b/server/examples/sssd.conf index ab8007a1..d57bed70 100644 --- a/server/examples/sssd.conf +++ b/server/examples/sssd.conf @@ -45,8 +45,7 @@ description = Domains served by SSSD ; magicPrivateGroups = FALSE ; legacy = TRUE ; -; provider = proxy -; libName = files +; provider = files # optionally a file named sssdproxylocal can be place in pam.d configured to # check pam_unix only and pam_sss can be used in the normal pam stack diff --git a/server/man/sssd.conf.5.xml b/server/man/sssd.conf.5.xml index 833bd718..6c5ce87a 100644 --- a/server/man/sssd.conf.5.xml +++ b/server/man/sssd.conf.5.xml @@ -493,6 +493,9 @@ Supported backends: </para> <para> + files: traditional UNIX files (<filename>/etc/passwd</filename>) + </para> + <para> proxy: Support a legacy NSS provider </para> <para> @@ -598,7 +601,7 @@ description = Service Monitor Configuration [domains] description = Domains served by SSSD -domains = LOCAL +domains = LOCAL,FILES [domains/LOCAL] description = LOCAL Users domain @@ -608,6 +611,13 @@ maxId = 30000 legacy = FALSE magicPrivateGroups = TRUE provider = local + +[domains/FILES] +description = Users stored in UNIX files +enumerate = 3 +minId = 500 +maxId = 4999 +provider = files </programlisting> </para> </refsect1> diff --git a/server/providers/data_provider_be.c b/server/providers/data_provider_be.c index c92289b6..24d9105e 100644 --- a/server/providers/data_provider_be.c +++ b/server/providers/data_provider_be.c @@ -874,6 +874,43 @@ done: return ret; } +/* Some providers are just aliases for more complicated settings, + * rewrite the alias into the actual settings */ +static int be_rewrite(struct be_ctx *ctx) +{ + int ret; + const char *val[2]; + val[1] = 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)); + + val[0] = "proxy"; + ret = confdb_add_param(ctx->cdb, true, + ctx->conf_path, + "provider", + val); + if (ret) { + return ret; + } + + val[0] = "files"; + ret = confdb_add_param(ctx->cdb, true, + ctx->conf_path, + "libName", + val); + if (ret) { + return ret; + } + } + + return EOK; +} + int be_process_init(TALLOC_CTX *mem_ctx, const char *be_name, const char *be_domain, @@ -922,6 +959,12 @@ int be_process_init(TALLOC_CTX *mem_ctx, return ret; } + ret = be_rewrite(ctx); + if (ret != EOK) { + DEBUG(0, ("error rewriting provider types\n")); + return ret; + } + ret = load_backend_module(ctx, BET_ID, &ctx->bet_info[BET_ID].bet_ops, &ctx->bet_info[BET_ID].pvt_bet_data); diff --git a/server/tools/tools_util.c b/server/tools/tools_util.c index 79f73ac6..62013994 100644 --- a/server/tools/tools_util.c +++ b/server/tools/tools_util.c @@ -78,7 +78,8 @@ enum id_domain get_domain_type(struct tools_ctx *ctx, if (strcasecmp(dom->provider, "local") == 0) { return ID_IN_LOCAL; - } else if (is_domain_local_legacy(ctx, dom) == 0) { + } else if (strcasecmp(dom->provider, "files") == 0 || + is_domain_local_legacy(ctx, dom) == 0) { return ID_IN_LEGACY_LOCAL; } |