summaryrefslogtreecommitdiff
path: root/source3/rpc_parse
diff options
context:
space:
mode:
authorGerald Carter <jerry@samba.org>2005-09-01 13:57:10 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 11:03:26 -0500
commitbe36d74ec2bbceb4bae848917ec90e8133a905c8 (patch)
tree1a40d72dc6682711d304ed62b73483ec886363b4 /source3/rpc_parse
parent76a85f222f52bb794f4ce4be2a067042056b36e4 (diff)
downloadsamba-be36d74ec2bbceb4bae848917ec90e8133a905c8.tar.gz
samba-be36d74ec2bbceb4bae848917ec90e8133a905c8.tar.bz2
samba-be36d74ec2bbceb4bae848917ec90e8133a905c8.zip
r9893: 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@samba.org for review. Reviewed by Thomas Bork (comments integrated into the reg_db.c patch coming up next). (This used to be commit ee54d1abf929e1b5ad2c202469d1c1c744cc30d9)
Diffstat (limited to 'source3/rpc_parse')
-rw-r--r--source3/rpc_parse/parse_reg.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/source3/rpc_parse/parse_reg.c b/source3/rpc_parse/parse_reg.c
index 3d586b3779..332f38ab26 100644
--- a/source3/rpc_parse/parse_reg.c
+++ b/source3/rpc_parse/parse_reg.c
@@ -227,7 +227,7 @@ void init_reg_q_create_key_ex(REG_Q_CREATE_KEY_EX *q_c, POLICY_HND *hnd,
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 @@ BOOL reg_io_q_create_key_ex(const char *desc, REG_Q_CREATE_KEY_EX *q_u,
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 @@ BOOL reg_io_q_create_key_ex(const char *desc, REG_Q_CREATE_KEY_EX *q_u,
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;
}