diff options
author | Stephen Gallagher <sgallagh@redhat.com> | 2012-05-09 11:07:31 -0400 |
---|---|---|
committer | Stephen Gallagher <sgallagh@redhat.com> | 2012-05-09 19:23:09 -0400 |
commit | f6dbb235373b122ae15643ef5dbbe821ee1307d9 (patch) | |
tree | 4372f8a2e91c05a7437a278273d4f392ed29737f /src/responder/nss/nsssrv_cmd.c | |
parent | 163a17f00c42f2405d8fb0a2af3bc9d8b7309260 (diff) | |
download | sssd-f6dbb235373b122ae15643ef5dbbe821ee1307d9.tar.gz sssd-f6dbb235373b122ae15643ef5dbbe821ee1307d9.tar.xz sssd-f6dbb235373b122ae15643ef5dbbe821ee1307d9.zip |
NSS: Add fallback_homedir option
This option is similar to override_homedir, except that it will
take effect only for users that do not have an explicit home
directory specified in LDAP.
https://fedorahosted.org/sssd/ticket/1250
Diffstat (limited to 'src/responder/nss/nsssrv_cmd.c')
-rw-r--r-- | src/responder/nss/nsssrv_cmd.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/src/responder/nss/nsssrv_cmd.c b/src/responder/nss/nsssrv_cmd.c index 508db5569..d448fa859 100644 --- a/src/responder/nss/nsssrv_cmd.c +++ b/src/responder/nss/nsssrv_cmd.c @@ -122,6 +122,11 @@ static const char *get_homedir_override(TALLOC_CTX *mem_ctx, const char *name, uint32_t uid) { + const char *homedir; + + /* Check whether we are unconditionally overriding the server + * for home directory locations. + */ if (dom->override_homedir) { return expand_homedir_template(mem_ctx, dom->override_homedir, name, uid, dom->name); @@ -130,8 +135,22 @@ static const char *get_homedir_override(TALLOC_CTX *mem_ctx, name, uid, dom->name); } - return talloc_strdup(mem_ctx, - ldb_msg_find_attr_as_string(msg, SYSDB_HOMEDIR, NULL)); + homedir = ldb_msg_find_attr_as_string(msg, SYSDB_HOMEDIR, NULL); + if (!homedir || *homedir == '\0') { + /* In the case of a NULL or empty homedir, check to see if + * we have a fallback homedir to use. + */ + if (dom->fallback_homedir) { + return expand_homedir_template(mem_ctx, dom->fallback_homedir, + name, uid, dom->name); + } else if (nctx->fallback_homedir) { + return expand_homedir_template(mem_ctx, nctx->fallback_homedir, + name, uid, dom->name); + } + } + + /* Return the value we got from the provider */ + return talloc_strdup(mem_ctx, homedir); } static const char *get_shell_override(TALLOC_CTX *mem_ctx, |