diff options
author | Luke Leighton <lkcl@samba.org> | 2000-03-06 23:25:18 +0000 |
---|---|---|
committer | Luke Leighton <lkcl@samba.org> | 2000-03-06 23:25:18 +0000 |
commit | 751b80390720fc996e9c3faebc5b5251d2ea9ed1 (patch) | |
tree | fc9d834a74fb8f09a5ad2e12bed75643413ed2c5 | |
parent | ad1409a9b875b1c0216e70a259fd1c10485cd39c (diff) | |
download | samba-751b80390720fc996e9c3faebc5b5251d2ea9ed1.tar.gz |
set_userinfo at level 23 was wrong.
-rw-r--r-- | source/include/lib_smb_proto.h | 77 | ||||
-rw-r--r-- | source/include/rpc_parse_proto.h | 91 | ||||
-rw-r--r-- | source/include/rpc_samr.h | 10 | ||||
-rw-r--r-- | source/include/winbindd_proto.h | 91 | ||||
-rw-r--r-- | source/lib/util_unistr.c | 3 | ||||
-rw-r--r-- | source/rpc_parse/parse_samr.c | 26 | ||||
-rw-r--r-- | source/samrd/srv_samr_usr_tdb.c | 69 |
7 files changed, 157 insertions, 210 deletions
diff --git a/source/include/lib_smb_proto.h b/source/include/lib_smb_proto.h index ede2cc101f8..0b092fbf2d2 100644 --- a/source/include/lib_smb_proto.h +++ b/source/include/lib_smb_proto.h @@ -344,83 +344,6 @@ BOOL create_user_creds( prs_struct *ps, const vuser_key *key, const struct user_creds *usr); -/*The following definitions come from rpc_parse/parse_misc.c */ - -BOOL smb_io_bigint(char *desc, BIGINT *bigint, prs_struct *ps, int depth); -BOOL smb_io_time(char *desc, NTTIME *nttime, prs_struct *ps, int depth); -BOOL smb_io_lookup_level(char *desc, LOOKUP_LEVEL *level, prs_struct *ps, int depth); -uint32 get_enum_hnd(ENUM_HND *enh); -BOOL make_enum_hnd(ENUM_HND *enh, uint32 hnd); -BOOL smb_io_enum_hnd(char *desc, ENUM_HND *hnd, prs_struct *ps, int depth); -BOOL smb_io_dom_sid(char *desc, DOM_SID *sid, prs_struct *ps, int depth); -BOOL make_dom_sid2(DOM_SID2 *sid2, const DOM_SID *sid); -BOOL smb_io_dom_sid2(char *desc, DOM_SID2 *sid, prs_struct *ps, int depth); -BOOL make_str_hdr(STRHDR *hdr, int max_len, int len, uint32 buffer); -BOOL smb_io_strhdr(char *desc, STRHDR *hdr, prs_struct *ps, int depth); -BOOL make_strhdr2(STRHDR2 *hdr, uint32 max_len, uint32 len, uint32 buffer); -BOOL smb_io_strhdr2(char *desc, STRHDR2 *hdr, prs_struct *ps, int depth); -BOOL make_uni_hdr(UNIHDR *hdr, int len); -BOOL make_unihdr_from_unistr2(UNIHDR *hdr, const UNISTR2 *str); -BOOL smb_io_unihdr(char *desc, UNIHDR *hdr, prs_struct *ps, int depth); -BOOL make_buf_hdr(BUFHDR *hdr, int max_len, int len); -BOOL smb_io_hdrbuf_pre(char *desc, BUFHDR *hdr, prs_struct *ps, int depth, uint32 *offset); -BOOL smb_io_hdrbuf_post(char *desc, BUFHDR *hdr, prs_struct *ps, int depth, - uint32 ptr_hdrbuf, uint32 max_len, uint32 len); -BOOL smb_io_hdrbuf(char *desc, BUFHDR *hdr, prs_struct *ps, int depth); -BOOL make_bufhdr2(BUFHDR2 *hdr, uint32 info_level, uint32 length, uint32 buffer); -BOOL smb_io_bufhdr2(char *desc, BUFHDR2 *hdr, prs_struct *ps, int depth); -BOOL make_uni_hdr2(UNIHDR2 *hdr, int len); -BOOL make_unihdr2_from_unistr2(UNIHDR2 *hdr, const UNISTR2 *str); -BOOL smb_io_unihdr2(char *desc, UNIHDR2 *hdr2, prs_struct *ps, int depth); -BOOL make_unistr(UNISTR *str, char *buf); -BOOL smb_io_unistr(char *desc, UNISTR *uni, prs_struct *ps, int depth); -BOOL make_buffer3_uint32(BUFFER3 *str, uint32 val); -BOOL make_buffer3_str(BUFFER3 *str, const char *buf, int len); -BOOL make_buffer3_hex(BUFFER3 *str, char *buf); -BOOL make_buffer3_bytes(BUFFER3 *str, uint8 *buf, int len); -BOOL smb_io_buffer3(char *desc, BUFFER3 *buf3, prs_struct *ps, int depth); -BOOL make_buffer4_str(BUFFER4 *str, const char *buf, int len); -BOOL smb_io_buffer4(char *desc, BUFFER4 *buf4, uint32 buffer, prs_struct *ps, int depth); -BOOL init_buffer5(BUFFER5 **str); -BOOL clear_buffer5(BUFFER5 **str); -BOOL make_buffer5(BUFFER5 *str, char *buf, int len); -BOOL smb_io_buffer5(char *desc, BUFFER5 *buf5, prs_struct *ps, int depth); -BOOL make_buffer2_multi(BUFFER2 *str, char *const* const buf, uint32 num); -BOOL make_buffer2(BUFFER2 *str, const char *buf, int len); -BOOL smb_io_buffer2(char *desc, BUFFER2 *buf2, uint32 buffer, prs_struct *ps, int depth); -BOOL make_buf_unistr2(UNISTR2 *str, uint32 *ptr, const char *buf); -BOOL make_string2(STRING2 *str, const char *buf, int len); -BOOL make_buf_string2(STRING2 *str, uint32 *ptr, const char *buf); -BOOL smb_io_string2(char *desc, STRING2 *str2, uint32 buffer, prs_struct *ps, int depth); -BOOL make_unistr2(UNISTR2 *str, const char *buf, int len); -BOOL smb_io_unistr2(char *desc, UNISTR2 *uni2, uint32 buffer, prs_struct *ps, int depth); -BOOL make_dom_rid2(DOM_RID2 *rid2, uint32 rid, uint8 type, uint32 idx); -BOOL smb_io_dom_rid2(char *desc, DOM_RID2 *rid2, prs_struct *ps, int depth); -BOOL make_dom_rid3(DOM_RID3 *rid3, uint32 rid, uint8 type); -BOOL smb_io_dom_rid3(char *desc, DOM_RID3 *rid3, prs_struct *ps, int depth); -BOOL make_log_info(DOM_LOG_INFO *log, - const char *logon_srv, const char *acct_name, - uint16 sec_chan, const char *comp_name); -BOOL smb_io_log_info(char *desc, DOM_LOG_INFO *log, prs_struct *ps, int depth); -BOOL smb_io_chal(char *desc, DOM_CHAL *chal, prs_struct *ps, int depth); -BOOL smb_io_cred(char *desc, DOM_CRED *cred, prs_struct *ps, int depth); -BOOL make_clnt_info2(DOM_CLNT_INFO2 *clnt, - const char *logon_srv, const char *comp_name, - DOM_CRED *clnt_cred); -BOOL smb_io_clnt_info2(char *desc, DOM_CLNT_INFO2 *clnt, prs_struct *ps, int depth); -BOOL make_clnt_info(DOM_CLNT_INFO *clnt, - const char *logon_srv, const char *acct_name, - uint16 sec_chan, const char *comp_name, - DOM_CRED *cred); -BOOL smb_io_clnt_info(char *desc, DOM_CLNT_INFO *clnt, prs_struct *ps, int depth); -BOOL make_owf_info(OWF_INFO *hash, const uint8 data[16]); -BOOL smb_io_owf_info(char *desc, OWF_INFO *hash, prs_struct *ps, int depth); -BOOL smb_io_gid(char *desc, DOM_GID *gid, prs_struct *ps, int depth); -BOOL smb_io_pol_hnd(char *desc, POLICY_HND *pol, prs_struct *ps, int depth); -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, diff --git a/source/include/rpc_parse_proto.h b/source/include/rpc_parse_proto.h index bdd8f55eae1..2f8e445f558 100644 --- a/source/include/rpc_parse_proto.h +++ b/source/include/rpc_parse_proto.h @@ -158,6 +158,83 @@ 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); +BOOL smb_io_time(char *desc, NTTIME *nttime, prs_struct *ps, int depth); +BOOL smb_io_lookup_level(char *desc, LOOKUP_LEVEL *level, prs_struct *ps, int depth); +uint32 get_enum_hnd(ENUM_HND *enh); +BOOL make_enum_hnd(ENUM_HND *enh, uint32 hnd); +BOOL smb_io_enum_hnd(char *desc, ENUM_HND *hnd, prs_struct *ps, int depth); +BOOL smb_io_dom_sid(char *desc, DOM_SID *sid, prs_struct *ps, int depth); +BOOL make_dom_sid2(DOM_SID2 *sid2, const DOM_SID *sid); +BOOL smb_io_dom_sid2(char *desc, DOM_SID2 *sid, prs_struct *ps, int depth); +BOOL make_str_hdr(STRHDR *hdr, int max_len, int len, uint32 buffer); +BOOL smb_io_strhdr(char *desc, STRHDR *hdr, prs_struct *ps, int depth); +BOOL make_strhdr2(STRHDR2 *hdr, uint32 max_len, uint32 len, uint32 buffer); +BOOL smb_io_strhdr2(char *desc, STRHDR2 *hdr, prs_struct *ps, int depth); +BOOL make_uni_hdr(UNIHDR *hdr, int len); +BOOL make_unihdr_from_unistr2(UNIHDR *hdr, const UNISTR2 *str); +BOOL smb_io_unihdr(char *desc, UNIHDR *hdr, prs_struct *ps, int depth); +BOOL make_buf_hdr(BUFHDR *hdr, int max_len, int len); +BOOL smb_io_hdrbuf_pre(char *desc, BUFHDR *hdr, prs_struct *ps, int depth, uint32 *offset); +BOOL smb_io_hdrbuf_post(char *desc, BUFHDR *hdr, prs_struct *ps, int depth, + uint32 ptr_hdrbuf, uint32 max_len, uint32 len); +BOOL smb_io_hdrbuf(char *desc, BUFHDR *hdr, prs_struct *ps, int depth); +BOOL make_bufhdr2(BUFHDR2 *hdr, uint32 info_level, uint32 length, uint32 buffer); +BOOL smb_io_bufhdr2(char *desc, BUFHDR2 *hdr, prs_struct *ps, int depth); +BOOL make_uni_hdr2(UNIHDR2 *hdr, int len); +BOOL make_unihdr2_from_unistr2(UNIHDR2 *hdr, const UNISTR2 *str); +BOOL smb_io_unihdr2(char *desc, UNIHDR2 *hdr2, prs_struct *ps, int depth); +BOOL make_unistr(UNISTR *str, char *buf); +BOOL smb_io_unistr(char *desc, UNISTR *uni, prs_struct *ps, int depth); +BOOL make_buffer3_uint32(BUFFER3 *str, uint32 val); +BOOL make_buffer3_str(BUFFER3 *str, const char *buf, int len); +BOOL make_buffer3_hex(BUFFER3 *str, char *buf); +BOOL make_buffer3_bytes(BUFFER3 *str, uint8 *buf, int len); +BOOL smb_io_buffer3(char *desc, BUFFER3 *buf3, prs_struct *ps, int depth); +BOOL make_buffer4_str(BUFFER4 *str, const char *buf, int len); +BOOL smb_io_buffer4(char *desc, BUFFER4 *buf4, uint32 buffer, prs_struct *ps, int depth); +BOOL init_buffer5(BUFFER5 **str); +BOOL clear_buffer5(BUFFER5 **str); +BOOL make_buffer5(BUFFER5 *str, char *buf, int len); +BOOL smb_io_buffer5(char *desc, BUFFER5 *buf5, prs_struct *ps, int depth); +BOOL make_buffer2_multi(BUFFER2 *str, char *const* const buf, uint32 num); +BOOL make_buffer2(BUFFER2 *str, const char *buf, int len); +BOOL smb_io_buffer2(char *desc, BUFFER2 *buf2, uint32 buffer, prs_struct *ps, int depth); +BOOL make_buf_unistr2(UNISTR2 *str, uint32 *ptr, const char *buf); +BOOL make_string2(STRING2 *str, const char *buf, int len); +BOOL make_buf_string2(STRING2 *str, uint32 *ptr, const char *buf); +BOOL smb_io_string2(char *desc, STRING2 *str2, uint32 buffer, prs_struct *ps, int depth); +BOOL make_unistr2(UNISTR2 *str, const char *buf, int len); +BOOL smb_io_unistr2(char *desc, UNISTR2 *uni2, uint32 buffer, prs_struct *ps, int depth); +BOOL make_dom_rid2(DOM_RID2 *rid2, uint32 rid, uint8 type, uint32 idx); +BOOL smb_io_dom_rid2(char *desc, DOM_RID2 *rid2, prs_struct *ps, int depth); +BOOL make_dom_rid3(DOM_RID3 *rid3, uint32 rid, uint8 type); +BOOL smb_io_dom_rid3(char *desc, DOM_RID3 *rid3, prs_struct *ps, int depth); +BOOL make_log_info(DOM_LOG_INFO *log, + const char *logon_srv, const char *acct_name, + uint16 sec_chan, const char *comp_name); +BOOL smb_io_log_info(char *desc, DOM_LOG_INFO *log, prs_struct *ps, int depth); +BOOL smb_io_chal(char *desc, DOM_CHAL *chal, prs_struct *ps, int depth); +BOOL smb_io_cred(char *desc, DOM_CRED *cred, prs_struct *ps, int depth); +BOOL make_clnt_info2(DOM_CLNT_INFO2 *clnt, + const char *logon_srv, const char *comp_name, + DOM_CRED *clnt_cred); +BOOL smb_io_clnt_info2(char *desc, DOM_CLNT_INFO2 *clnt, prs_struct *ps, int depth); +BOOL make_clnt_info(DOM_CLNT_INFO *clnt, + const char *logon_srv, const char *acct_name, + uint16 sec_chan, const char *comp_name, + DOM_CRED *cred); +BOOL smb_io_clnt_info(char *desc, DOM_CLNT_INFO *clnt, prs_struct *ps, int depth); +BOOL make_owf_info(OWF_INFO *hash, const uint8 data[16]); +BOOL smb_io_owf_info(char *desc, OWF_INFO *hash, prs_struct *ps, int depth); +BOOL smb_io_gid(char *desc, DOM_GID *gid, prs_struct *ps, int depth); +BOOL smb_io_pol_hnd(char *desc, POLICY_HND *pol, prs_struct *ps, int depth); +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_netsec.c */ BOOL rpc_hdr_netsec_auth_chk(RPC_HDR_AUTH *rai); @@ -606,11 +683,8 @@ BOOL make_sam_user_info23W(SAM_USER_INFO_23 *usr, uint16 logon_divs, LOGON_HRS *hrs, uint32 unknown_5, - char newpass[516] -#if 0 - , uint32 unknown_6 -#endif - ); + char newpass[516], + uint32 unknown_6); BOOL make_sam_user_info23A(SAM_USER_INFO_23 *usr, NTTIME *logon_time, /* all zeros */ @@ -639,11 +713,8 @@ BOOL make_sam_user_info23A(SAM_USER_INFO_23 *usr, uint16 logon_divs, LOGON_HRS *hrs, uint32 unknown_5, - char newpass[516] -#if 0 - , uint32 unknown_6 -#endif - ); + char newpass[516], + uint32 unknown_6); BOOL make_sam_user_info21W(SAM_USER_INFO_21 *usr, const NTTIME *logon_time, diff --git a/source/include/rpc_samr.h b/source/include/rpc_samr.h index 3ae3f5ae404..e577739fb1a 100644 --- a/source/include/rpc_samr.h +++ b/source/include/rpc_samr.h @@ -2,9 +2,9 @@ Unix SMB/Netbios implementation. Version 1.9. SMB parameters and setup - Copyright (C) Andrew Tridgell 1992-1998 - Copyright (C) Luke Kenneth Casson Leighton 1996-1998 - Copyright (C) Paul Ashton 1997-1998 + Copyright (C) Andrew Tridgell 1992-2000 + Copyright (C) Luke Kenneth Casson Leighton 1996-2000 + Copyright (C) Paul Ashton 1997-2000 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -148,7 +148,7 @@ SamrTestPrivateFunctionsUser typedef struct logon_hours_info { - uint32 len; /* normally 21 bytes */ + uint16 len; /* normally 21 bytes */ uint8 hours[32]; } LOGON_HRS; @@ -207,10 +207,8 @@ typedef struct sam_user_info_23 UNISTR2 uni_unknown_str ; /* don't know what this is, yet. */ UNISTR2 uni_munged_dial ; /* munged path name and dial-back tel no */ -#if 0 uint32 unknown_6; /* 0x0000 04ec */ uint32 padding4; -#endif LOGON_HRS logon_hrs; diff --git a/source/include/winbindd_proto.h b/source/include/winbindd_proto.h index 60f7a2ada4d..0bce2bda6db 100644 --- a/source/include/winbindd_proto.h +++ b/source/include/winbindd_proto.h @@ -1775,83 +1775,6 @@ 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); -BOOL smb_io_time(char *desc, NTTIME *nttime, prs_struct *ps, int depth); -BOOL smb_io_lookup_level(char *desc, LOOKUP_LEVEL *level, prs_struct *ps, int depth); -uint32 get_enum_hnd(ENUM_HND *enh); -BOOL make_enum_hnd(ENUM_HND *enh, uint32 hnd); -BOOL smb_io_enum_hnd(char *desc, ENUM_HND *hnd, prs_struct *ps, int depth); -BOOL smb_io_dom_sid(char *desc, DOM_SID *sid, prs_struct *ps, int depth); -BOOL make_dom_sid2(DOM_SID2 *sid2, const DOM_SID *sid); -BOOL smb_io_dom_sid2(char *desc, DOM_SID2 *sid, prs_struct *ps, int depth); -BOOL make_str_hdr(STRHDR *hdr, int max_len, int len, uint32 buffer); -BOOL smb_io_strhdr(char *desc, STRHDR *hdr, prs_struct *ps, int depth); -BOOL make_strhdr2(STRHDR2 *hdr, uint32 max_len, uint32 len, uint32 buffer); -BOOL smb_io_strhdr2(char *desc, STRHDR2 *hdr, prs_struct *ps, int depth); -BOOL make_uni_hdr(UNIHDR *hdr, int len); -BOOL make_unihdr_from_unistr2(UNIHDR *hdr, const UNISTR2 *str); -BOOL smb_io_unihdr(char *desc, UNIHDR *hdr, prs_struct *ps, int depth); -BOOL make_buf_hdr(BUFHDR *hdr, int max_len, int len); -BOOL smb_io_hdrbuf_pre(char *desc, BUFHDR *hdr, prs_struct *ps, int depth, uint32 *offset); -BOOL smb_io_hdrbuf_post(char *desc, BUFHDR *hdr, prs_struct *ps, int depth, - uint32 ptr_hdrbuf, uint32 max_len, uint32 len); -BOOL smb_io_hdrbuf(char *desc, BUFHDR *hdr, prs_struct *ps, int depth); -BOOL make_bufhdr2(BUFHDR2 *hdr, uint32 info_level, uint32 length, uint32 buffer); -BOOL smb_io_bufhdr2(char *desc, BUFHDR2 *hdr, prs_struct *ps, int depth); -BOOL make_uni_hdr2(UNIHDR2 *hdr, int len); -BOOL make_unihdr2_from_unistr2(UNIHDR2 *hdr, const UNISTR2 *str); -BOOL smb_io_unihdr2(char *desc, UNIHDR2 *hdr2, prs_struct *ps, int depth); -BOOL make_unistr(UNISTR *str, char *buf); -BOOL smb_io_unistr(char *desc, UNISTR *uni, prs_struct *ps, int depth); -BOOL make_buffer3_uint32(BUFFER3 *str, uint32 val); -BOOL make_buffer3_str(BUFFER3 *str, const char *buf, int len); -BOOL make_buffer3_hex(BUFFER3 *str, char *buf); -BOOL make_buffer3_bytes(BUFFER3 *str, uint8 *buf, int len); -BOOL smb_io_buffer3(char *desc, BUFFER3 *buf3, prs_struct *ps, int depth); -BOOL make_buffer4_str(BUFFER4 *str, const char *buf, int len); -BOOL smb_io_buffer4(char *desc, BUFFER4 *buf4, uint32 buffer, prs_struct *ps, int depth); -BOOL init_buffer5(BUFFER5 **str); -BOOL clear_buffer5(BUFFER5 **str); -BOOL make_buffer5(BUFFER5 *str, char *buf, int len); -BOOL smb_io_buffer5(char *desc, BUFFER5 *buf5, prs_struct *ps, int depth); -BOOL make_buffer2_multi(BUFFER2 *str, char *const* const buf, uint32 num); -BOOL make_buffer2(BUFFER2 *str, const char *buf, int len); -BOOL smb_io_buffer2(char *desc, BUFFER2 *buf2, uint32 buffer, prs_struct *ps, int depth); -BOOL make_buf_unistr2(UNISTR2 *str, uint32 *ptr, const char *buf); -BOOL make_string2(STRING2 *str, const char *buf, int len); -BOOL make_buf_string2(STRING2 *str, uint32 *ptr, const char *buf); -BOOL smb_io_string2(char *desc, STRING2 *str2, uint32 buffer, prs_struct *ps, int depth); -BOOL make_unistr2(UNISTR2 *str, const char *buf, int len); -BOOL smb_io_unistr2(char *desc, UNISTR2 *uni2, uint32 buffer, prs_struct *ps, int depth); -BOOL make_dom_rid2(DOM_RID2 *rid2, uint32 rid, uint8 type, uint32 idx); -BOOL smb_io_dom_rid2(char *desc, DOM_RID2 *rid2, prs_struct *ps, int depth); -BOOL make_dom_rid3(DOM_RID3 *rid3, uint32 rid, uint8 type); -BOOL smb_io_dom_rid3(char *desc, DOM_RID3 *rid3, prs_struct *ps, int depth); -BOOL make_log_info(DOM_LOG_INFO *log, - const char *logon_srv, const char *acct_name, - uint16 sec_chan, const char *comp_name); -BOOL smb_io_log_info(char *desc, DOM_LOG_INFO *log, prs_struct *ps, int depth); -BOOL smb_io_chal(char *desc, DOM_CHAL *chal, prs_struct *ps, int depth); -BOOL smb_io_cred(char *desc, DOM_CRED *cred, prs_struct *ps, int depth); -BOOL make_clnt_info2(DOM_CLNT_INFO2 *clnt, - const char *logon_srv, const char *comp_name, - DOM_CRED *clnt_cred); -BOOL smb_io_clnt_info2(char *desc, DOM_CLNT_INFO2 *clnt, prs_struct *ps, int depth); -BOOL make_clnt_info(DOM_CLNT_INFO *clnt, - const char *logon_srv, const char *acct_name, - uint16 sec_chan, const char *comp_name, - DOM_CRED *cred); -BOOL smb_io_clnt_info(char *desc, DOM_CLNT_INFO *clnt, prs_struct *ps, int depth); -BOOL make_owf_info(OWF_INFO *hash, const uint8 data[16]); -BOOL smb_io_owf_info(char *desc, OWF_INFO *hash, prs_struct *ps, int depth); -BOOL smb_io_gid(char *desc, DOM_GID *gid, prs_struct *ps, int depth); -BOOL smb_io_pol_hnd(char *desc, POLICY_HND *pol, prs_struct *ps, int depth); -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, @@ -2451,11 +2374,8 @@ BOOL make_sam_user_info23W(SAM_USER_INFO_23 *usr, uint16 logon_divs, LOGON_HRS *hrs, uint32 unknown_5, - char newpass[516] -#if 0 - , uint32 unknown_6 -#endif - ); + char newpass[516], + uint32 unknown_6); BOOL make_sam_user_info23A(SAM_USER_INFO_23 *usr, NTTIME *logon_time, /* all zeros */ @@ -2484,11 +2404,8 @@ BOOL make_sam_user_info23A(SAM_USER_INFO_23 *usr, uint16 logon_divs, LOGON_HRS *hrs, uint32 unknown_5, - char newpass[516] -#if 0 - , uint32 unknown_6 -#endif - ); + char newpass[516], + uint32 unknown_6); BOOL make_sam_user_info21W(SAM_USER_INFO_21 *usr, const NTTIME *logon_time, diff --git a/source/lib/util_unistr.c b/source/lib/util_unistr.c index 6065cf53508..b739d638f5a 100644 --- a/source/lib/util_unistr.c +++ b/source/lib/util_unistr.c @@ -452,6 +452,7 @@ BOOL copy_unistr2(UNISTR2 *str, const UNISTR2 *from) /* copy the string */ memcpy(str->buffer, from->buffer, str->uni_str_len * 2); + DEBUG(10,("copy_unistr2: string len %d\n", str->uni_str_len)); } else { @@ -479,7 +480,7 @@ frees a UNISTR2 structure. ********************************************************************/ void unistr2_free(UNISTR2 *name) { - free(name); + safe_free(name); } /******************************************************************* diff --git a/source/rpc_parse/parse_samr.c b/source/rpc_parse/parse_samr.c index 1e92b235b82..ca1df693611 100644 --- a/source/rpc_parse/parse_samr.c +++ b/source/rpc_parse/parse_samr.c @@ -4607,7 +4607,8 @@ static BOOL sam_io_logon_hrs(char *desc, LOGON_HRS *hrs, prs_struct *ps, int de prs_align(ps); - prs_uint32 ( "len ", ps, depth, &(hrs->len )); + prs_uint16 ( "len ", ps, depth, &hrs->len); + prs_align(ps); if (hrs->len > 64) { @@ -4888,11 +4889,8 @@ BOOL make_sam_user_info23W(SAM_USER_INFO_23 *usr, uint16 logon_divs, LOGON_HRS *hrs, uint32 unknown_5, - char newpass[516] -#if 0 - , uint32 unknown_6 -#endif - ) + char newpass[516], + uint32 unknown_6) { int len_user_name = user_name != NULL ? user_name->uni_str_len : 0; int len_full_name = full_name != NULL ? full_name->uni_str_len : 0; @@ -4951,10 +4949,8 @@ BOOL make_sam_user_info23W(SAM_USER_INFO_23 *usr, copy_unistr2(&(usr->uni_unknown_str ), unk_str ); copy_unistr2(&(usr->uni_munged_dial ), mung_dial); -#if 0 usr->unknown_6 = unknown_6; /* 0x0000 04ec */ usr->padding4 = 0; -#endif if (hrs) { @@ -5004,11 +5000,8 @@ BOOL make_sam_user_info23A(SAM_USER_INFO_23 *usr, uint16 logon_divs, LOGON_HRS *hrs, uint32 unknown_5, - char newpass[516] -#if 0 - , uint32 unknown_6 -#endif - ) + char newpass[516], + uint32 unknown_6) { int len_user_name = user_name != NULL ? strlen(user_name) : 0; int len_full_name = full_name != NULL ? strlen(full_name) : 0; @@ -5067,10 +5060,8 @@ BOOL make_sam_user_info23A(SAM_USER_INFO_23 *usr, make_unistr2(&(usr->uni_unknown_str ), unk_str , len_unknown_str ); make_unistr2(&(usr->uni_munged_dial ), mung_dial , len_munged_dial ); -#if 0 usr->unknown_6 = unknown_6; /* 0x0000 04ec */ usr->padding4 = 0; -#endif if (hrs) { @@ -5154,10 +5145,8 @@ static BOOL sam_io_user_info23(char *desc, SAM_USER_INFO_23 *usr, prs_struct *p smb_io_unistr2("uni_munged_dial ", &(usr->uni_munged_dial ), usr->hdr_munged_dial .buffer, ps, depth); /* worksations user can log on from */ prs_align(ps); -#if 0 prs_uint32("unknown_6 ", ps, depth, &(usr->unknown_6 )); prs_uint32("padding4 ", ps, depth, &(usr->padding4 )); -#endif if (usr->ptr_logon_hrs) { @@ -5267,7 +5256,10 @@ BOOL make_sam_user_info21W(SAM_USER_INFO_21 *usr, bzero(usr->padding1, sizeof(usr->padding1)); + dump_data_pw("user_name:", user_name, sizeof(*user_name)); + copy_unistr2(&(usr->uni_user_name ), user_name); + dump_data_pw("user_name:", &usr->uni_user_name, sizeof(*user_name)); copy_unistr2(&(usr->uni_full_name ), full_name); copy_unistr2(&(usr->uni_home_dir ), home_dir ); copy_unistr2(&(usr->uni_dir_drive ), dir_drive); diff --git a/source/samrd/srv_samr_usr_tdb.c b/source/samrd/srv_samr_usr_tdb.c index f856f8e5d34..448b37a4bc4 100644 --- a/source/samrd/srv_samr_usr_tdb.c +++ b/source/samrd/srv_samr_usr_tdb.c @@ -258,12 +258,33 @@ static BOOL tdb_set_userinfo_pwds(TDB_CONTEXT * tdb, return True; } +static UNISTR2 *choose_unistr2(const UNISTR2 *str1, const UNISTR2 *str2) +{ + if (str1->uni_max_len != 0) + { + return unistr2_dup(str1); + } + return unistr2_dup(str2); +} + static BOOL tdb_set_userinfo_23(TDB_CONTEXT * tdb, const SAM_USER_INFO_23 * usr23, const uchar lm_pwd[16], const uchar nt_pwd[16]) { SAM_USER_INFO_21 usr; + BOOL ret; + + UNISTR2 *uni_user_name; + UNISTR2 *uni_full_name; + UNISTR2 *uni_home_dir; + UNISTR2 *uni_dir_drive; + UNISTR2 *uni_logon_script; + UNISTR2 *uni_profile_path; + UNISTR2 *uni_acct_desc; + UNISTR2 *uni_workstations; + UNISTR2 *uni_unknown_str; + UNISTR2 *uni_munged_dial; if (tdb_writelock(tdb) != 0) { @@ -276,23 +297,34 @@ static BOOL tdb_set_userinfo_23(TDB_CONTEXT * tdb, return False; } - if (!make_sam_user_info21W(&usr, + uni_user_name = choose_unistr2( &usr23->uni_user_name, &usr.uni_user_name); + uni_full_name = choose_unistr2( &usr23->uni_full_name, &usr.uni_full_name); + uni_home_dir = choose_unistr2( &usr23->uni_home_dir, &usr.uni_home_dir); + uni_dir_drive = choose_unistr2( &usr23->uni_dir_drive, &usr.uni_dir_drive); + uni_logon_script = choose_unistr2( &usr23->uni_logon_script, &usr.uni_logon_script); + uni_profile_path = choose_unistr2( &usr23->uni_profile_path, &usr.uni_profile_path); + uni_acct_desc = choose_unistr2( &usr23->uni_acct_desc, &usr.uni_acct_desc); + uni_workstations = choose_unistr2( &usr23->uni_workstations, &usr.uni_workstations); + uni_unknown_str = choose_unistr2( &usr23->uni_unknown_str, &usr.uni_unknown_str); + uni_munged_dial = choose_unistr2( &usr23->uni_munged_dial, &usr.uni_munged_dial); + + ret = make_sam_user_info21W(&usr, &usr23->logon_time, &usr23->logoff_time, &usr23->kickoff_time, &usr23->pass_last_set_time, &usr23->pass_can_change_time, &usr23->pass_must_change_time, - &usr23->uni_user_name, - &usr23->uni_full_name, - &usr23->uni_home_dir, - &usr23->uni_dir_drive, - &usr23->uni_logon_script, - &usr23->uni_profile_path, - &usr23->uni_acct_desc, - &usr23->uni_workstations, - &usr23->uni_unknown_str, - &usr23->uni_munged_dial, + uni_user_name, + uni_full_name, + uni_home_dir, + uni_dir_drive, + uni_logon_script, + uni_profile_path, + uni_acct_desc, + uni_workstations, + uni_unknown_str, + uni_munged_dial, lm_pwd, nt_pwd, usr.user_rid, usr23->group_rid, @@ -300,7 +332,20 @@ static BOOL tdb_set_userinfo_23(TDB_CONTEXT * tdb, usr.unknown_3, usr23->logon_divs, &usr23->logon_hrs, - usr23->unknown_5, usr.unknown_6)) + usr23->unknown_5, usr23->unknown_6); + + unistr2_free(uni_user_name); + unistr2_free(uni_full_name); + unistr2_free(uni_home_dir); + unistr2_free(uni_dir_drive); + unistr2_free(uni_logon_script); + unistr2_free(uni_profile_path); + unistr2_free(uni_acct_desc); + unistr2_free(uni_workstations); + unistr2_free(uni_unknown_str); + unistr2_free(uni_munged_dial); + + if (!ret) { tdb_writeunlock(tdb); return False; |