From a42afcdcc7ab9aa9ed193ae36d3dbb10843447f0 Mon Sep 17 00:00:00 2001 From: Luke Leighton Date: Thu, 15 Oct 1998 05:47:29 +0000 Subject: bug-fixing against: AS/U: it returns dce/rpc "first" and "last" bits _clear_ in a bind/ack response, when they should be set in a (small) packet. they also, in the bind/ack do not set a secondary address string at all, so we can't check against that... Win95: client-side dce/rpc code is a bit odd. it does a "WaitNamedPipeState" and has slightly different pipe-naming (\PIPE\LANMAN is joined by \PIPE\SRVSVC, \PIPE\WINREG etc whereas nt just has \PIPE\LANMAN and \PIPE\). Win95-USRMGR.EXE: added LsaOpenPolicy (renamed existing to LsaOpenPolicy2). added SamrConnect (renamed existing to SamrConnect2). (This used to be commit a7fccd807b938cbb51002ebae8c7a48b40dbb655) --- source3/rpc_parse/parse_samr.c | 73 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 65 insertions(+), 8 deletions(-) (limited to 'source3/rpc_parse/parse_samr.c') diff --git a/source3/rpc_parse/parse_samr.c b/source3/rpc_parse/parse_samr.c index b71c209845..eb882a7564 100644 --- a/source3/rpc_parse/parse_samr.c +++ b/source3/rpc_parse/parse_samr.c @@ -2402,6 +2402,58 @@ void samr_io_r_connect(char *desc, SAMR_R_CONNECT *r_u, prs_struct *ps, int dep prs_uint32("status", ps, depth, &(r_u->status)); } +/******************************************************************* +makes a SAMR_Q_CONNECT_ANON structure. +********************************************************************/ +void make_samr_q_connect_anon(SAMR_Q_CONNECT_ANON *q_u) +{ + if (q_u == NULL) return; + + DEBUG(5,("make_q_connect_anon\n")); + + q_u->ptr = 1; + q_u->unknown_0 = 0x5c; + q_u->unknown_1 = 0x01; + q_u->unknown_2 = 0x20; +} + + +/******************************************************************* +reads or writes a structure. +********************************************************************/ +void samr_io_q_connect_anon(char *desc, SAMR_Q_CONNECT_ANON *q_u, prs_struct *ps, int depth) +{ + if (q_u == NULL) return; + + prs_debug(ps, depth, desc, "samr_io_q_connect_anon"); + depth++; + + prs_align(ps); + + prs_uint32("ptr ", ps, depth, &(q_u->ptr )); + prs_uint16("unknown_0", ps, depth, &(q_u->unknown_0)); + prs_uint16("unknown_1", ps, depth, &(q_u->unknown_1)); + prs_uint32("unknown_2", ps, depth, &(q_u->unknown_2)); +} + +/******************************************************************* +reads or writes a structure. +********************************************************************/ +void samr_io_r_connect_anon(char *desc, SAMR_R_CONNECT_ANON *r_u, prs_struct *ps, int depth) +{ + if (r_u == NULL) return; + + prs_debug(ps, depth, desc, "samr_io_r_connect_anon"); + depth++; + + prs_align(ps); + + smb_io_pol_hnd("connect_pol", &(r_u->connect_pol), ps, depth); + prs_align(ps); + + prs_uint32("status", ps, depth, &(r_u->status)); +} + /******************************************************************* makes a SAMR_Q_OPEN_ALIAS structure. ********************************************************************/ @@ -2552,16 +2604,16 @@ void samr_io_q_unknown_38(char *desc, SAMR_Q_UNKNOWN_38 *q_u, prs_struct *ps, i /******************************************************************* makes a SAMR_R_UNKNOWN_38 structure. ********************************************************************/ -void make_samr_r_unknown_38(SAMR_R_UNKNOWN_38 *r_u, - uint16 level, uint32 status) +void make_samr_r_unknown_38(SAMR_R_UNKNOWN_38 *r_u) { if (r_u == NULL) return; DEBUG(5,("make_r_unknown_38\n")); - r_u->level.value = level; - r_u->ptr_0 = 0; - r_u->status = status; + r_u->unk_0 = 0; + r_u->unk_1 = 0; + r_u->unk_2 = 0; + r_u->unk_3 = 0; } /******************************************************************* @@ -2576,9 +2628,14 @@ void samr_io_r_unknown_38(char *desc, SAMR_R_UNKNOWN_38 *r_u, prs_struct *ps, i prs_align(ps); - smb_io_lookup_level("level ", &(r_u->level), ps, depth); - prs_uint32("ptr_0 ", ps, depth, &(r_u->ptr_0 )); - prs_uint32("status", ps, depth, &(r_u->status)); + prs_uint16("unk_0", ps, depth, &(r_u->unk_0)); + prs_align(ps); + prs_uint16("unk_1", ps, depth, &(r_u->unk_1)); + prs_align(ps); + prs_uint16("unk_2", ps, depth, &(r_u->unk_2)); + prs_align(ps); + prs_uint16("unk_3", ps, depth, &(r_u->unk_3)); + prs_align(ps); } /******************************************************************* -- cgit