Greg Dickie: spotted bug where smb_nt_passwd could be NULL.
[samba.git] / source3 / rpc_server / srv_netlog.c
index c3810a09e589f57a36ad7d9e63a9f732399028eb..1bb86e183f71ea1a4355bb30abe9adc67b61ff7d 100644 (file)
@@ -288,8 +288,7 @@ static void api_net_req_chal( uint16 vuid,
        /* grab the challenge... */
        net_io_q_req_chal("", &q_r, data, 0);
 
-       fstrcpy(mach_acct, unistrn2(q_r.uni_logon_clnt.buffer,
-                                   q_r.uni_logon_clnt.uni_str_len));
+       unistr2_to_ascii(mach_acct, &q_r.uni_logon_clnt, sizeof(mach_acct)-1);
 
        fstrcpy(mach_name, mach_acct);
        strlower(mach_name);
@@ -400,8 +399,8 @@ static void api_net_srv_pwset( uint16 vuid,
 
                DEBUG(5,("api_net_srv_pwset: %d\n", __LINE__));
 
-               pstrcpy(mach_acct, unistrn2(q_a.clnt_id.login.uni_acct_name.buffer,
-                                           q_a.clnt_id.login.uni_acct_name.uni_str_len));
+               unistr2_to_ascii(mach_acct, &q_a.clnt_id.login.uni_acct_name,
+                                sizeof(mach_acct)-1);
 
                DEBUG(3,("Server Password Set Wksta:[%s]\n", mach_acct));
 
@@ -529,8 +528,15 @@ static uint32 net_login_interactive(NET_ID_INFO_1 *id1,
        dump_data(100, nt_pwd, 16);
 #endif
 
+       if (smb_pass->smb_nt_passwd == NULL)
+       {
+               DEBUG(5,("warning: NETLOGON user %s only has an LM password\n",
+                         smb_pass->unix_name));
+       }
+
        if (memcmp(smb_pass->smb_passwd   , lm_pwd, 16) != 0 &&
-           memcmp(smb_pass->smb_nt_passwd, nt_pwd, 16) != 0)
+           (smb_pass->smb_nt_passwd == NULL ||
+           memcmp(smb_pass->smb_nt_passwd, nt_pwd, 16) != 0))
        {
                status = 0xC0000000 | NT_STATUS_WRONG_PASSWORD;
        }
@@ -609,6 +615,7 @@ static void api_net_sam_logon( uint16 vuid,
        NTTIME pass_can_change_time ;
        NTTIME pass_must_change_time;
 
+       fstring nt_name     ;
        fstring full_name   ;
        fstring logon_script;
        fstring profile_path;
@@ -673,12 +680,9 @@ static void api_net_sam_logon( uint16 vuid,
 
        if (status == 0)
        {
-               fstrcpy(nt_username, unistr2_to_str(uni_samlogon_user));
-#if 0
-               slprintf(nt_username, sizeof(nt_username), "%s\\%s",
-                        unistr2_to_str(uni_domain),
-                        unistr2_to_str(uni_samlogon_user));
-#endif
+               unistr2_to_ascii(nt_username, uni_samlogon_user,
+                                sizeof(nt_username)-1);
+
                DEBUG(3,("User:[%s]\n", nt_username));
 
                become_root(True);
@@ -705,6 +709,7 @@ static void api_net_sam_logon( uint16 vuid,
                pass_can_change_time  = sam_pass->pass_can_change_time;
                pass_must_change_time = sam_pass->pass_must_change_time;
 
+               fstrcpy(nt_name     , sam_pass->nt_name);
                fstrcpy(full_name   , sam_pass->full_name);
                fstrcpy(logon_script, sam_pass->logon_script);
                fstrcpy(profile_path, sam_pass->profile_path);
@@ -769,7 +774,7 @@ static void api_net_sam_logon( uint16 vuid,
                                &pass_can_change_time,
                                &pass_must_change_time,
 
-                               nt_username     , /* user_name */
+                               nt_name         , /* user_name */
                                full_name       , /* full_name */
                                logon_script    , /* logon_script */
                                profile_path    , /* profile_path */