>From 8df03b946a8fe95e7a47071f3ea35518f97acfdc Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Thu, 4 Apr 2013 13:03:23 +0200 Subject: [PATCH 2/2] Allow using flatname for subdomain home dir template https://fedorahosted.org/sssd/ticket/1609 --- src/man/sssd.conf.5.xml | 10 +++++++++- src/providers/ipa/ipa_s2n_exop.c | 3 ++- src/responder/nss/nsssrv_cmd.c | 10 ++++++---- src/responder/pac/pacsrv_utils.c | 2 +- src/util/sss_nss.c | 14 +++++++++++++- src/util/sss_nss.h | 3 ++- 6 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/man/sssd.conf.5.xml b/src/man/sssd.conf.5.xml index 7bcccee84f4a58a6845b99337f6a645cccfb3d65..6a1292c6c8b9ed2c0550971b2969ff71431b5701 100644 --- a/src/man/sssd.conf.5.xml +++ b/src/man/sssd.conf.5.xml @@ -1638,7 +1638,15 @@ override_homedir = /home/%u Use this homedir as default value for all subdomains within this domain. See override_homedir - for info about possible values. + for info about possible values. In addition to those, the + expansion below can only be used with + subdomain_homedir. + + + %F + flat (NetBIOS) name of a subdomain. + + The value can be overridden by diff --git a/src/providers/ipa/ipa_s2n_exop.c b/src/providers/ipa/ipa_s2n_exop.c index 7e5d0c1436d9cd44d028ca6cc1ddef55eb9ded3e..64ee77528c3bbf6b8692f547e246998970c64b65 100644 --- a/src/providers/ipa/ipa_s2n_exop.c +++ b/src/providers/ipa/ipa_s2n_exop.c @@ -624,7 +624,8 @@ static void ipa_s2n_get_user_done(struct tevent_req *subreq) attrs->a.user.pw_name, attrs->a.user.pw_uid, NULL, - state->dom->name); + state->dom->name, + state->dom->flat_name); if (homedir == NULL) { ret = ENOMEM; goto done; diff --git a/src/responder/nss/nsssrv_cmd.c b/src/responder/nss/nsssrv_cmd.c index c391ed532d326cd66584164e515fe89ed8d172e5..df7255bb0607534344ac4c3897958b6de44ef0a1 100644 --- a/src/responder/nss/nsssrv_cmd.c +++ b/src/responder/nss/nsssrv_cmd.c @@ -183,10 +183,10 @@ static const char *get_homedir_override(TALLOC_CTX *mem_ctx, */ if (dom->override_homedir) { return expand_homedir_template(mem_ctx, dom->override_homedir, - name, uid, homedir, dom->name); + name, uid, homedir, dom->name, NULL); } else if (nctx->override_homedir) { return expand_homedir_template(mem_ctx, nctx->override_homedir, - name, uid, homedir, dom->name); + name, uid, homedir, dom->name, NULL); } if (!homedir || *homedir == '\0') { @@ -195,10 +195,12 @@ static const char *get_homedir_override(TALLOC_CTX *mem_ctx, */ if (dom->fallback_homedir) { return expand_homedir_template(mem_ctx, dom->fallback_homedir, - name, uid, homedir, dom->name); + name, uid, homedir, + dom->name, NULL); } else if (nctx->fallback_homedir) { return expand_homedir_template(mem_ctx, nctx->fallback_homedir, - name, uid, homedir, dom->name); + name, uid, homedir, + dom->name, NULL); } } diff --git a/src/responder/pac/pacsrv_utils.c b/src/responder/pac/pacsrv_utils.c index 824daa62541b72f9bc319100d91d3aa6e4714fcf..c868b1078840598236228878546e3e91a734ebb3 100644 --- a/src/responder/pac/pacsrv_utils.c +++ b/src/responder/pac/pacsrv_utils.c @@ -796,7 +796,7 @@ errno_t get_pwd_from_pac(TALLOC_CTX *mem_ctx, if (dom->subdomain_homedir) { pwd->pw_dir = expand_homedir_template(pwd, dom->subdomain_homedir, lname, pwd->pw_uid, NULL, - dom->name); + dom->name, dom->flat_name); if (pwd->pw_dir == NULL) { ret = ENOMEM; goto done; diff --git a/src/util/sss_nss.c b/src/util/sss_nss.c index ac36a9ba6e03984ceefd32fb598f6373462b5b43..2b7338329f668d4893b204d7cc282ab4e29ac886 100644 --- a/src/util/sss_nss.c +++ b/src/util/sss_nss.c @@ -24,7 +24,8 @@ char *expand_homedir_template(TALLOC_CTX *mem_ctx, const char *template, const char *username, uint32_t uid, - const char *original, const char *domain) + const char *original, const char *domain, + const char *flatname) { char *copy; char *p; @@ -105,6 +106,7 @@ char *expand_homedir_template(TALLOC_CTX *mem_ctx, const char *template, result = talloc_asprintf_append(result, "%s%s@%s", p, username, domain); break; + case 'o': if (original == NULL) { DEBUG(SSSDBG_CRIT_FAILURE, @@ -117,6 +119,16 @@ char *expand_homedir_template(TALLOC_CTX *mem_ctx, const char *template, result = talloc_asprintf_append(result, "%s%s", p, orig); break; + case 'F': + if (flatname == NULL) { + DEBUG(SSSDBG_CRIT_FAILURE, ("Cannot expand domain name " + "template because domain flat " + "name is empty.\n")); + goto done; + } + result = talloc_asprintf_append(result, "%s%s", p, flatname); + 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 0520035fd8dfc4479e8430b1716a33010d102065..6dcdbaef376ffb6cc45733ce6af8aeceaabe05bb 100644 --- a/src/util/sss_nss.h +++ b/src/util/sss_nss.h @@ -27,5 +27,6 @@ char *expand_homedir_template(TALLOC_CTX *mem_ctx, const char *template, const char *username, uint32_t uid, - const char *original, const char *domain); + const char *original, const char *domain, + const char *flatname); #endif -- 1.8.1.4