[PATCH 1/2] s3-auth: fix force user for AD user
David Disseldorp
ddiss at suse.de
Mon Nov 14 09:31:53 MST 2011
Do not add a unix_users_domain_name() username prefix prior to the
lookup. This ensures winbind is consulted before a unix user SID is
manually composed.
Use get_primary_group_sid() only if gid_to_sid() fails lookup.
https://bugzilla.samba.org/show_bug.cgi?id=8598
---
source3/auth/auth_util.c | 18 ++++++++----------
source3/passdb/lookup_sid.c | 3 +--
2 files changed, 9 insertions(+), 12 deletions(-)
diff --git a/source3/auth/auth_util.c b/source3/auth/auth_util.c
index fcfed83..f21cbe1 100644
--- a/source3/auth/auth_util.c
+++ b/source3/auth/auth_util.c
@@ -677,9 +677,9 @@ NTSTATUS make_server_info_pw(struct auth_serversupplied_info **server_info,
{
NTSTATUS status;
struct samu *sampass = NULL;
- char *qualified_name = NULL;
TALLOC_CTX *mem_ctx = NULL;
struct dom_sid u_sid;
+ struct dom_sid g_sid;
enum lsa_SidType type;
struct auth_serversupplied_info *result;
@@ -701,15 +701,7 @@ NTSTATUS make_server_info_pw(struct auth_serversupplied_info **server_info,
return NT_STATUS_NO_MEMORY;
}
- qualified_name = talloc_asprintf(mem_ctx, "%s\\%s",
- unix_users_domain_name(),
- unix_username );
- if (!qualified_name) {
- TALLOC_FREE(mem_ctx);
- return NT_STATUS_NO_MEMORY;
- }
-
- if (!lookup_name(mem_ctx, qualified_name, LOOKUP_NAME_ALL,
+ if (!lookup_name(mem_ctx, unix_username, LOOKUP_NAME_ALL,
NULL, NULL,
&u_sid, &type)) {
TALLOC_FREE(mem_ctx);
@@ -739,6 +731,12 @@ NTSTATUS make_server_info_pw(struct auth_serversupplied_info **server_info,
/* set the user sid to be the calculated u_sid */
pdb_set_user_sid(sampass, &u_sid, PDB_SET);
+ /* samu_to_SamInfo3() calls get_primary_group_sid() if mapping fails */
+ gid_to_sid(&g_sid, pwd->pw_gid);
+ if (!is_null_sid(&g_sid)) {
+ pdb_set_group_sid(sampass, &g_sid, PDB_SET);
+ }
+
result = make_server_info(NULL);
if (result == NULL) {
TALLOC_FREE(sampass);
diff --git a/source3/passdb/lookup_sid.c b/source3/passdb/lookup_sid.c
index cfc78ad..3939fee 100644
--- a/source3/passdb/lookup_sid.c
+++ b/source3/passdb/lookup_sid.c
@@ -55,8 +55,7 @@ bool lookup_name(TALLOC_CTX *mem_ctx,
return false;
}
- p = strchr_m(full_name, '\\');
-
+ p = strchr_m(full_name, *lp_winbind_separator());
if (p != NULL) {
domain = talloc_strndup(tmp_ctx, full_name,
PTR_DIFF(p, full_name));
--
1.7.1
More information about the samba-technical
mailing list