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/include/client.h | 2 ++ source3/include/ntdomain.h | 1 + source3/include/proto.h | 15 ++++++++++++--- source3/include/rpc_lsa.h | 28 ++++++++++++++++++++++++---- source3/include/rpc_samr.h | 28 ++++++++++++++++++++++++---- 5 files changed, 63 insertions(+), 11 deletions(-) (limited to 'source3/include') diff --git a/source3/include/client.h b/source3/include/client.h index 53674fe80a..a393ee25a8 100644 --- a/source3/include/client.h +++ b/source3/include/client.h @@ -126,6 +126,8 @@ struct cli_state { fstring mach_acct; /* MYNAME$. */ fstring srv_name_slash; /* \\remote server. */ fstring clnt_name_slash; /* \\local client. */ + uint16 max_xmit_frag; + uint16 max_recv_frag; }; #endif /* _CLIENT_H */ diff --git a/source3/include/ntdomain.h b/source3/include/ntdomain.h index c2a4170595..e540bd2ffc 100644 --- a/source3/include/ntdomain.h +++ b/source3/include/ntdomain.h @@ -61,6 +61,7 @@ typedef struct pipes_struct uint16 vuid; BOOL open; /* open connection */ uint16 device_state; + uint16 priority; fstring name; fstring pipe_srv_name; diff --git a/source3/include/proto.h b/source3/include/proto.h index 5e47faf5ef..411f923ba8 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -1339,12 +1339,18 @@ void make_lsa_trans_name(LSA_TRANS_NAME *trn, uint32 sid_name_use, char *name, u void make_lsa_sec_qos(LSA_SEC_QOS *qos, uint16 imp_lev, uint8 ctxt, uint8 eff, uint32 unknown); void make_lsa_obj_attr(LSA_OBJ_ATTR *attr, uint32 attributes, LSA_SEC_QOS *qos); -void make_q_open_pol(LSA_Q_OPEN_POL *r_q, char *server_name, +void make_q_open_pol(LSA_Q_OPEN_POL *r_q, uint16 system_name, uint32 attributes, uint32 desired_access, LSA_SEC_QOS *qos); void lsa_io_q_open_pol(char *desc, LSA_Q_OPEN_POL *r_q, prs_struct *ps, int depth); void lsa_io_r_open_pol(char *desc, LSA_R_OPEN_POL *r_p, prs_struct *ps, int depth); +void make_q_open_pol2(LSA_Q_OPEN_POL2 *r_q, char *server_name, + uint32 attributes, + uint32 desired_access, + LSA_SEC_QOS *qos); +void lsa_io_q_open_pol2(char *desc, LSA_Q_OPEN_POL2 *r_q, prs_struct *ps, int depth); +void lsa_io_r_open_pol2(char *desc, LSA_R_OPEN_POL2 *r_p, prs_struct *ps, int depth); void make_q_query(LSA_Q_QUERY_INFO *q_q, POLICY_HND *hnd, uint16 info_class); void lsa_io_q_query(char *desc, LSA_Q_QUERY_INFO *q_q, prs_struct *ps, int depth); void lsa_io_q_enum_trust_dom(char *desc, LSA_Q_ENUM_TRUST_DOM *q_e, prs_struct *ps, int depth); @@ -1710,6 +1716,9 @@ void make_samr_q_connect(SAMR_Q_CONNECT *q_u, char *srv_name, uint32 unknown_0); void samr_io_q_connect(char *desc, SAMR_Q_CONNECT *q_u, prs_struct *ps, int depth); void samr_io_r_connect(char *desc, SAMR_R_CONNECT *r_u, prs_struct *ps, int depth); +void make_samr_q_connect_anon(SAMR_Q_CONNECT_ANON *q_u); +void samr_io_q_connect_anon(char *desc, SAMR_Q_CONNECT_ANON *q_u, prs_struct *ps, int depth); +void samr_io_r_connect_anon(char *desc, SAMR_R_CONNECT_ANON *r_u, prs_struct *ps, int depth); void make_samr_q_open_alias(SAMR_Q_OPEN_ALIAS *q_u, uint32 unknown_0, uint32 rid); void samr_io_q_open_alias(char *desc, SAMR_Q_OPEN_ALIAS *q_u, prs_struct *ps, int depth); @@ -1723,8 +1732,7 @@ void make_samr_q_unknown_13(SAMR_Q_UNKNOWN_13 *q_c, POLICY_HND *hnd, uint16 unk_1, uint16 unk_2); void make_samr_q_unknown_38(SAMR_Q_UNKNOWN_38 *q_u, char *srv_name); void samr_io_q_unknown_38(char *desc, SAMR_Q_UNKNOWN_38 *q_u, prs_struct *ps, int depth); -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); void samr_io_r_unknown_38(char *desc, SAMR_R_UNKNOWN_38 *r_u, prs_struct *ps, int depth); void make_enc_passwd(SAMR_ENC_PASSWD *pwd, char pass[512]); void samr_io_enc_passwd(char *desc, SAMR_ENC_PASSWD *pwd, prs_struct *ps, int depth); @@ -1860,6 +1868,7 @@ pipes_struct *open_rpc_pipe_p(char *pipe_name, connection_struct *conn, uint16 vuid); int write_pipe(pipes_struct *p, char *data, int n); int read_pipe(pipes_struct *p, char *data, uint32 pos, int n); +BOOL wait_rpc_pipe_hnd_state(pipes_struct *p, uint16 priority); BOOL set_rpc_pipe_hnd_state(pipes_struct *p, uint16 device_state); BOOL close_rpc_pipe_hnd(pipes_struct *p, connection_struct *conn); pipes_struct *get_rpc_pipe_p(char *buf, int where); diff --git a/source3/include/rpc_lsa.h b/source3/include/rpc_lsa.h index fe4d018dbb..44758936ae 100644 --- a/source3/include/rpc_lsa.h +++ b/source3/include/rpc_lsa.h @@ -39,7 +39,8 @@ enum SID_NAME_USE #define LSA_ENUMTRUSTDOM 0x0d #define LSA_LOOKUPNAMES 0x0e #define LSA_LOOKUPSIDS 0x0f -#define LSA_OPENPOLICY 0x2c +#define LSA_OPENPOLICY 0x06 +#define LSA_OPENPOLICY2 0x2c #define LSA_OPENSECRET 0x1C /* XXXX these are here to get a compile! */ @@ -89,9 +90,9 @@ typedef struct obj_attr_info /* LSA_Q_OPEN_POL - LSA Query Open Policy */ typedef struct lsa_q_open_pol_info { - uint32 ptr; /* undocumented buffer pointer */ - UNISTR2 uni_server_name; /* server name, starting with two '\'s */ - LSA_OBJ_ATTR attr ; /* object attributes */ + uint32 ptr; /* undocumented buffer pointer */ + uint16 system_name; /* 0x5c - system name */ + LSA_OBJ_ATTR attr ; /* object attributes */ uint32 des_access; /* desired access attributes */ @@ -105,6 +106,25 @@ typedef struct lsa_r_open_pol_info } LSA_R_OPEN_POL; +/* LSA_Q_OPEN_POL2 - LSA Query Open Policy */ +typedef struct lsa_q_open_pol2_info +{ + uint32 ptr; /* undocumented buffer pointer */ + UNISTR2 uni_server_name; /* server name, starting with two '\'s */ + LSA_OBJ_ATTR attr ; /* object attributes */ + + uint32 des_access; /* desired access attributes */ + +} LSA_Q_OPEN_POL2; + +/* LSA_R_OPEN_POL2 - response to LSA Open Policy */ +typedef struct lsa_r_open_pol2_info +{ + POLICY_HND pol; /* policy handle */ + uint32 status; /* return code */ + +} LSA_R_OPEN_POL2; + /* LSA_Q_QUERY_INFO - LSA query info policy */ typedef struct lsa_query_info { diff --git a/source3/include/rpc_samr.h b/source3/include/rpc_samr.h index f27dc66381..baae9a3bd9 100644 --- a/source3/include/rpc_samr.h +++ b/source3/include/rpc_samr.h @@ -94,6 +94,7 @@ SamrTestPrivateFunctionsUser #define SAMR_CHGPASSWD_USER 0x37 #define SAMR_UNKNOWN_38 0x38 #define SAMR_CONNECT 0x39 +#define SAMR_CONNECT_ANON 0x00 #define SAMR_OPEN_ALIAS 0x1b #define SAMR_QUERY_ALIASINFO 0x1c #define SAMR_ENUM_DOM_USERS 0x0d @@ -934,12 +935,30 @@ typedef struct q_samr_open_alias_info /* SAMR_R_OPEN_ALIAS - probably an open */ typedef struct r_samr_open_alias_info { - POLICY_HND pol; /* policy handle */ + POLICY_HND pol; /* policy handle */ uint32 status; /* return status */ } SAMR_R_OPEN_ALIAS; +/* SAMR_Q_CONNECT_ANON - probably an open */ +typedef struct q_samr_connect_anon_info +{ + uint32 ptr; /* ptr? */ + uint16 unknown_0; /* 0x005c */ + uint16 unknown_1; /* 0x0001 */ + uint32 unknown_2; /* 0x0000 0020 */ + +} SAMR_Q_CONNECT_ANON; + +/* SAMR_R_CONNECT_ANON - probably an open */ +typedef struct r_samr_connect_anon_info +{ + POLICY_HND connect_pol; /* policy handle */ + uint32 status; /* return status */ + +} SAMR_R_CONNECT_ANON; + /* SAMR_Q_CONNECT - probably an open */ typedef struct q_samr_connect_info { @@ -971,9 +990,10 @@ typedef struct q_samr_unknown_38 /* SAMR_R_UNKNOWN_38 */ typedef struct r_samr_unknown_38 { - LOOKUP_LEVEL level; /* 0x0006 */ - uint32 ptr_0; /* 0x0000 0000 */ - uint32 status; + uint16 unk_0; + uint16 unk_1; + uint16 unk_2; + uint16 unk_3; } SAMR_R_UNKNOWN_38; -- cgit