The branch, master has been updated via 189950c... s4:dsdb_enum_group_mem - use "unsigned" counters via 4d76c0a... s4:dsdb_lookup_rids - "unsigned" counters fit better than "signed" in this case via 9696bba... s4:dsdb_add_user - check the "cn"/"account_name" length (should be >= 1) from 2a91b00... Add in support for the NTLMSSP version reply.
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 189950ce0615806b20a5536e6621d541044be42d Author: Matthias Dieter Wallnöfer <m...@samba.org> Date: Mon May 24 22:01:36 2010 +0200 s4:dsdb_enum_group_mem - use "unsigned" counters "size_t" counters aren't really needed here (we don't check data lengths). And we save the result in a certain "num_sids" variable which is of type "unsigned". commit 4d76c0aa80e58ce944419bf36c695e7104c73712 Author: Matthias Dieter Wallnöfer <m...@samba.org> Date: Mon May 24 22:00:54 2010 +0200 s4:dsdb_lookup_rids - "unsigned" counters fit better than "signed" in this case commit 9696bba1d7e8e71ca1d186b174dfa13ac418c5c9 Author: Matthias Dieter Wallnöfer <m...@samba.org> Date: Mon May 24 21:53:34 2010 +0200 s4:dsdb_add_user - check the "cn"/"account_name" length (should be >= 1) This needed by the "cn_name_len"-1 accesses. And use a "size_t"-typed variable for storing it (length specificators should always be stored using "size_t" variables). ----------------------------------------------------------------------- Summary of changes: source4/dsdb/common/util_samr.c | 28 +++++++++++++++++----------- source4/rpc_server/samr/dcesrv_samr.c | 8 +++----- 2 files changed, 20 insertions(+), 16 deletions(-) Changeset truncated at 500 lines: diff --git a/source4/dsdb/common/util_samr.c b/source4/dsdb/common/util_samr.c index 42f30e9..6a14f0a 100644 --- a/source4/dsdb/common/util_samr.c +++ b/source4/dsdb/common/util_samr.c @@ -42,7 +42,7 @@ NTSTATUS dsdb_add_user(struct ldb_context *ldb, int ret; const char *container, *obj_class=NULL; char *cn_name; - int cn_name_len; + size_t cn_name_len; const char *attrs[] = { "objectSid", @@ -81,21 +81,26 @@ NTSTATUS dsdb_add_user(struct ldb_context *ldb, return NT_STATUS_USER_EXISTS; } - msg = ldb_msg_new(tmp_ctx); - if (msg == NULL) { + cn_name = talloc_strdup(tmp_ctx, account_name); + if (!cn_name) { ldb_transaction_cancel(ldb); talloc_free(tmp_ctx); return NT_STATUS_NO_MEMORY; } - cn_name = talloc_strdup(tmp_ctx, account_name); - if (!cn_name) { + cn_name_len = strlen(cn_name); + if (cn_name_len < 1) { ldb_transaction_cancel(ldb); talloc_free(tmp_ctx); - return NT_STATUS_NO_MEMORY; + return NT_STATUS_INVALID_PARAMETER; } - cn_name_len = strlen(cn_name); + msg = ldb_msg_new(tmp_ctx); + if (msg == NULL) { + ldb_transaction_cancel(ldb); + talloc_free(tmp_ctx); + return NT_STATUS_NO_MEMORY; + } /* This must be one of these values *only* */ if (acct_flags == ACB_NORMAL) { @@ -405,10 +410,11 @@ NTSTATUS dsdb_enum_group_mem(struct ldb_context *ldb, TALLOC_CTX *mem_ctx, struct ldb_dn *dn, struct dom_sid **members_out, - size_t *pnum_members) + unsigned int *pnum_members) { struct ldb_message *msg; - int i, ret; + unsigned int i; + int ret; struct dom_sid *members; struct ldb_message_element *member_el; const char *attrs[] = { "member", NULL }; @@ -471,13 +477,13 @@ NTSTATUS dsdb_enum_group_mem(struct ldb_context *ldb, NTSTATUS dsdb_lookup_rids(struct ldb_context *ldb, TALLOC_CTX *mem_ctx, const struct dom_sid *domain_sid, - int num_rids, + unsigned int num_rids, uint32_t *rids, const char **names, enum lsa_SidType *lsa_attrs) { const char *attrs[] = { "sAMAccountType", "sAMAccountName", NULL }; - int i, num_mapped; + unsigned int i, num_mapped; TALLOC_CTX *tmp_ctx = talloc_new(mem_ctx); NT_STATUS_HAVE_NO_MEMORY(tmp_ctx); diff --git a/source4/rpc_server/samr/dcesrv_samr.c b/source4/rpc_server/samr/dcesrv_samr.c index 246a2e1..fafa9d6 100644 --- a/source4/rpc_server/samr/dcesrv_samr.c +++ b/source4/rpc_server/samr/dcesrv_samr.c @@ -2113,9 +2113,8 @@ static NTSTATUS dcesrv_samr_QueryGroupMember(struct dcesrv_call_state *dce_call, struct dcesrv_handle *h; struct samr_account_state *a_state; struct samr_RidTypeArray *array; - size_t i; + unsigned int i, num_members; struct dom_sid *members_as_sids; - size_t num_members; struct dom_sid *dom_sid; DCESRV_PULL_HANDLE(h, r->in.group_handle, SAMR_HANDLE_GROUP); @@ -2516,9 +2515,8 @@ static NTSTATUS dcesrv_samr_GetMembersInAlias(struct dcesrv_call_state *dce_call struct samr_account_state *a_state; struct samr_domain_state *d_state; struct lsa_SidPtr *sids; - size_t i; + unsigned int i, num_members; struct dom_sid *members; - size_t num_members; NTSTATUS status; DCESRV_PULL_HANDLE(h, r->in.alias_handle, SAMR_HANDLE_ALIAS); @@ -2544,12 +2542,12 @@ static NTSTATUS dcesrv_samr_GetMembersInAlias(struct dcesrv_call_state *dce_call return NT_STATUS_NO_MEMORY; for (i=0; i<num_members; i++) { - sids[i].sid = dom_sid_dup(sids, &members[i]); if (sids[i].sid == NULL) { return NT_STATUS_NO_MEMORY; } } + r->out.sids->num_sids = num_members; r->out.sids->sids = sids; -- Samba Shared Repository