Added NT_USER_TOKEN into server_info to fix extra groups problem.
[kamenim/samba.git] / source3 / libsmb / pwd_cache.c
index 1c5f8b51761aac3b69f753347dc9c681dc0b88db..4a2c5f1604ba49d304ff1a870e51e3962cd6462f 100644 (file)
@@ -21,9 +21,6 @@
 
 #include "includes.h"
 
-extern int DEBUGLEVEL;
-
-
 /****************************************************************************
 initialises a password structure
 ****************************************************************************/
@@ -40,44 +37,43 @@ void pwd_init(struct pwd_info *pwd)
        pwd->crypted   = False;
 }
 
+/****************************************************************************
+returns NULL password flag
+****************************************************************************/
+BOOL pwd_is_nullpwd(const struct pwd_info *pwd)
+{
+        return pwd->null_pwd;
+}
+
+
 /****************************************************************************
 compares two passwords.  hmm, not as trivial as expected.  hmm.
 ****************************************************************************/
-BOOL pwd_compare(struct pwd_info *pwd1, struct pwd_info *pwd2)
+BOOL pwd_compare(const struct pwd_info *pwd1, const struct pwd_info *pwd2)
 {
-       if (pwd1->cleartext && pwd2->cleartext)
-       {
+       if (pwd1->cleartext && pwd2->cleartext) {
                if (strequal(pwd1->password, pwd2->password))
-               {
                        return True;
-               }
        }
        if (pwd1->null_pwd && pwd2->null_pwd)
-       {
                return True;
-       }
 
        if (!pwd1->null_pwd  && !pwd2->null_pwd &&
-           !pwd1->cleartext && !pwd2->cleartext)
-       {
+           !pwd1->cleartext && !pwd2->cleartext) {
 #ifdef DEBUG_PASSWORD
                DEBUG(100,("pwd compare: nt#\n"));
                dump_data(100, pwd1->smb_nt_pwd, 16);
                dump_data(100, pwd2->smb_nt_pwd, 16);
 #endif
                if (memcmp(pwd1->smb_nt_pwd, pwd2->smb_nt_pwd, 16) == 0)
-               {
                        return True;
-               }
 #ifdef DEBUG_PASSWORD
                DEBUG(100,("pwd compare: lm#\n"));
                dump_data(100, pwd1->smb_lm_pwd, 16);
                dump_data(100, pwd2->smb_lm_pwd, 16);
 #endif
                if (memcmp(pwd1->smb_lm_pwd, pwd2->smb_lm_pwd, 16) == 0)
-               {
                        return True;
-               }
        }
        return False;
 }
@@ -94,11 +90,21 @@ void pwd_read(struct pwd_info *pwd, char *passwd_report, BOOL do_encrypt)
 
        user_pass = (char*)getpass(passwd_report);
 
+       /*
+        * Do not assume that an empty string is a NULL password.
+        * If you do this will break the session key generation for
+        * and account with an emtpy password.  If you wish to use
+        * a NULL password, use the -N option to smbclient and rpcclient
+        * --jerry
+        */
+#if 0
        if (user_pass == NULL || user_pass[0] == 0)
        {
                pwd_set_nullpwd(pwd);
        }
        else if (do_encrypt)
+#endif
+       if (do_encrypt)
        {
                pwd_make_lm_nt_16(pwd, user_pass);
        }
@@ -126,8 +132,7 @@ void pwd_set_nullpwd(struct pwd_info *pwd)
 void pwd_set_cleartext(struct pwd_info *pwd, char *clr)
 {
        pwd_init(pwd);
-       fstrcpy(pwd->password, clr);
-       unix_to_dos(pwd->password,True);
+       push_ascii_fstring(pwd->password, clr);
        pwd->cleartext = True;
        pwd->null_pwd  = False;
        pwd->crypted   = False;
@@ -138,13 +143,9 @@ void pwd_set_cleartext(struct pwd_info *pwd, char *clr)
  ****************************************************************************/
 void pwd_get_cleartext(struct pwd_info *pwd, char *clr)
 {
-       if (pwd->cleartext)
-       {
+       if (pwd->cleartext) {
                fstrcpy(clr, pwd->password);
-               dos_to_unix(clr, True);
-       }
-       else
-       {
+       } else {
                clr[0] = 0;
        }
 }
@@ -203,8 +204,7 @@ void pwd_make_lm_nt_16(struct pwd_info *pwd, char *clr)
 
        pwd_init(pwd);
 
-       pstrcpy(dos_passwd, clr);
-       unix_to_dos(dos_passwd, True);
+       push_ascii_pstring(dos_passwd, clr);
 
        nt_lm_owf_gen(dos_passwd, pwd->smb_nt_pwd, pwd->smb_lm_pwd);
        pwd->null_pwd  = False;