summaryrefslogtreecommitdiff
path: root/source3/rpcclient/cmd_samr.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/rpcclient/cmd_samr.c')
-rw-r--r--source3/rpcclient/cmd_samr.c60
1 files changed, 54 insertions, 6 deletions
diff --git a/source3/rpcclient/cmd_samr.c b/source3/rpcclient/cmd_samr.c
index d8ebc56ab6..c66f79938b 100644
--- a/source3/rpcclient/cmd_samr.c
+++ b/source3/rpcclient/cmd_samr.c
@@ -2540,6 +2540,7 @@ void cmd_sam_set_userinfo(struct client_info *info)
uint32 type[MAX_LOOKUP_SIDS];
POLICY_HND sam_pol;
POLICY_HND pol_dom;
+ SAM_USER_INFO_21 usr21;
fstrcpy(domain, info->dom.level5_dom);
sid_copy(&sid, &info->dom.level5_sid);
@@ -2622,7 +2623,7 @@ void cmd_sam_set_userinfo(struct client_info *info)
/* connect to the domain */
res = res ? samr_open_domain(smb_cli, fnum,
- &sam_pol, 0x304, &sid,
+ &sam_pol, 0x02000000, &sid,
&pol_dom) : False;
/* look up user rid */
@@ -2633,23 +2634,70 @@ void cmd_sam_set_userinfo(struct client_info *info)
&num_rids, rid, type) : False;
/* send set user info */
- if (res1 && num_rids == 1)
+ if (res1 && num_rids == 1 && get_samr_query_userinfo(smb_cli, fnum,
+ &pol_dom,
+ 0x15, rid[0], &usr21))
{
void *usr = NULL;
uint32 switch_value = 0;
+ char pwbuf[516];
+
if (set_passwd)
{
- SAM_USER_INFO_24 *p = malloc(sizeof(SAM_USER_INFO_24));
- encode_pw_buffer(p->pass, password,
+ encode_pw_buffer(pwbuf, password,
strlen(password), True);
- SamOEMhash(p->pass, smb_cli->sess_key, 1);
+ SamOEMhash(pwbuf, smb_cli->sess_key, 1);
+ }
+
+ if (True)
+ {
+ SAM_USER_INFO_24 *p = malloc(sizeof(SAM_USER_INFO_24));
+ make_sam_user_info24(p, pwbuf);
usr = p;
switch_value = 24;
}
+
+ if (False)
+ {
+ SAM_USER_INFO_23 *p = malloc(sizeof(SAM_USER_INFO_23));
+ /* send user info query, level 0x15 */
+ make_sam_user_info23W(p,
+ &usr21.logon_time,
+ &usr21.logoff_time,
+ &usr21.kickoff_time,
+ &usr21.pass_last_set_time,
+ &usr21.pass_can_change_time,
+ &usr21.pass_must_change_time,
+
+ &usr21.uni_user_name,
+ &usr21.uni_full_name,
+ &usr21.uni_home_dir,
+ &usr21.uni_dir_drive,
+ &usr21.uni_logon_script,
+ &usr21.uni_profile_path,
+ &usr21.uni_acct_desc,
+ &usr21.uni_workstations,
+ &usr21.uni_unknown_str,
+ &usr21.uni_munged_dial,
+
+ 0x0,
+ usr21.group_rid,
+ usr21.acb_info,
+
+ 0x09f827fa,
+ usr21.logon_divs,
+ &usr21.logon_hrs,
+ usr21.unknown_5,
+ pwbuf,
+ usr21.unknown_6);
+
+ usr = p;
+ switch_value = 23;
+ }
if (usr != NULL)
{
- res1 = set_samr_query_userinfo(smb_cli, fnum,
+ res1 = set_samr_set_userinfo(smb_cli, fnum,
&pol_dom,
switch_value, rid[0], usr);
}