diff options
author | Lukas Slebodnik <lslebodn@redhat.com> | 2013-12-02 13:03:33 +0100 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2014-06-02 19:07:57 +0200 |
commit | 5cd660aaa885bca95ac3dca660bb77e5786d5f8e (patch) | |
tree | 6450720de4fdbf7a26465c65c2ccc395fbb9b64e /src/responder | |
parent | be7eabee6b7eb8def2441bf5de4c6d4950c155bf (diff) | |
download | sssd-5cd660aaa885bca95ac3dca660bb77e5786d5f8e.tar.gz sssd-5cd660aaa885bca95ac3dca660bb77e5786d5f8e.tar.xz sssd-5cd660aaa885bca95ac3dca660bb77e5786d5f8e.zip |
NSS: Refactor expand_homedir_template
Function expand_homedir_template had lot of parameters.
After adding new expand option, all function call should be rewritten,
(usually argument NULL will be added)
This patch wraps all necessary arguments to structure.
Diffstat (limited to 'src/responder')
-rw-r--r-- | src/responder/nss/nsssrv_cmd.c | 29 | ||||
-rw-r--r-- | src/responder/pac/pacsrv_utils.c | 11 |
2 files changed, 27 insertions, 13 deletions
diff --git a/src/responder/nss/nsssrv_cmd.c b/src/responder/nss/nsssrv_cmd.c index e00849a48..b47a1ded5 100644 --- a/src/responder/nss/nsssrv_cmd.c +++ b/src/responder/nss/nsssrv_cmd.c @@ -172,17 +172,18 @@ static const char *get_homedir_override(TALLOC_CTX *mem_ctx, struct ldb_message *msg, struct nss_ctx *nctx, struct sss_domain_info *dom, - const char *orig_name, - uint32_t uid) + struct sss_nss_homedir_ctx *homedir_ctx) { const char *homedir; - char *name; + const char *orig_name = homedir_ctx->username; errno_t ret; homedir = ldb_msg_find_attr_as_string(msg, SYSDB_HOMEDIR, NULL); + homedir_ctx->original = homedir; /* Subdomain users store FQDN in their name attribute */ - ret = sss_parse_name(mem_ctx, dom->names, orig_name, NULL, &name); + ret = sss_parse_name_const(mem_ctx, dom->names, orig_name, + NULL, &homedir_ctx->username); if (ret != EOK) { DEBUG(SSSDBG_MINOR_FAILURE, "Could not parse [%s] into " "name-value components.\n", orig_name); @@ -194,10 +195,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, NULL); + homedir_ctx); } else if (nctx->override_homedir) { return expand_homedir_template(mem_ctx, nctx->override_homedir, - name, uid, homedir, dom->name, NULL); + homedir_ctx); } if (!homedir || *homedir == '\0') { @@ -206,12 +207,10 @@ 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, NULL); + homedir_ctx); } else if (nctx->fallback_homedir) { return expand_homedir_template(mem_ctx, nctx->fallback_homedir, - name, uid, homedir, - dom->name, NULL); + homedir_ctx); } } @@ -317,6 +316,7 @@ static int fill_pwent(struct sss_packet *packet, bool packet_initialized = false; int ncret; TALLOC_CTX *tmp_ctx = NULL; + struct sss_nss_homedir_ctx homedir_ctx; to_sized_string(&pwfield, nctx->pwfield); @@ -372,7 +372,14 @@ static int fill_pwent(struct sss_packet *packet, } else { to_sized_string(&gecos, tmpstr); } - tmpstr = get_homedir_override(tmp_ctx, msg, nctx, dom, name.str, uid); + + ZERO_STRUCT(homedir_ctx); + + homedir_ctx.username = name.str; + homedir_ctx.uid = uid; + homedir_ctx.domain = dom->name; + + tmpstr = get_homedir_override(tmp_ctx, msg, nctx, dom, &homedir_ctx); if (!tmpstr) { to_sized_string(&homedir, "/"); } else { diff --git a/src/responder/pac/pacsrv_utils.c b/src/responder/pac/pacsrv_utils.c index 035fe84c0..fe7e88934 100644 --- a/src/responder/pac/pacsrv_utils.c +++ b/src/responder/pac/pacsrv_utils.c @@ -353,6 +353,7 @@ errno_t get_pwd_from_pac(TALLOC_CTX *mem_ctx, char *upn; hash_key_t key; hash_value_t value; + struct sss_nss_homedir_ctx homedir_ctx; pwd = talloc_zero(mem_ctx, struct passwd); if (pwd == NULL) { @@ -439,9 +440,15 @@ errno_t get_pwd_from_pac(TALLOC_CTX *mem_ctx, /* Check if there is a special homedir template for sub-domains. If not a * fallback will be added by the NSS responder. */ if (IS_SUBDOMAIN(dom) && dom->subdomain_homedir) { + ZERO_STRUCT(homedir_ctx); + + homedir_ctx.username = lname; + homedir_ctx.uid = pwd->pw_uid; + homedir_ctx.domain = dom->name; + homedir_ctx.flatname = dom->flat_name; + pwd->pw_dir = expand_homedir_template(pwd, dom->subdomain_homedir, - lname, pwd->pw_uid, NULL, - dom->name, dom->flat_name); + &homedir_ctx); if (pwd->pw_dir == NULL) { ret = ENOMEM; goto done; |