diff options
-rw-r--r-- | source/Makefile.in | 2 | ||||
-rw-r--r-- | source/include/proto.h | 963 | ||||
-rw-r--r-- | source/include/rpc_client_proto.h | 3 | ||||
-rw-r--r-- | source/include/rpc_parse_proto.h | 8 | ||||
-rw-r--r-- | source/include/rpc_samr.h | 60 | ||||
-rw-r--r-- | source/rpc_client/cli_samr.c | 59 | ||||
-rw-r--r-- | source/rpc_parse/parse_prs.c | 4 | ||||
-rw-r--r-- | source/rpc_parse/parse_samr.c | 168 | ||||
-rw-r--r-- | source/rpc_parse/parse_sec.c | 3 | ||||
-rw-r--r-- | source/rpc_server/srv_samr.c | 10 | ||||
-rw-r--r-- | source/rpcclient/cmd_samr.c | 112 | ||||
-rw-r--r-- | source/rpcclient/display_sec.c | 4 | ||||
-rw-r--r-- | source/rpcclient/rpcclient.c | 6 | ||||
-rw-r--r-- | source/samrd/srv_samr_passdb.c | 11 | ||||
-rw-r--r-- | source/samrd/srv_samr_usr_tdb.c | 30 |
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); |