mirror of
https://github.com/samba-team/samba.git
synced 2024-12-24 21:34:56 +03:00
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 commit is contained in:
parent
cfe5a7e5f8
commit
ee54d1abf9
@ -217,14 +217,17 @@ typedef struct {
|
||||
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 {
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user