summaryrefslogtreecommitdiffstats
path: root/src/responder/nss/nsssrv_cmd.c
diff options
context:
space:
mode:
authorLukas Slebodnik <lslebodn@redhat.com>2013-12-02 13:03:33 +0100
committerJakub Hrozek <jhrozek@redhat.com>2014-06-02 19:07:57 +0200
commit5cd660aaa885bca95ac3dca660bb77e5786d5f8e (patch)
tree6450720de4fdbf7a26465c65c2ccc395fbb9b64e /src/responder/nss/nsssrv_cmd.c
parentbe7eabee6b7eb8def2441bf5de4c6d4950c155bf (diff)
downloadsssd-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/nss/nsssrv_cmd.c')
-rw-r--r--src/responder/nss/nsssrv_cmd.c29
1 files changed, 18 insertions, 11 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 {