mirror of
https://github.com/samba-team/samba.git
synced 2025-02-25 17:57:42 +03:00
s3:auth check the user is valid first
It makes no sense to go through all the hoops to build samu and convert it to info3, just to discard them later if the user was not valid. Signed-off-by: Andrew Bartlett <abartlet@samba.org>
This commit is contained in:
parent
1bb0afa662
commit
ef942172b9
@ -581,6 +581,45 @@ NTSTATUS make_server_info_pw(struct auth_serversupplied_info **server_info,
|
||||
enum lsa_SidType type;
|
||||
struct auth_serversupplied_info *result;
|
||||
|
||||
/*
|
||||
* The SID returned in server_info->sam_account is based
|
||||
* on our SAM sid even though for a pure UNIX account this should
|
||||
* not be the case as it doesn't really exist in the SAM db.
|
||||
* This causes lookups on "[in]valid users" to fail as they
|
||||
* will lookup this name as a "Unix User" SID to check against
|
||||
* the user token. Fix this by adding the "Unix User"\unix_username
|
||||
* SID to the sid array. The correct fix should probably be
|
||||
* changing the server_info->sam_account user SID to be a
|
||||
* S-1-22 Unix SID, but this might break old configs where
|
||||
* plaintext passwords were used with no SAM backend.
|
||||
*/
|
||||
|
||||
mem_ctx = talloc_init("make_server_info_pw_tmp");
|
||||
if (!mem_ctx) {
|
||||
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,
|
||||
NULL, NULL,
|
||||
&u_sid, &type)) {
|
||||
TALLOC_FREE(mem_ctx);
|
||||
return NT_STATUS_NO_SUCH_USER;
|
||||
}
|
||||
|
||||
TALLOC_FREE(mem_ctx);
|
||||
|
||||
if (type != SID_NAME_USER) {
|
||||
return NT_STATUS_NO_SUCH_USER;
|
||||
}
|
||||
|
||||
if ( !(sampass = samu_new( NULL )) ) {
|
||||
return NT_STATUS_NO_MEMORY;
|
||||
}
|
||||
@ -639,49 +678,6 @@ NTSTATUS make_server_info_pw(struct auth_serversupplied_info **server_info,
|
||||
|
||||
TALLOC_FREE(sampass);
|
||||
|
||||
/*
|
||||
* The SID returned in server_info->sam_account is based
|
||||
* on our SAM sid even though for a pure UNIX account this should
|
||||
* not be the case as it doesn't really exist in the SAM db.
|
||||
* This causes lookups on "[in]valid users" to fail as they
|
||||
* will lookup this name as a "Unix User" SID to check against
|
||||
* the user token. Fix this by adding the "Unix User"\unix_username
|
||||
* SID to the sid array. The correct fix should probably be
|
||||
* changing the server_info->sam_account user SID to be a
|
||||
* S-1-22 Unix SID, but this might break old configs where
|
||||
* plaintext passwords were used with no SAM backend.
|
||||
*/
|
||||
|
||||
mem_ctx = talloc_init("make_server_info_pw_tmp");
|
||||
if (!mem_ctx) {
|
||||
TALLOC_FREE(result);
|
||||
return NT_STATUS_NO_MEMORY;
|
||||
}
|
||||
|
||||
qualified_name = talloc_asprintf(mem_ctx, "%s\\%s",
|
||||
unix_users_domain_name(),
|
||||
unix_username );
|
||||
if (!qualified_name) {
|
||||
TALLOC_FREE(result);
|
||||
TALLOC_FREE(mem_ctx);
|
||||
return NT_STATUS_NO_MEMORY;
|
||||
}
|
||||
|
||||
if (!lookup_name(mem_ctx, qualified_name, LOOKUP_NAME_ALL,
|
||||
NULL, NULL,
|
||||
&u_sid, &type)) {
|
||||
TALLOC_FREE(result);
|
||||
TALLOC_FREE(mem_ctx);
|
||||
return NT_STATUS_NO_SUCH_USER;
|
||||
}
|
||||
|
||||
TALLOC_FREE(mem_ctx);
|
||||
|
||||
if (type != SID_NAME_USER) {
|
||||
TALLOC_FREE(result);
|
||||
return NT_STATUS_NO_SUCH_USER;
|
||||
}
|
||||
|
||||
/* FIXME: add to info3 too ? */
|
||||
status = add_sid_to_array_unique(result, &u_sid,
|
||||
&result->sids,
|
||||
|
Loading…
x
Reference in New Issue
Block a user