mirror of
https://github.com/samba-team/samba.git
synced 2025-01-03 01:18:10 +03:00
Convert add_sid_to_array() add_sid_to_array_unique() to return NTSTATUS.
Michael
(This used to be commit 6b2b9a60ef
)
This commit is contained in:
parent
de53e47c76
commit
f3603d5a5a
@ -549,11 +549,13 @@ NTSTATUS make_server_info_sam(auth_serversupplied_info **server_info,
|
|||||||
"for gid %d!\n", gids[i]));
|
"for gid %d!\n", gids[i]));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!add_sid_to_array_unique( result, &unix_group_sid,
|
status = add_sid_to_array_unique(result, &unix_group_sid,
|
||||||
&result->sids, &result->num_sids )) {
|
&result->sids,
|
||||||
|
&result->num_sids);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
result->sam_account = NULL; /* Don't free on error exit. */
|
result->sam_account = NULL; /* Don't free on error exit. */
|
||||||
TALLOC_FREE(result);
|
TALLOC_FREE(result);
|
||||||
return NT_STATUS_NO_MEMORY;
|
return status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -895,9 +897,9 @@ NTSTATUS create_token_from_username(TALLOC_CTX *mem_ctx, const char *username,
|
|||||||
"for gid %d!\n", gids[i]));
|
"for gid %d!\n", gids[i]));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!add_sid_to_array_unique(tmp_ctx, &unix_group_sid,
|
result = add_sid_to_array_unique(tmp_ctx, &unix_group_sid,
|
||||||
&group_sids, &num_group_sids )) {
|
&group_sids, &num_group_sids);
|
||||||
result = NT_STATUS_NO_MEMORY;
|
if (!NT_STATUS_IS_OK(result)) {
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1074,11 +1076,12 @@ NTSTATUS make_server_info_pw(auth_serversupplied_info **server_info,
|
|||||||
return NT_STATUS_NO_SUCH_USER;
|
return NT_STATUS_NO_SUCH_USER;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!add_sid_to_array_unique(result, &u_sid,
|
status = add_sid_to_array_unique(result, &u_sid,
|
||||||
&result->sids,
|
&result->sids,
|
||||||
&result->num_sids)) {
|
&result->num_sids);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
TALLOC_FREE(result);
|
TALLOC_FREE(result);
|
||||||
return NT_STATUS_NO_MEMORY;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For now we throw away the gids and convert via sid_to_gid
|
/* For now we throw away the gids and convert via sid_to_gid
|
||||||
|
@ -140,22 +140,22 @@ NTSTATUS add_aliases(const DOM_SID *domain_sid,
|
|||||||
if (!NT_STATUS_IS_OK(status)) {
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
DEBUG(10, ("pdb_enum_alias_memberships failed: %s\n",
|
DEBUG(10, ("pdb_enum_alias_memberships failed: %s\n",
|
||||||
nt_errstr(status)));
|
nt_errstr(status)));
|
||||||
TALLOC_FREE(tmp_ctx);
|
goto done;
|
||||||
return status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i=0; i<num_aliases; i++) {
|
for (i=0; i<num_aliases; i++) {
|
||||||
DOM_SID alias_sid;
|
DOM_SID alias_sid;
|
||||||
sid_compose(&alias_sid, domain_sid, aliases[i]);
|
sid_compose(&alias_sid, domain_sid, aliases[i]);
|
||||||
if (!add_sid_to_array_unique(token, &alias_sid,
|
status = add_sid_to_array_unique(token, &alias_sid,
|
||||||
&token->user_sids,
|
&token->user_sids,
|
||||||
&token->num_sids)) {
|
&token->num_sids);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
DEBUG(0, ("add_sid_to_array failed\n"));
|
DEBUG(0, ("add_sid_to_array failed\n"));
|
||||||
TALLOC_FREE(tmp_ctx);
|
goto done;
|
||||||
return NT_STATUS_NO_MEMORY;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
done:
|
||||||
TALLOC_FREE(tmp_ctx);
|
TALLOC_FREE(tmp_ctx);
|
||||||
return NT_STATUS_OK;
|
return NT_STATUS_OK;
|
||||||
}
|
}
|
||||||
@ -166,6 +166,7 @@ NTSTATUS add_aliases(const DOM_SID *domain_sid,
|
|||||||
static NTSTATUS add_builtin_administrators( struct nt_user_token *token )
|
static NTSTATUS add_builtin_administrators( struct nt_user_token *token )
|
||||||
{
|
{
|
||||||
DOM_SID domadm;
|
DOM_SID domadm;
|
||||||
|
NTSTATUS status;
|
||||||
|
|
||||||
/* nothing to do if we aren't in a domain */
|
/* nothing to do if we aren't in a domain */
|
||||||
|
|
||||||
@ -186,9 +187,11 @@ static NTSTATUS add_builtin_administrators( struct nt_user_token *token )
|
|||||||
/* Add Administrators if the user beloongs to Domain Admins */
|
/* Add Administrators if the user beloongs to Domain Admins */
|
||||||
|
|
||||||
if ( nt_token_check_sid( &domadm, token ) ) {
|
if ( nt_token_check_sid( &domadm, token ) ) {
|
||||||
if (!add_sid_to_array(token, &global_sid_Builtin_Administrators,
|
status = add_sid_to_array(token,
|
||||||
&token->user_sids, &token->num_sids)) {
|
&global_sid_Builtin_Administrators,
|
||||||
return NT_STATUS_NO_MEMORY;
|
&token->user_sids, &token->num_sids);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
|
return status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -303,38 +306,48 @@ struct nt_user_token *create_local_nt_token(TALLOC_CTX *mem_ctx,
|
|||||||
|
|
||||||
/* Add the user and primary group sid */
|
/* Add the user and primary group sid */
|
||||||
|
|
||||||
if (!add_sid_to_array(result, user_sid,
|
status = add_sid_to_array(result, user_sid,
|
||||||
&result->user_sids, &result->num_sids)) {
|
&result->user_sids, &result->num_sids);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For guest, num_groupsids may be zero. */
|
/* For guest, num_groupsids may be zero. */
|
||||||
if (num_groupsids) {
|
if (num_groupsids) {
|
||||||
if (!add_sid_to_array(result, &groupsids[0],
|
status = add_sid_to_array(result, &groupsids[0],
|
||||||
&result->user_sids, &result->num_sids)) {
|
&result->user_sids,
|
||||||
|
&result->num_sids);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add in BUILTIN sids */
|
/* Add in BUILTIN sids */
|
||||||
|
|
||||||
if (!add_sid_to_array(result, &global_sid_World,
|
status = add_sid_to_array(result, &global_sid_World,
|
||||||
&result->user_sids, &result->num_sids)) {
|
&result->user_sids, &result->num_sids);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (!add_sid_to_array(result, &global_sid_Network,
|
status = add_sid_to_array(result, &global_sid_Network,
|
||||||
&result->user_sids, &result->num_sids)) {
|
&result->user_sids, &result->num_sids);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_guest) {
|
if (is_guest) {
|
||||||
if (!add_sid_to_array(result, &global_sid_Builtin_Guests,
|
status = add_sid_to_array(result, &global_sid_Builtin_Guests,
|
||||||
&result->user_sids, &result->num_sids)) {
|
&result->user_sids,
|
||||||
|
&result->num_sids);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!add_sid_to_array(result, &global_sid_Authenticated_Users,
|
status = add_sid_to_array(result,
|
||||||
&result->user_sids, &result->num_sids)) {
|
&global_sid_Authenticated_Users,
|
||||||
|
&result->user_sids,
|
||||||
|
&result->num_sids);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -346,8 +359,10 @@ struct nt_user_token *create_local_nt_token(TALLOC_CTX *mem_ctx,
|
|||||||
* first group sid as primary above. */
|
* first group sid as primary above. */
|
||||||
|
|
||||||
for (i=1; i<num_groupsids; i++) {
|
for (i=1; i<num_groupsids; i++) {
|
||||||
if (!add_sid_to_array_unique(result, &groupsids[i],
|
status = add_sid_to_array_unique(result, &groupsids[i],
|
||||||
&result->user_sids, &result->num_sids)) {
|
&result->user_sids,
|
||||||
|
&result->num_sids);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -398,8 +398,8 @@ static NTSTATUS one_alias_membership(const DOM_SID *member,
|
|||||||
goto failed;
|
goto failed;
|
||||||
}
|
}
|
||||||
string_to_sid(&alias, (char *)el->values[0].data);
|
string_to_sid(&alias, (char *)el->values[0].data);
|
||||||
if (!add_sid_to_array_unique(NULL, &alias, sids, num)) {
|
status = add_sid_to_array_unique(NULL, &alias, sids, num);
|
||||||
status = NT_STATUS_NO_MEMORY;
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
goto failed;
|
goto failed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -492,6 +492,7 @@ static NTSTATUS enum_aliasmem(const DOM_SID *alias, DOM_SID **sids, size_t *num)
|
|||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
int ret, i;
|
int ret, i;
|
||||||
|
NTSTATUS status;
|
||||||
struct ldb_result *res=NULL;
|
struct ldb_result *res=NULL;
|
||||||
struct ldb_dn *dn;
|
struct ldb_dn *dn;
|
||||||
struct ldb_message_element *el;
|
struct ldb_message_element *el;
|
||||||
@ -524,14 +525,15 @@ static NTSTATUS enum_aliasmem(const DOM_SID *alias, DOM_SID **sids, size_t *num)
|
|||||||
for (i=0;i<el->num_values;i++) {
|
for (i=0;i<el->num_values;i++) {
|
||||||
DOM_SID sid;
|
DOM_SID sid;
|
||||||
string_to_sid(&sid, (const char *)el->values[i].data);
|
string_to_sid(&sid, (const char *)el->values[i].data);
|
||||||
if (!add_sid_to_array_unique(NULL, &sid, sids, num)) {
|
status = add_sid_to_array_unique(NULL, &sid, sids, num);
|
||||||
talloc_free(dn);
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
return NT_STATUS_NO_MEMORY;
|
goto done;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
talloc_free(dn);
|
|
||||||
|
|
||||||
return NT_STATUS_OK;
|
done:
|
||||||
|
talloc_free(dn);
|
||||||
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -414,8 +414,8 @@ static NTSTATUS one_alias_membership(const DOM_SID *member,
|
|||||||
if (!string_to_sid(&alias, string_sid))
|
if (!string_to_sid(&alias, string_sid))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!add_sid_to_array_unique(NULL, &alias, sids, num)) {
|
status= add_sid_to_array_unique(NULL, &alias, sids, num);
|
||||||
status = NT_STATUS_NO_MEMORY;
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -560,7 +560,10 @@ static int collect_aliasmem(TDB_CONTEXT *tdb_ctx, TDB_DATA key, TDB_DATA data,
|
|||||||
if (!string_to_sid(&member, member_string))
|
if (!string_to_sid(&member, member_string))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!add_sid_to_array(NULL, &member, closure->sids, closure->num)) {
|
if (!NT_STATUS_IS_OK(add_sid_to_array(NULL, &member,
|
||||||
|
closure->sids,
|
||||||
|
closure->num)))
|
||||||
|
{
|
||||||
/* talloc fail. */
|
/* talloc fail. */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -184,8 +184,10 @@ static int priv_traverse_fn(TDB_CONTEXT *t, TDB_DATA key, TDB_DATA data, void *s
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!add_sid_to_array( priv->mem_ctx, &sid, &priv->sids.list,
|
if (!NT_STATUS_IS_OK(add_sid_to_array(priv->mem_ctx, &sid,
|
||||||
&priv->sids.count )) {
|
&priv->sids.list,
|
||||||
|
&priv->sids.count)))
|
||||||
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,18 +30,21 @@ extern REGISTRY_OPS smbconf_reg_ops;
|
|||||||
*/
|
*/
|
||||||
NT_USER_TOKEN *registry_create_admin_token(TALLOC_CTX *mem_ctx)
|
NT_USER_TOKEN *registry_create_admin_token(TALLOC_CTX *mem_ctx)
|
||||||
{
|
{
|
||||||
|
NTSTATUS status;
|
||||||
NT_USER_TOKEN *token = NULL;
|
NT_USER_TOKEN *token = NULL;
|
||||||
|
|
||||||
/* fake a user token: builtin administrators sid and the
|
/* fake a user token: builtin administrators sid and the
|
||||||
* disk operators privilege is all we need to access the
|
* disk operators privilege is all we need to access the
|
||||||
* registry... */
|
* registry... */
|
||||||
if (!(token = TALLOC_ZERO_P(mem_ctx, NT_USER_TOKEN))) {
|
token = TALLOC_ZERO_P(mem_ctx, NT_USER_TOKEN);
|
||||||
|
if (token == NULL) {
|
||||||
DEBUG(1, ("talloc failed\n"));
|
DEBUG(1, ("talloc failed\n"));
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
token->privileges = se_disk_operators;
|
token->privileges = se_disk_operators;
|
||||||
if (!add_sid_to_array(token, &global_sid_Builtin_Administrators,
|
status = add_sid_to_array(token, &global_sid_Builtin_Administrators,
|
||||||
&token->user_sids, &token->num_sids)) {
|
&token->user_sids, &token->num_sids);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
DEBUG(1, ("Error adding builtin administrators sid "
|
DEBUG(1, ("Error adding builtin administrators sid "
|
||||||
"to fake token.\n"));
|
"to fake token.\n"));
|
||||||
goto done;
|
goto done;
|
||||||
|
@ -573,20 +573,20 @@ DOM_SID *sid_dup_talloc(TALLOC_CTX *ctx, const DOM_SID *src)
|
|||||||
Add SID to an array SIDs
|
Add SID to an array SIDs
|
||||||
********************************************************************/
|
********************************************************************/
|
||||||
|
|
||||||
bool add_sid_to_array(TALLOC_CTX *mem_ctx, const DOM_SID *sid,
|
NTSTATUS add_sid_to_array(TALLOC_CTX *mem_ctx, const DOM_SID *sid,
|
||||||
DOM_SID **sids, size_t *num)
|
DOM_SID **sids, size_t *num)
|
||||||
{
|
{
|
||||||
*sids = TALLOC_REALLOC_ARRAY(mem_ctx, *sids, DOM_SID,
|
*sids = TALLOC_REALLOC_ARRAY(mem_ctx, *sids, DOM_SID,
|
||||||
(*num)+1);
|
(*num)+1);
|
||||||
if (*sids == NULL) {
|
if (*sids == NULL) {
|
||||||
*num = 0;
|
*num = 0;
|
||||||
return False;
|
return NT_STATUS_NO_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
sid_copy(&((*sids)[*num]), sid);
|
sid_copy(&((*sids)[*num]), sid);
|
||||||
*num += 1;
|
*num += 1;
|
||||||
|
|
||||||
return True;
|
return NT_STATUS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -594,14 +594,14 @@ bool add_sid_to_array(TALLOC_CTX *mem_ctx, const DOM_SID *sid,
|
|||||||
Add SID to an array SIDs ensuring that it is not already there
|
Add SID to an array SIDs ensuring that it is not already there
|
||||||
********************************************************************/
|
********************************************************************/
|
||||||
|
|
||||||
bool add_sid_to_array_unique(TALLOC_CTX *mem_ctx, const DOM_SID *sid,
|
NTSTATUS add_sid_to_array_unique(TALLOC_CTX *mem_ctx, const DOM_SID *sid,
|
||||||
DOM_SID **sids, size_t *num_sids)
|
DOM_SID **sids, size_t *num_sids)
|
||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
for (i=0; i<(*num_sids); i++) {
|
for (i=0; i<(*num_sids); i++) {
|
||||||
if (sid_compare(sid, &(*sids)[i]) == 0)
|
if (sid_compare(sid, &(*sids)[i]) == 0)
|
||||||
return True;
|
return NT_STATUS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
return add_sid_to_array(mem_ctx, sid, sids, num_sids);
|
return add_sid_to_array(mem_ctx, sid, sids, num_sids);
|
||||||
@ -670,6 +670,7 @@ NTSTATUS sid_array_from_info3(TALLOC_CTX *mem_ctx,
|
|||||||
size_t *num_user_sids,
|
size_t *num_user_sids,
|
||||||
bool include_user_group_rid)
|
bool include_user_group_rid)
|
||||||
{
|
{
|
||||||
|
NTSTATUS status;
|
||||||
DOM_SID sid;
|
DOM_SID sid;
|
||||||
DOM_SID *sid_array = NULL;
|
DOM_SID *sid_array = NULL;
|
||||||
size_t num_sids = 0;
|
size_t num_sids = 0;
|
||||||
@ -677,35 +678,47 @@ NTSTATUS sid_array_from_info3(TALLOC_CTX *mem_ctx,
|
|||||||
|
|
||||||
if (include_user_group_rid) {
|
if (include_user_group_rid) {
|
||||||
|
|
||||||
if (!sid_compose(&sid, &(info3->dom_sid.sid),
|
if (!sid_compose(&sid, &(info3->dom_sid.sid), info3->user_rid))
|
||||||
info3->user_rid)
|
{
|
||||||
|| !add_sid_to_array(mem_ctx, &sid,
|
DEBUG(3, ("could not compose user SID from rid 0x%x\n",
|
||||||
&sid_array, &num_sids)) {
|
info3->user_rid));
|
||||||
DEBUG(3,("could not add user SID from rid 0x%x\n",
|
|
||||||
info3->user_rid));
|
|
||||||
return NT_STATUS_INVALID_PARAMETER;
|
return NT_STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
status = add_sid_to_array(mem_ctx, &sid, &sid_array, &num_sids);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
|
DEBUG(3, ("could not append user SID from rid 0x%x\n",
|
||||||
|
info3->user_rid));
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
if (!sid_compose(&sid, &(info3->dom_sid.sid),
|
if (!sid_compose(&sid, &(info3->dom_sid.sid), info3->group_rid))
|
||||||
info3->group_rid)
|
{
|
||||||
|| !add_sid_to_array(mem_ctx, &sid,
|
DEBUG(3, ("could not compose group SID from rid 0x%x\n",
|
||||||
&sid_array, &num_sids)) {
|
info3->group_rid));
|
||||||
DEBUG(3,("could not append additional group rid 0x%x\n",
|
|
||||||
info3->group_rid));
|
|
||||||
|
|
||||||
return NT_STATUS_INVALID_PARAMETER;
|
return NT_STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
status = add_sid_to_array(mem_ctx, &sid, &sid_array, &num_sids);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
|
DEBUG(3, ("could not append group SID from rid 0x%x\n",
|
||||||
|
info3->group_rid));
|
||||||
|
return status;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < info3->num_groups2; i++) {
|
for (i = 0; i < info3->num_groups2; i++) {
|
||||||
if (!sid_compose(&sid, &(info3->dom_sid.sid),
|
if (!sid_compose(&sid, &(info3->dom_sid.sid),
|
||||||
info3->gids[i].g_rid)
|
info3->gids[i].g_rid))
|
||||||
|| !add_sid_to_array(mem_ctx, &sid,
|
{
|
||||||
&sid_array, &num_sids)) {
|
DEBUG(3, ("could not compose SID from additional group "
|
||||||
DEBUG(3,("could not append additional group rid 0x%x\n",
|
"rid 0x%x\n", info3->gids[i].g_rid));
|
||||||
info3->gids[i].g_rid));
|
|
||||||
return NT_STATUS_INVALID_PARAMETER;
|
return NT_STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
status = add_sid_to_array(mem_ctx, &sid, &sid_array, &num_sids);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
|
DEBUG(3, ("could not append SID from additional group "
|
||||||
|
"rid 0x%x\n", info3->gids[i].g_rid));
|
||||||
|
return status;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Copy 'other' sids. We need to do sid filtering here to
|
/* Copy 'other' sids. We need to do sid filtering here to
|
||||||
@ -715,11 +728,12 @@ NTSTATUS sid_array_from_info3(TALLOC_CTX *mem_ctx,
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
for (i = 0; i < info3->num_other_sids; i++) {
|
for (i = 0; i < info3->num_other_sids; i++) {
|
||||||
if (!add_sid_to_array(mem_ctx, &info3->other_sids[i].sid,
|
status = add_sid_to_array(mem_ctx, &info3->other_sids[i].sid,
|
||||||
&sid_array, &num_sids)) {
|
&sid_array, &num_sids);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
DEBUG(3, ("could not add SID to array: %s\n",
|
DEBUG(3, ("could not add SID to array: %s\n",
|
||||||
sid_string_dbg(&info3->other_sids[i].sid)));
|
sid_string_dbg(&info3->other_sids[i].sid)));
|
||||||
return NT_STATUS_NO_MEMORY;
|
return status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -643,9 +643,12 @@ ADS_STATUS ads_get_sid_token(ADS_STRUCT *ads,
|
|||||||
token_sids = TALLOC_ARRAY(mem_ctx, DOM_SID, 1);
|
token_sids = TALLOC_ARRAY(mem_ctx, DOM_SID, 1);
|
||||||
ADS_ERROR_HAVE_NO_MEMORY(token_sids);
|
ADS_ERROR_HAVE_NO_MEMORY(token_sids);
|
||||||
|
|
||||||
if (!add_sid_to_array_unique(mem_ctx, &primary_group_sid, &token_sids,
|
status = ADS_ERROR_NT(add_sid_to_array_unique(mem_ctx,
|
||||||
&num_token_sids)) {
|
&primary_group_sid,
|
||||||
return ADS_ERROR(LDAP_NO_MEMORY);
|
&token_sids,
|
||||||
|
&num_token_sids));
|
||||||
|
if (!ADS_ERR_OK(status)) {
|
||||||
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < num_ad_token_sids; i++) {
|
for (i = 0; i < num_ad_token_sids; i++) {
|
||||||
@ -654,9 +657,12 @@ ADS_STATUS ads_get_sid_token(ADS_STRUCT *ads,
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!add_sid_to_array_unique(mem_ctx, &ad_token_sids[i],
|
status = ADS_ERROR_NT(add_sid_to_array_unique(mem_ctx,
|
||||||
&token_sids, &num_token_sids)) {
|
&ad_token_sids[i],
|
||||||
return ADS_ERROR(LDAP_NO_MEMORY);
|
&token_sids,
|
||||||
|
&num_token_sids));
|
||||||
|
if (!ADS_ERR_OK(status)) {
|
||||||
|
return status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2886,8 +2886,9 @@ static NTSTATUS ldapsam_enum_group_memberships(struct pdb_methods *methods,
|
|||||||
|
|
||||||
/* This sid will be replaced later */
|
/* This sid will be replaced later */
|
||||||
|
|
||||||
if (!add_sid_to_array_unique(mem_ctx, &global_sid_NULL, pp_sids, &num_sids)) {
|
ret = add_sid_to_array_unique(mem_ctx, &global_sid_NULL, pp_sids,
|
||||||
ret = NT_STATUS_NO_MEMORY;
|
&num_sids);
|
||||||
|
if (!NT_STATUS_IS_OK(ret)) {
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2926,9 +2927,9 @@ static NTSTATUS ldapsam_enum_group_memberships(struct pdb_methods *methods,
|
|||||||
ret = NT_STATUS_NO_MEMORY;
|
ret = NT_STATUS_NO_MEMORY;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
if (!add_sid_to_array_unique(mem_ctx, &sid, pp_sids,
|
ret = add_sid_to_array_unique(mem_ctx, &sid, pp_sids,
|
||||||
&num_sids)) {
|
&num_sids);
|
||||||
ret = NT_STATUS_NO_MEMORY;
|
if (!NT_STATUS_IS_OK(ret)) {
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3646,14 +3647,17 @@ static NTSTATUS ldapsam_enum_aliasmem(struct pdb_methods *methods,
|
|||||||
|
|
||||||
for (i=0; i<count; i++) {
|
for (i=0; i<count; i++) {
|
||||||
DOM_SID member;
|
DOM_SID member;
|
||||||
|
NTSTATUS status;
|
||||||
|
|
||||||
if (!string_to_sid(&member, values[i]))
|
if (!string_to_sid(&member, values[i]))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!add_sid_to_array(NULL, &member, pp_members, &num_members)) {
|
status = add_sid_to_array(NULL, &member, pp_members,
|
||||||
|
&num_members);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
ldap_value_free(values);
|
ldap_value_free(values);
|
||||||
ldap_msgfree(result);
|
ldap_msgfree(result);
|
||||||
return NT_STATUS_NO_MEMORY;
|
return status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -694,8 +694,9 @@ static NTSTATUS cmd_samr_query_useraliases(struct rpc_pipe_client *cli,
|
|||||||
printf("%s is not a legal SID\n", argv[i]);
|
printf("%s is not a legal SID\n", argv[i]);
|
||||||
return NT_STATUS_INVALID_PARAMETER;
|
return NT_STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
if (!add_sid_to_array(mem_ctx, &tmp_sid, &sids, &num_sids)) {
|
result = add_sid_to_array(mem_ctx, &tmp_sid, &sids, &num_sids);
|
||||||
return NT_STATUS_NO_MEMORY;
|
if (!NT_STATUS_IS_OK(result)) {
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -596,8 +596,9 @@ static NTSTATUS lookup_usergroups_member(struct winbindd_domain *domain,
|
|||||||
num_groups = 0;
|
num_groups = 0;
|
||||||
|
|
||||||
/* always add the primary group to the sid array */
|
/* always add the primary group to the sid array */
|
||||||
if (!add_sid_to_array(mem_ctx, primary_group, user_sids, &num_groups)) {
|
status = add_sid_to_array(mem_ctx, primary_group, user_sids,
|
||||||
status = NT_STATUS_NO_MEMORY;
|
&num_groups);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -615,10 +616,10 @@ static NTSTATUS lookup_usergroups_member(struct winbindd_domain *domain,
|
|||||||
if (sid_check_is_in_builtin(&group_sid)) {
|
if (sid_check_is_in_builtin(&group_sid)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!add_sid_to_array(mem_ctx, &group_sid, user_sids,
|
status = add_sid_to_array(mem_ctx, &group_sid,
|
||||||
&num_groups)) {
|
user_sids, &num_groups);
|
||||||
status = NT_STATUS_NO_MEMORY;
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -684,8 +685,9 @@ static NTSTATUS lookup_usergroups_memberof(struct winbindd_domain *domain,
|
|||||||
num_groups = 0;
|
num_groups = 0;
|
||||||
|
|
||||||
/* always add the primary group to the sid array */
|
/* always add the primary group to the sid array */
|
||||||
if (!add_sid_to_array(mem_ctx, primary_group, user_sids, &num_groups)) {
|
status = add_sid_to_array(mem_ctx, primary_group, user_sids,
|
||||||
status = NT_STATUS_NO_MEMORY;
|
&num_groups);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -720,10 +722,10 @@ static NTSTATUS lookup_usergroups_memberof(struct winbindd_domain *domain,
|
|||||||
if (sid_check_is_in_builtin(&group_sids[i])) {
|
if (sid_check_is_in_builtin(&group_sids[i])) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!add_sid_to_array(mem_ctx, &group_sids[i], user_sids,
|
status = add_sid_to_array(mem_ctx, &group_sids[i], user_sids,
|
||||||
&num_groups)) {
|
&num_groups);
|
||||||
status = NT_STATUS_NO_MEMORY;
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -861,8 +863,9 @@ static NTSTATUS lookup_usergroups(struct winbindd_domain *domain,
|
|||||||
*user_sids = NULL;
|
*user_sids = NULL;
|
||||||
num_groups = 0;
|
num_groups = 0;
|
||||||
|
|
||||||
if (!add_sid_to_array(mem_ctx, &primary_group, user_sids, &num_groups)) {
|
status = add_sid_to_array(mem_ctx, &primary_group, user_sids,
|
||||||
status = NT_STATUS_NO_MEMORY;
|
&num_groups);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -872,10 +875,10 @@ static NTSTATUS lookup_usergroups(struct winbindd_domain *domain,
|
|||||||
if (sid_check_is_in_builtin(&sids[i])) {
|
if (sid_check_is_in_builtin(&sids[i])) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!add_sid_to_array_unique(mem_ctx, &sids[i],
|
status = add_sid_to_array_unique(mem_ctx, &sids[i],
|
||||||
user_sids, &num_groups)) {
|
user_sids, &num_groups);
|
||||||
status = NT_STATUS_NO_MEMORY;
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -492,7 +492,9 @@ static bool parse_sidlist(TALLOC_CTX *mem_ctx, char *sidstr,
|
|||||||
DEBUG(0, ("Could not parse sid %s\n", p));
|
DEBUG(0, ("Could not parse sid %s\n", p));
|
||||||
return False;
|
return False;
|
||||||
}
|
}
|
||||||
if (!add_sid_to_array(mem_ctx, &sid, sids, num_sids)) {
|
if (!NT_STATUS_IS_OK(add_sid_to_array(mem_ctx, &sid, sids,
|
||||||
|
num_sids)))
|
||||||
|
{
|
||||||
return False;
|
return False;
|
||||||
}
|
}
|
||||||
p = q;
|
p = q;
|
||||||
@ -714,7 +716,9 @@ enum winbindd_result winbindd_dual_getsidaliases(struct winbindd_domain *domain,
|
|||||||
DEBUGADD(10, (" rid %d\n", alias_rids[i]));
|
DEBUGADD(10, (" rid %d\n", alias_rids[i]));
|
||||||
sid_copy(&sid, &domain->sid);
|
sid_copy(&sid, &domain->sid);
|
||||||
sid_append_rid(&sid, alias_rids[i]);
|
sid_append_rid(&sid, alias_rids[i]);
|
||||||
if (!add_sid_to_array(state->mem_ctx, &sid, &sids, &num_sids)) {
|
result = add_sid_to_array(state->mem_ctx, &sid, &sids,
|
||||||
|
&num_sids);
|
||||||
|
if (!NT_STATUS_IS_OK(result)) {
|
||||||
return WINBINDD_ERROR;
|
return WINBINDD_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -832,8 +836,9 @@ static void gettoken_recvdomgroups(TALLOC_CTX *mem_ctx, bool success,
|
|||||||
state->sids = NULL;
|
state->sids = NULL;
|
||||||
state->num_sids = 0;
|
state->num_sids = 0;
|
||||||
|
|
||||||
if (!add_sid_to_array(mem_ctx, &state->user_sid, &state->sids,
|
if (!NT_STATUS_IS_OK(add_sid_to_array(mem_ctx, &state->user_sid,
|
||||||
&state->num_sids)) {
|
&state->sids, &state->num_sids)))
|
||||||
|
{
|
||||||
DEBUG(0, ("Out of memory\n"));
|
DEBUG(0, ("Out of memory\n"));
|
||||||
state->cont(state->private_data, False, NULL, 0);
|
state->cont(state->private_data, False, NULL, 0);
|
||||||
return;
|
return;
|
||||||
@ -874,8 +879,11 @@ static void gettoken_recvaliases(void *private_data, bool success,
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (i=0; i<num_aliases; i++) {
|
for (i=0; i<num_aliases; i++) {
|
||||||
if (!add_sid_to_array(state->mem_ctx, &aliases[i],
|
if (!NT_STATUS_IS_OK(add_sid_to_array(state->mem_ctx,
|
||||||
&state->sids, &state->num_sids)) {
|
&aliases[i],
|
||||||
|
&state->sids,
|
||||||
|
&state->num_sids)))
|
||||||
|
{
|
||||||
DEBUG(0, ("Out of memory\n"));
|
DEBUG(0, ("Out of memory\n"));
|
||||||
state->cont(state->private_data, False, NULL, 0);
|
state->cont(state->private_data, False, NULL, 0);
|
||||||
return;
|
return;
|
||||||
|
@ -438,18 +438,15 @@ static NTSTATUS expand_groups( TALLOC_CTX *ctx,
|
|||||||
if ( name_types[j] == SID_NAME_DOM_GRP ||
|
if ( name_types[j] == SID_NAME_DOM_GRP ||
|
||||||
name_types[j] == SID_NAME_ALIAS )
|
name_types[j] == SID_NAME_ALIAS )
|
||||||
{
|
{
|
||||||
bool ret;
|
status = add_sid_to_array_unique(ctx,
|
||||||
|
&sid_mem[j],
|
||||||
ret = add_sid_to_array_unique( ctx,
|
&new_groups,
|
||||||
&sid_mem[j],
|
&new_groups_size);
|
||||||
&new_groups,
|
if (NT_STATUS_IS_OK(status)) {
|
||||||
&new_groups_size );
|
|
||||||
if ( !ret ) {
|
|
||||||
status = NT_STATUS_NO_MEMORY;
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -273,12 +273,13 @@ static NTSTATUS check_info3_in_group(TALLOC_CTX *mem_ctx,
|
|||||||
return NT_STATUS_INVALID_PARAMETER;
|
return NT_STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!add_sid_to_array(mem_ctx, &sid,
|
status = add_sid_to_array(mem_ctx, &sid,
|
||||||
&require_membership_of_sid,
|
&require_membership_of_sid,
|
||||||
&num_require_membership_of_sid)) {
|
&num_require_membership_of_sid);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
DEBUG(0, ("add_sid_to_array failed\n"));
|
DEBUG(0, ("add_sid_to_array failed\n"));
|
||||||
TALLOC_FREE(frame);
|
TALLOC_FREE(frame);
|
||||||
return NT_STATUS_NO_MEMORY;
|
return status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1304,19 +1304,22 @@ NTSTATUS lookup_usergroups_cached(struct winbindd_domain *domain,
|
|||||||
/* always add the primary group to the sid array */
|
/* always add the primary group to the sid array */
|
||||||
sid_compose(&primary_group, &info3->dom_sid.sid, info3->user_rid);
|
sid_compose(&primary_group, &info3->dom_sid.sid, info3->user_rid);
|
||||||
|
|
||||||
if (!add_sid_to_array(mem_ctx, &primary_group, user_sids, &num_groups)) {
|
status = add_sid_to_array(mem_ctx, &primary_group, user_sids,
|
||||||
|
&num_groups);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
TALLOC_FREE(info3);
|
TALLOC_FREE(info3);
|
||||||
return NT_STATUS_NO_MEMORY;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i=0; i<info3->num_groups; i++) {
|
for (i=0; i<info3->num_groups; i++) {
|
||||||
sid_copy(&group_sid, &info3->dom_sid.sid);
|
sid_copy(&group_sid, &info3->dom_sid.sid);
|
||||||
sid_append_rid(&group_sid, info3->gids[i].g_rid);
|
sid_append_rid(&group_sid, info3->gids[i].g_rid);
|
||||||
|
|
||||||
if (!add_sid_to_array(mem_ctx, &group_sid, user_sids,
|
status = add_sid_to_array(mem_ctx, &group_sid, user_sids,
|
||||||
&num_groups)) {
|
&num_groups);
|
||||||
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
TALLOC_FREE(info3);
|
TALLOC_FREE(info3);
|
||||||
return NT_STATUS_NO_MEMORY;
|
return status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1328,11 +1331,11 @@ NTSTATUS lookup_usergroups_cached(struct winbindd_domain *domain,
|
|||||||
if (info3->other_sids_attrib[i] & SE_GROUP_RESOURCE)
|
if (info3->other_sids_attrib[i] & SE_GROUP_RESOURCE)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!add_sid_to_array(mem_ctx, &info3->other_sids[i].sid,
|
status = add_sid_to_array(mem_ctx, &info3->other_sids[i].sid,
|
||||||
user_sids, &num_groups))
|
user_sids, &num_groups);
|
||||||
{
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
TALLOC_FREE(info3);
|
TALLOC_FREE(info3);
|
||||||
return NT_STATUS_NO_MEMORY;
|
return status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user