svn commit: samba r9893 - branches/SAMBA_3_0/source/include branches/SAMBA_3_0/source/rpc_parse trunk/source/include trunk/source/rpc_parse

jerry at samba.org jerry at samba.org
Thu Sep 1 13:57:11 GMT 2005


Author: jerry
Date: 2005-09-01 13:57:10 +0000 (Thu, 01 Sep 2005)
New Revision: 9893

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

Log:
fix REG_CREATE_KEY_EX parsing error caused by WinXP clients
looking for an not finding a 'Terminal Server' key.
Claims to make problems with usrmgr.exe support as well 
according the Samba ml.

Posted on samba at samba.org for review.  Reviewed by 
Thomas Bork (comments integrated into the reg_db.c patch
coming up next).





Modified:
   branches/SAMBA_3_0/source/include/rpc_reg.h
   branches/SAMBA_3_0/source/rpc_parse/parse_reg.c
   trunk/source/include/rpc_reg.h
   trunk/source/rpc_parse/parse_reg.c


Changeset:
Modified: branches/SAMBA_3_0/source/include/rpc_reg.h
===================================================================
--- branches/SAMBA_3_0/source/include/rpc_reg.h	2005-09-01 13:51:46 UTC (rev 9892)
+++ branches/SAMBA_3_0/source/include/rpc_reg.h	2005-09-01 13:57:10 UTC (rev 9893)
@@ -217,14 +217,17 @@
 	POLICY_HND handle;
 	UNISTR4 name;
 	UNISTR4 key_class;
-	uint32 reserved;
+	uint32 options;
 	uint32 access;
+	
+	/* FIXME!  collapse all this into one structure */
 	uint32 *sec_info;
 	uint32 ptr2;
 	BUFHDR hdr_sec;
 	uint32 ptr3;
 	SEC_DESC_BUF *data;
-	uint32 unknown_2; /* 0x0000 0000 */
+
+	uint32 *disposition; 
 } REG_Q_CREATE_KEY_EX;
 
 typedef struct {

Modified: branches/SAMBA_3_0/source/rpc_parse/parse_reg.c
===================================================================
--- branches/SAMBA_3_0/source/rpc_parse/parse_reg.c	2005-09-01 13:51:46 UTC (rev 9892)
+++ branches/SAMBA_3_0/source/rpc_parse/parse_reg.c	2005-09-01 13:57:10 UTC (rev 9893)
@@ -227,7 +227,7 @@
 	q_c->ptr2 = 1;
 	init_buf_hdr(&q_c->hdr_sec, sec_buf->len, sec_buf->len);
 	q_c->ptr3 = 1;
-	q_c->unknown_2 = 0x00000000;
+	q_c->disposition = TALLOC_P( get_talloc_ctx(), uint32 );
 }
 
 /*******************************************************************
@@ -259,7 +259,7 @@
 	if(!prs_align(ps))
 		return False;
 
-	if(!prs_uint32("reserved", ps, depth, &q_u->reserved))
+	if(!prs_uint32("options", ps, depth, &q_u->options))
 		return False;
 	if(!prs_uint32("access", ps, depth, &q_u->access))
 		return False;
@@ -267,16 +267,15 @@
 	if(!prs_pointer("sec_info", ps, depth, (void**)&q_u->sec_info, sizeof(uint32), (PRS_POINTER_CAST)prs_uint32))
 		return False;
 
-	if(!prs_uint32("ptr2", ps, depth, &q_u->ptr2))
-		return False;
-	if(!reg_io_hdrbuf_sec(q_u->ptr2, &q_u->ptr3, &q_u->hdr_sec, q_u->data,
-	                      ps, depth))
-		return False;
+	if ( q_u->sec_info ) {
+		if(!prs_uint32("ptr2", ps, depth, &q_u->ptr2))
+			return False;
+		if(!reg_io_hdrbuf_sec(q_u->ptr2, &q_u->ptr3, &q_u->hdr_sec, q_u->data, ps, depth))
+			return False;
+	}
 
-#if 0
-	if(!prs_uint32("unknown_2", ps, depth, &q_u->unknown_2))
+	if(!prs_pointer("disposition", ps, depth, (void**)&q_u->disposition, sizeof(uint32), (PRS_POINTER_CAST)prs_uint32))
 		return False;
-#endif
 
 	return True;
 }

Modified: trunk/source/include/rpc_reg.h
===================================================================
--- trunk/source/include/rpc_reg.h	2005-09-01 13:51:46 UTC (rev 9892)
+++ trunk/source/include/rpc_reg.h	2005-09-01 13:57:10 UTC (rev 9893)
@@ -227,14 +227,17 @@
 	POLICY_HND handle;
 	UNISTR4 name;
 	UNISTR4 key_class;
-	uint32 reserved;
+	uint32 options;
 	uint32 access;
+	
+	/* FIXME!  collapse all this into one structure */
 	uint32 *sec_info;
 	uint32 ptr2;
 	BUFHDR hdr_sec;
 	uint32 ptr3;
 	SEC_DESC_BUF *data;
-	uint32 unknown_2; /* 0x0000 0000 */
+
+	uint32 *disposition; 
 } REG_Q_CREATE_KEY_EX;
 
 typedef struct {

Modified: trunk/source/rpc_parse/parse_reg.c
===================================================================
--- trunk/source/rpc_parse/parse_reg.c	2005-09-01 13:51:46 UTC (rev 9892)
+++ trunk/source/rpc_parse/parse_reg.c	2005-09-01 13:57:10 UTC (rev 9893)
@@ -227,7 +227,7 @@
 	q_c->ptr2 = 1;
 	init_buf_hdr(&q_c->hdr_sec, sec_buf->len, sec_buf->len);
 	q_c->ptr3 = 1;
-	q_c->unknown_2 = 0x00000000;
+	q_c->disposition = TALLOC_P( get_talloc_ctx(), uint32 );
 }
 
 /*******************************************************************
@@ -259,7 +259,7 @@
 	if(!prs_align(ps))
 		return False;
 
-	if(!prs_uint32("reserved", ps, depth, &q_u->reserved))
+	if(!prs_uint32("options", ps, depth, &q_u->options))
 		return False;
 	if(!prs_uint32("access", ps, depth, &q_u->access))
 		return False;
@@ -267,16 +267,15 @@
 	if(!prs_pointer("sec_info", ps, depth, (void**)&q_u->sec_info, sizeof(uint32), (PRS_POINTER_CAST)prs_uint32))
 		return False;
 
-	if(!prs_uint32("ptr2", ps, depth, &q_u->ptr2))
-		return False;
-	if(!reg_io_hdrbuf_sec(q_u->ptr2, &q_u->ptr3, &q_u->hdr_sec, q_u->data,
-	                      ps, depth))
-		return False;
+	if ( q_u->sec_info ) {
+		if(!prs_uint32("ptr2", ps, depth, &q_u->ptr2))
+			return False;
+		if(!reg_io_hdrbuf_sec(q_u->ptr2, &q_u->ptr3, &q_u->hdr_sec, q_u->data, ps, depth))
+			return False;
+	}
 
-#if 0
-	if(!prs_uint32("unknown_2", ps, depth, &q_u->unknown_2))
+	if(!prs_pointer("disposition", ps, depth, (void**)&q_u->disposition, sizeof(uint32), (PRS_POINTER_CAST)prs_uint32))
 		return False;
-#endif
 
 	return True;
 }



More information about the samba-cvs mailing list