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