The branch, master has been updated via 8a3bff343a21bc8b4c229bae5830db7462fea25f (commit) via b7c38abe27e7f5a0823f8dacff51b1724426314c (commit) via fafa60844151c60e02f5b50e98e2e6e973e56d1d (commit) via 6e058e5977c6ca4369d09338d519fdd5f1611ca6 (commit) via 3566efede2a77b26615ceef50b89d50c59ce7119 (commit) via 29737ab5da4b8fd753e455bf00e1ad2c3ae8d957 (commit) from 60164e9002c28911dbfd7115cb9bff05be5aff25 (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 8a3bff343a21bc8b4c229bae5830db7462fea25f Author: Günther Deschner <[EMAIL PROTECTED]> Date: Thu Oct 23 11:45:41 2008 +0200 s3-build: fix another build warning with the new ASN1 code. Guenther commit b7c38abe27e7f5a0823f8dacff51b1724426314c Author: Günther Deschner <[EMAIL PROTECTED]> Date: Thu Oct 23 03:32:38 2008 +0200 netapi: fix add_GROUP_USERS_INFO_X_buffer. Guenther commit fafa60844151c60e02f5b50e98e2e6e973e56d1d Author: Günther Deschner <[EMAIL PROTECTED]> Date: Thu Oct 23 03:32:15 2008 +0200 netapi: fix NetUserGetGroups_r returning partial results. Guenther commit 6e058e5977c6ca4369d09338d519fdd5f1611ca6 Author: Günther Deschner <[EMAIL PROTECTED]> Date: Thu Oct 23 03:31:32 2008 +0200 s3-samr-server: unify callback convention: _samr_UserSetInfo. Guenther commit 3566efede2a77b26615ceef50b89d50c59ce7119 Author: Günther Deschner <[EMAIL PROTECTED]> Date: Thu Oct 23 03:30:58 2008 +0200 s3-samr-server: unify callback convention: _samr_QueryDomainInfo. Guenther commit 29737ab5da4b8fd753e455bf00e1ad2c3ae8d957 Author: Günther Deschner <[EMAIL PROTECTED]> Date: Thu Oct 23 03:30:14 2008 +0200 s3-samr-server: fix return code in _samr_QueryDisplayInformation. Guenther ----------------------------------------------------------------------- Summary of changes: source3/lib/netapi/user.c | 21 +++++-- source3/libsmb/spnego.c | 7 ++- source3/rpc_server/srv_samr_nt.c | 105 ++++++++++++++------------------------ 3 files changed, 58 insertions(+), 75 deletions(-) Changeset truncated at 500 lines: diff --git a/source3/lib/netapi/user.c b/source3/lib/netapi/user.c index fcb87b7..2abc25d 100644 --- a/source3/lib/netapi/user.c +++ b/source3/lib/netapi/user.c @@ -2787,15 +2787,23 @@ NTSTATUS add_GROUP_USERS_INFO_X_buffer(TALLOC_CTX *mem_ctx, switch (level) { case 0: - u0.grui0_name = talloc_strdup(mem_ctx, group_name); - NT_STATUS_HAVE_NO_MEMORY(u0.grui0_name); + if (group_name) { + u0.grui0_name = talloc_strdup(mem_ctx, group_name); + NT_STATUS_HAVE_NO_MEMORY(u0.grui0_name); + } else { + u0.grui0_name = NULL; + } ADD_TO_ARRAY(mem_ctx, struct GROUP_USERS_INFO_0, u0, (struct GROUP_USERS_INFO_0 **)buffer, num_entries); break; case 1: - u1.grui1_name = talloc_strdup(mem_ctx, group_name); - NT_STATUS_HAVE_NO_MEMORY(u1.grui1_name); + if (group_name) { + u1.grui1_name = talloc_strdup(mem_ctx, group_name); + NT_STATUS_HAVE_NO_MEMORY(u1.grui1_name); + } else { + u1.grui1_name = NULL; + } u1.grui1_attributes = attributes; @@ -2916,12 +2924,13 @@ WERROR NetUserGetGroups_r(struct libnetapi_ctx *ctx, rids, &names, &types); - if (!NT_STATUS_IS_OK(status)) { + if (!NT_STATUS_IS_OK(status) && + !NT_STATUS_EQUAL(status, STATUS_SOME_UNMAPPED)) { werr = ntstatus_to_werror(status); goto done; } - for (i=0; i < rid_array->count; i++) { + for (i=0; i < names.count; i++) { status = add_GROUP_USERS_INFO_X_buffer(ctx, r->in.level, names.names[i].string, diff --git a/source3/libsmb/spnego.c b/source3/libsmb/spnego.c index 72559cd..ee2c3c3 100644 --- a/source3/libsmb/spnego.c +++ b/source3/libsmb/spnego.c @@ -185,10 +185,13 @@ static bool read_negTokenTarg(ASN1_DATA *asn1, negTokenTarg_t *token) asn1_end_tag(asn1); asn1_end_tag(asn1); break; - case ASN1_CONTEXT(1): + case ASN1_CONTEXT(1): { + const char *mech = NULL; asn1_start_tag(asn1, ASN1_CONTEXT(1)); - asn1_read_OID(asn1, NULL, &token->supportedMech); + asn1_read_OID(asn1, NULL, &mech); asn1_end_tag(asn1); + token->supportedMech = CONST_DISCARD(char *, mech); + } break; case ASN1_CONTEXT(2): asn1_start_tag(asn1, ASN1_CONTEXT(2)); diff --git a/source3/rpc_server/srv_samr_nt.c b/source3/rpc_server/srv_samr_nt.c index 36be832..0f82675 100644 --- a/source3/rpc_server/srv_samr_nt.c +++ b/source3/rpc_server/srv_samr_nt.c @@ -1647,7 +1647,7 @@ NTSTATUS _samr_QueryDisplayInfo(pipes_struct *p, /* calculate the total size */ total_data_size=num_account*struct_size; - if (num_account) { + if (max_entries <= num_account) { status = STATUS_MORE_ENTRIES; } else { status = NT_STATUS_OK; @@ -2910,14 +2910,11 @@ NTSTATUS _samr_GetGroupsForUser(pipes_struct *p, } /******************************************************************* - samr_QueryDomainInfo_internal + _samr_QueryDomainInfo ********************************************************************/ -static NTSTATUS samr_QueryDomainInfo_internal(const char *fn_name, - pipes_struct *p, - struct policy_handle *handle, - uint32_t level, - union samr_DomainInfo **dom_info_ptr) +NTSTATUS _samr_QueryDomainInfo(pipes_struct *p, + struct samr_QueryDomainInfo *r) { NTSTATUS status = NT_STATUS_OK; struct samr_info *info = NULL; @@ -2939,28 +2936,26 @@ static NTSTATUS samr_QueryDomainInfo_internal(const char *fn_name, uint32 num_users=0, num_groups=0, num_aliases=0; - DEBUG(5,("%s: %d\n", fn_name, __LINE__)); + DEBUG(5,("_samr_QueryDomainInfo: %d\n", __LINE__)); dom_info = TALLOC_ZERO_P(p->mem_ctx, union samr_DomainInfo); if (!dom_info) { return NT_STATUS_NO_MEMORY; } - *dom_info_ptr = dom_info; - /* find the policy handle. open a policy on it. */ - if (!find_policy_by_hnd(p, handle, (void **)(void *)&info)) { + if (!find_policy_by_hnd(p, r->in.domain_handle, (void **)(void *)&info)) { return NT_STATUS_INVALID_HANDLE; } status = access_check_samr_function(info->acc_granted, SA_RIGHT_SAM_OPEN_DOMAIN, - "_samr_QueryDomainInfo_internal" ); + "_samr_QueryDomainInfo" ); if ( !NT_STATUS_IS_OK(status) ) return status; - switch (level) { + switch (r->in.level) { case 0x01: become_root(); @@ -3136,23 +3131,11 @@ static NTSTATUS samr_QueryDomainInfo_internal(const char *fn_name, return NT_STATUS_INVALID_INFO_CLASS; } - DEBUG(5,("%s: %d\n", fn_name, __LINE__)); - - return status; -} + *r->out.info = dom_info; -/******************************************************************* - _samr_QueryDomainInfo - ********************************************************************/ + DEBUG(5,("_samr_QueryDomainInfo: %d\n", __LINE__)); -NTSTATUS _samr_QueryDomainInfo(pipes_struct *p, - struct samr_QueryDomainInfo *r) -{ - return samr_QueryDomainInfo_internal("_samr_QueryDomainInfo", - p, - r->in.domain_handle, - r->in.level, - r->out.info); + return status; } /* W2k3 seems to use the same check for all 3 objects that can be created via @@ -4157,20 +4140,18 @@ static NTSTATUS set_user_info_25(TALLOC_CTX *mem_ctx, } /******************************************************************* - samr_SetUserInfo_internal + samr_SetUserInfo ********************************************************************/ -static NTSTATUS samr_SetUserInfo_internal(const char *fn_name, - pipes_struct *p, - struct policy_handle *user_handle, - uint16_t level, - union samr_UserInfo *info) +NTSTATUS _samr_SetUserInfo(pipes_struct *p, + struct samr_SetUserInfo *r) { NTSTATUS status; struct samu *pwd = NULL; DOM_SID sid; - POLICY_HND *pol = user_handle; - uint16_t switch_value = level; + POLICY_HND *pol = r->in.user_handle; + union samr_UserInfo *info = r->in.info; + uint16_t switch_value = r->in.level; uint32_t acc_granted; uint32_t acc_required; bool ret; @@ -4178,7 +4159,7 @@ static NTSTATUS samr_SetUserInfo_internal(const char *fn_name, uint32_t acb_info; DISP_INFO *disp_info = NULL; - DEBUG(5,("%s: %d\n", fn_name, __LINE__)); + DEBUG(5,("_samr_SetUserInfo: %d\n", __LINE__)); /* find the policy handle. open a policy on it. */ if (!get_lsa_policy_samr_sid(p, pol, &sid, &acc_granted, &disp_info)) { @@ -4208,16 +4189,16 @@ static NTSTATUS samr_SetUserInfo_internal(const char *fn_name, status = access_check_samr_function(acc_granted, acc_required, - fn_name); + "_samr_SetUserInfo"); if (!NT_STATUS_IS_OK(status)) { return status; } - DEBUG(5, ("%s: sid:%s, level:%d\n", - fn_name, sid_string_dbg(&sid), switch_value)); + DEBUG(5, ("_samr_SetUserInfo: sid:%s, level:%d\n", + sid_string_dbg(&sid), switch_value)); if (info == NULL) { - DEBUG(5, ("%s: NULL info level\n", fn_name)); + DEBUG(5, ("_samr_SetUserInfo: NULL info level\n")); return NT_STATUS_INVALID_INFO_CLASS; } @@ -4251,8 +4232,7 @@ static NTSTATUS samr_SetUserInfo_internal(const char *fn_name, } } - DEBUG(5, ("%s: %s does%s possess sufficient rights\n", - fn_name, + DEBUG(5, ("_samr_SetUserInfo: %s does%s possess sufficient rights\n", uidtoname(p->pipe_user.ut.uid), has_enough_rights ? "" : " not")); @@ -4381,31 +4361,19 @@ static NTSTATUS samr_SetUserInfo_internal(const char *fn_name, } /******************************************************************* - _samr_SetUserInfo - ********************************************************************/ - -NTSTATUS _samr_SetUserInfo(pipes_struct *p, - struct samr_SetUserInfo *r) -{ - return samr_SetUserInfo_internal("_samr_SetUserInfo", - p, - r->in.user_handle, - r->in.level, - r->in.info); -} - -/******************************************************************* _samr_SetUserInfo2 ********************************************************************/ NTSTATUS _samr_SetUserInfo2(pipes_struct *p, struct samr_SetUserInfo2 *r) { - return samr_SetUserInfo_internal("_samr_SetUserInfo2", - p, - r->in.user_handle, - r->in.level, - r->in.info); + struct samr_SetUserInfo q; + + q.in.user_handle = r->in.user_handle; + q.in.level = r->in.level; + q.in.info = r->in.info; + + return _samr_SetUserInfo(p, &q); } /********************************************************************* @@ -5682,11 +5650,14 @@ NTSTATUS _samr_RemoveMemberFromForeignDomain(pipes_struct *p, NTSTATUS _samr_QueryDomainInfo2(pipes_struct *p, struct samr_QueryDomainInfo2 *r) { - return samr_QueryDomainInfo_internal("_samr_QueryDomainInfo2", - p, - r->in.domain_handle, - r->in.level, - r->out.info); + struct samr_QueryDomainInfo q; + + q.in.domain_handle = r->in.domain_handle; + q.in.level = r->in.level; + + q.out.info = r->out.info; + + return _samr_QueryDomainInfo(p, &q); } /******************************************************************* -- Samba Shared Repository