[SSSD] [PATCH] Allow using flatname for subdomain home dir template

Jakub Hrozek jhrozek at redhat.com
Thu Apr 4 11:46:50 UTC 2013


Currently the default is the same as it used to. Shall I also change
the default? I know there are already people using the trusts out there,
so I didn't want to disrupt their environment.
-------------- next part --------------
>From b451c6d00fe2861948d1cc60f6a213a95ca531f1 Mon Sep 17 00:00:00 2001
From: Jakub Hrozek <jhrozek at redhat.com>
Date: Thu, 4 Apr 2013 13:03:23 +0200
Subject: [PATCH] Allow using flatname for subdomain home dir template

https://fedorahosted.org/sssd/ticket/1609
---
 src/man/sssd-ad.5.xml            |  4 ++++
 src/man/sssd.conf.5.xml          |  4 ++++
 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 ++-
 7 files changed, 32 insertions(+), 8 deletions(-)

diff --git a/src/man/sssd-ad.5.xml b/src/man/sssd-ad.5.xml
index a628e0d662fbdf5e01eab3808550e680d29795b6..edee3e432693cc85df3cbf2d3494344fee8949bf 100644
--- a/src/man/sssd-ad.5.xml
+++ b/src/man/sssd-ad.5.xml
@@ -150,6 +150,10 @@ ldap_id_mapping = False
                                     <listitem><para>domain name</para></listitem>
                                 </varlistentry>
                                 <varlistentry>
+                                    <term>%F</term>
+                                    <listitem><para>flat name of a subdomain. This expansion is only meaningful in <emphasis>subdomains_homedir</emphasis></para></listitem>
+                                </varlistentry>
+                                <varlistentry>
                                     <term>%f</term>
                                     <listitem><para>fully qualified user name (user at domain)</para></listitem>
                                 </varlistentry>
diff --git a/src/man/sssd.conf.5.xml b/src/man/sssd.conf.5.xml
index 373a504d835bf13c48c676dcbd6269a0adad189c..b95719d06198aceacfabb2f0f3f5bf1706a13f42 100644
--- a/src/man/sssd.conf.5.xml
+++ b/src/man/sssd.conf.5.xml
@@ -464,6 +464,10 @@
                                     <listitem><para>domain name</para></listitem>
                                 </varlistentry>
                                 <varlistentry>
+                                    <term>%F</term>
+                                    <listitem><para>flat name of a subdomain. This expansion is only meaningful in <emphasis>subdomains_homedir</emphasis></para></listitem>
+                                </varlistentry>
+                                <varlistentry>
                                     <term>%f</term>
                                     <listitem><para>fully qualified user name (user at domain)</para></listitem>
                                 </varlistentry>
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



More information about the sssd-devel mailing list