summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--source/Makefile.in2
-rw-r--r--source/include/proto.h963
-rw-r--r--source/include/rpc_client_proto.h3
-rw-r--r--source/include/rpc_parse_proto.h8
-rw-r--r--source/include/rpc_samr.h60
-rw-r--r--source/rpc_client/cli_samr.c59
-rw-r--r--source/rpc_parse/parse_prs.c4
-rw-r--r--source/rpc_parse/parse_samr.c168
-rw-r--r--source/rpc_parse/parse_sec.c3
-rw-r--r--source/rpc_server/srv_samr.c10
-rw-r--r--source/rpcclient/cmd_samr.c112
-rw-r--r--source/rpcclient/display_sec.c4
-rw-r--r--source/rpcclient/rpcclient.c6
-rw-r--r--source/samrd/srv_samr_passdb.c11
-rw-r--r--source/samrd/srv_samr_usr_tdb.c30
15 files changed, 242 insertions, 1201 deletions
diff --git a/source/Makefile.in b/source/Makefile.in
index 8165000d1b8..96fc2d7ba7a 100644
--- a/source/Makefile.in
+++ b/source/Makefile.in
@@ -509,7 +509,7 @@ PROTO_OBJ = $(LIB_OBJ) $(LIBNMB_OBJ) $(PARAM_OBJ) \
$(GROUPDB_OBJ) $(PASSDB_OBJ) $(SAMPASSDB_OBJ) \
$(SMBPASSWD_OBJ) $(SIDDB_OBJ) \
$(RPC_SRVUTIL_OBJ) \
- $(RPC_CLIENT_OBJ) $(RPC_PARSE_OBJ) \
+ $(RPC_CLIENT_OBJ) $(RPC_PARSE_OBJ2) \
$(PASSDB_OBJ) $(SAMPASSDB_OBJ) $(GROUPDB_OBJ)
SMBWRAPPERPICOBJS = $(SMBWRAPPER_OBJ:.o=.po)
diff --git a/source/include/proto.h b/source/include/proto.h
index 5b9b6a44153..c8d5c7e89fd 100644
--- a/source/include/proto.h
+++ b/source/include/proto.h
@@ -2214,6 +2214,9 @@ uint32 samr_enum_dom_users( POLICY_HND *pol, uint32 *start_idx,
uint32 *num_sam_users);
BOOL samr_connect( const char *srv_name, uint32 access_mask,
POLICY_HND *connect_pol);
+BOOL samr_query_sec_obj( const POLICY_HND *pol,
+ uint32 type,
+ SEC_DESC_BUF *buf);
BOOL samr_open_user( const POLICY_HND *pol,
uint32 unk_0, uint32 rid,
POLICY_HND *user_pol);
@@ -2577,24 +2580,6 @@ BOOL msrpc_sam_ntpasswd_set(const char* srv_name, const char *user,
const uchar nt_newpass[516],
const uchar nt_hshhash[16]);
-/*The following definitions come from rpc_parse/parse_at.c */
-
-BOOL make_at_q_add_job(AT_Q_ADD_JOB *q_a, char *server,
- AT_JOB_INFO *info, char *command);
-BOOL at_io_job_info(char *desc, AT_JOB_INFO *info, prs_struct *ps, int depth);
-BOOL at_io_q_add_job(char *desc, AT_Q_ADD_JOB *q_a, prs_struct *ps, int depth);
-BOOL at_io_r_add_job(char *desc, AT_R_ADD_JOB *r_a, prs_struct *ps, int depth);
-BOOL make_at_q_del_job(AT_Q_DEL_JOB *q_a, char *server, uint32 min_jobid,
- uint32 max_jobid);
-BOOL at_io_q_del_job(char *desc, AT_Q_DEL_JOB *q_d, prs_struct *ps, int depth);
-BOOL at_io_r_del_job(char *desc, AT_R_DEL_JOB *r_d, prs_struct *ps, int depth);
-BOOL make_at_q_enum_jobs(AT_Q_ENUM_JOBS *q_e, char *server);
-BOOL at_io_q_enum_jobs(char *desc, AT_Q_ENUM_JOBS *q_e, prs_struct *ps, int depth);
-BOOL at_io_r_enum_jobs(char *desc, AT_R_ENUM_JOBS *r_e, prs_struct *ps, int depth);
-BOOL make_at_q_query_job(AT_Q_QUERY_JOB *q_q, char *server, uint32 jobid);
-BOOL at_io_q_query_job(char *desc, AT_Q_QUERY_JOB *q_q, prs_struct *ps, int depth);
-BOOL at_io_r_query_job(char *desc, AT_R_QUERY_JOB *r_q, prs_struct *ps, int depth);
-
/*The following definitions come from rpc_parse/parse_creds.c */
BOOL make_creds_unix(CREDS_UNIX *r_u, const char* user_name,
@@ -2636,77 +2621,6 @@ BOOL create_user_creds( prs_struct *ps,
uint32 pid,
const struct user_creds *usr);
-/*The following definitions come from rpc_parse/parse_eventlog.c */
-
-BOOL make_eventlog_q_open(EVENTLOG_Q_OPEN *q_u, const char *journal, char *unk);
-BOOL eventlog_io_q_open(char *desc, EVENTLOG_Q_OPEN *q_u, prs_struct *ps, int depth);
-BOOL eventlog_io_r_open(char *desc, EVENTLOG_R_OPEN *r_u, prs_struct *ps, int depth);
-BOOL make_eventlog_q_close(EVENTLOG_Q_CLOSE *q_u, POLICY_HND *pol);
-BOOL eventlog_io_q_close(char *desc, EVENTLOG_Q_CLOSE *q_u, prs_struct *ps, int depth);
-BOOL eventlog_io_r_close(char *desc, EVENTLOG_R_CLOSE *r_u, prs_struct *ps, int depth);
-BOOL make_eventlog_q_numofeventlogrec(EVENTLOG_Q_NUMOFEVENTLOGREC *q_u, POLICY_HND *pol);
-BOOL eventlog_io_q_numofeventlogrec(char *desc,EVENTLOG_Q_NUMOFEVENTLOGREC *q_u, prs_struct *ps, int depth);
-BOOL eventlog_io_r_numofeventlogrec(char *desc, EVENTLOG_R_NUMOFEVENTLOGREC *r_u, prs_struct *ps, int depth);
-BOOL make_eventlog_q_readeventlog(EVENTLOG_Q_READEVENTLOG *q_u, POLICY_HND *pol,
- uint32 flags, uint32 offset, uint32 number_of_bytes);
-BOOL eventlog_io_q_readeventlog(char *desc, EVENTLOG_Q_READEVENTLOG *q_u, prs_struct *ps, int depth);
-BOOL eventlog_io_r_readeventlog(char *desc, EVENTLOG_R_READEVENTLOG *r_u, prs_struct *ps, int depth);
-
-/*The following definitions come from rpc_parse/parse_lsa.c */
-
-BOOL make_lsa_trans_name(LSA_TRANS_NAME *trn, UNISTR2 *uni_name,
- uint32 sid_name_use, char *name, uint32 idx);
-BOOL make_lsa_sec_qos(LSA_SEC_QOS *qos, uint16 imp_lev, uint8 ctxt, uint8 eff,
- uint32 unknown);
-BOOL make_lsa_obj_attr(LSA_OBJ_ATTR *attr, uint32 attributes, LSA_SEC_QOS *qos);
-BOOL make_q_open_pol(LSA_Q_OPEN_POL *r_q, uint16 system_name,
- uint32 attributes,
- uint32 desired_access,
- LSA_SEC_QOS *qos);
-BOOL lsa_io_q_open_pol(char *desc, LSA_Q_OPEN_POL *r_q, prs_struct *ps, int depth);
-BOOL lsa_io_r_open_pol(char *desc, LSA_R_OPEN_POL *r_p, prs_struct *ps, int depth);
-BOOL make_q_open_pol2(LSA_Q_OPEN_POL2 *r_q, const char *server_name,
- uint32 attributes,
- uint32 desired_access,
- LSA_SEC_QOS *qos);
-BOOL lsa_io_q_open_pol2(char *desc, LSA_Q_OPEN_POL2 *r_q, prs_struct *ps, int depth);
-BOOL lsa_io_r_open_pol2(char *desc, LSA_R_OPEN_POL2 *r_p, prs_struct *ps, int depth);
-BOOL make_q_query(LSA_Q_QUERY_INFO *q_q, POLICY_HND *hnd, uint16 info_class);
-BOOL lsa_io_q_query(char *desc, LSA_Q_QUERY_INFO *q_q, prs_struct *ps, int depth);
-BOOL make_q_open_secret(LSA_Q_OPEN_SECRET *q_o, const POLICY_HND *pol_hnd,
- const char *secret_name, uint32 desired_access);
-BOOL lsa_io_q_open_secret(char *desc, LSA_Q_OPEN_SECRET *q_o, prs_struct *ps, int depth);
-BOOL lsa_io_r_open_secret(char *desc, LSA_R_OPEN_SECRET *r_o, prs_struct *ps, int depth);
-BOOL lsa_io_secret_value(char *desc, LSA_SECRET_VALUE *value, prs_struct *ps, int depth);
-BOOL lsa_io_secret_info(char *desc, LSA_SECRET_INFO *info, prs_struct *ps, int depth);
-BOOL make_q_query_secret(LSA_Q_QUERY_SECRET *q_q, POLICY_HND *pol);
-BOOL lsa_io_q_query_secret(char *desc, LSA_Q_QUERY_SECRET *q_q, prs_struct *ps, int depth);
-BOOL lsa_io_r_query_secret(char *desc, LSA_R_QUERY_SECRET *r_q, prs_struct *ps, int depth);
-BOOL make_q_enum_trust_dom(LSA_Q_ENUM_TRUST_DOM *q_e,
- POLICY_HND *pol,
- uint32 enum_context, uint32 preferred_len);
-BOOL lsa_io_q_enum_trust_dom(char *desc, LSA_Q_ENUM_TRUST_DOM *q_e, prs_struct *ps, int depth);
-BOOL make_r_enum_trust_dom(LSA_R_ENUM_TRUST_DOM *r_e, int32 enum_context,
- uint32 num_domains,
- UNISTR2 *domain_names, DOM_SID **domain_sids,
- uint32 status);
-BOOL lsa_io_r_enum_trust_dom(char *desc, LSA_R_ENUM_TRUST_DOM *r_e, prs_struct *ps, int depth);
-void lsa_free_r_enum_trust_dom(LSA_R_ENUM_TRUST_DOM *r_e);
-BOOL lsa_io_r_query(char *desc, LSA_R_QUERY_INFO *r_q, prs_struct *ps, int depth);
-BOOL make_lsa_sid_enum(LSA_SID_ENUM *sen, uint32 num_entries, DOM_SID **sids);
-BOOL make_q_lookup_sids(LSA_Q_LOOKUP_SIDS *q_l, POLICY_HND *hnd,
- int num_sids, DOM_SID **sids,
- uint16 level);
-BOOL lsa_io_q_lookup_sids(char *desc, LSA_Q_LOOKUP_SIDS *q_s, prs_struct *ps, int depth);
-BOOL lsa_io_r_lookup_sids(char *desc, LSA_R_LOOKUP_SIDS *r_s, prs_struct *ps, int depth);
-BOOL make_q_lookup_names(LSA_Q_LOOKUP_NAMES *q_l, POLICY_HND *hnd,
- uint32 num_names, char **names);
-BOOL lsa_io_q_lookup_names(char *desc, LSA_Q_LOOKUP_NAMES *q_r, prs_struct *ps, int depth);
-BOOL lsa_io_r_lookup_names(char *desc, LSA_R_LOOKUP_NAMES *r_r, prs_struct *ps, int depth);
-BOOL make_lsa_q_close(LSA_Q_CLOSE *q_c, POLICY_HND *hnd);
-BOOL lsa_io_q_close(char *desc, LSA_Q_CLOSE *q_c, prs_struct *ps, int depth);
-BOOL lsa_io_r_close(char *desc, LSA_R_CLOSE *r_c, prs_struct *ps, int depth);
-
/*The following definitions come from rpc_parse/parse_misc.c */
BOOL smb_io_bigint(char *desc, BIGINT *bigint, prs_struct *ps, int depth);
@@ -2784,120 +2698,6 @@ BOOL smb_io_dom_query_3(char *desc, DOM_QUERY_3 *d_q, prs_struct *ps, int depth
BOOL smb_io_dom_query_5(char *desc, DOM_QUERY_3 *d_q, prs_struct *ps, int depth);
BOOL smb_io_unistr3(char *desc, UNISTR3 *name, prs_struct *ps, int depth);
-/*The following definitions come from rpc_parse/parse_net.c */
-
-BOOL make_q_logon_ctrl2(NET_Q_LOGON_CTRL2 *q_l,
- const char* srv_name,
- uint32 function_code,
- uint32 query_level,
- uint32 switch_value);
-BOOL net_io_q_logon_ctrl2(char *desc, NET_Q_LOGON_CTRL2 *q_l, prs_struct *ps, int depth);
-BOOL make_r_logon_ctrl2(NET_R_LOGON_CTRL2 *r_l, uint32 query_level,
- uint32 flags, uint32 pdc_status, uint32 logon_attempts,
- uint32 tc_status, char *trusted_domain_name);
-BOOL net_io_r_logon_ctrl2(char *desc, NET_R_LOGON_CTRL2 *r_l, prs_struct *ps, int depth);
-BOOL make_r_trust_dom(NET_R_TRUST_DOM_LIST *r_t,
- uint32 num_doms, char **dom_name);
-BOOL net_io_r_trust_dom(char *desc, NET_R_TRUST_DOM_LIST *r_t, prs_struct *ps, int depth);
-BOOL net_io_q_trust_dom(char *desc, NET_Q_TRUST_DOM_LIST *q_l, prs_struct *ps, int depth);
-BOOL make_q_req_chal(NET_Q_REQ_CHAL *q_c,
- const char *logon_srv, const char *logon_clnt,
- DOM_CHAL *clnt_chal);
-BOOL net_io_q_req_chal(char *desc, NET_Q_REQ_CHAL *q_c, prs_struct *ps, int depth);
-BOOL net_io_r_req_chal(char *desc, NET_R_REQ_CHAL *r_c, prs_struct *ps, int depth);
-BOOL make_q_auth(NET_Q_AUTH *q_a,
- const char *logon_srv, const char *acct_name,
- uint16 sec_chan, const char *comp_name,
- DOM_CHAL *clnt_chal);
-BOOL net_io_q_auth(char *desc, NET_Q_AUTH *q_a, prs_struct *ps, int depth);
-BOOL net_io_r_auth(char *desc, NET_R_AUTH *r_a, prs_struct *ps, int depth);
-BOOL make_q_auth_2(NET_Q_AUTH_2 *q_a,
- const char *logon_srv, const char *acct_name,
- uint16 sec_chan, const char *comp_name,
- DOM_CHAL *clnt_chal, uint32 clnt_flgs);
-BOOL net_io_q_auth_2(char *desc, NET_Q_AUTH_2 *q_a, prs_struct *ps, int depth);
-BOOL net_io_r_auth_2(char *desc, NET_R_AUTH_2 *r_a, prs_struct *ps, int depth);
-BOOL make_q_srv_pwset(NET_Q_SRV_PWSET *q_s,
- const char *logon_srv, const char *acct_name,
- uint16 sec_chan, const char *comp_name,
- DOM_CRED *cred, char nt_cypher[16]);
-BOOL net_io_q_srv_pwset(char *desc, NET_Q_SRV_PWSET *q_s, prs_struct *ps, int depth);
-BOOL net_io_r_srv_pwset(char *desc, NET_R_SRV_PWSET *r_s, prs_struct *ps, int depth);
-BOOL make_id_info1(NET_ID_INFO_1 *id, const char *domain_name,
- uint32 param_ctrl, uint32 log_id_low, uint32 log_id_high,
- const char *user_name, const char *wksta_name,
- char sess_key[16],
- uchar lm_cypher[16], uchar nt_cypher[16]);
-BOOL make_id_info4(NET_ID_INFO_4 *id, const char *domain_name,
- uint32 param_ctrl,
- uint32 log_id_low, uint32 log_id_high,
- const char *user_name, const char *wksta_name,
- const char *general);
-BOOL make_id_info2(NET_ID_INFO_2 *id, const char *domain_name,
- uint32 param_ctrl,
- uint32 log_id_low, uint32 log_id_high,
- const char *user_name, const char *wksta_name,
- uchar lm_challenge[8],
- uchar *lm_chal_resp,
- int lm_chal_len,
- uchar *nt_chal_resp,
- int nt_chal_len);
-BOOL make_sam_info(DOM_SAM_INFO *sam,
- const char *logon_srv, const char *comp_name,
- DOM_CRED *clnt_cred,
- DOM_CRED *rtn_cred, uint16 logon_level,
- NET_ID_INFO_CTR *ctr);
-BOOL make_net_user_info3(NET_USER_INFO_3 *usr,
-
- NTTIME *logon_time,
- NTTIME *logoff_time,
- NTTIME *kickoff_time,
- NTTIME *pass_last_set_time,
- NTTIME *pass_can_change_time,
- NTTIME *pass_must_change_time,
-
- char *user_name,
- char *full_name,
- char *logon_script,
- char *profile_path,
- char *home_dir,
- char *dir_drive,
-
- uint16 logon_count,
- uint16 bad_pw_count,
-
- uint32 user_id,
- uint32 group_id,
- uint32 num_groups,
- DOM_GID *gids,
- uint32 user_flgs,
-
- char sess_key[16],
-
- char *logon_srv,
- char *logon_dom,
-
- char *padding,
-
- DOM_SID *dom_sid,
- char *other_sids);
-BOOL net_io_q_sam_logon(char *desc, NET_Q_SAM_LOGON *q_l, prs_struct *ps, int depth);
-BOOL net_io_r_sam_logon(char *desc, NET_R_SAM_LOGON *r_l, prs_struct *ps, int depth);
-BOOL net_io_q_sam_logoff(char *desc, NET_Q_SAM_LOGOFF *q_l, prs_struct *ps, int depth);
-BOOL net_io_r_sam_logoff(char *desc, NET_R_SAM_LOGOFF *r_l, prs_struct *ps, int depth);
-BOOL make_q_sam_sync(NET_Q_SAM_SYNC *q_s,
- const char *srv_name,
- const char *cli_name,
- DOM_CRED *cli_creds, uint32 database_id);
-BOOL net_io_q_sam_sync(char *desc, NET_Q_SAM_SYNC *q_s, prs_struct *ps, int depth);
-BOOL make_sam_delta_hdr(SAM_DELTA_HDR *delta, uint16 type, uint32 rid);
-BOOL make_sam_account_info(SAM_ACCOUNT_INFO *info, char *user_name,
- char *full_name, uint32 user_rid, uint32 group_rid,
- char *home_dir, char *dir_drive, char *logon_script,
- char *acct_desc, uint32 acb_info, char *profile);
-BOOL net_io_r_sam_sync(char *desc, uint8 sess_key[16],
- NET_R_SAM_SYNC *r_s, prs_struct *ps, int depth);
-
/*The following definitions come from rpc_parse/parse_netsec.c */
BOOL rpc_hdr_netsec_auth_chk(RPC_HDR_AUTH *rai);
@@ -2986,8 +2786,6 @@ BOOL _prs_uint32_post(char *name, prs_struct *ps, int depth, uint32 *data32,
int prs_tdb_store(TDB_CONTEXT *tdb, int flgs, prs_struct *pk, prs_struct *pd);
void prs_tdb_fetch(TDB_CONTEXT *tdb, prs_struct *pk, prs_struct *pd);
-/*The following definitions come from rpc_parse/parse_reg.c */
-
/*The following definitions come from rpc_parse/parse_rpc.c */
BOOL make_rpc_hdr(RPC_HDR *hdr, enum RPC_PKT_TYPE pkt_type, uint8 flags,
@@ -3025,436 +2823,6 @@ BOOL smb_io_rpc_auth_verifier(char *desc, RPC_AUTH_VERIFIER *rav, prs_struct *ps
BOOL rpc_auth_verifier_chk(RPC_AUTH_VERIFIER *rav,
char *signature, uint32 msg_type);
-/*The following definitions come from rpc_parse/parse_samr.c */
-
-BOOL make_samr_q_close_hnd(SAMR_Q_CLOSE_HND *q_c, POLICY_HND *hnd);
-BOOL samr_io_q_close_hnd(char *desc, SAMR_Q_CLOSE_HND *q_u, prs_struct *ps, int depth);
-BOOL samr_io_r_close_hnd(char *desc, SAMR_R_CLOSE_HND *r_u, prs_struct *ps, int depth);
-BOOL make_samr_q_lookup_domain(SAMR_Q_LOOKUP_DOMAIN *q_u,
- POLICY_HND *pol, const char *dom_name);
-BOOL samr_io_q_lookup_domain(char *desc, SAMR_Q_LOOKUP_DOMAIN *q_u, prs_struct *ps, int depth);
-BOOL make_samr_r_lookup_domain(SAMR_R_LOOKUP_DOMAIN *r_u,
- DOM_SID *dom_sid, uint32 status);
-BOOL samr_io_r_lookup_domain(char *desc, SAMR_R_LOOKUP_DOMAIN *r_u, prs_struct *ps, int depth);
-BOOL make_samr_q_open_domain(SAMR_Q_OPEN_DOMAIN *q_u,
- const POLICY_HND *connect_pol, uint32 flags,
- const DOM_SID *sid);
-BOOL samr_io_q_open_domain(char *desc, SAMR_Q_OPEN_DOMAIN *q_u, prs_struct *ps, int depth);
-BOOL samr_io_r_open_domain(char *desc, SAMR_R_OPEN_DOMAIN *r_u, prs_struct *ps, int depth);
-BOOL make_samr_q_get_usrdom_pwinfo(SAMR_Q_GET_USRDOM_PWINFO *q_u, POLICY_HND *user_pol);
-BOOL samr_io_q_get_usrdom_pwinfo(char *desc, SAMR_Q_GET_USRDOM_PWINFO *q_u, prs_struct *ps, int depth);
-BOOL make_samr_r_get_usrdom_pwinfo(SAMR_R_GET_USRDOM_PWINFO *q_u, uint32 status);
-BOOL samr_io_r_get_usrdom_pwinfo(char *desc, SAMR_R_GET_USRDOM_PWINFO *r_u, prs_struct *ps, int depth);
-BOOL make_samr_q_query_sec_obj(SAMR_Q_QUERY_SEC_OBJ *q_u,
- POLICY_HND *user_pol, uint16 switch_value);
-BOOL samr_io_q_query_sec_obj(char *desc, SAMR_Q_QUERY_SEC_OBJ *q_u, prs_struct *ps, int depth);
-BOOL make_samr_q_query_dom_info(SAMR_Q_QUERY_DOMAIN_INFO *q_u,
- POLICY_HND *domain_pol, uint16 switch_value);
-BOOL samr_io_q_query_dom_info(char *desc, SAMR_Q_QUERY_DOMAIN_INFO *q_u, prs_struct *ps, int depth);
-BOOL make_unk_info3(SAM_UNK_INFO_3 *u_3);
-BOOL make_unk_info6(SAM_UNK_INFO_6 *u_6);
-BOOL make_unk_info7(SAM_UNK_INFO_7 *u_7);
-BOOL make_unk_info2(SAM_UNK_INFO_2 *u_2, char *domain, char *server);
-BOOL make_unk_info1(SAM_UNK_INFO_1 *u_1);
-BOOL make_samr_r_query_dom_info(SAMR_R_QUERY_DOMAIN_INFO *r_u,
- uint16 switch_value, SAM_UNK_CTR *ctr,
- uint32 status);
-BOOL samr_io_r_query_dom_info(char *desc, SAMR_R_QUERY_DOMAIN_INFO *r_u, prs_struct *ps, int depth);
-BOOL make_dom_sid3(DOM_SID3 *sid3, uint16 unk_0, uint16 unk_1, DOM_SID *sid);
-BOOL make_sam_sid_stuff(SAM_SID_STUFF *stf,
- uint16 unknown_2, uint16 unknown_3,
- uint32 unknown_4, uint16 unknown_6, uint16 unknown_7,
- int num_sid3s);
-BOOL samr_io_r_query_sec_obj(char *desc, SAMR_R_QUERY_SEC_OBJ *r_u, prs_struct *ps, int depth);
-BOOL make_sam_entry(SAM_ENTRY *sam, uint32 len_sam_name, uint32 rid);
-BOOL make_samr_q_enum_dom_users(SAMR_Q_ENUM_DOM_USERS *q_e, POLICY_HND *pol,
- uint32 start_idx,
- uint16 acb_mask, uint16 unk_1, uint32 size);
-BOOL samr_io_q_enum_dom_users(char *desc, SAMR_Q_ENUM_DOM_USERS *q_e, prs_struct *ps, int depth);
-BOOL make_samr_r_enum_dom_users(SAMR_R_ENUM_DOM_USERS *r_u,
- uint32 next_idx,
- uint32 num_sam_entries);
-BOOL samr_io_r_enum_dom_users(char *desc, SAMR_R_ENUM_DOM_USERS *r_u, prs_struct *ps, int depth);
-BOOL make_samr_q_query_dispinfo(SAMR_Q_QUERY_DISPINFO *q_e, POLICY_HND *pol,
- uint16 switch_level, uint32 start_idx,
- uint32 max_entries);
-BOOL samr_io_q_query_dispinfo(char *desc, SAMR_Q_QUERY_DISPINFO *q_e, prs_struct *ps, int depth);
-BOOL make_sam_dispinfo_1(SAM_DISPINFO_1 *sam, uint32 *num_entries,
- uint32 *data_size, uint32 start_idx,
- SAM_USER_INFO_21 pass[MAX_SAM_ENTRIES]);
-BOOL make_sam_dispinfo_2(SAM_DISPINFO_2 *sam, uint32 *num_entries,
- uint32 *data_size, uint32 start_idx,
- SAM_USER_INFO_21 pass[MAX_SAM_ENTRIES]);
-BOOL make_sam_dispinfo_3(SAM_DISPINFO_3 *sam, uint32 *num_entries,
- uint32 *data_size, uint32 start_idx,
- DOMAIN_GRP *grp);
-BOOL make_sam_dispinfo_4(SAM_DISPINFO_4 *sam, uint32 *num_entries,
- uint32 *data_size, uint32 start_idx,
- SAM_USER_INFO_21 pass[MAX_SAM_ENTRIES]);
-BOOL make_sam_dispinfo_5(SAM_DISPINFO_5 *sam, uint32 *num_entries,
- uint32 *data_size, uint32 start_idx,
- DOMAIN_GRP *grp);
-BOOL make_samr_r_query_dispinfo(SAMR_R_QUERY_DISPINFO *r_u,
- uint32 num_entries, uint32 data_size,
- uint16 switch_level, SAM_DISPINFO_CTR *ctr,
- uint32 status);
-BOOL samr_io_r_query_dispinfo(char *desc, SAMR_R_QUERY_DISPINFO *r_u, prs_struct *ps, int depth);
-BOOL make_samr_q_open_group(SAMR_Q_OPEN_GROUP *q_c,
- const POLICY_HND *hnd,
- uint32 access_mask, uint32 rid);
-BOOL samr_io_q_open_group(char *desc, SAMR_Q_OPEN_GROUP *q_u, prs_struct *ps, int depth);
-BOOL samr_io_r_open_group(char *desc, SAMR_R_OPEN_GROUP *r_u, prs_struct *ps, int depth);
-BOOL make_samr_group_info1(GROUP_INFO1 *gr1,
- char *acct_name, char *acct_desc,
- uint32 num_members);
-BOOL samr_io_group_info1(char *desc, GROUP_INFO1 *gr1, prs_struct *ps, int depth);
-BOOL make_samr_group_info4(GROUP_INFO4 *gr4, const char *acct_desc);
-BOOL samr_io_group_info4(char *desc, GROUP_INFO4 *gr4, prs_struct *ps, int depth);
-BOOL samr_group_info_ctr(char *desc, GROUP_INFO_CTR *ctr, prs_struct *ps, int depth);
-BOOL make_samr_q_create_dom_group(SAMR_Q_CREATE_DOM_GROUP *q_e,
- POLICY_HND *pol,
- const char *acct_desc);
-BOOL samr_io_q_create_dom_group(char *desc, SAMR_Q_CREATE_DOM_GROUP *q_e, prs_struct *ps, int depth);
-BOOL samr_io_r_create_dom_group(char *desc, SAMR_R_CREATE_DOM_GROUP *r_u, prs_struct *ps, int depth);
-BOOL make_samr_q_delete_dom_group(SAMR_Q_DELETE_DOM_GROUP *q_c, POLICY_HND *hnd);
-BOOL samr_io_q_delete_dom_group(char *desc, SAMR_Q_DELETE_DOM_GROUP *q_u, prs_struct *ps, int depth);
-BOOL samr_io_r_delete_dom_group(char *desc, SAMR_R_DELETE_DOM_GROUP *r_u, prs_struct *ps, int depth);
-BOOL make_samr_q_del_groupmem(SAMR_Q_DEL_GROUPMEM *q_e,
- POLICY_HND *pol,
- uint32 rid);
-BOOL samr_io_q_del_groupmem(char *desc, SAMR_Q_DEL_GROUPMEM *q_e, prs_struct *ps, int depth);
-BOOL make_samr_r_del_groupmem(SAMR_R_DEL_GROUPMEM *r_u, POLICY_HND *pol,
- uint32 status);
-BOOL samr_io_r_del_groupmem(char *desc, SAMR_R_DEL_GROUPMEM *r_u, prs_struct *ps, int depth);
-BOOL make_samr_q_add_groupmem(SAMR_Q_ADD_GROUPMEM *q_e,
- POLICY_HND *pol,
- uint32 rid);
-BOOL samr_io_q_add_groupmem(char *desc, SAMR_Q_ADD_GROUPMEM *q_e, prs_struct *ps, int depth);
-BOOL make_samr_r_add_groupmem(SAMR_R_ADD_GROUPMEM *r_u, POLICY_HND *pol,
- uint32 status);
-BOOL samr_io_r_add_groupmem(char *desc, SAMR_R_ADD_GROUPMEM *r_u, prs_struct *ps, int depth);
-BOOL make_samr_q_set_groupinfo(SAMR_Q_SET_GROUPINFO *q_e,
- POLICY_HND *pol, GROUP_INFO_CTR *ctr);
-BOOL samr_io_q_set_groupinfo(char *desc, SAMR_Q_SET_GROUPINFO *q_e, prs_struct *ps, int depth);
-BOOL make_samr_r_set_groupinfo(SAMR_R_SET_GROUPINFO *r_u,
- uint32 status);
-BOOL samr_io_r_set_groupinfo(char *desc, SAMR_R_SET_GROUPINFO *r_u, prs_struct *ps, int depth);
-BOOL make_samr_q_query_groupinfo(SAMR_Q_QUERY_GROUPINFO *q_e,
- POLICY_HND *pol,
- uint16 switch_level);
-BOOL samr_io_q_query_groupinfo(char *desc, SAMR_Q_QUERY_GROUPINFO *q_e, prs_struct *ps, int depth);
-BOOL make_samr_r_query_groupinfo(SAMR_R_QUERY_GROUPINFO *r_u, GROUP_INFO_CTR *ctr,
- uint32 status);
-BOOL samr_io_r_query_groupinfo(char *desc, SAMR_R_QUERY_GROUPINFO *r_u, prs_struct *ps, int depth);
-BOOL make_samr_q_query_groupmem(SAMR_Q_QUERY_GROUPMEM *q_c, POLICY_HND *hnd);
-BOOL samr_io_q_query_groupmem(char *desc, SAMR_Q_QUERY_GROUPMEM *q_u, prs_struct *ps, int depth);
-BOOL make_samr_r_query_groupmem(SAMR_R_QUERY_GROUPMEM *r_u,
- uint32 num_entries, uint32 *rid, uint32 *attr, uint32 status);
-BOOL samr_io_r_query_groupmem(char *desc, SAMR_R_QUERY_GROUPMEM *r_u, prs_struct *ps, int depth);
-void samr_free_r_query_groupmem(SAMR_R_QUERY_GROUPMEM *r_u);
-BOOL make_samr_q_query_usergroups(SAMR_Q_QUERY_USERGROUPS *q_u,
- POLICY_HND *hnd);
-BOOL samr_io_q_query_usergroups(char *desc, SAMR_Q_QUERY_USERGROUPS *q_u, prs_struct *ps, int depth);
-BOOL make_samr_r_query_usergroups(SAMR_R_QUERY_USERGROUPS *r_u,
- uint32 num_gids, DOM_GID *gid, uint32 status);
-BOOL samr_io_r_query_usergroups(char *desc, SAMR_R_QUERY_USERGROUPS *r_u, prs_struct *ps, int depth);
-void samr_free_r_query_usergroups(SAMR_R_QUERY_USERGROUPS *r_u);
-BOOL make_samr_q_enum_domains(SAMR_Q_ENUM_DOMAINS *q_e, POLICY_HND *pol,
- uint32 start_idx, uint32 size);
-BOOL samr_io_q_enum_domains(char *desc, SAMR_Q_ENUM_DOMAINS *q_e, prs_struct *ps, int depth);
-BOOL make_samr_r_enum_domains(SAMR_R_ENUM_DOMAINS *r_u,
- uint32 next_idx, uint32 num_sam_entries);
-BOOL samr_io_r_enum_domains(char *desc, SAMR_R_ENUM_DOMAINS *r_u, prs_struct *ps, int depth);
-BOOL make_samr_q_enum_dom_groups(SAMR_Q_ENUM_DOM_GROUPS *q_e, POLICY_HND *pol,
- uint32 start_idx, uint32 size);
-BOOL samr_io_q_enum_dom_groups(char *desc, SAMR_Q_ENUM_DOM_GROUPS *q_e, prs_struct *ps, int depth);
-BOOL make_samr_r_enum_dom_groups(SAMR_R_ENUM_DOM_GROUPS *r_u,
- uint32 next_idx, uint32 num_sam_entries);
-BOOL samr_io_r_enum_dom_groups(char *desc, SAMR_R_ENUM_DOM_GROUPS *r_u, prs_struct *ps, int depth);
-BOOL make_samr_q_enum_dom_aliases(SAMR_Q_ENUM_DOM_ALIASES *q_e, POLICY_HND *pol,
- uint32 start_idx, uint32 size);
-BOOL samr_io_q_enum_dom_aliases(char *desc, SAMR_Q_ENUM_DOM_ALIASES *q_e, prs_struct *ps, int depth);
-BOOL make_samr_r_enum_dom_aliases(SAMR_R_ENUM_DOM_ALIASES *r_u,
- uint32 next_idx,
- uint32 num_sam_entries);
-BOOL samr_io_r_enum_dom_aliases(char *desc, SAMR_R_ENUM_DOM_ALIASES *r_u, prs_struct *ps, int depth);
-BOOL make_samr_alias_info3(ALIAS_INFO3 *al3, const char *acct_desc);
-BOOL samr_io_alias_info3(char *desc, ALIAS_INFO3 *al3, prs_struct *ps, int depth);
-BOOL samr_alias_info_ctr(char *desc, ALIAS_INFO_CTR *ctr, prs_struct *ps, int depth);
-BOOL make_samr_q_query_aliasinfo(SAMR_Q_QUERY_ALIASINFO *q_e,
- POLICY_HND *pol,
- uint16 switch_level);
-BOOL samr_io_q_query_aliasinfo(char *desc, SAMR_Q_QUERY_ALIASINFO *q_e, prs_struct *ps, int depth);
-BOOL make_samr_r_query_aliasinfo(SAMR_R_QUERY_ALIASINFO *r_u, ALIAS_INFO_CTR *ctr,
- uint32 status);
-BOOL samr_io_r_query_aliasinfo(char *desc, SAMR_R_QUERY_ALIASINFO *r_u, prs_struct *ps, int depth);
-BOOL make_samr_q_set_aliasinfo(SAMR_Q_SET_ALIASINFO *q_u, POLICY_HND *hnd,
- ALIAS_INFO_CTR *ctr);
-BOOL samr_io_q_set_aliasinfo(char *desc, SAMR_Q_SET_ALIASINFO *q_u, prs_struct *ps, int depth);
-BOOL samr_io_r_set_aliasinfo(char *desc, SAMR_R_SET_ALIASINFO *r_u, prs_struct *ps, int depth);
-BOOL make_samr_q_query_useraliases(SAMR_Q_QUERY_USERALIASES *q_u,
- const POLICY_HND *hnd,
- uint32 *ptr_sid, DOM_SID2 *sid);
-BOOL samr_io_q_query_useraliases(char *desc, SAMR_Q_QUERY_USERALIASES *q_u, prs_struct *ps, int depth);
-void samr_free_q_query_useraliases(SAMR_Q_QUERY_USERALIASES *q_u);
-BOOL make_samr_r_query_useraliases(SAMR_R_QUERY_USERALIASES *r_u,
- uint32 num_rids, uint32 *rid, uint32 status);
-BOOL samr_io_r_query_useraliases(char *desc, SAMR_R_QUERY_USERALIASES *r_u, prs_struct *ps, int depth);
-void samr_free_r_query_useraliases(SAMR_R_QUERY_USERALIASES *r_u);
-BOOL make_samr_q_open_alias(SAMR_Q_OPEN_ALIAS *q_u, const POLICY_HND *pol,
- uint32 unknown_0, uint32 rid);
-BOOL samr_io_q_open_alias(char *desc, SAMR_Q_OPEN_ALIAS *q_u, prs_struct *ps, int depth);
-BOOL samr_io_r_open_alias(char *desc, SAMR_R_OPEN_ALIAS *r_u, prs_struct *ps, int depth);
-BOOL make_samr_q_lookup_rids(SAMR_Q_LOOKUP_RIDS *q_u,
- const POLICY_HND *pol, uint32 flags,
- uint32 num_rids, const uint32 *rid);
-BOOL samr_io_q_lookup_rids(char *desc, SAMR_Q_LOOKUP_RIDS *q_u, prs_struct *ps, int depth);
-void samr_free_q_lookup_rids(SAMR_Q_LOOKUP_RIDS *q_u);
-BOOL make_samr_r_lookup_rids(SAMR_R_LOOKUP_RIDS *r_u,
- uint32 num_names, UNIHDR *hdr_name, UNISTR2 *uni_name,
- uint32 *type);
-BOOL samr_io_r_lookup_rids(char *desc, SAMR_R_LOOKUP_RIDS *r_u, prs_struct *ps, int depth);
-void samr_free_r_lookup_rids(SAMR_R_LOOKUP_RIDS *r_u);
-BOOL make_samr_q_delete_alias(SAMR_Q_DELETE_DOM_ALIAS *q_u, POLICY_HND *hnd);
-BOOL samr_io_q_delete_alias(char *desc, SAMR_Q_DELETE_DOM_ALIAS *q_u, prs_struct *ps, int depth);
-BOOL samr_io_r_delete_alias(char *desc, SAMR_R_DELETE_DOM_ALIAS *r_u, prs_struct *ps, int depth);
-BOOL make_samr_q_create_dom_alias(SAMR_Q_CREATE_DOM_ALIAS *q_u, POLICY_HND *hnd,
- const char *acct_desc);
-BOOL samr_io_q_create_dom_alias(char *desc, SAMR_Q_CREATE_DOM_ALIAS *q_u, prs_struct *ps, int depth);
-BOOL samr_io_r_create_dom_alias(char *desc, SAMR_R_CREATE_DOM_ALIAS *r_u, prs_struct *ps, int depth);
-BOOL make_samr_q_add_aliasmem(SAMR_Q_ADD_ALIASMEM *q_u, POLICY_HND *hnd,
- DOM_SID *sid);
-BOOL samr_io_q_add_aliasmem(char *desc, SAMR_Q_ADD_ALIASMEM *q_u, prs_struct *ps, int depth);
-BOOL samr_io_r_add_aliasmem(char *desc, SAMR_R_ADD_ALIASMEM *r_u, prs_struct *ps, int depth);
-BOOL make_samr_q_del_aliasmem(SAMR_Q_DEL_ALIASMEM *q_u, POLICY_HND *hnd,
- DOM_SID *sid);
-BOOL samr_io_q_del_aliasmem(char *desc, SAMR_Q_DEL_ALIASMEM *q_u, prs_struct *ps, int depth);
-BOOL samr_io_r_del_aliasmem(char *desc, SAMR_R_DEL_ALIASMEM *r_u, prs_struct *ps, int depth);
-BOOL make_samr_q_delete_dom_alias(SAMR_Q_DELETE_DOM_ALIAS *q_c, POLICY_HND *hnd);
-BOOL samr_io_q_delete_dom_alias(char *desc, SAMR_Q_DELETE_DOM_ALIAS *q_u, prs_struct *ps, int depth);
-BOOL make_samr_r_delete_dom_alias(SAMR_R_DELETE_DOM_ALIAS *r_u,
- uint32 status);
-BOOL samr_io_r_delete_dom_alias(char *desc, SAMR_R_DELETE_DOM_ALIAS *r_u, prs_struct *ps, int depth);
-BOOL make_samr_q_query_aliasmem(SAMR_Q_QUERY_ALIASMEM *q_c,
- const POLICY_HND *hnd);
-BOOL samr_io_q_query_aliasmem(char *desc, SAMR_Q_QUERY_ALIASMEM *q_u, prs_struct *ps, int depth);
-BOOL make_samr_r_query_aliasmem(SAMR_R_QUERY_ALIASMEM *r_u,
- uint32 num_sids, DOM_SID2 *sid, uint32 status);
-BOOL samr_io_r_query_aliasmem(char *desc, SAMR_R_QUERY_ALIASMEM *r_u, prs_struct *ps, int depth);
-BOOL make_samr_q_lookup_names(SAMR_Q_LOOKUP_NAMES *q_u,
- const POLICY_HND *pol, uint32 flags,
- uint32 num_names, const char **name);
-BOOL samr_io_q_lookup_names(char *desc, SAMR_Q_LOOKUP_NAMES *q_u, prs_struct *ps, int depth);
-void samr_free_q_lookup_names(SAMR_Q_LOOKUP_NAMES *q_l);
-BOOL make_samr_r_lookup_names(SAMR_R_LOOKUP_NAMES *r_u,
- uint32 num_rids,
- const uint32 *rid, const uint32 *type,
- uint32 status);
-BOOL samr_io_r_lookup_names(char *desc, SAMR_R_LOOKUP_NAMES *r_u, prs_struct *ps, int depth);
-void samr_free_r_lookup_names(SAMR_R_LOOKUP_NAMES *r_l);
-BOOL make_samr_q_open_user(SAMR_Q_OPEN_USER *q_u,
- const POLICY_HND *pol,
- uint32 access_mask, uint32 rid);
-BOOL samr_io_q_open_user(char *desc, SAMR_Q_OPEN_USER *q_u, prs_struct *ps, int depth);
-BOOL samr_io_r_open_user(char *desc, SAMR_R_OPEN_USER *r_u, prs_struct *ps, int depth);
-BOOL make_samr_q_create_user(SAMR_Q_CREATE_USER *q_u,
- POLICY_HND *pol,
- const char *name,
- uint16 acb_info, uint32 access_mask);
-BOOL samr_io_q_create_user(char *desc, SAMR_Q_CREATE_USER *q_u, prs_struct *ps, int depth);
-BOOL samr_io_r_create_user(char *desc, SAMR_R_CREATE_USER *r_u, prs_struct *ps, int depth);
-BOOL make_samr_q_query_userinfo(SAMR_Q_QUERY_USERINFO *q_u,
- POLICY_HND *hnd, uint16 switch_value);
-BOOL samr_io_q_query_userinfo(char *desc, SAMR_Q_QUERY_USERINFO *q_u, prs_struct *ps, int depth);
-BOOL make_sam_user_info10(SAM_USER_INFO_10 *usr,
- uint32 acb_info);
-BOOL sam_io_user_info10(char *desc, SAM_USER_INFO_10 *usr, prs_struct *ps, int depth);
-BOOL make_sam_user_info11(SAM_USER_INFO_11 *usr,
- NTTIME *expiry,
- char *mach_acct,
- uint32 rid_user,
- uint32 rid_group,
- uint16 acct_ctrl);
-BOOL sam_io_user_info11(char *desc, SAM_USER_INFO_11 *usr, prs_struct *ps, int depth);
-BOOL make_sam_user_info24(SAM_USER_INFO_24 *usr,
- char newpass[516], uint16 passlen);
-BOOL make_sam_user_info23W(SAM_USER_INFO_23 *usr,
-
- const NTTIME *logon_time, /* all zeros */
- const NTTIME *logoff_time, /* all zeros */
- const NTTIME *kickoff_time, /* all zeros */
- const NTTIME *pass_last_set_time, /* all zeros */
- const NTTIME *pass_can_change_time, /* all zeros */
- const NTTIME *pass_must_change_time, /* all zeros */
-
- const UNISTR2 *user_name,
- const UNISTR2 *full_name,
- const UNISTR2 *home_dir,
- const UNISTR2 *dir_drive,
- const UNISTR2 *log_scr,
- const UNISTR2 *prof_path,
- const UNISTR2 *desc,
- const UNISTR2 *wkstas,
- const UNISTR2 *unk_str,
- const UNISTR2 *mung_dial,
-
- uint32 user_rid, /* 0x0000 0000 */
- uint32 group_rid,
- uint16 acb_info,
-
- uint32 unknown_3,
- uint16 logon_divs,
- LOGON_HRS *hrs,
- uint32 unknown_5,
- char newpass[516]
-#if 0
- , uint32 unknown_6
-#endif
- );
-BOOL make_sam_user_info23A(SAM_USER_INFO_23 *usr,
-
- NTTIME *logon_time, /* all zeros */
- NTTIME *logoff_time, /* all zeros */
- NTTIME *kickoff_time, /* all zeros */
- NTTIME *pass_last_set_time, /* all zeros */
- NTTIME *pass_can_change_time, /* all zeros */
- NTTIME *pass_must_change_time, /* all zeros */
-
- char *user_name, /* NULL */
- char *full_name,
- char *home_dir,
- char *dir_drive,
- char *log_scr,
- char *prof_path,
- char *desc,
- char *wkstas,
- char *unk_str,
- char *mung_dial,
-
- uint32 user_rid, /* 0x0000 0000 */
- uint32 group_rid,
- uint16 acb_info,
-
- uint32 unknown_3,
- uint16 logon_divs,
- LOGON_HRS *hrs,
- uint32 unknown_5,
- char newpass[516]
-#if 0
- , uint32 unknown_6
-#endif
- );
-BOOL make_sam_user_info21W(SAM_USER_INFO_21 *usr,
-
- const NTTIME *logon_time,
- const NTTIME *logoff_time,
- const NTTIME *kickoff_time,
- const NTTIME *pass_last_set_time,
- const NTTIME *pass_can_change_time,
- const NTTIME *pass_must_change_time,
-
- const UNISTR2 *user_name,
- const UNISTR2 *full_name,
- const UNISTR2 *home_dir,
- const UNISTR2 *dir_drive,
- const UNISTR2 *log_scr,
- const UNISTR2 *prof_path,
- const UNISTR2 *desc,
- const UNISTR2 *wkstas,
- const UNISTR2 *unk_str,
- const UNISTR2 *mung_dial,
-
- const uchar lm_pwd[16],
- const uchar nt_pwd[16],
-
- uint32 user_rid,
- uint32 group_rid,
- uint16 acb_info,
-
- uint32 unknown_3,
- uint16 logon_divs,
- const LOGON_HRS *hrs,
- uint32 unknown_5,
- uint32 unknown_6);
-BOOL make_sam_user_info21A(SAM_USER_INFO_21 *usr,
-
- NTTIME *logon_time,
- NTTIME *logoff_time,
- NTTIME *kickoff_time,
- NTTIME *pass_last_set_time,
- NTTIME *pass_can_change_time,
- NTTIME *pass_must_change_time,
-
- char *user_name,
- char *full_name,
- char *home_dir,
- char *dir_drive,
- char *log_scr,
- char *prof_path,
- char *desc,
- char *wkstas,
- char *unk_str,
- char *mung_dial,
-
- uint32 user_rid,
- uint32 group_rid,
- uint16 acb_info,
-
- uint32 unknown_3,
- uint16 logon_divs,
- LOGON_HRS *hrs,
- uint32 unknown_5,
- uint32 unknown_6);
-BOOL sam_io_user_info21(char *desc, SAM_USER_INFO_21 *usr, prs_struct *ps, int depth);
-BOOL make_samr_userinfo_ctr(SAM_USERINFO_CTR *ctr, const uchar *sess_key,
- uint16 switch_value, void *info);
-BOOL samr_io_userinfo_ctr(char *desc, SAM_USERINFO_CTR *ctr, prs_struct *ps, int depth);
-void free_samr_userinfo_ctr(SAM_USERINFO_CTR *ctr);
-BOOL make_samr_r_query_userinfo(SAMR_R_QUERY_USERINFO *r_u,
- SAM_USERINFO_CTR *ctr, uint32 status);
-BOOL samr_io_r_query_userinfo(char *desc, SAMR_R_QUERY_USERINFO *r_u, prs_struct *ps, int depth);
-BOOL make_samr_q_set_userinfo(SAMR_Q_SET_USERINFO *q_u,
- POLICY_HND *hnd,
- uint16 switch_value, void *info);
-BOOL samr_io_q_set_userinfo(char *desc, SAMR_Q_SET_USERINFO *q_u, prs_struct *ps, int depth);
-void free_samr_q_set_userinfo(SAMR_Q_SET_USERINFO *q_u);
-BOOL make_samr_r_set_userinfo(SAMR_R_SET_USERINFO *r_u, uint32 status);
-BOOL samr_io_r_set_userinfo(char *desc, SAMR_R_SET_USERINFO *r_u, prs_struct *ps, int depth);
-BOOL samr_io_userinfo2_ctr(char *desc, SAM_USERINFO2_CTR *ctr, prs_struct *ps, int depth);
-void free_samr_userinfo2_ctr(SAM_USERINFO2_CTR *ctr);
-BOOL make_samr_q_set_userinfo2(SAMR_Q_SET_USERINFO2 *q_u,
- POLICY_HND *hnd,
- uint16 switch_value,
- SAM_USERINFO2_CTR *ctr);
-BOOL samr_io_q_set_userinfo2(char *desc, SAMR_Q_SET_USERINFO2 *q_u, prs_struct *ps, int depth);
-void free_samr_q_set_userinfo2(SAMR_Q_SET_USERINFO2 *q_u);
-BOOL make_samr_r_set_userinfo2(SAMR_R_SET_USERINFO2 *r_u,
- uint32 status);
-BOOL samr_io_r_set_userinfo2(char *desc, SAMR_R_SET_USERINFO2 *r_u, prs_struct *ps, int depth);
-BOOL make_samr_q_connect(SAMR_Q_CONNECT *q_u,
- const char *srv_name, uint32 access_mask);
-BOOL samr_io_q_connect(char *desc, SAMR_Q_CONNECT *q_u, prs_struct *ps, int depth);
-BOOL samr_io_r_connect(char *desc, SAMR_R_CONNECT *r_u, prs_struct *ps, int depth);
-BOOL make_samr_q_connect_anon(SAMR_Q_CONNECT_ANON *q_u);
-BOOL samr_io_q_connect_anon(char *desc, SAMR_Q_CONNECT_ANON *q_u, prs_struct *ps, int depth);
-BOOL samr_io_r_connect_anon(char *desc, SAMR_R_CONNECT_ANON *r_u, prs_struct *ps, int depth);
-BOOL make_samr_q_get_dom_pwinfo(SAMR_Q_GET_DOM_PWINFO *q_u, const char *srv_name);
-BOOL samr_io_q_get_dom_pwinfo(char *desc, SAMR_Q_GET_DOM_PWINFO *q_u, prs_struct *ps, int depth);
-BOOL samr_io_r_get_dom_pwinfo(char *desc, SAMR_R_GET_DOM_PWINFO *r_u, prs_struct *ps, int depth);
-BOOL make_enc_passwd(SAMR_ENC_PASSWD *pwd, const char pass[512]);
-BOOL samr_io_enc_passwd(char *desc, SAMR_ENC_PASSWD *pwd, prs_struct *ps, int depth);
-BOOL make_enc_hash(SAMR_ENC_HASH *hsh, const uchar hash[16]);
-BOOL samr_io_enc_hash(char *desc, SAMR_ENC_HASH *hsh, prs_struct *ps, int depth);
-BOOL make_samr_q_chgpasswd_user(SAMR_Q_CHGPASSWD_USER *q_u,
- const char *dest_host, const char *user_name,
- const char nt_newpass[516],
- const uchar nt_oldhash[16],
- const char lm_newpass[516],
- const uchar lm_oldhash[16]);
-BOOL samr_io_q_chgpasswd_user(char *desc, SAMR_Q_CHGPASSWD_USER *q_u, prs_struct *ps, int depth);
-BOOL make_samr_r_chgpasswd_user(SAMR_R_CHGPASSWD_USER *r_u, uint32 status);
-BOOL samr_io_r_chgpasswd_user(char *desc, SAMR_R_CHGPASSWD_USER *r_u, prs_struct *ps, int depth);
-
/*The following definitions come from rpc_parse/parse_sec.c */
BOOL make_sec_access(SEC_ACCESS *t, uint32 mask);
@@ -3472,326 +2840,6 @@ BOOL make_sec_desc_buf(SEC_DESC_BUF *buf, int len, SEC_DESC *data);
void free_sec_desc_buf(SEC_DESC_BUF *buf);
BOOL sec_io_desc_buf(char *desc, SEC_DESC_BUF *sec, prs_struct *ps, int depth);
-/*The following definitions come from rpc_parse/parse_spoolss.c */
-
-BOOL make_systemtime(SYSTEMTIME *systime, struct tm *unixtime);
-BOOL smb_io_notify_info_data_strings(char *desc,SPOOL_NOTIFY_INFO_DATA *data,
- prs_struct *ps, int depth);
-BOOL spoolss_io_r_open_printer_ex(char *desc, SPOOL_R_OPEN_PRINTER_EX *r_u, prs_struct *ps, int depth);
-BOOL make_spoolss_q_open_printer_ex(SPOOL_Q_OPEN_PRINTER_EX *q_u,
- const char *printername,
- uint32 cbbuf, uint32 devmod, uint32 des_access,
- const char *station,
- const char *username);
-BOOL spoolss_io_q_open_printer_ex(char *desc, SPOOL_Q_OPEN_PRINTER_EX *q_u, prs_struct *ps, int depth);
-BOOL make_spoolss_q_getprinterdata(SPOOL_Q_GETPRINTERDATA *q_u,
- POLICY_HND *handle,
- char *valuename,
- uint32 size);
-BOOL spoolss_io_q_getprinterdata(char *desc, SPOOL_Q_GETPRINTERDATA *q_u, prs_struct *ps, int depth);
-BOOL spoolss_io_r_getprinterdata(char *desc, SPOOL_R_GETPRINTERDATA *r_u, prs_struct *ps, int depth);
-BOOL make_spoolss_q_closeprinter(SPOOL_Q_CLOSEPRINTER *q_u, POLICY_HND *hnd);
-BOOL spoolss_io_q_closeprinter(char *desc, SPOOL_Q_CLOSEPRINTER *q_u, prs_struct *ps, int depth);
-BOOL spoolss_io_r_closeprinter(char *desc, SPOOL_R_CLOSEPRINTER *r_u, prs_struct *ps, int depth);
-BOOL spoolss_io_q_startdocprinter(char *desc, SPOOL_Q_STARTDOCPRINTER *q_u, prs_struct *ps, int depth);
-BOOL spoolss_io_r_startdocprinter(char *desc, SPOOL_R_STARTDOCPRINTER *r_u, prs_struct *ps, int depth);
-BOOL spoolss_io_q_enddocprinter(char *desc, SPOOL_Q_ENDDOCPRINTER *q_u, prs_struct *ps, int depth);
-BOOL spoolss_io_r_enddocprinter(char *desc, SPOOL_R_ENDDOCPRINTER *r_u, prs_struct *ps, int depth);
-BOOL spoolss_io_q_startpageprinter(char *desc, SPOOL_Q_STARTPAGEPRINTER *q_u, prs_struct *ps, int depth);
-BOOL spoolss_io_r_startpageprinter(char *desc, SPOOL_R_STARTPAGEPRINTER *r_u, prs_struct *ps, int depth);
-BOOL spoolss_io_q_endpageprinter(char *desc, SPOOL_Q_ENDPAGEPRINTER *q_u, prs_struct *ps, int depth);
-BOOL spoolss_io_r_endpageprinter(char *desc, SPOOL_R_ENDPAGEPRINTER *r_u, prs_struct *ps, int depth);
-BOOL spoolss_io_q_writeprinter(char *desc, SPOOL_Q_WRITEPRINTER *q_u, prs_struct *ps, int depth);
-BOOL spoolss_io_r_writeprinter(char *desc, SPOOL_R_WRITEPRINTER *r_u, prs_struct *ps, int depth);
-BOOL spoolss_io_q_rffpcnex(char *desc, SPOOL_Q_RFFPCNEX *q_u,
- prs_struct *ps, int depth);
-BOOL spoolss_io_r_rffpcnex(char *desc, SPOOL_R_RFFPCNEX *r_u,
- prs_struct *ps, int depth);
-BOOL spoolss_io_q_rfnpcnex(char *desc, SPOOL_Q_RFNPCNEX *q_u,
- prs_struct *ps, int depth);
-BOOL spoolss_io_r_rfnpcnex(char *desc,
- SPOOL_R_RFNPCNEX *r_u,
- prs_struct *ps, int depth);
-BOOL spoolss_io_free_buffer(BUFFER *buffer);
-BOOL spoolss_io_q_getprinterdriver2(char *desc,
- SPOOL_Q_GETPRINTERDRIVER2 *q_u,
- prs_struct *ps, int depth);
-BOOL spoolss_io_r_getprinterdriver2(char *desc, SPOOL_R_GETPRINTERDRIVER2 *r_u,
- prs_struct *ps, int depth);
-BOOL make_spoolss_q_enumprinters(SPOOL_Q_ENUMPRINTERS *q_u,
- uint32 flags,
- const char* servername,
- uint32 level,
- uint32 size);
-BOOL spoolss_io_q_enumprinters(char *desc, SPOOL_Q_ENUMPRINTERS *q_u,
- prs_struct *ps, int depth);
-void free_r_enumprinters(SPOOL_R_ENUMPRINTERS *r_u);
-BOOL spoolss_io_r_enumprinters(char *desc,
- SPOOL_R_ENUMPRINTERS *r_u,
- prs_struct *ps, int depth);
-BOOL spoolss_io_r_getprinter(char *desc,
- SPOOL_R_GETPRINTER *r_u,
- prs_struct *ps, int depth);
-BOOL make_spoolss_q_getprinter(SPOOL_Q_GETPRINTER *q_u,
- POLICY_HND *hnd,
- uint32 level,
- uint32 buf_size);
-BOOL spoolss_io_q_getprinter(char *desc, SPOOL_Q_GETPRINTER *q_u,
- prs_struct *ps, int depth);
-BOOL spoolss_io_r_setprinter(char *desc, SPOOL_R_SETPRINTER *r_u, prs_struct *ps, int depth);
-BOOL spoolss_io_q_setprinter(char *desc, SPOOL_Q_SETPRINTER *q_u, prs_struct *ps, int depth);
-BOOL spoolss_io_r_fcpn(char *desc, SPOOL_R_FCPN *r_u, prs_struct *ps, int depth);
-BOOL spoolss_io_q_fcpn(char *desc, SPOOL_Q_FCPN *q_u, prs_struct *ps, int depth);
-BOOL spoolss_io_r_addjob(char *desc, SPOOL_R_ADDJOB *r_u, prs_struct *ps, int depth);
-BOOL spoolss_io_q_addjob(char *desc, SPOOL_Q_ADDJOB *q_u, prs_struct *ps, int depth);
-void free_job_info_ctr(JOB_INFO_CTR *ctr, uint32 level, uint32 numofjobs);
-void free_r_enumjobs(SPOOL_R_ENUMJOBS *r_u);
-BOOL spoolss_io_r_enumjobs(char *desc, SPOOL_R_ENUMJOBS *r_u, prs_struct *ps, int depth);
-BOOL make_spoolss_q_enumjobs(SPOOL_Q_ENUMJOBS *q_u, const POLICY_HND *hnd,
- uint32 firstjob,
- uint32 numofjobs,
- uint32 level,
- uint32 buf_size);
-BOOL spoolss_io_q_enumjobs(char *desc, SPOOL_Q_ENUMJOBS *q_u, prs_struct *ps, int depth);
-BOOL spoolss_io_r_schedulejob(char *desc, SPOOL_R_SCHEDULEJOB *r_u, prs_struct *ps, int depth);
-BOOL spoolss_io_q_schedulejob(char *desc, SPOOL_Q_SCHEDULEJOB *q_u, prs_struct *ps, int depth);
-BOOL spoolss_io_r_setjob(char *desc, SPOOL_R_SETJOB *r_u, prs_struct *ps, int depth);
-BOOL spoolss_io_q_setjob(char *desc, SPOOL_Q_SETJOB *q_u, prs_struct *ps, int depth);
-BOOL spoolss_io_r_enumdrivers(char *desc, SPOOL_R_ENUMPRINTERDRIVERS *r_u, prs_struct *ps, int depth);
-void free_spoolss_r_enumdrivers(SPOOL_R_ENUMPRINTERDRIVERS *r_u);
-BOOL spoolss_io_q_enumprinterdrivers(char *desc, SPOOL_Q_ENUMPRINTERDRIVERS *q_u, prs_struct *ps, int depth);
-BOOL spoolss_io_r_enumforms(char *desc, SPOOL_R_ENUMFORMS *r_u, prs_struct *ps, int depth);
-void spoolss_free_r_enumforms(SPOOL_R_ENUMFORMS *r_u);
-BOOL spoolss_io_q_enumforms(char *desc, SPOOL_Q_ENUMFORMS *q_u, prs_struct *ps, int depth);
-BOOL spoolss_io_r_enumports(char *desc, SPOOL_R_ENUMPORTS *r_u, prs_struct *ps, int depth);
-void spoolss_free_r_enumports(SPOOL_R_ENUMPORTS *r_u);
-BOOL spoolss_io_q_enumports(char *desc, SPOOL_Q_ENUMPORTS *q_u, prs_struct *ps, int depth);
-BOOL spool_io_printer_info_level_2(char *desc, SPOOL_PRINTER_INFO_LEVEL_2 **q_u, prs_struct *ps, int depth);
-BOOL spool_io_printer_info_level(char *desc, SPOOL_PRINTER_INFO_LEVEL *il, prs_struct *ps, int depth);
-BOOL spool_io_user_level_1(char *desc, SPOOL_USER_LEVEL_1 **q_u, prs_struct *ps, int depth);
-BOOL spool_io_user_level(char *desc, SPOOL_USER_LEVEL *q_u, prs_struct *ps, int depth);
-BOOL spoolss_io_q_addprinterex(char *desc, SPOOL_Q_ADDPRINTEREX *q_u, prs_struct *ps, int depth);
-BOOL spoolss_io_r_addprinterex(char *desc, SPOOL_R_ADDPRINTEREX *r_u, prs_struct *ps, int depth);
-BOOL spool_io_printer_driver_info_level_3(char *desc, SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 **q_u,
- prs_struct *ps, int depth);
-BOOL uniarray_2_ascarray(BUFFER5 *buf5, char ***ar);
-BOOL smb_io_unibuffer(char *desc, UNISTR2 *buffer, prs_struct *ps, int depth);
-BOOL spool_io_printer_driver_info_level(char *desc, SPOOL_PRINTER_DRIVER_INFO_LEVEL *il, prs_struct *ps, int depth);
-BOOL spoolss_io_q_addprinterdriver(char *desc, SPOOL_Q_ADDPRINTERDRIVER *q_u, prs_struct *ps, int depth);
-BOOL spoolss_io_r_addprinterdriver(char *desc, SPOOL_R_ADDPRINTERDRIVER *q_u, prs_struct *ps, int depth);
-BOOL uni_2_asc_printer_driver_3(SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 *uni,
- NT_PRINTER_DRIVER_INFO_LEVEL_3 **asc);
-BOOL uni_2_asc_printer_info_2(const SPOOL_PRINTER_INFO_LEVEL_2 *uni,
- NT_PRINTER_INFO_LEVEL_2 **asc);
-BOOL spoolss_io_r_getprinterdriverdir(char *desc, SPOOL_R_GETPRINTERDRIVERDIR *r_u, prs_struct *ps, int depth);
-BOOL spoolss_io_q_getprinterdriverdir(char *desc, SPOOL_Q_GETPRINTERDRIVERDIR *q_u, prs_struct *ps, int depth);
-BOOL spoolss_io_r_enumprintprocessors(char *desc, SPOOL_R_ENUMPRINTPROCESSORS *r_u, prs_struct *ps, int depth);
-BOOL spoolss_io_q_enumprintprocessors(char *desc, SPOOL_Q_ENUMPRINTPROCESSORS *q_u, prs_struct *ps, int depth);
-BOOL spoolss_io_r_enumprintmonitors(char *desc, SPOOL_R_ENUMPRINTMONITORS *r_u, prs_struct *ps, int depth);
-BOOL spoolss_io_q_enumprintmonitors(char *desc, SPOOL_Q_ENUMPRINTMONITORS *q_u, prs_struct *ps, int depth);
-BOOL spoolss_io_r_enumprinterdata(char *desc, SPOOL_R_ENUMPRINTERDATA *r_u, prs_struct *ps, int depth);
-BOOL spoolss_io_q_enumprinterdata(char *desc, SPOOL_Q_ENUMPRINTERDATA *q_u, prs_struct *ps, int depth);
-BOOL spoolss_io_q_setprinterdata(char *desc, SPOOL_Q_SETPRINTERDATA *q_u, prs_struct *ps, int depth);
-BOOL spoolss_io_r_setprinterdata(char *desc, SPOOL_R_SETPRINTERDATA *r_u, prs_struct *ps, int depth);
-BOOL convert_specific_param(NT_PRINTER_PARAM **param, const UNISTR2 *value,
- uint32 type, const uint8 *data, uint32 len);
-BOOL spoolss_io_q_addform(char *desc, SPOOL_Q_ADDFORM *q_u, prs_struct *ps, int depth);
-BOOL spoolss_io_r_addform(char *desc, SPOOL_R_ADDFORM *r_u, prs_struct *ps, int depth);
-BOOL spoolss_io_q_setform(char *desc, SPOOL_Q_SETFORM *q_u, prs_struct *ps, int depth);
-BOOL spoolss_io_r_setform(char *desc, SPOOL_R_SETFORM *r_u, prs_struct *ps, int depth);
-BOOL spoolss_io_r_getjob(char *desc, SPOOL_R_GETJOB *r_u, prs_struct *ps, int depth);
-void free_spoolss_r_getjob(SPOOL_R_GETJOB *r_u);
-BOOL spoolss_io_q_getjob(char *desc, SPOOL_Q_GETJOB *q_u, prs_struct *ps, int depth);
-void free_devmode(DEVICEMODE *devmode);
-void free_printer_info_2(PRINTER_INFO_2 *printer);
-void free_print2_array(uint32 num_entries, PRINTER_INFO_2 **entries);
-PRINTER_INFO_2 *add_print2_to_array(uint32 *len, PRINTER_INFO_2 ***array,
- const PRINTER_INFO_2 *prt);
-void free_print1_array(uint32 num_entries, PRINTER_INFO_1 **entries);
-PRINTER_INFO_1 *add_print1_to_array(uint32 *len, PRINTER_INFO_1 ***array,
- const PRINTER_INFO_1 *prt);
-void free_job1_array(uint32 num_entries, JOB_INFO_1 **entries);
-JOB_INFO_1 *add_job1_to_array(uint32 *len, JOB_INFO_1 ***array,
- const JOB_INFO_1 *job);
-void free_job_info_2(JOB_INFO_2 *job);
-void free_job2_array(uint32 num_entries, JOB_INFO_2 **entries);
-JOB_INFO_2 *add_job2_to_array(uint32 *len, JOB_INFO_2 ***array,
- const JOB_INFO_2 *job);
-
-/*The following definitions come from rpc_parse/parse_srv.c */
-
-BOOL make_srv_share_info1_str(SH_INFO_1_STR *sh1, char *net_name, char *remark);
-BOOL make_srv_share_info1(SH_INFO_1 *sh1, char *net_name, uint32 type, char *remark);
-BOOL make_srv_share_info2_str(SH_INFO_2_STR *sh2,
- char *net_name, char *remark,
- char *path, char *pass);
-BOOL make_srv_share_info2(SH_INFO_2 *sh2,
- char *net_name, uint32 type, char *remark,
- uint32 perms, uint32 max_uses, uint32 num_uses,
- char *path, char *pass);
-BOOL make_srv_q_net_share_enum(SRV_Q_NET_SHARE_ENUM *q_n,
- const char *srv_name,
- uint32 share_level, SRV_SHARE_INFO_CTR *ctr,
- uint32 preferred_len,
- ENUM_HND *hnd);
-BOOL srv_io_q_net_share_enum(char *desc, SRV_Q_NET_SHARE_ENUM *q_n, prs_struct *ps, int depth);
-BOOL srv_io_r_net_share_enum(char *desc, SRV_R_NET_SHARE_ENUM *r_n, prs_struct *ps, int depth);
-BOOL make_srv_sess_info0_str(SESS_INFO_0_STR *ss0, char *name);
-BOOL make_srv_sess_info0(SESS_INFO_0 *ss0, char *name);
-BOOL make_srv_sess_info1_str(SESS_INFO_1_STR *ss1, char *name, char *user);
-BOOL make_srv_sess_info1(SESS_INFO_1 *ss1,
- char *name, char *user,
- uint32 num_opens, uint32 open_time, uint32 idle_time,
- uint32 user_flags);
-BOOL make_srv_q_net_sess_enum(SRV_Q_NET_SESS_ENUM *q_n,
- const char *srv_name, const char *qual_name,
- char *user_name,
- uint32 sess_level, SRV_SESS_INFO_CTR *ctr,
- uint32 preferred_len,
- ENUM_HND *hnd);
-BOOL srv_io_q_net_sess_enum(char *desc, SRV_Q_NET_SESS_ENUM *q_n, prs_struct *ps, int depth);
-BOOL srv_io_r_net_sess_enum(char *desc, SRV_R_NET_SESS_ENUM *r_n, prs_struct *ps, int depth);
-BOOL make_srv_conn_info0(CONN_INFO_0 *ss0, uint32 id);
-BOOL make_srv_conn_info1_str(CONN_INFO_1_STR *ss1, char *usr_name, char *net_name);
-BOOL make_srv_conn_info1(CONN_INFO_1 *ss1,
- uint32 id, uint32 type,
- uint32 num_opens, uint32 num_users, uint32 open_time,
- char *usr_name, char *net_name);
-BOOL make_srv_q_net_conn_enum(SRV_Q_NET_CONN_ENUM *q_n,
- const char *srv_name, const char *qual_name,
- uint32 conn_level, SRV_CONN_INFO_CTR *ctr,
- uint32 preferred_len,
- ENUM_HND *hnd);
-BOOL srv_io_q_net_conn_enum(char *desc, SRV_Q_NET_CONN_ENUM *q_n, prs_struct *ps, int depth);
-BOOL srv_io_r_net_conn_enum(char *desc, SRV_R_NET_CONN_ENUM *r_n, prs_struct *ps, int depth);
-BOOL make_srv_tprt_info0_str(TPRT_INFO_0_STR *tp0,
- char *trans_name,
- char *trans_addr, uint32 trans_addr_len,
- char *addr_name);
-BOOL make_srv_tprt_info0(TPRT_INFO_0 *tp0,
- uint32 num_vcs, uint32 trans_addr_len,
- char *trans_name, char *trans_addr,
- char *addr_name);
-void free_srv_tprt_info_0(SRV_TPRT_INFO_0 *tp0);
-void free_srv_tprt_ctr(SRV_TPRT_INFO_CTR *ctr);
-BOOL make_srv_q_net_tprt_enum(SRV_Q_NET_TPRT_ENUM *q_n,
- const char *srv_name,
- uint32 tprt_level, SRV_TPRT_INFO_CTR *ctr,
- uint32 preferred_len,
- ENUM_HND *hnd);
-BOOL srv_io_q_net_tprt_enum(char *desc, SRV_Q_NET_TPRT_ENUM *q_n, prs_struct *ps, int depth);
-BOOL srv_io_r_net_tprt_enum(char *desc, SRV_R_NET_TPRT_ENUM *r_n, prs_struct *ps, int depth);
-BOOL make_srv_file_info3_str(FILE_INFO_3_STR *fi3, char *user_name, char *path_name);
-BOOL make_srv_file_info3(FILE_INFO_3 *fl3,
- uint32 id, uint32 perms, uint32 num_locks,
- char *path_name, char *user_name);
-BOOL make_srv_q_net_file_enum(SRV_Q_NET_FILE_ENUM *q_n,
- const char *srv_name, const char *qual_name,
- uint32 file_id,
- uint32 file_level, SRV_FILE_INFO_CTR *ctr,
- uint32 preferred_len,
- ENUM_HND *hnd);
-BOOL srv_io_q_net_file_enum(char *desc, SRV_Q_NET_FILE_ENUM *q_n, prs_struct *ps, int depth);
-BOOL srv_io_r_net_file_enum(char *desc, SRV_R_NET_FILE_ENUM *r_n, prs_struct *ps, int depth);
-BOOL make_srv_q_net_srv_get_info(SRV_Q_NET_SRV_GET_INFO *srv,
- char *server_name, uint32 switch_value);
-BOOL srv_io_q_net_srv_get_info(char *desc, SRV_Q_NET_SRV_GET_INFO *q_n, prs_struct *ps, int depth);
-BOOL make_srv_r_net_srv_get_info(SRV_R_NET_SRV_GET_INFO *srv,
- uint32 switch_value, SRV_INFO_CTR *ctr, uint32 status);
-BOOL srv_io_r_net_srv_get_info(char *desc, SRV_R_NET_SRV_GET_INFO *r_n, prs_struct *ps, int depth);
-BOOL make_srv_q_net_remote_tod(SRV_Q_NET_REMOTE_TOD *q_t, char *server_name);
-BOOL srv_io_q_net_remote_tod(char *desc, SRV_Q_NET_REMOTE_TOD *q_n, prs_struct *ps, int depth);
-BOOL make_time_of_day_info(TIME_OF_DAY_INFO *tod, uint32 elapsedt, uint32 msecs,
- uint32 hours, uint32 mins, uint32 secs, uint32 hunds,
- uint32 zone, uint32 tintervals, uint32 day,
- uint32 month, uint32 year, uint32 weekday);
-BOOL srv_io_r_net_remote_tod(char *desc, SRV_R_NET_REMOTE_TOD *r_n, prs_struct *ps, int depth);
-
-/*The following definitions come from rpc_parse/parse_svc.c */
-
-BOOL make_svc_q_open_sc_man(SVC_Q_OPEN_SC_MAN *q_u,
- const char *server, const char *database,
- uint32 des_access) ;
-BOOL svc_io_q_open_sc_man(char *desc, SVC_Q_OPEN_SC_MAN *q_u, prs_struct *ps, int depth);
-BOOL make_svc_r_open_sc_man(SVC_R_OPEN_SC_MAN *r_u, POLICY_HND *hnd,
- uint32 status) ;
-BOOL svc_io_r_open_sc_man(char *desc, SVC_R_OPEN_SC_MAN *r_u, prs_struct *ps, int depth);
-BOOL make_svc_q_open_service(SVC_Q_OPEN_SERVICE *q_u,
- POLICY_HND *hnd,
- const char *server,
- uint32 des_access) ;
-BOOL svc_io_q_open_service(char *desc, SVC_Q_OPEN_SERVICE *q_u, prs_struct *ps, int depth);
-BOOL make_svc_r_open_service(SVC_R_OPEN_SERVICE *r_u, POLICY_HND *hnd,
- uint32 status) ;
-BOOL svc_io_r_open_service(char *desc, SVC_R_OPEN_SERVICE *r_u, prs_struct *ps, int depth);
-BOOL make_svc_q_stop_service(SVC_Q_STOP_SERVICE *q_c, POLICY_HND *hnd,
- uint32 unk);
-BOOL svc_io_q_stop_service(char *desc, SVC_Q_STOP_SERVICE *q_s, prs_struct *ps, int depth);
-BOOL svc_io_r_stop_service(char *desc, SVC_R_STOP_SERVICE *r_s, prs_struct *ps, int depth);
-BOOL make_svc_q_start_service(SVC_Q_START_SERVICE *q_c, POLICY_HND *hnd,
- uint32 argc,
- char **argv);
-BOOL svc_io_q_start_service(char *desc, SVC_Q_START_SERVICE *q_s, prs_struct *ps, int depth);
-BOOL svc_io_r_start_service(char *desc, SVC_R_START_SERVICE *r_s, prs_struct *ps, int depth);
-BOOL make_svc_query_svc_cfg(QUERY_SERVICE_CONFIG *q_u,
- uint32 service_type, uint32 start_type,
- uint32 error_control,
- char* bin_path_name, char* load_order_grp,
- uint32 tag_id,
- char* dependencies, char* service_start_name,
- char* disp_name);
-BOOL svc_io_query_svc_cfg(char *desc, QUERY_SERVICE_CONFIG *q_u, prs_struct *ps, int depth);
-BOOL make_svc_q_enum_svcs_status(SVC_Q_ENUM_SVCS_STATUS *q_c, POLICY_HND *hnd,
- uint32 service_type, uint32 service_state,
- uint32 buf_size, uint32 resume_hnd );
-BOOL svc_io_q_enum_svcs_status(char *desc, SVC_Q_ENUM_SVCS_STATUS *q_u, prs_struct *ps, int depth);
-BOOL make_svc_r_enum_svcs_status(SVC_R_ENUM_SVCS_STATUS *r_c,
- ENUM_SRVC_STATUS *svcs, uint32 more_buf_size,
- uint32 num_svcs, uint32 resume_hnd,
- uint32 dos_status);
-BOOL svc_io_r_enum_svcs_status(char *desc, SVC_R_ENUM_SVCS_STATUS *svc, prs_struct *ps, int depth);
-BOOL svc_io_svc_status(char *desc, SVC_STATUS *svc, prs_struct *ps, int depth);
-BOOL make_svc_q_query_svc_config(SVC_Q_QUERY_SVC_CONFIG *q_c, POLICY_HND *hnd,
- uint32 buf_size);
-BOOL svc_io_q_query_svc_config(char *desc, SVC_Q_QUERY_SVC_CONFIG *q_u, prs_struct *ps, int depth);
-BOOL make_svc_r_query_svc_config(SVC_R_QUERY_SVC_CONFIG *r_c,
- QUERY_SERVICE_CONFIG *cfg,
- uint32 buf_size);
-BOOL svc_io_r_query_svc_config(char *desc, SVC_R_QUERY_SVC_CONFIG *r_u, prs_struct *ps, int depth);
-BOOL svc_io_q_query_disp_name(char *desc, SVC_Q_QUERY_DISP_NAME *q_u, prs_struct *ps, int depth);
-BOOL make_svc_r_query_disp_name(SVC_R_QUERY_DISP_NAME *r_d,
- char *disp_name, uint32 status);
-BOOL svc_io_r_query_disp_name(char *desc, SVC_R_QUERY_DISP_NAME *r_u, prs_struct *ps, int depth);
-BOOL make_svc_q_close(SVC_Q_CLOSE *q_c, POLICY_HND *hnd);
-BOOL svc_io_q_close(char *desc, SVC_Q_CLOSE *q_u, prs_struct *ps, int depth);
-BOOL svc_io_r_close(char *desc, SVC_R_CLOSE *r_u, prs_struct *ps, int depth);
-BOOL make_svc_q_change_svc_config(SVC_Q_CHANGE_SVC_CONFIG *q_u, POLICY_HND *hnd,
- uint32 service_type, uint32 start_type,
- uint32 unknown_0,
- uint32 error_control,
- char* bin_path_name, char* load_order_grp,
- uint32 tag_id,
- char* dependencies, char* service_start_name,
- char* password,
- char* disp_name);
-BOOL svc_io_q_change_svc_config(char *desc, SVC_Q_CHANGE_SVC_CONFIG *q_u, prs_struct *ps, int depth);
-BOOL make_svc_r_change_svc_config(SVC_R_CHANGE_SVC_CONFIG *r_c,
- uint32 unknown_0, uint32 status);
-BOOL svc_io_r_change_svc_config(char *desc, SVC_R_CHANGE_SVC_CONFIG *r_u, prs_struct *ps, int depth);
-
-/*The following definitions come from rpc_parse/parse_wks.c */
-
-BOOL make_wks_q_query_info(WKS_Q_QUERY_INFO *q_u,
- char *server, uint16 switch_value) ;
-BOOL wks_io_q_query_info(char *desc, WKS_Q_QUERY_INFO *q_u, prs_struct *ps, int depth);
-BOOL make_wks_info_100(WKS_INFO_100 *inf,
- uint32 platform_id, uint32 ver_major, uint32 ver_minor,
- char *my_name, char *domain_name);
-BOOL make_wks_r_query_info(WKS_R_QUERY_INFO *r_u,
- uint32 switch_value, WKS_INFO_100 *wks100,
- int status) ;
-BOOL wks_io_r_query_info(char *desc, WKS_R_QUERY_INFO *r_u, prs_struct *ps, int depth);
-
/*The following definitions come from rpc_server/srv_brs.c */
BOOL api_brs_rpc(rpcsrv_struct *p);
@@ -3937,6 +2985,7 @@ void cmd_sam_create_dom_group(struct client_info *info, int argc, char *argv[]);
void cmd_sam_enum_users(struct client_info *info, int argc, char *argv[]);
void cmd_sam_query_groupmem(struct client_info *info, int argc, char *argv[]);
void cmd_sam_query_group(struct client_info *info, int argc, char *argv[]);
+void cmd_sam_query_sec_obj(struct client_info *info, int argc, char *argv[]);
void cmd_sam_query_user(struct client_info *info, int argc, char *argv[]);
void cmd_sam_set_userinfo2(struct client_info *info, int argc, char *argv[]);
void cmd_sam_set_userinfo(struct client_info *info, int argc, char *argv[]);
@@ -4282,7 +3331,7 @@ uint32 _samr_open_domain(const POLICY_HND *connect_pol,
uint32 _samr_get_usrdom_pwinfo(const POLICY_HND *user_pol,
uint32 *unknown_0,
uint32 *unknown_1);
-uint32 _samr_query_sec_obj(const POLICY_HND *user_pol, SAM_SID_STUFF *sid_stuff);
+uint32 _samr_query_sec_obj(const POLICY_HND *user_pol, SEC_DESC_BUF *buf);
uint32 _samr_enum_dom_users( const POLICY_HND *pol, uint32 *start_idx,
uint16 acb_mask, uint16 unk_1, uint32 size,
SAM_ENTRY **sam,
@@ -4454,7 +3503,7 @@ uint32 samr_open_by_tdbrid( TDB_CONTEXT *tdb,
uint32 _samr_get_usrdom_pwinfo(const POLICY_HND *user_pol,
uint32 *unknown_0,
uint32 *unknown_1);
-uint32 _samr_query_sec_obj(const POLICY_HND *user_pol, SAM_SID_STUFF *sid_stuff);
+uint32 _samr_query_sec_obj(const POLICY_HND *user_pol, SEC_DESC_BUF *buf);
uint32 _samr_query_usergroups(const POLICY_HND *pol,
uint32 *num_groups,
DOM_GID **gids);
diff --git a/source/include/rpc_client_proto.h b/source/include/rpc_client_proto.h
index 0b3311ecda8..111615ece23 100644
--- a/source/include/rpc_client_proto.h
+++ b/source/include/rpc_client_proto.h
@@ -311,6 +311,9 @@ uint32 samr_enum_dom_users( POLICY_HND *pol, uint32 *start_idx,
uint32 *num_sam_users);
BOOL samr_connect( const char *srv_name, uint32 access_mask,
POLICY_HND *connect_pol);
+BOOL samr_query_sec_obj( const POLICY_HND *pol,
+ uint32 type,
+ SEC_DESC_BUF *buf);
BOOL samr_open_user( const POLICY_HND *pol,
uint32 unk_0, uint32 rid,
POLICY_HND *user_pol);
diff --git a/source/include/rpc_parse_proto.h b/source/include/rpc_parse_proto.h
index 12948258f98..df982a3f5df 100644
--- a/source/include/rpc_parse_proto.h
+++ b/source/include/rpc_parse_proto.h
@@ -88,6 +88,7 @@ BOOL eventlog_io_r_readeventlog(char *desc, EVENTLOG_R_READEVENTLOG *r_u, prs_st
BOOL make_lsa_trans_name(LSA_TRANS_NAME *trn, UNISTR2 *uni_name,
uint32 sid_name_use, char *name, uint32 idx);
+int make_dom_ref(DOM_R_REF *ref, const char *dom_name, const DOM_SID *dom_sid);
BOOL make_lsa_sec_qos(LSA_SEC_QOS *qos, uint16 imp_lev, uint8 ctxt, uint8 eff,
uint32 unknown);
BOOL make_lsa_obj_attr(LSA_OBJ_ATTR *attr, uint32 attributes, LSA_SEC_QOS *qos);
@@ -417,7 +418,7 @@ BOOL samr_io_q_get_usrdom_pwinfo(char *desc, SAMR_Q_GET_USRDOM_PWINFO *q_u, prs
BOOL make_samr_r_get_usrdom_pwinfo(SAMR_R_GET_USRDOM_PWINFO *q_u, uint32 status);
BOOL samr_io_r_get_usrdom_pwinfo(char *desc, SAMR_R_GET_USRDOM_PWINFO *r_u, prs_struct *ps, int depth);
BOOL make_samr_q_query_sec_obj(SAMR_Q_QUERY_SEC_OBJ *q_u,
- POLICY_HND *user_pol, uint16 switch_value);
+ const POLICY_HND *user_pol, uint32 sec_info);
BOOL samr_io_q_query_sec_obj(char *desc, SAMR_Q_QUERY_SEC_OBJ *q_u, prs_struct *ps, int depth);
BOOL make_samr_q_query_dom_info(SAMR_Q_QUERY_DOMAIN_INFO *q_u,
POLICY_HND *domain_pol, uint16 switch_value);
@@ -431,11 +432,6 @@ BOOL make_samr_r_query_dom_info(SAMR_R_QUERY_DOMAIN_INFO *r_u,
uint16 switch_value, SAM_UNK_CTR *ctr,
uint32 status);
BOOL samr_io_r_query_dom_info(char *desc, SAMR_R_QUERY_DOMAIN_INFO *r_u, prs_struct *ps, int depth);
-BOOL make_dom_sid3(DOM_SID3 *sid3, uint16 unk_0, uint16 unk_1, DOM_SID *sid);
-BOOL make_sam_sid_stuff(SAM_SID_STUFF *stf,
- uint16 unknown_2, uint16 unknown_3,
- uint32 unknown_4, uint16 unknown_6, uint16 unknown_7,
- int num_sid3s);
BOOL samr_io_r_query_sec_obj(char *desc, SAMR_R_QUERY_SEC_OBJ *r_u, prs_struct *ps, int depth);
BOOL make_sam_entry(SAM_ENTRY *sam, uint32 len_sam_name, uint32 rid);
BOOL make_samr_q_enum_dom_users(SAMR_Q_ENUM_DOM_USERS *q_e, POLICY_HND *pol,
diff --git a/source/include/rpc_samr.h b/source/include/rpc_samr.h
index ff8b6b3fdc2..c8c6f975bac 100644
--- a/source/include/rpc_samr.h
+++ b/source/include/rpc_samr.h
@@ -389,69 +389,15 @@ SAMR_Q_QUERY_SEC_OBJ - info level 4. returns SIDs.
typedef struct q_samr_query_sec_obj_info
{
POLICY_HND user_pol; /* policy handle */
- uint16 switch_value; /* 0x0000 0004 */
- /* uint8 pad[2] */
+ uint32 sec_info; /* xxxx_SECURITY_INFORMATION 0x0000 0004 */
} SAMR_Q_QUERY_SEC_OBJ;
-/* DOM_SID3 example:
- 0x14 0x035b 0x0002 S-1-1
- 0x18 0x07ff 0x000f S-1-5-20-DOMAIN_ALIAS_RID_ADMINS
- 0x18 0x07ff 0x000f S-1-5-20-DOMAIN_ALIAS_RID_ACCOUNT_OPS
- 0x24 0x0044 0x0002 S-1-5-21-nnn-nnn-nnn-0x03f1
- */
-
-/* DOM_SID3 example:
- 0x24 0x0044 0x0002 S-1-5-21-nnn-nnn-nnn-0x03ee
- 0x18 0x07ff 0x000f S-1-5-20-DOMAIN_ALIAS_RID_ADMINS
- 0x14 0x035b 0x0002 S-1-1
- */
-
-/* DOM_SID3 - security id */
-typedef struct sid_info_3
-{
- uint16 len; /* length, bytes, including length of len :-) */
- /* uint8 pad[2]; */
-
- DOM_SID sid;
-
-} DOM_SID3;
-
-
-#define MAX_SAM_SIDS 15
-
-/* SAM_SID_STUFF */
-typedef struct sid_stuff_info
-{
- uint16 unknown_2; /* 0x0001 */
- uint16 unknown_3; /* 0x8004 */
-
- uint8 padding1[8];
-
- uint32 unknown_4; /* 0x0000 0014 */
- uint32 unknown_5; /* 0x0000 0014 */
-
- uint16 unknown_6; /* 0x0002 */
- uint16 unknown_7; /* 0x5800 */
-
- uint32 num_sids;
-
- uint16 padding2;
-
- DOM_SID3 sid[MAX_SAM_SIDS];
-
-} SAM_SID_STUFF;
-
/* SAMR_R_QUERY_SEC_OBJ - probably an open */
typedef struct r_samr_query_sec_obj_info
{
- uint32 ptr_0;
- uint32 sid_stuff_len0;
-
- uint32 ptr_1;
- uint32 sid_stuff_len1;
-
- SAM_SID_STUFF sid_stuff;
+ uint32 ptr;
+ SEC_DESC_BUF buf;
uint32 status; /* return status */
diff --git a/source/rpc_client/cli_samr.c b/source/rpc_client/cli_samr.c
index 4c47a94efde..1b91c587bdf 100644
--- a/source/rpc_client/cli_samr.c
+++ b/source/rpc_client/cli_samr.c
@@ -685,6 +685,65 @@ BOOL samr_connect( const char *srv_name, uint32 access_mask,
}
/****************************************************************************
+do a SAMR Query Security Object
+****************************************************************************/
+BOOL samr_query_sec_obj( const POLICY_HND *pol,
+ uint32 type,
+ SEC_DESC_BUF *buf)
+{
+ prs_struct data;
+ prs_struct rdata;
+
+ SAMR_Q_QUERY_SEC_OBJ q_o;
+ BOOL valid_pol = False;
+
+ DEBUG(4,("SAMR Query Sec Object: type %x\n", type));
+
+ if (pol == NULL) return False;
+
+ /* create and send a MSRPC command with api SAMR_QUERY_SEC_OBJ */
+
+ prs_init(&data , 0, 4, False);
+ prs_init(&rdata, 0, 4, True );
+
+ /* store the parameters */
+ make_samr_q_query_sec_obj(&q_o, pol, type);
+
+ /* turn parameters into data stream */
+ samr_io_q_query_sec_obj("", &q_o, &data, 0);
+
+ /* send the data on \PIPE\ */
+ if (rpc_hnd_pipe_req(pol, SAMR_QUERY_SEC_OBJECT, &data, &rdata))
+ {
+ SAMR_R_QUERY_SEC_OBJ r_o;
+ BOOL p;
+
+ ZERO_STRUCT(r_o);
+
+ samr_io_r_query_sec_obj("", &r_o, &rdata, 0);
+ p = rdata.offset != 0;
+
+ if (p && r_o.status != 0)
+ {
+ /* report error code */
+ DEBUG(4,("SAMR_R_QUERY_SEC_OBJ: %s\n", get_nt_error_msg(r_o.status)));
+ p = False;
+ }
+
+ if (p)
+ {
+ valid_pol = True;
+ buf->sec = r_o.buf.sec;
+ }
+ }
+
+ prs_free_data(&data );
+ prs_free_data(&rdata );
+
+ return valid_pol;
+}
+
+/****************************************************************************
do a SAMR Open User
****************************************************************************/
BOOL samr_open_user( const POLICY_HND *pol,
diff --git a/source/rpc_parse/parse_prs.c b/source/rpc_parse/parse_prs.c
index 582b5ec98a6..b56cf5dc665 100644
--- a/source/rpc_parse/parse_prs.c
+++ b/source/rpc_parse/parse_prs.c
@@ -600,8 +600,10 @@ BOOL _prs_uint32(char *name, prs_struct *ps, int depth, uint32 *data32)
q = prs_data(ps, ps->offset);
if (q == NULL)
{
+ fstring str;
+ slprintf(str, sizeof(str)-1, "_prs_uint32 error (%s)", name);
ps->error = True;
- prs_debug_out(ps, "_prs_uint32 error", 5);
+ prs_debug_out(ps, str, 5);
return False;
}
diff --git a/source/rpc_parse/parse_samr.c b/source/rpc_parse/parse_samr.c
index 40ac1d2fd57..987fc1b677d 100644
--- a/source/rpc_parse/parse_samr.c
+++ b/source/rpc_parse/parse_samr.c
@@ -305,14 +305,14 @@ BOOL samr_io_r_get_usrdom_pwinfo(char *desc, SAMR_R_GET_USRDOM_PWINFO *r_u, prs
reads or writes a structure.
********************************************************************/
BOOL make_samr_q_query_sec_obj(SAMR_Q_QUERY_SEC_OBJ *q_u,
- POLICY_HND *user_pol, uint16 switch_value)
+ const POLICY_HND *user_pol, uint32 sec_info)
{
if (q_u == NULL) return False;
DEBUG(5,("samr_make_samr_q_query_sec_obj\n"));
memcpy(&q_u->user_pol, user_pol, sizeof(q_u->user_pol));
- q_u->switch_value = switch_value;
+ q_u->sec_info = sec_info;
return True;
}
@@ -333,8 +333,7 @@ BOOL samr_io_q_query_sec_obj(char *desc, SAMR_Q_QUERY_SEC_OBJ *q_u, prs_struct
smb_io_pol_hnd("user_pol", &(q_u->user_pol), ps, depth);
prs_align(ps);
- prs_uint16("switch_value", ps, depth, &(q_u->switch_value));
- prs_align(ps);
+ prs_uint32("sec_info", ps, depth, &(q_u->sec_info));
return True;
}
@@ -674,111 +673,6 @@ BOOL samr_io_r_query_dom_info(char *desc, SAMR_R_QUERY_DOMAIN_INFO *r_u, prs_str
/*******************************************************************
- makes a DOM_SID3 structure.
-
- calculate length by adding up the size of the components.
- ********************************************************************/
-BOOL make_dom_sid3(DOM_SID3 *sid3, uint16 unk_0, uint16 unk_1, DOM_SID *sid)
-{
- if (sid3 == NULL) return False;
-
- sid3->sid = *sid;
- sid3->len = 2 + 8 + sid3->sid.num_auths * 4;
-
- return True;
-}
-
-/*******************************************************************
-reads or writes a SAM_SID3 structure.
-
-this one's odd, because the length (in bytes) is specified at the beginning.
-the length _includes_ the length of the length, too :-)
-
-********************************************************************/
-static BOOL sam_io_dom_sid3(char *desc, DOM_SID3 *sid3, prs_struct *ps, int depth)
-{
- if (sid3 == NULL) return False;
-
- prs_debug(ps, depth, desc, "sam_io_dom_sid3");
- depth++;
-
- prs_uint16("len", ps, depth, &(sid3->len));
- prs_align(ps);
- smb_io_dom_sid("", &(sid3->sid), ps, depth);
-
- return True;
-}
-
-/*******************************************************************
-makes a SAMR_R_UNKNOWN3 structure.
-
-unknown_2 : 0x0001
-unknown_3 : 0x8004
-
-unknown_4,5 : 0x0000 0014
-
-unknown_6 : 0x0002
-unknown_7 : 0x5800 or 0x0070
-
-********************************************************************/
-BOOL make_sam_sid_stuff(SAM_SID_STUFF *stf,
- uint16 unknown_2, uint16 unknown_3,
- uint32 unknown_4, uint16 unknown_6, uint16 unknown_7,
- int num_sid3s)
-{
- stf->unknown_2 = unknown_2;
- stf->unknown_3 = unknown_3;
-
- bzero(stf->padding1, sizeof(stf->padding1));
-
- stf->unknown_4 = unknown_4;
- stf->unknown_5 = unknown_4;
-
- stf->unknown_6 = unknown_6;
- stf->unknown_7 = unknown_7;
-
- stf->num_sids = num_sid3s;
-
- stf->padding2 = 0x0000;
-
- return True;
-}
-
-/*******************************************************************
-reads or writes a SAM_SID_STUFF structure.
-********************************************************************/
-static BOOL sam_io_sid_stuff(char *desc, SAM_SID_STUFF *stf, prs_struct *ps, int depth)
-{
- uint32 i;
-
- if (stf == NULL) return False;
-
- DEBUG(5,("make_sam_sid_stuff\n"));
-
- prs_uint16("unknown_2", ps, depth, &(stf->unknown_2));
- prs_uint16("unknown_3", ps, depth, &(stf->unknown_3));
-
- prs_uint8s(False, "padding1", ps, depth, stf->padding1, sizeof(stf->padding1));
-
- prs_uint32("unknown_4", ps, depth, &(stf->unknown_4));
- prs_uint32("unknown_5", ps, depth, &(stf->unknown_5));
- prs_uint16("unknown_6", ps, depth, &(stf->unknown_6));
- prs_uint16("unknown_7", ps, depth, &(stf->unknown_7));
-
- prs_uint32("num_sids ", ps, depth, &(stf->num_sids ));
- prs_uint16("padding2 ", ps, depth, &(stf->padding2 ));
-
- SMB_ASSERT_ARRAY(stf->sid, stf->num_sids);
-
- for (i = 0; i < stf->num_sids; i++)
- {
- sam_io_dom_sid3("", &(stf->sid[i]), ps, depth);
- }
-
- return True;
-}
-
-/*******************************************************************
reads or writes a SAMR_R_QUERY_SEC_OBJ structure.
this one's odd, because the daft buggers use a different mechanism
@@ -792,10 +686,6 @@ wierd.
********************************************************************/
BOOL samr_io_r_query_sec_obj(char *desc, SAMR_R_QUERY_SEC_OBJ *r_u, prs_struct *ps, int depth)
{
- int ptr_len0=0;
- int ptr_len1=0;
- int ptr_sid_stuff = 0;
-
if (r_u == NULL) return False;
prs_debug(ps, depth, desc, "samr_io_r_query_sec_obj");
@@ -803,57 +693,11 @@ BOOL samr_io_r_query_sec_obj(char *desc, SAMR_R_QUERY_SEC_OBJ *r_u, prs_struct
prs_align(ps);
- prs_uint32("ptr_0 ", ps, depth, &(r_u->ptr_0 ));
-
- if (ps->io)
- {
- /* reading. do the length later */
- prs_uint32("sid_stuff_len0", ps, depth, &(r_u->sid_stuff_len0));
- }
- else
- {
- /* storing */
- ptr_len0 = ps->offset; ps->offset += 4;
- }
-
- if (r_u->ptr_0 != 0)
- {
- prs_uint32("ptr_1 ", ps, depth, &(r_u->ptr_1 ));
- if (ps->io)
- {
- /* reading. do the length later */
- prs_uint32("sid_stuff_len1", ps, depth, &(r_u->sid_stuff_len1));
- }
- else
- {
- /* storing */
- ptr_len1 = ps->offset; ps->offset += 4;
- }
-
- if (r_u->ptr_1 != 0)
- {
- ptr_sid_stuff = ps->offset;
- sam_io_sid_stuff("", &(r_u->sid_stuff), ps, depth);
- }
- }
-
- if (!(ps->io)) /* storing not reading. do the length, now. */
+ prs_uint32("ptr", ps, depth, &(r_u->ptr));
+ if (r_u->ptr != 0x0)
{
- if (ptr_sid_stuff != 0)
- {
- uint32 sid_stuff_len = ps->offset - ptr_sid_stuff;
- int old_len = ps->offset;
-
- ps->offset = ptr_len0;
- prs_uint32("sid_stuff_len0", ps, depth, &sid_stuff_len);
-
- ps->offset = ptr_len1;
- prs_uint32("sid_stuff_len1", ps, depth, &sid_stuff_len);
-
- ps->offset = old_len;
- }
+ sec_io_desc_buf("sec", &r_u->buf, ps, depth);
}
-
prs_uint32("status", ps, depth, &(r_u->status));
return True;
diff --git a/source/rpc_parse/parse_sec.c b/source/rpc_parse/parse_sec.c
index ef7300925ab..1564252f115 100644
--- a/source/rpc_parse/parse_sec.c
+++ b/source/rpc_parse/parse_sec.c
@@ -305,6 +305,7 @@ static BOOL sec_io_desc(char *desc, SEC_DESC *t, prs_struct *ps, int depth)
/* start of security descriptor stored for back-calc offset purposes */
old_offset = ps->offset;
+ max_offset = old_offset;
prs_uint16("revision ", ps, depth, &(t->revision ));
prs_uint16("type ", ps, depth, &(t->type ));
@@ -527,6 +528,8 @@ BOOL sec_io_desc_buf(char *desc, SEC_DESC_BUF *sec, prs_struct *ps, int depth)
prs_uint32_post("max_len", ps, depth, &(sec->max_len), off_max_len, size == 0 ? sec->max_len : size + 8);
prs_uint32_post("len ", ps, depth, &(sec->len ), off_len , size == 0 ? 0 : size + 8);
+ ps->offset = old_offset + sec->max_len;
+
return True;
}
diff --git a/source/rpc_server/srv_samr.c b/source/rpc_server/srv_samr.c
index 4f3750a7624..edf2e8aec6d 100644
--- a/source/rpc_server/srv_samr.c
+++ b/source/rpc_server/srv_samr.c
@@ -94,15 +94,7 @@ static void api_samr_query_sec_obj( rpcsrv_struct *p, prs_struct *data, prs_stru
ZERO_STRUCT(q_u);
samr_io_q_query_sec_obj("", &q_u, data, 0);
-
- r_u.status = _samr_query_sec_obj(&q_u.user_pol, &r_u.sid_stuff);
-
- if (r_u.status == 0)
- {
- r_u.ptr_0 = 1;
- r_u.ptr_1 = 1;
- }
-
+ r_u.status = _samr_query_sec_obj(&q_u.user_pol, &r_u.buf);
samr_io_r_query_sec_obj("", &r_u, rdata, 0);
}
diff --git a/source/rpcclient/cmd_samr.c b/source/rpcclient/cmd_samr.c
index fc4ea0d8b50..bdd1240751d 100644
--- a/source/rpcclient/cmd_samr.c
+++ b/source/rpcclient/cmd_samr.c
@@ -999,6 +999,7 @@ void cmd_sam_create_dom_user(struct client_info *info, int argc, char *argv[])
case 'j':
{
join_domain = True;
+ break;
}
}
}
@@ -1841,6 +1842,117 @@ void cmd_sam_query_group(struct client_info *info, int argc, char *argv[])
/****************************************************************************
+experimental SAM query security object.
+****************************************************************************/
+void cmd_sam_query_sec_obj(struct client_info *info, int argc, char *argv[])
+{
+ fstring srv_name;
+ fstring domain;
+ fstring sid_str;
+ DOM_SID sid;
+ BOOL res = True;
+ BOOL res1 = True;
+
+ char *user_name;
+ const char *names[1];
+ uint32 num_rids;
+ uint32 *rids;
+ uint32 *types;
+ POLICY_HND sam_pol;
+ POLICY_HND pol_dom;
+
+ fstrcpy(domain, info->dom.level5_dom);
+ sid_copy(&sid, &info->dom.level5_sid);
+
+ if (sid.num_auths == 0)
+ {
+ report(out_hnd, "please use 'lsaquery' first, to ascertain the SID\n");
+ return;
+ }
+
+ if (argc < 2)
+ {
+ report(out_hnd, "samsecquery <name>\n");
+ return;
+ }
+
+ user_name = argv[1];
+
+ argc--;
+ argv++;
+
+ fstrcpy(srv_name, "\\\\");
+ fstrcat(srv_name, info->dest_host);
+ strupper(srv_name);
+
+ sid_to_string(sid_str, &sid);
+
+ report(out_hnd, "SAM Query User: %s\n", user_name);
+ report(out_hnd, "From: %s To: %s Domain: %s SID: %s\n",
+ info->myhostname, srv_name, domain, sid_str);
+
+ /* establish a connection. */
+ res = res ? samr_connect( srv_name, 0x02000000,
+ &sam_pol) : False;
+
+ /* connect to the domain */
+ res = res ? samr_open_domain( &sam_pol, 0x304, &sid,
+ &pol_dom) : False;
+
+ /* look up user rid */
+ names[0] = user_name;
+ res1 = res ? samr_query_lookup_names( &pol_dom, 0x3e8,
+ 1, names,
+ &num_rids, &rids, &types) : False;
+
+ /* send user info query */
+ if (res1 && num_rids == 1)
+ {
+ POLICY_HND pol_usr;
+ BOOL ret = True;
+ SEC_DESC_BUF buf;
+
+ /* send open domain (on user sid) */
+ ret = samr_open_user( &pol_dom, 0x02011b, rids[0], &pol_usr);
+ res1 = ret ? samr_query_sec_obj(&pol_usr, 0x04, &buf) : False;
+ ret = ret ? samr_close (&pol_usr) : False;
+
+ if (buf.sec != NULL)
+ {
+ display_sec_desc(out_hnd, ACTION_HEADER , buf.sec);
+ display_sec_desc(out_hnd, ACTION_ENUMERATE, buf.sec);
+ display_sec_desc(out_hnd, ACTION_FOOTER , buf.sec);
+ }
+
+ free_sec_desc_buf(&buf);
+ }
+ else
+ {
+ res1 = False;
+ }
+
+ res = res ? samr_close( &pol_dom) : False;
+ res = res ? samr_close( &sam_pol) : False;
+
+ if (res1)
+ {
+ DEBUG(5,("cmd_sam_query_sec_obj: succeeded\n"));
+ }
+ else
+ {
+ DEBUG(5,("cmd_sam_query_sec_obj: failed\n"));
+ }
+ if (rids != NULL)
+ {
+ free(rids);
+ }
+ if (types != NULL)
+ {
+ free(types);
+ }
+}
+
+/****************************************************************************
experimental SAM user query.
****************************************************************************/
void cmd_sam_query_user(struct client_info *info, int argc, char *argv[])
diff --git a/source/rpcclient/display_sec.c b/source/rpcclient/display_sec.c
index b29a27fefaa..1916bdcb88d 100644
--- a/source/rpcclient/display_sec.c
+++ b/source/rpcclient/display_sec.c
@@ -145,6 +145,10 @@ void display_sec_ace(FILE *out_hnd, enum action_type action, SEC_ACE *const ace)
****************************************************************************/
void display_sec_acl(FILE *out_hnd, enum action_type action, SEC_ACL *const sec_acl)
{
+ if (sec_acl == NULL)
+ {
+ return;
+ }
switch (action)
{
case ACTION_HEADER:
diff --git a/source/rpcclient/rpcclient.c b/source/rpcclient/rpcclient.c
index 8a5d2e7756a..4a2887655f1 100644
--- a/source/rpcclient/rpcclient.c
+++ b/source/rpcclient/rpcclient.c
@@ -421,6 +421,12 @@ struct command_set commands[] =
{COMPL_NONE, COMPL_NONE}
},
{
+ "samquerysec",
+ cmd_sam_query_sec_obj,
+ "<username>",
+ {COMPL_SAMUSR, COMPL_NONE}
+ },
+ {
"samuserset2",
cmd_sam_set_userinfo2,
"<username> [-s acb_bits] SAM User Set Info 2 (experimental!)",
diff --git a/source/samrd/srv_samr_passdb.c b/source/samrd/srv_samr_passdb.c
index 5748b66bc6a..d6abb6225fa 100644
--- a/source/samrd/srv_samr_passdb.c
+++ b/source/samrd/srv_samr_passdb.c
@@ -150,7 +150,7 @@ static BOOL get_sampwd_entries(SAM_USER_INFO_21 *pw_buf,
endsmbpwent(vp);
- return (*num_entries) > 0;
+ return (*total_entries) > 0;
}
/*******************************************************************
@@ -263,7 +263,7 @@ uint32 _samr_get_usrdom_pwinfo(const POLICY_HND *user_pol,
/*******************************************************************
samr_reply_query_sec_obj
********************************************************************/
-uint32 _samr_query_sec_obj(const POLICY_HND *user_pol, SAM_SID_STUFF *sid_stuff)
+uint32 _samr_query_sec_obj(const POLICY_HND *user_pol, SEC_DESC_BUF *buf)
{
DOM_SID usr_sid;
@@ -275,6 +275,7 @@ uint32 _samr_query_sec_obj(const POLICY_HND *user_pol, SAM_SID_STUFF *sid_stuff)
SMB_ASSERT_ARRAY(usr_sid.sub_auths, usr_sid.num_auths+1);
+#if 0
/* maybe need another 1 or 2 (S-1-5-0x20-0x220 and S-1-5-20-0x224) */
/* these two are DOMAIN_ADMIN and DOMAIN_ACCT_OP group RIDs */
make_dom_sid3(&sid_stuff->sid[0], 0x035b, 0x0002, &global_sid_S_1_1);
@@ -285,6 +286,7 @@ uint32 _samr_query_sec_obj(const POLICY_HND *user_pol, SAM_SID_STUFF *sid_stuff)
0x00000014, 0x0002, 0x0070,
2);
+#endif
DEBUG(5,("samr_query_sec_obj: %d\n", __LINE__));
return NT_STATUS_NOPROBLEMO;
@@ -793,7 +795,7 @@ uint32 _samr_query_dispinfo( const POLICY_HND *domain_pol, uint16 level,
DOMAIN_GRP *sam_grps = NULL;
uint16 acb_mask = ACB_NORMAL;
int num_sam_entries = 0;
- int total_entries;
+ int total_entries = 0;
DEBUG(5,("samr_reply_query_dispinfo: %d\n", __LINE__));
@@ -827,6 +829,7 @@ uint32 _samr_query_dispinfo( const POLICY_HND *domain_pol, uint16 level,
unbecome_root(True);
if (!ret)
{
+ DEBUG(5,("get_sampwd_entries: failed\n"));
return NT_STATUS_ACCESS_DENIED;
}
break;
@@ -918,7 +921,6 @@ uint32 _samr_query_dispinfo( const POLICY_HND *domain_pol, uint16 level,
{
ctr->sam.info = NULL;
safe_free(sam_grps);
- safe_free(grps);
return NT_STATUS_INVALID_INFO_CLASS;
}
}
@@ -926,7 +928,6 @@ uint32 _samr_query_dispinfo( const POLICY_HND *domain_pol, uint16 level,
DEBUG(5,("samr_reply_query_dispinfo: %d\n", __LINE__));
safe_free(sam_grps);
- safe_free(grps);
if ((*num_entries) < num_sam_entries)
{
diff --git a/source/samrd/srv_samr_usr_tdb.c b/source/samrd/srv_samr_usr_tdb.c
index 72aeadecb41..85d26f505f5 100644
--- a/source/samrd/srv_samr_usr_tdb.c
+++ b/source/samrd/srv_samr_usr_tdb.c
@@ -23,6 +23,7 @@
#include "includes.h"
+#include "rpc_parse.h"
#include "nterr.h"
#include "sids.h"
@@ -226,7 +227,7 @@ uint32 _samr_get_usrdom_pwinfo(const POLICY_HND *user_pol,
/*******************************************************************
samr_reply_query_sec_obj
********************************************************************/
-uint32 _samr_query_sec_obj(const POLICY_HND *user_pol, SAM_SID_STUFF *sid_stuff)
+uint32 _samr_query_sec_obj(const POLICY_HND *user_pol, SEC_DESC_BUF *buf)
{
uint32 rid;
DOM_SID usr_sid;
@@ -241,6 +242,7 @@ uint32 _samr_query_sec_obj(const POLICY_HND *user_pol, SAM_SID_STUFF *sid_stuff)
sid_copy(&usr_sid, &global_sam_sid);
sid_append_rid(&usr_sid, rid);
+#if 0
/* maybe need another 1 or 2 (S-1-5-0x20-0x220 and S-1-5-20-0x224) */
/* these two are DOMAIN_ADMIN and DOMAIN_ACCT_OP group RIDs */
make_dom_sid3(&sid_stuff->sid[0], 0x035b, 0x0002, &global_sid_S_1_1);
@@ -251,6 +253,7 @@ uint32 _samr_query_sec_obj(const POLICY_HND *user_pol, SAM_SID_STUFF *sid_stuff)
0x00000014, 0x0002, 0x0070,
2);
+#endif
DEBUG(5,("samr_query_sec_obj: %d\n", __LINE__));
return NT_STATUS_NOPROBLEMO;
@@ -686,14 +689,35 @@ static void create_user_info_21(SAM_USER_INFO_21 *usr,
init_nt_time(&usr->logon_time);
init_nt_time(&usr->logoff_time);
init_nt_time(&usr->kickoff_time);
- init_nt_time(&usr->pass_can_change_time);
+ init_nt_time(&usr->pass_must_change_time);
unix_to_nt_time(&usr->pass_last_set_time, t);
- unix_to_nt_time(&usr->pass_must_change_time, t);
+ unix_to_nt_time(&usr->pass_can_change_time, t);
usr->acb_info = acb_info | ACB_DISABLED | ACB_PWNOTREQ;
usr->user_rid = user_rid;
usr->group_rid = group_rid;
+ make_uni_hdr(&(usr->hdr_full_name ), 0);
+ make_uni_hdr(&(usr->hdr_home_dir ), 1);
+ make_uni_hdr(&(usr->hdr_dir_drive ), 0);
+ make_uni_hdr(&(usr->hdr_logon_script), 0);
+ make_uni_hdr(&(usr->hdr_profile_path), 1);
+ make_uni_hdr(&(usr->hdr_acct_desc ), 0);
+ make_uni_hdr(&(usr->hdr_workstations), 0);
+ make_uni_hdr(&(usr->hdr_unknown_str ), 0);
+ make_uni_hdr(&(usr->hdr_munged_dial ), 0);
+
+ make_unistr2(&(usr->uni_user_name ), "", 0);
+ make_unistr2(&(usr->uni_full_name ), "", 0);
+ make_unistr2(&(usr->uni_home_dir ), "", 1);
+ make_unistr2(&(usr->uni_dir_drive ), "", 0);
+ make_unistr2(&(usr->uni_logon_script), "", 0);
+ make_unistr2(&(usr->uni_profile_path), "", 1);
+ make_unistr2(&(usr->uni_acct_desc ), "", 0 );
+ make_unistr2(&(usr->uni_workstations), "", 0);
+ make_unistr2(&(usr->uni_unknown_str ), "", 0 );
+ make_unistr2(&(usr->uni_munged_dial ), "", 0 );
+
copy_unistr2(&usr->uni_user_name, uni_user_name);
make_uni_hdr(&usr->hdr_user_name, uni_user_name->uni_str_len);