summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--server/examples/sssd.conf3
-rw-r--r--server/man/sssd.conf.5.xml12
-rw-r--r--server/providers/data_provider_be.c43
-rw-r--r--server/tools/tools_util.c3
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;
}