diff options
Diffstat (limited to 'source3')
-rw-r--r-- | source3/passdb/sampassdb.c | 27 | ||||
-rw-r--r-- | source3/passdb/smbpass.c | 4 |
2 files changed, 30 insertions, 1 deletions
diff --git a/source3/passdb/sampassdb.c b/source3/passdb/sampassdb.c index 13b1279b2b..a76701a367 100644 --- a/source3/passdb/sampassdb.c +++ b/source3/passdb/sampassdb.c @@ -360,6 +360,8 @@ struct sam_passwd *pwdb_smb_to_sam(struct smb_passwd *user) static struct sam_passwd pw_buf; static fstring nt_name; static fstring unix_name; + static time_t t; + static int time_count = 0; if (user == NULL) return NULL; @@ -374,7 +376,30 @@ struct sam_passwd *pwdb_smb_to_sam(struct smb_passwd *user) pw_buf.smb_passwd = user->smb_passwd; pw_buf.smb_nt_passwd = user->smb_nt_passwd; pw_buf.acct_ctrl = user->acct_ctrl; - unix_to_nt_time(&pw_buf.pass_last_set_time, user->pass_last_set_time); + + /* Just update the time counter every 1,000 times though this function */ + switch (time_count) { + case 0: + DEBUG(3, ("Called time() in smb_to_sam function\n")); + time (&t); + time_count++; + break; + case 1000: + time_count = 0; + break; + default: + time_count++; + break; + } + + if ( user->pass_last_set_time == (time_t)-1 ) + { + user->pass_last_set_time = t; + } + unix_to_nt_time(&pw_buf.pass_last_set_time, user->pass_last_set_time); + unix_to_nt_time(&pw_buf.pass_can_change_time , user->pass_last_set_time); + unix_to_nt_time(&pw_buf.pass_must_change_time, t+3628800); + return &pw_buf; } diff --git a/source3/passdb/smbpass.c b/source3/passdb/smbpass.c index 8972351d90..b1ca9ad071 100644 --- a/source3/passdb/smbpass.c +++ b/source3/passdb/smbpass.c @@ -208,6 +208,10 @@ static struct smb_passwd *getsmbfilepwent(void *vp) } /* Now try and get the last change time. */ + while (*p != ']' && *p != ':') + { + p++; + } if (*p == ']') { p++; |