svn commit: samba r14646 - branches/SAMBA_3_0/source/include branches/SAMBA_3_0/source/rpc_parse branches/SAMBA_3_0/source/rpc_server branches/SAMBA_3_0/source/rpcclient trunk/source/include trunk/source/rpc_parse trunk/source/rpc_server trunk/source/rpcclient

gd at samba.org gd at samba.org
Wed Mar 22 15:00:48 GMT 2006


Author: gd
Date: 2006-03-22 15:00:42 +0000 (Wed, 22 Mar 2006)
New Revision: 14646

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

Log:
Adding samr querygroup infolevels 2 & 5.

Guenther

Modified:
   branches/SAMBA_3_0/source/include/rpc_samr.h
   branches/SAMBA_3_0/source/rpc_parse/parse_samr.c
   branches/SAMBA_3_0/source/rpc_server/srv_samr_nt.c
   branches/SAMBA_3_0/source/rpcclient/cmd_samr.c
   trunk/source/include/rpc_samr.h
   trunk/source/rpc_parse/parse_samr.c
   trunk/source/rpc_server/srv_samr_nt.c
   trunk/source/rpcclient/cmd_samr.c


Changeset:
Modified: branches/SAMBA_3_0/source/include/rpc_samr.h
===================================================================
--- branches/SAMBA_3_0/source/include/rpc_samr.h	2006-03-22 14:58:54 UTC (rev 14645)
+++ branches/SAMBA_3_0/source/include/rpc_samr.h	2006-03-22 15:00:42 UTC (rev 14646)
@@ -1112,6 +1112,21 @@
 
 } GROUP_INFO4;
 
+typedef struct samr_group_info5
+{
+	UNIHDR hdr_acct_name;
+
+	uint32 group_attr; /* 0x0000 0003 - group attribute */
+	uint32 num_members; /* 0x0000 0001 - number of group members? */
+
+	UNIHDR hdr_acct_desc;
+
+	UNISTR2 uni_acct_name;
+	UNISTR2 uni_acct_desc;
+
+} GROUP_INFO5;
+
+
 /* GROUP_INFO_CTR */
 typedef struct group_info_ctr
 {
@@ -1123,7 +1138,7 @@
 		GROUP_INFO2 info2;
 		GROUP_INFO3 info3;
 		GROUP_INFO4 info4;
-
+		GROUP_INFO5 info5;
 	} group;
 
 } GROUP_INFO_CTR;

Modified: branches/SAMBA_3_0/source/rpc_parse/parse_samr.c
===================================================================
--- branches/SAMBA_3_0/source/rpc_parse/parse_samr.c	2006-03-22 14:58:54 UTC (rev 14645)
+++ branches/SAMBA_3_0/source/rpc_parse/parse_samr.c	2006-03-22 15:00:42 UTC (rev 14646)
@@ -2307,9 +2307,72 @@
 }
 
 /*******************************************************************
+inits a GROUP_INFO5 structure.
+********************************************************************/
+
+void init_samr_group_info5(GROUP_INFO5 * gr5,
+			   char *acct_name, char *acct_desc,
+			   uint32 num_members)
+{
+	DEBUG(5, ("init_samr_group_info5\n"));
+
+	gr5->group_attr = (SE_GROUP_MANDATORY|SE_GROUP_ENABLED_BY_DEFAULT); /* why not | SE_GROUP_ENABLED ? */
+	gr5->num_members = num_members;
+
+	init_unistr2(&gr5->uni_acct_name, acct_name, UNI_FLAGS_NONE);
+	init_uni_hdr(&gr5->hdr_acct_name, &gr5->uni_acct_name);
+	init_unistr2(&gr5->uni_acct_desc, acct_desc, UNI_FLAGS_NONE);
+	init_uni_hdr(&gr5->hdr_acct_desc, &gr5->uni_acct_desc);
+}
+
+/*******************************************************************
 reads or writes a structure.
 ********************************************************************/
 
+BOOL samr_io_group_info5(const char *desc, GROUP_INFO5 * gr5,
+			 prs_struct *ps, int depth)
+{
+	uint16 dummy = 1;
+
+	if (gr5 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_group_info5");
+	depth++;
+
+	if(!prs_uint16("level", ps, depth, &dummy))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_unihdr("hdr_acct_name", &gr5->hdr_acct_name, ps, depth))
+		return False;
+
+	if(!prs_uint32("group_attr", ps, depth, &gr5->group_attr))
+		return False;
+	if(!prs_uint32("num_members", ps, depth, &gr5->num_members))
+		return False;
+
+	if(!smb_io_unihdr("hdr_acct_desc", &gr5->hdr_acct_desc, ps, depth))
+		return False;
+
+	if(!smb_io_unistr2("uni_acct_name", &gr5->uni_acct_name,
+			   gr5->hdr_acct_name.buffer, ps, depth))
+		return False;
+
+	if(!smb_io_unistr2("uni_acct_desc", &gr5->uni_acct_desc,
+			   gr5->hdr_acct_desc.buffer, ps, depth))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
 static BOOL samr_group_info_ctr(const char *desc, GROUP_INFO_CTR **ctr,
 				prs_struct *ps, int depth)
 {
@@ -2342,6 +2405,10 @@
 		if(!samr_io_group_info4("group_info4", &(*ctr)->group.info4, ps, depth))
 			return False;
 		break;
+	case 5:
+		if(!samr_io_group_info5("group_info5", &(*ctr)->group.info5, ps, depth))
+			return False;
+		break;
 	default:
 		DEBUG(0,("samr_group_info_ctr: unsupported switch level\n"));
 		break;

Modified: branches/SAMBA_3_0/source/rpc_server/srv_samr_nt.c
===================================================================
--- branches/SAMBA_3_0/source/rpc_server/srv_samr_nt.c	2006-03-22 14:58:54 UTC (rev 14645)
+++ branches/SAMBA_3_0/source/rpc_server/srv_samr_nt.c	2006-03-22 15:00:42 UTC (rev 14646)
@@ -4362,6 +4362,10 @@
 				      map.comment, num_members);
 			break;
 		}
+		case 2:
+			ctr->switch_value1 = 2;
+			init_samr_group_info2(&ctr->group.info2, map.nt_name);
+			break;
 		case 3:
 			ctr->switch_value1 = 3;
 			init_samr_group_info3(&ctr->group.info3);
@@ -4370,6 +4374,28 @@
 			ctr->switch_value1 = 4;
 			init_samr_group_info4(&ctr->group.info4, map.comment);
 			break;
+		case 5: {
+			/*
+			uint32 *members;
+			size_t num_members;
+			*/
+
+			ctr->switch_value1 = 5;
+
+			/*
+			become_root();
+			r_u->status = pdb_enum_group_members(
+				p->mem_ctx, &group_sid, &members, &num_members);
+			unbecome_root();
+	
+			if (!NT_STATUS_IS_OK(r_u->status)) {
+				return r_u->status;
+			}
+			*/
+			init_samr_group_info5(&ctr->group.info5, map.nt_name,
+				      map.comment, 0 /* num_members */); /* in w2k3 this is always 0 */
+			break;
+		}
 		default:
 			return NT_STATUS_INVALID_INFO_CLASS;
 	}

Modified: branches/SAMBA_3_0/source/rpcclient/cmd_samr.c
===================================================================
--- branches/SAMBA_3_0/source/rpcclient/cmd_samr.c	2006-03-22 14:58:54 UTC (rev 14645)
+++ branches/SAMBA_3_0/source/rpcclient/cmd_samr.c	2006-03-22 15:00:42 UTC (rev 14646)
@@ -442,6 +442,18 @@
 /****************************************************************************
  display group info
  ****************************************************************************/
+static void display_group_info2(GROUP_INFO2 *info2)
+{
+	fstring name;
+
+	unistr2_to_ascii(name, &info2->uni_acct_name, sizeof(name)-1);
+	printf("\tGroup Description:%s\n", name);
+}
+
+
+/****************************************************************************
+ display group info
+ ****************************************************************************/
 static void display_group_info3(GROUP_INFO3 *info3)
 {
 	printf("\tGroup Attribute:%d\n", info3->group_attr);
@@ -460,23 +472,42 @@
 }
 
 /****************************************************************************
+ display group info
+ ****************************************************************************/
+static void display_group_info5(GROUP_INFO5 *info5)
+{
+	fstring temp;
+
+	unistr2_to_ascii(temp, &info5->uni_acct_name, sizeof(temp)-1);
+	printf("\tGroup Name:\t%s\n", temp);
+	unistr2_to_ascii(temp, &info5->uni_acct_desc, sizeof(temp)-1);
+	printf("\tDescription:\t%s\n", temp);
+	printf("\tGroup Attribute:%d\n", info5->group_attr);
+	printf("\tNum Members:%d\n", info5->num_members);
+}
+
+/****************************************************************************
  display sam sync structure
  ****************************************************************************/
 static void display_group_info_ctr(GROUP_INFO_CTR *ctr)
 {
 	switch (ctr->switch_value1) {
-	    case 1: {
-		    display_group_info1(&ctr->group.info1);
-		    break;
-	    }
-	    case 3: {
-		    display_group_info3(&ctr->group.info3);
-		    break;
-	    }
-	    case 4: {
-		    display_group_info4(&ctr->group.info4);
-		    break;
-	    }
+		case 1:
+			display_group_info1(&ctr->group.info1);
+			break;
+		case 2:
+			display_group_info2(&ctr->group.info2);
+			break;
+		case 3:
+			display_group_info3(&ctr->group.info3);
+			break;
+		case 4:
+			display_group_info4(&ctr->group.info4);
+			break;
+		case 5:
+			display_group_info5(&ctr->group.info5);
+			break;
+
 	}
 }
 

Modified: trunk/source/include/rpc_samr.h
===================================================================
--- trunk/source/include/rpc_samr.h	2006-03-22 14:58:54 UTC (rev 14645)
+++ trunk/source/include/rpc_samr.h	2006-03-22 15:00:42 UTC (rev 14646)
@@ -1112,6 +1112,21 @@
 
 } GROUP_INFO4;
 
+typedef struct samr_group_info5
+{
+	UNIHDR hdr_acct_name;
+
+	uint32 group_attr; /* 0x0000 0003 - group attribute */
+	uint32 num_members; /* 0x0000 0001 - number of group members? */
+
+	UNIHDR hdr_acct_desc;
+
+	UNISTR2 uni_acct_name;
+	UNISTR2 uni_acct_desc;
+
+} GROUP_INFO5;
+
+
 /* GROUP_INFO_CTR */
 typedef struct group_info_ctr
 {
@@ -1123,7 +1138,7 @@
 		GROUP_INFO2 info2;
 		GROUP_INFO3 info3;
 		GROUP_INFO4 info4;
-
+		GROUP_INFO5 info5;
 	} group;
 
 } GROUP_INFO_CTR;

Modified: trunk/source/rpc_parse/parse_samr.c
===================================================================
--- trunk/source/rpc_parse/parse_samr.c	2006-03-22 14:58:54 UTC (rev 14645)
+++ trunk/source/rpc_parse/parse_samr.c	2006-03-22 15:00:42 UTC (rev 14646)
@@ -2307,9 +2307,72 @@
 }
 
 /*******************************************************************
+inits a GROUP_INFO5 structure.
+********************************************************************/
+
+void init_samr_group_info5(GROUP_INFO5 * gr5,
+			   char *acct_name, char *acct_desc,
+			   uint32 num_members)
+{
+	DEBUG(5, ("init_samr_group_info5\n"));
+
+	gr5->group_attr = (SE_GROUP_MANDATORY|SE_GROUP_ENABLED_BY_DEFAULT); /* why not | SE_GROUP_ENABLED ? */
+	gr5->num_members = num_members;
+
+	init_unistr2(&gr5->uni_acct_name, acct_name, UNI_FLAGS_NONE);
+	init_uni_hdr(&gr5->hdr_acct_name, &gr5->uni_acct_name);
+	init_unistr2(&gr5->uni_acct_desc, acct_desc, UNI_FLAGS_NONE);
+	init_uni_hdr(&gr5->hdr_acct_desc, &gr5->uni_acct_desc);
+}
+
+/*******************************************************************
 reads or writes a structure.
 ********************************************************************/
 
+BOOL samr_io_group_info5(const char *desc, GROUP_INFO5 * gr5,
+			 prs_struct *ps, int depth)
+{
+	uint16 dummy = 1;
+
+	if (gr5 == NULL)
+		return False;
+
+	prs_debug(ps, depth, desc, "samr_io_group_info5");
+	depth++;
+
+	if(!prs_uint16("level", ps, depth, &dummy))
+		return False;
+
+	if(!prs_align(ps))
+		return False;
+
+	if(!smb_io_unihdr("hdr_acct_name", &gr5->hdr_acct_name, ps, depth))
+		return False;
+
+	if(!prs_uint32("group_attr", ps, depth, &gr5->group_attr))
+		return False;
+	if(!prs_uint32("num_members", ps, depth, &gr5->num_members))
+		return False;
+
+	if(!smb_io_unihdr("hdr_acct_desc", &gr5->hdr_acct_desc, ps, depth))
+		return False;
+
+	if(!smb_io_unistr2("uni_acct_name", &gr5->uni_acct_name,
+			   gr5->hdr_acct_name.buffer, ps, depth))
+		return False;
+
+	if(!smb_io_unistr2("uni_acct_desc", &gr5->uni_acct_desc,
+			   gr5->hdr_acct_desc.buffer, ps, depth))
+		return False;
+
+	return True;
+}
+
+
+/*******************************************************************
+reads or writes a structure.
+********************************************************************/
+
 static BOOL samr_group_info_ctr(const char *desc, GROUP_INFO_CTR **ctr,
 				prs_struct *ps, int depth)
 {
@@ -2342,6 +2405,10 @@
 		if(!samr_io_group_info4("group_info4", &(*ctr)->group.info4, ps, depth))
 			return False;
 		break;
+	case 5:
+		if(!samr_io_group_info5("group_info5", &(*ctr)->group.info5, ps, depth))
+			return False;
+		break;
 	default:
 		DEBUG(0,("samr_group_info_ctr: unsupported switch level\n"));
 		break;

Modified: trunk/source/rpc_server/srv_samr_nt.c
===================================================================
--- trunk/source/rpc_server/srv_samr_nt.c	2006-03-22 14:58:54 UTC (rev 14645)
+++ trunk/source/rpc_server/srv_samr_nt.c	2006-03-22 15:00:42 UTC (rev 14646)
@@ -4362,6 +4362,10 @@
 				      map.comment, num_members);
 			break;
 		}
+		case 2:
+			ctr->switch_value1 = 2;
+			init_samr_group_info2(&ctr->group.info2, map.nt_name);
+			break;
 		case 3:
 			ctr->switch_value1 = 3;
 			init_samr_group_info3(&ctr->group.info3);
@@ -4370,6 +4374,28 @@
 			ctr->switch_value1 = 4;
 			init_samr_group_info4(&ctr->group.info4, map.comment);
 			break;
+		case 5: {
+			/*
+			uint32 *members;
+			size_t num_members;
+			*/
+
+			ctr->switch_value1 = 5;
+
+			/*
+			become_root();
+			r_u->status = pdb_enum_group_members(
+				p->mem_ctx, &group_sid, &members, &num_members);
+			unbecome_root();
+	
+			if (!NT_STATUS_IS_OK(r_u->status)) {
+				return r_u->status;
+			}
+			*/
+			init_samr_group_info5(&ctr->group.info5, map.nt_name,
+				      map.comment, 0 /* num_members */); /* in w2k3 this is always 0 */
+			break;
+		}
 		default:
 			return NT_STATUS_INVALID_INFO_CLASS;
 	}

Modified: trunk/source/rpcclient/cmd_samr.c
===================================================================
--- trunk/source/rpcclient/cmd_samr.c	2006-03-22 14:58:54 UTC (rev 14645)
+++ trunk/source/rpcclient/cmd_samr.c	2006-03-22 15:00:42 UTC (rev 14646)
@@ -442,6 +442,18 @@
 /****************************************************************************
  display group info
  ****************************************************************************/
+static void display_group_info2(GROUP_INFO2 *info2)
+{
+	fstring name;
+
+	unistr2_to_ascii(name, &info2->uni_acct_name, sizeof(name)-1);
+	printf("\tGroup Description:%s\n", name);
+}
+
+
+/****************************************************************************
+ display group info
+ ****************************************************************************/
 static void display_group_info3(GROUP_INFO3 *info3)
 {
 	printf("\tGroup Attribute:%d\n", info3->group_attr);
@@ -460,23 +472,42 @@
 }
 
 /****************************************************************************
+ display group info
+ ****************************************************************************/
+static void display_group_info5(GROUP_INFO5 *info5)
+{
+	fstring temp;
+
+	unistr2_to_ascii(temp, &info5->uni_acct_name, sizeof(temp)-1);
+	printf("\tGroup Name:\t%s\n", temp);
+	unistr2_to_ascii(temp, &info5->uni_acct_desc, sizeof(temp)-1);
+	printf("\tDescription:\t%s\n", temp);
+	printf("\tGroup Attribute:%d\n", info5->group_attr);
+	printf("\tNum Members:%d\n", info5->num_members);
+}
+
+/****************************************************************************
  display sam sync structure
  ****************************************************************************/
 static void display_group_info_ctr(GROUP_INFO_CTR *ctr)
 {
 	switch (ctr->switch_value1) {
-	    case 1: {
-		    display_group_info1(&ctr->group.info1);
-		    break;
-	    }
-	    case 3: {
-		    display_group_info3(&ctr->group.info3);
-		    break;
-	    }
-	    case 4: {
-		    display_group_info4(&ctr->group.info4);
-		    break;
-	    }
+		case 1:
+			display_group_info1(&ctr->group.info1);
+			break;
+		case 2:
+			display_group_info2(&ctr->group.info2);
+			break;
+		case 3:
+			display_group_info3(&ctr->group.info3);
+			break;
+		case 4:
+			display_group_info4(&ctr->group.info4);
+			break;
+		case 5:
+			display_group_info5(&ctr->group.info5);
+			break;
+
 	}
 }
 



More information about the samba-cvs mailing list