summaryrefslogtreecommitdiff
path: root/source4/winbind
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2014-10-23 17:58:40 +1300
committerAndrew Bartlett <abartlet@samba.org>2015-05-06 01:22:14 +0200
commit7fcaa07e2009066647b2e6c71ab82ce5724b43b5 (patch)
tree44383710285387cde31e939cfda9d1facc5654e2 /source4/winbind
parent4aa2246dd9a463e84fdf21a63581a98f2031fd2f (diff)
downloadsamba-7fcaa07e2009066647b2e6c71ab82ce5724b43b5.tar.gz
winbindd4: Force home directory in internal winbind to use a lower-case username
This is a BEHAVIOUR CHANGE from Samba 4.0 and 4.1, if mixed-case usernames were in use. However, it matches the behaviour in winbindd in all other use cases. Pair-programmed-with: Garming Sam <garming@catalyst.net.nz> Signed-off-by: Garming Sam <garming@catalyst.net.nz> Signed-off-by: Andrew Bartlett <abartlet@samba.org> Reviewed-by: Stefan Metzmacher <metze@samba.org>
Diffstat (limited to 'source4/winbind')
-rw-r--r--source4/winbind/wb_cmd_getpwnam.c10
-rw-r--r--source4/winbind/wb_cmd_getpwuid.c10
2 files changed, 16 insertions, 4 deletions
diff --git a/source4/winbind/wb_cmd_getpwnam.c b/source4/winbind/wb_cmd_getpwnam.c
index c4f3db8df68..2a25ba3d16c 100644
--- a/source4/winbind/wb_cmd_getpwnam.c
+++ b/source4/winbind/wb_cmd_getpwnam.c
@@ -110,6 +110,7 @@ static void cmd_getpwnam_recv_user_info(struct composite_context *ctx)
struct libnet_UserInfo *user_info;
struct winbindd_pw *pw;
char *username_with_domain;
+ char *lowercase_username;
DEBUG(5, ("cmd_getpwnam_recv_user_info called\n"));
@@ -122,10 +123,15 @@ static void cmd_getpwnam_recv_user_info(struct composite_context *ctx)
state->ctx->status = libnet_UserInfo_recv(ctx, state, user_info);
if(!composite_is_ok(state->ctx)) return;
+ lowercase_username = strlower_talloc(state, user_info->out.account_name);
+ if (composite_nomem(lowercase_username, state->ctx)) {
+ return;
+ }
+
username_with_domain = talloc_asprintf(pw, "%s%s%s",
state->workgroup_name,
lpcfg_winbind_separator(state->service->task->lp_ctx),
- user_info->out.account_name);
+ lowercase_username);
if(composite_nomem(username_with_domain, state->ctx)) return;
WBSRV_SAMBA3_SET_STRING(pw->pw_name, username_with_domain);
@@ -135,7 +141,7 @@ static void cmd_getpwnam_recv_user_info(struct composite_context *ctx)
lpcfg_template_homedir(state->service->task->lp_ctx));
all_string_sub(pw->pw_dir, "%D", state->workgroup_name,
sizeof(fstring) - 1);
- all_string_sub(pw->pw_dir, "%U", user_info->out.account_name,
+ all_string_sub(pw->pw_dir, "%U", lowercase_username,
sizeof(fstring) - 1);
WBSRV_SAMBA3_SET_STRING(pw->pw_shell,
lpcfg_template_shell(state->service->task->lp_ctx));
diff --git a/source4/winbind/wb_cmd_getpwuid.c b/source4/winbind/wb_cmd_getpwuid.c
index 997776760cf..6da3c088d25 100644
--- a/source4/winbind/wb_cmd_getpwuid.c
+++ b/source4/winbind/wb_cmd_getpwuid.c
@@ -130,6 +130,7 @@ static void cmd_getpwuid_recv_user_info(struct composite_context *ctx)
struct libnet_UserInfo *user_info;
struct winbindd_pw *pw;
char *username_with_domain;
+ char *lowercase_username;
DEBUG(5, ("cmd_getpwuid_recv_user_info called\n"));
@@ -142,10 +143,15 @@ static void cmd_getpwuid_recv_user_info(struct composite_context *ctx)
state->ctx->status = libnet_UserInfo_recv(ctx, state, user_info);
if (!composite_is_ok(state->ctx)) return;
+ lowercase_username = strlower_talloc(state, user_info->out.account_name);
+ if (composite_nomem(lowercase_username, state->ctx)) {
+ return;
+ }
+
username_with_domain = talloc_asprintf(pw, "%s%s%s",
state->workgroup,
lpcfg_winbind_separator(state->service->task->lp_ctx),
- user_info->out.account_name);
+ lowercase_username);
if(composite_nomem(username_with_domain, state->ctx)) return;
WBSRV_SAMBA3_SET_STRING(pw->pw_name, username_with_domain);
@@ -155,7 +161,7 @@ static void cmd_getpwuid_recv_user_info(struct composite_context *ctx)
lpcfg_template_homedir(state->service->task->lp_ctx));
all_string_sub(pw->pw_dir, "%D", state->workgroup,
sizeof(fstring) - 1);
- all_string_sub(pw->pw_dir, "%U", user_info->out.account_name,
+ all_string_sub(pw->pw_dir, "%U", lowercase_username,
sizeof(fstring) - 1);
WBSRV_SAMBA3_SET_STRING(pw->pw_shell,
lpcfg_template_shell(state->service->task->lp_ctx));