svn commit: samba r7836 - branches/SAMBA_3_0/source/rpc_server trunk/source/rpc_server

vlendec at samba.org vlendec at samba.org
Wed Jun 22 14:16:12 GMT 2005


Author: vlendec
Date: 2005-06-22 14:16:10 +0000 (Wed, 22 Jun 2005)
New Revision: 7836

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=7836

Log:
Fix the bug where users show up as trusting domains.

Volker

Modified:
   branches/SAMBA_3_0/source/rpc_server/srv_samr_nt.c
   trunk/source/rpc_server/srv_samr_nt.c


Changeset:
Modified: branches/SAMBA_3_0/source/rpc_server/srv_samr_nt.c
===================================================================
--- branches/SAMBA_3_0/source/rpc_server/srv_samr_nt.c	2005-06-22 07:00:26 UTC (rev 7835)
+++ branches/SAMBA_3_0/source/rpc_server/srv_samr_nt.c	2005-06-22 14:16:10 UTC (rev 7836)
@@ -45,11 +45,14 @@
 extern rid_name builtin_alias_rids[];
 
 typedef struct disp_info {
-	struct pdb_search *users;
-	struct pdb_search *machines;
-	struct pdb_search *groups;
-	struct pdb_search *aliases;
-	struct pdb_search *builtins;
+	struct pdb_search *users; /* querydispinfo 1 and 4 */
+	struct pdb_search *machines; /* querydispinfo 2 */
+	struct pdb_search *groups; /* querydispinfo 3 and 5, enumgroups */
+	struct pdb_search *aliases; /* enumaliases */
+	struct pdb_search *builtins; /* enumaliases */
+
+	uint16 enum_acb_mask;
+	struct pdb_search *enum_users; /* enumusers with a mask */
 } DISP_INFO;
 
 struct samr_info {
@@ -264,6 +267,8 @@
 	info->disp_info.aliases = NULL;
 	pdb_search_destroy(info->disp_info.builtins);
 	info->disp_info.builtins = NULL;
+	pdb_search_destroy(info->disp_info.enum_users);
+	info->disp_info.enum_users = NULL;
 }
 
 static void free_samr_info(void *ptr)
@@ -590,11 +595,19 @@
 	DEBUG(5,("_samr_enum_dom_users: %d\n", __LINE__));
 
 	become_root();
-	if (info->disp_info.users == NULL)
-		info->disp_info.users = pdb_search_users(q_u->acb_mask);
-	if (info->disp_info.users == NULL)
+	if ((info->disp_info.enum_users != NULL) &&
+	    (info->disp_info.enum_acb_mask != q_u->acb_mask)) {
+		pdb_search_destroy(info->disp_info.enum_users);
+		info->disp_info.enum_users = NULL;
+	}
+
+	if (info->disp_info.enum_users == NULL) {
+		info->disp_info.enum_users = pdb_search_users(q_u->acb_mask);
+		info->disp_info.enum_acb_mask = q_u->acb_mask;
+	}
+	if (info->disp_info.enum_users == NULL)
 		return NT_STATUS_ACCESS_DENIED;
-	num_account = pdb_search_entries(info->disp_info.users,
+	num_account = pdb_search_entries(info->disp_info.enum_users,
 					 enum_context, max_entries,
 					 &entries);
 	unbecome_root();

Modified: trunk/source/rpc_server/srv_samr_nt.c
===================================================================
--- trunk/source/rpc_server/srv_samr_nt.c	2005-06-22 07:00:26 UTC (rev 7835)
+++ trunk/source/rpc_server/srv_samr_nt.c	2005-06-22 14:16:10 UTC (rev 7836)
@@ -45,11 +45,14 @@
 extern rid_name builtin_alias_rids[];
 
 typedef struct disp_info {
-	struct pdb_search *users;
-	struct pdb_search *machines;
-	struct pdb_search *groups;
-	struct pdb_search *aliases;
-	struct pdb_search *builtins;
+	struct pdb_search *users; /* querydispinfo 1 and 4 */
+	struct pdb_search *machines; /* querydispinfo 2 */
+	struct pdb_search *groups; /* querydispinfo 3 and 5, enumgroups */
+	struct pdb_search *aliases; /* enumaliases */
+	struct pdb_search *builtins; /* enumaliases */
+
+	uint16 enum_acb_mask;
+	struct pdb_search *enum_users; /* enumusers with a mask */
 } DISP_INFO;
 
 struct samr_info {
@@ -264,6 +267,8 @@
 	info->disp_info.aliases = NULL;
 	pdb_search_destroy(info->disp_info.builtins);
 	info->disp_info.builtins = NULL;
+	pdb_search_destroy(info->disp_info.enum_users);
+	info->disp_info.enum_users = NULL;
 }
 
 static void free_samr_info(void *ptr)
@@ -589,11 +594,19 @@
 	DEBUG(5,("_samr_enum_dom_users: %d\n", __LINE__));
 
 	become_root();
-	if (info->disp_info.users == NULL)
-		info->disp_info.users = pdb_search_users(q_u->acb_mask);
-	if (info->disp_info.users == NULL)
+	if ((info->disp_info.enum_users != NULL) &&
+	    (info->disp_info.enum_acb_mask != q_u->acb_mask)) {
+		pdb_search_destroy(info->disp_info.enum_users);
+		info->disp_info.enum_users = NULL;
+	}
+
+	if (info->disp_info.enum_users == NULL) {
+		info->disp_info.enum_users = pdb_search_users(q_u->acb_mask);
+		info->disp_info.enum_acb_mask = q_u->acb_mask;
+	}
+	if (info->disp_info.enum_users == NULL)
 		return NT_STATUS_ACCESS_DENIED;
-	num_account = pdb_search_entries(info->disp_info.users,
+	num_account = pdb_search_entries(info->disp_info.enum_users,
 					 enum_context, max_entries,
 					 &entries);
 	unbecome_root();



More information about the samba-cvs mailing list