This commit is number 1 of 4.
authorAndrew Bartlett <abartlet@samba.org>
Mon, 29 Oct 2001 07:15:51 +0000 (07:15 +0000)
committerAndrew Bartlett <abartlet@samba.org>
Mon, 29 Oct 2001 07:15:51 +0000 (07:15 +0000)
In particular this commit focusses on:

Adding the new 'pass changed now' helper function.

While these changes have been mildly tested, and are pretty small, any
assistance in this is appreciated.
(This used to be commit a8971a5448cf6d203b379c3ed01e331d5263c9ee)

source3/passdb/passdb.c
source3/rpc_server/srv_netlog_nt.c
source3/rpc_server/srv_samr_nt.c
source3/smbd/chgpasswd.c

index fa0dd244d257c894c28c0b23dab5dacc7eff8634..634ea8fdacea31beb4f481e85518ca43c2dacc3d 100644 (file)
@@ -1624,29 +1624,6 @@ BOOL pdb_set_lanman_passwd (SAM_ACCOUNT *sampass, uint8 *pwd)
        return True;
 }
 
-/*********************************************************************
- Set the user's PLAINTEXT password.  Used as an interface to the above.
- ********************************************************************/
-
-BOOL pdb_set_plaintext_passwd (SAM_ACCOUNT *sampass, char *plaintext)
-{
-       uchar new_lanman_p16[16];
-       uchar new_nt_p16[16];
-
-       if (!sampass || !plaintext)
-               return False;
-       
-       nt_lm_owf_gen (plaintext, new_nt_p16, new_lanman_p16);
-
-       if (!pdb_set_nt_passwd (sampass, new_nt_p16)) 
-               return False;
-
-       if (!pdb_set_lanman_passwd (sampass, new_lanman_p16)) 
-               return False;
-
-       return True;
-}
-
 BOOL pdb_set_unknown_3 (SAM_ACCOUNT *sampass, uint32 unkn)
 {
        if (!sampass)
@@ -1688,3 +1665,57 @@ BOOL pdb_set_hours (SAM_ACCOUNT *sampass, uint8 *hours)
 
        return True;
 }
+
+
+/* Helpful interfaces to the above */
+
+/*********************************************************************
+ Sets the last changed times and must change times for a normal
+ password change.
+ ********************************************************************/
+
+BOOL pdb_set_pass_changed_now (SAM_ACCOUNT *sampass)
+{
+
+       if (!sampass)
+               return False;
+       
+       if (!pdb_set_pass_last_set_time (sampass, time(NULL)))
+               return False;
+
+       if (!pdb_set_pass_must_change_time (sampass, 
+                                           pdb_get_pass_last_set_time(sampass)
+                                           + MAX_PASSWORD_AGE))
+               return False;
+       
+       return True;
+}
+
+/*********************************************************************
+ Set the user's PLAINTEXT password.  Used as an interface to the above.
+ Also sets the last change time to NOW.
+ ********************************************************************/
+
+BOOL pdb_set_plaintext_passwd (SAM_ACCOUNT *sampass, const char *plaintext)
+{
+       uchar new_lanman_p16[16];
+       uchar new_nt_p16[16];
+
+       if (!sampass || !plaintext)
+               return False;
+       
+       nt_lm_owf_gen (plaintext, new_nt_p16, new_lanman_p16);
+
+       if (!pdb_set_nt_passwd (sampass, new_nt_p16)) 
+               return False;
+
+       if (!pdb_set_lanman_passwd (sampass, new_lanman_p16)) 
+               return False;
+       
+       if (!pdb_set_pass_changed_now (sampass))
+               return False;
+
+       return True;
+}
+
+
index 7a7ff09d711c7af4474f05da01fd4b4fb74adf2e..32a0a02e70c5f8192dde7a88563df7584cb9a751 100644 (file)
@@ -436,6 +436,12 @@ NTSTATUS _net_srv_pwset(pipes_struct *p, NET_Q_SRV_PWSET *q_u, NET_R_SRV_PWSET *
                return NT_STATUS_NO_MEMORY; 
        }
  
+       if (!pdb_set_pass_changed_now     (sampass)) {
+               pdb_free_sam(&sampass);
+               /* Not quite sure what this one qualifies as, but this will do */
+               return NT_STATUS_NO_MEMORY; 
+       }
        become_root();
        ret = pdb_update_sam_account (sampass,False);
        unbecome_root();
index d9cae42145aeb988185f035fd69d369a0299753e..7e48d743596a41c6e1fca9ac7cc9540663d70449 100644 (file)
@@ -2288,6 +2288,10 @@ static BOOL set_user_info_12(SAM_USER_INFO_12 *id12, uint32 rid)
                pdb_free_sam(&pwd);
                return False;
        }
+       if (!pdb_set_pass_changed_now (pwd)) {
+               pdb_free_sam(&pwd);
+               return False; 
+       }
  
        if(!pdb_update_sam_account(pwd, True)) {
                pdb_free_sam(&pwd);
index d2ee2f46faa627b3347bdd6397f762141b3bb588..49f87a4ca11df5eb0fdadb235a4a0f6fa927ac33 100644 (file)
@@ -682,6 +682,12 @@ BOOL change_lanman_password(SAM_ACCOUNT *sampass, uchar * pass1,
                return False;   /* We lose the NT hash. Sorry. */
        }
 
+       if (!pdb_set_pass_changed_now  (sampass)) {
+               pdb_free_sam(&sampass);
+               /* Not quite sure what this one qualifies as, but this will do */
+               return False; 
+       }
        /* Now flush the sam_passwd struct to persistent storage */
        become_root();
        ret = pdb_update_sam_account (sampass, False);