mirror of
https://github.com/samba-team/samba.git
synced 2024-12-25 23:21:54 +03:00
Fix show-stopper for 3.2. Smbd depends on group SID
position zero being the primary group sid. Authenicating via winbindd call returned a non-sorted sid list. This fixes is for both a winbindd call and a pac list from an info3 struct. Without this we mess up the primary group associated with created files. Found by Herb. Jeremy.
This commit is contained in:
parent
7f7dd5e888
commit
cb925dec85
@ -26,6 +26,34 @@
|
||||
#undef DBGC_CLASS
|
||||
#define DBGC_CLASS DBGC_AUTH
|
||||
|
||||
/****************************************************************************
|
||||
Ensure primary group SID is always at position 0 in a
|
||||
auth_serversupplied_info struct.
|
||||
****************************************************************************/
|
||||
|
||||
static void sort_sid_array_for_smbd(auth_serversupplied_info *result,
|
||||
const DOM_SID *pgroup_sid)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
if (!result->sids) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (sid_compare(&result->sids[0], pgroup_sid)==0) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 1; i < result->num_sids; i++) {
|
||||
if (sid_compare(pgroup_sid,
|
||||
&result->sids[i]) == 0) {
|
||||
sid_copy(&result->sids[i], &result->sids[0]);
|
||||
sid_copy(&result->sids[0], pgroup_sid);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
Create a UNIX user on demand.
|
||||
****************************************************************************/
|
||||
@ -1742,6 +1770,9 @@ NTSTATUS make_server_info_info3(TALLOC_CTX *mem_ctx,
|
||||
return nt_status;
|
||||
}
|
||||
|
||||
/* Ensure the primary group sid is at position 0. */
|
||||
sort_sid_array_for_smbd(result, &group_sid);
|
||||
|
||||
result->login_server = talloc_strdup(result,
|
||||
info3->base.logon_server.string);
|
||||
|
||||
@ -1987,6 +2018,9 @@ NTSTATUS make_server_info_wbcAuthUserInfo(TALLOC_CTX *mem_ctx,
|
||||
memcpy(&result->sids[i], &info->sids[i+2].sid, sizeof(result->sids[i]));
|
||||
}
|
||||
|
||||
/* Ensure the primary group sid is at position 0. */
|
||||
sort_sid_array_for_smbd(result, &group_sid);
|
||||
|
||||
/* ensure we are never given NULL session keys */
|
||||
|
||||
ZERO_STRUCT(zeros);
|
||||
|
Loading…
Reference in New Issue
Block a user