From adf9c23d663c308cfeeaa5ad0a33c399c85b27ec Mon Sep 17 00:00:00 2001 From: Pavel Reichl Date: Tue, 23 Sep 2014 09:41:38 +0100 Subject: NSS: UPN as a template expansion for homedir mappings Fixes: https://fedorahosted.org/sssd/ticket/2340 Reviewed-by: Jakub Hrozek --- src/db/sysdb.h | 2 ++ src/man/include/override_homedir.xml | 4 ++++ src/responder/nss/nsssrv_cmd.c | 3 +++ src/util/sss_nss.c | 11 +++++++++++ src/util/sss_nss.h | 1 + 5 files changed, 21 insertions(+) (limited to 'src') diff --git a/src/db/sysdb.h b/src/db/sysdb.h index 2c5e8316f..03aac1524 100644 --- a/src/db/sysdb.h +++ b/src/db/sysdb.h @@ -179,7 +179,9 @@ SYSDB_DEFAULT_ATTRS, \ SYSDB_PRIMARY_GROUP_GIDNUM, \ SYSDB_SID_STR, \ + SYSDB_UPN, \ NULL} + #define SYSDB_GRSRC_ATTRS {SYSDB_NAME, SYSDB_GIDNUM, \ SYSDB_MEMBERUID, \ SYSDB_GHOST, \ diff --git a/src/man/include/override_homedir.xml b/src/man/include/override_homedir.xml index 552d7eb9d..61de52e00 100644 --- a/src/man/include/override_homedir.xml +++ b/src/man/include/override_homedir.xml @@ -23,6 +23,10 @@ %f fully qualified user name (user@domain) + + %P + UPN - User Principal Name (name@REALM) + %o diff --git a/src/responder/nss/nsssrv_cmd.c b/src/responder/nss/nsssrv_cmd.c index ba752c3ff..256c26b17 100644 --- a/src/responder/nss/nsssrv_cmd.c +++ b/src/responder/nss/nsssrv_cmd.c @@ -306,6 +306,7 @@ static int fill_pwent(struct sss_packet *packet, { struct ldb_message *msg; uint8_t *body; + const char *upn; const char *tmpstr; const char *orig_name; struct sized_string name; @@ -337,6 +338,7 @@ static int fill_pwent(struct sss_packet *packet, msg = msgs[i]; + upn = ldb_msg_find_attr_as_string(msg, SYSDB_UPN, NULL); orig_name = ldb_msg_find_attr_as_string(msg, SYSDB_NAME, NULL); uid = ldb_msg_find_attr_as_uint64(msg, SYSDB_UIDNUM, 0); gid = get_gid_override(msg, dom); @@ -395,6 +397,7 @@ static int fill_pwent(struct sss_packet *packet, homedir_ctx.username = name.str; homedir_ctx.uid = uid; homedir_ctx.domain = dom->name; + homedir_ctx.upn = upn; tmpstr = get_homedir_override(tmp_ctx, msg, nctx, dom, &homedir_ctx); if (!tmpstr) { diff --git a/src/util/sss_nss.c b/src/util/sss_nss.c index 8cc1416d7..208b57842 100644 --- a/src/util/sss_nss.c +++ b/src/util/sss_nss.c @@ -147,6 +147,17 @@ char *expand_homedir_template(TALLOC_CTX *mem_ctx, const char *template, homedir_ctx->config_homedir_substr); break; + case 'P': + if (homedir_ctx->upn == NULL) { + DEBUG(SSSDBG_CRIT_FAILURE, + "Cannot expand user principal name template " + "string is empty.\n"); + goto done; + } + result = talloc_asprintf_append(result, "%s%s", p, + homedir_ctx->upn); + break; + case '%': result = talloc_asprintf_append(result, "%s%%", p); break; diff --git a/src/util/sss_nss.h b/src/util/sss_nss.h index 19bf26589..30359fc7c 100644 --- a/src/util/sss_nss.h +++ b/src/util/sss_nss.h @@ -32,6 +32,7 @@ struct sss_nss_homedir_ctx { const char *domain; const char *flatname; const char *config_homedir_substr; + const char *upn; }; char *expand_homedir_template(TALLOC_CTX *mem_ctx, const char *template, -- cgit