dce/rpc
authorLuke Leighton <lkcl@samba.org>
Sat, 10 Oct 1998 00:46:28 +0000 (00:46 +0000)
committerLuke Leighton <lkcl@samba.org>
Sat, 10 Oct 1998 00:46:28 +0000 (00:46 +0000)
(This used to be commit dfb48aab6153e53a5efd1f8ee518375cc584b101)

source3/include/proto.h
source3/libsmb/clientgen.c
source3/libsmb/smbencrypt.c
source3/rpcclient/cmd_samr.c

index c473aeb38e9b8fee1d73d25cbbc2b2f82b949e18..9e2d4d33b0668d890189ac87911fe3acc3b96013 100644 (file)
@@ -511,7 +511,7 @@ void nt_lm_owf_gen(char *pwd, uchar nt_p16[16], uchar p16[16]);
 void SMBOWFencrypt(uchar passwd[16], uchar *c8, uchar p24[24]);
 void NTLMSSPOWFencrypt(uchar passwd[8], uchar *ntlmchalresp, uchar p24[24]);
 void SMBNTencrypt(uchar *passwd, uchar *c8, uchar *p24);
-BOOL make_oem_passwd_hash(char data[516], char *passwd, char old_pw_hash[16]);
+BOOL make_oem_passwd_hash(char data[516], char *passwd, char old_pw_hash[16], BOOL unicode);
 
 /*The following definitions come from  libsmb/smberr.c  */
 
@@ -1732,8 +1732,8 @@ void make_enc_hash(SAMR_ENC_HASH *hsh, char hash[16]);
 void samr_io_enc_hash(char *desc, SAMR_ENC_HASH *hsh, prs_struct *ps, int depth);
 void make_samr_q_chgpasswd_user(SAMR_Q_CHGPASSWD_USER *q_u,
                                char *dest_host, char *user_name,
-                               char nt_newpass[516], char nt_oldhash[16],
-                               char lm_newpass[516], char lm_oldhash[16]);
+                               char lm_newpass[516], char nt_oldhash[16],
+                               char nt_newpass[516], char lm_oldhash[16]);
 void samr_io_q_chgpasswd_user(char *desc, SAMR_Q_CHGPASSWD_USER *q_u, prs_struct *ps, int depth);
 void samr_io_r_chgpasswd_user(char *desc, SAMR_R_CHGPASSWD_USER *r_u, prs_struct *ps, int depth);
 
index 72d7ca935b27b8ccaff33948c83a17ecf0356d30..64e67c552215ef913d27cfde3febf57cc77e9365 100644 (file)
@@ -2052,7 +2052,7 @@ BOOL cli_oem_change_password(struct cli_state *cli, char *user, char *new_passwo
   strupper(upper_case_old_pw);
   E_P16((uchar *)upper_case_old_pw, old_pw_hash);
 
-       if (!make_oem_passwd_hash( data, new_password, old_pw_hash))
+       if (!make_oem_passwd_hash( data, new_password, old_pw_hash, False))
        {
                return False;
        }
index 27c19d58365d09fc0d5aeb67bc3afa23b3ee8398..7caf417ea1f2e337acec10fe8e098f2988514dec 100644 (file)
@@ -190,10 +190,9 @@ void SMBNTencrypt(uchar *passwd, uchar *c8, uchar *p24)
 #endif
 }
 
-
-BOOL make_oem_passwd_hash(char data[516], char *passwd, char old_pw_hash[16])
+BOOL make_oem_passwd_hash(char data[516], char *passwd, char old_pw_hash[16], BOOL unicode)
 {
-       int new_pw_len = strlen(passwd);
+       int new_pw_len = strlen(passwd) * (unicode ? 2 : 1);
 
        if (new_pw_len > 512)
        {
@@ -208,9 +207,20 @@ BOOL make_oem_passwd_hash(char data[516], char *passwd, char old_pw_hash[16])
         * decrypt. JRA.
         */
        generate_random_buffer((unsigned char *)data, 516, False);
-       fstrcpy( &data[512 - new_pw_len], passwd);
+       if (unicode)
+       {
+               struni2( (uint16*)(&data[512 - new_pw_len]), passwd);
+       }
+       else
+       {
+               fstrcpy( &data[512 - new_pw_len], passwd);
+       }
        SIVAL(data, 512, new_pw_len);
 
+#ifdef DEBUG_PASSWORD
+       DEBUG(100,("make_oem_passwd_hash\n"));
+       dump_data(100, data, 516);
+#endif
        SamOEMhash( (unsigned char *)data, (unsigned char *)old_pw_hash, True);
 }
 
index 5cf6e612452deab07695984708ac4355af6cce59..86a5619540148a6d082eddd6cf3dabf6ba7a840b 100644 (file)
@@ -79,9 +79,9 @@ void cmd_sam_test(struct client_info *info)
        new_passwd = (char*)getpass("New Password (ONCE: this is test code!):");
 
        nt_lm_owf_gen(new_passwd, lm_newhash, nt_newhash);
-       pwd_get_lm_nt_16(&(smb_cli->pwd), lm_oldhash , nt_oldhash );
-       make_oem_passwd_hash(nt_newpass, new_passwd, nt_oldhash);
-       make_oem_passwd_hash(lm_newpass, new_passwd, lm_oldhash);
+       pwd_get_lm_nt_16(&(smb_cli->pwd), lm_oldhash, nt_oldhash );
+       make_oem_passwd_hash(nt_newpass, new_passwd, nt_oldhash, True);
+       make_oem_passwd_hash(lm_newpass, new_passwd, lm_oldhash, True);
        E_old_pw_hash(lm_newhash, lm_oldhash, lm_hshhash);
        E_old_pw_hash(lm_newhash, nt_oldhash, nt_hshhash);