[SCM] Samba Shared Repository - branch v3-3-test updated - release-3-2-0pre2-4289-g5797326

Günther Deschner gd at samba.org
Thu Oct 23 11:04:58 GMT 2008


The branch, v3-3-test has been updated
       via  579732653fc2354575303dbde392eb9c4eb4d62c (commit)
       via  5dfee79e5abd8ffb2a1e474fb17953ca54281103 (commit)
       via  aa301e82d0c44c6a733e8be2546d661ea56512ef (commit)
       via  ac2c35bc379de83091644455dbeba0bea3e5ceb6 (commit)
       via  30fa6c3ba19a8f816043405ba5d9eec84dd1c97b (commit)
      from  4c6a222272d5e0510472247e49edf341d27a6ecb (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-3-test


- Log -----------------------------------------------------------------
commit 579732653fc2354575303dbde392eb9c4eb4d62c
Author: Günther Deschner <gd at samba.org>
Date:   Thu Oct 23 03:32:38 2008 +0200

    netapi: fix add_GROUP_USERS_INFO_X_buffer.
    
    Guenther

commit 5dfee79e5abd8ffb2a1e474fb17953ca54281103
Author: Günther Deschner <gd at samba.org>
Date:   Thu Oct 23 03:32:15 2008 +0200

    netapi: fix NetUserGetGroups_r returning partial results.
    
    Guenther

commit aa301e82d0c44c6a733e8be2546d661ea56512ef
Author: Günther Deschner <gd at samba.org>
Date:   Thu Oct 23 03:31:32 2008 +0200

    s3-samr-server: unify callback convention: _samr_UserSetInfo.
    
    Guenther

commit ac2c35bc379de83091644455dbeba0bea3e5ceb6
Author: Günther Deschner <gd at samba.org>
Date:   Thu Oct 23 03:30:58 2008 +0200

    s3-samr-server: unify callback convention: _samr_QueryDomainInfo.
    
    Guenther

commit 30fa6c3ba19a8f816043405ba5d9eec84dd1c97b
Author: Günther Deschner <gd at samba.org>
Date:   Thu Oct 23 03:30:14 2008 +0200

    s3-samr-server: fix return code in _samr_QueryDisplayInformation.
    
    Guenther

-----------------------------------------------------------------------

Summary of changes:
 source/lib/netapi/user.c        |   21 ++++++--
 source/rpc_server/srv_samr_nt.c |  105 ++++++++++++++-------------------------
 2 files changed, 53 insertions(+), 73 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/lib/netapi/user.c b/source/lib/netapi/user.c
index 7d0c47f..7edf1ce 100644
--- a/source/lib/netapi/user.c
+++ b/source/lib/netapi/user.c
@@ -2748,15 +2748,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;
 
@@ -2877,12 +2885,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/source/rpc_server/srv_samr_nt.c b/source/rpc_server/srv_samr_nt.c
index 86e5d83..ef40aa0 100644
--- a/source/rpc_server/srv_samr_nt.c
+++ b/source/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


More information about the samba-cvs mailing list