summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Leighton <lkcl@samba.org>2000-03-06 23:25:18 +0000
committerLuke Leighton <lkcl@samba.org>2000-03-06 23:25:18 +0000
commit751b80390720fc996e9c3faebc5b5251d2ea9ed1 (patch)
treefc9d834a74fb8f09a5ad2e12bed75643413ed2c5
parentad1409a9b875b1c0216e70a259fd1c10485cd39c (diff)
downloadsamba-751b80390720fc996e9c3faebc5b5251d2ea9ed1.tar.gz
set_userinfo at level 23 was wrong.
-rw-r--r--source/include/lib_smb_proto.h77
-rw-r--r--source/include/rpc_parse_proto.h91
-rw-r--r--source/include/rpc_samr.h10
-rw-r--r--source/include/winbindd_proto.h91
-rw-r--r--source/lib/util_unistr.c3
-rw-r--r--source/rpc_parse/parse_samr.c26
-rw-r--r--source/samrd/srv_samr_usr_tdb.c69
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;