diff options
Diffstat (limited to 'source4/rpc_server')
-rw-r--r-- | source4/rpc_server/netlogon/dcerpc_netlogon.c | 24 | ||||
-rw-r--r-- | source4/rpc_server/samr/dcesrv_samr.c | 26 |
2 files changed, 35 insertions, 15 deletions
diff --git a/source4/rpc_server/netlogon/dcerpc_netlogon.c b/source4/rpc_server/netlogon/dcerpc_netlogon.c index 141aeef1bf..6c32ac8b2c 100644 --- a/source4/rpc_server/netlogon/dcerpc_netlogon.c +++ b/source4/rpc_server/netlogon/dcerpc_netlogon.c @@ -522,8 +522,28 @@ static NTSTATUS netr_LogonSamLogonEx(struct dcesrv_call_state *dce_call, TALLOC_ sam->bad_password_count = sam->bad_password_count; sam->rid = server_info->account_sid->sub_auths[server_info->account_sid->num_auths-1]; sam->primary_gid = server_info->primary_group_sid->sub_auths[server_info->primary_group_sid->num_auths-1]; - sam->group_count = 0; - sam->groupids = NULL; + + sam->groups.count = 0; + sam->groups.rids = NULL; + + if (server_info->n_domain_groups > 0) { + int i; + sam->groups.rids = talloc_array(mem_ctx, struct samr_RidWithType, + server_info->n_domain_groups); + + if (sam->groups.rids == NULL) + return NT_STATUS_NO_MEMORY; + + for (i=0; i<server_info->n_domain_groups; i++) { + + struct dom_sid *group_sid = server_info->domain_groups[i]; + sam->groups.rids[sam->groups.count].rid = + group_sid->sub_auths[group_sid->num_auths-1]; + sam->groups.rids[sam->groups.count].type = 7; + sam->groups.count += 1; + } + } + sam->user_flags = 0; /* TODO: w2k3 uses 0x120 - what is this? */ sam->acct_flags = server_info->acct_flags; sam->logon_server.string = lp_netbios_name(); diff --git a/source4/rpc_server/samr/dcesrv_samr.c b/source4/rpc_server/samr/dcesrv_samr.c index 968328fe9d..9934a502de 100644 --- a/source4/rpc_server/samr/dcesrv_samr.c +++ b/source4/rpc_server/samr/dcesrv_samr.c @@ -1741,7 +1741,7 @@ static NTSTATUS samr_QueryGroupMember(struct dcesrv_call_state *dce_call, TALLOC struct samr_account_state *a_state; struct ldb_message **res; struct ldb_message_element *el; - struct samr_ridArray *array; + struct samr_RidTypeArray *array; const char * const attrs[2] = { "member", NULL }; int ret; @@ -1757,7 +1757,7 @@ static NTSTATUS samr_QueryGroupMember(struct dcesrv_call_state *dce_call, TALLOC return NT_STATUS_INTERNAL_DB_CORRUPTION; } - array = talloc(mem_ctx, struct samr_ridArray); + array = talloc(mem_ctx, struct samr_RidTypeArray); if (array == NULL) return NT_STATUS_NO_MEMORY; @@ -1776,9 +1776,9 @@ static NTSTATUS samr_QueryGroupMember(struct dcesrv_call_state *dce_call, TALLOC if (array->rids == NULL) return NT_STATUS_NO_MEMORY; - array->unknown = talloc_array(mem_ctx, uint32_t, - el->num_values); - if (array->unknown == NULL) + array->types = talloc_array(mem_ctx, uint32_t, + el->num_values); + if (array->types == NULL) return NT_STATUS_NO_MEMORY; for (i=0; i<el->num_values; i++) { @@ -1797,7 +1797,7 @@ static NTSTATUS samr_QueryGroupMember(struct dcesrv_call_state *dce_call, TALLOC if (array->rids[i] == 0) return NT_STATUS_INTERNAL_DB_CORRUPTION; - array->unknown[i] = 7; /* Not sure what this is.. */ + array->types[i] = 7; /* RID type of some kind, not sure what the value means. */ } } @@ -2809,7 +2809,7 @@ static NTSTATUS samr_GetGroupsForUser(struct dcesrv_call_state *dce_call, TALLOC struct ldb_message **res; struct dom_sid *domain_sid; const char * const attrs[2] = { "objectSid", NULL }; - struct samr_RidArray *array; + struct samr_RidWithTypeArray *array; int count; DCESRV_PULL_HANDLE(h, r->in.user_handle, SAMR_HANDLE_USER); @@ -2829,19 +2829,19 @@ static NTSTATUS samr_GetGroupsForUser(struct dcesrv_call_state *dce_call, TALLOC if (count < 0) return NT_STATUS_INTERNAL_DB_CORRUPTION; - array = talloc(mem_ctx, struct samr_RidArray); + array = talloc(mem_ctx, struct samr_RidWithTypeArray); if (array == NULL) return NT_STATUS_NO_MEMORY; array->count = 0; - array->rid = NULL; + array->rids = NULL; if (count > 0) { int i; - array->rid = talloc_array(mem_ctx, struct samr_RidType, + array->rids = talloc_array(mem_ctx, struct samr_RidWithType, count); - if (array->rid == NULL) + if (array->rids == NULL) return NT_STATUS_NO_MEMORY; for (i=0; i<count; i++) { @@ -2854,9 +2854,9 @@ static NTSTATUS samr_GetGroupsForUser(struct dcesrv_call_state *dce_call, TALLOC continue; } - array->rid[array->count].rid = + array->rids[array->count].rid = group_sid->sub_auths[group_sid->num_auths-1]; - array->rid[array->count].type = 7; + array->rids[array->count].type = 7; array->count += 1; } } |