The Samba-Bugzilla – Attachment 2705 Details for
Bug 4630
Endless Password Expiration in 3.0.25
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Working patch :-)
look (text/plain), 5.82 KB, created by
Jeremy Allison
on 2007-05-18 20:03:09 UTC
(
hide
)
Description:
Working patch :-)
Filename:
MIME Type:
Creator:
Jeremy Allison
Created:
2007-05-18 20:03:09 UTC
Size:
5.82 KB
patch
obsolete
>Index: lib/time.c >=================================================================== >--- lib/time.c (revision 22982) >+++ lib/time.c (working copy) >@@ -554,6 +554,37 @@ > ((TIME_FIXUP_CONSTANT_INT + (uint64_t)tv->tv_sec) * 1000000)); > } > >+/************************************************************** >+ Handle conversions between time_t and uint32, taking care to >+ preserve the "special" values. >+**************************************************************/ >+ >+uint32 convert_time_t_to_uint32(time_t t) >+{ >+#if (defined(SIZEOF_TIME_T) && (SIZEOF_TIME_T == 8)) >+ /* time_t is 64-bit. */ >+ if (t == 0x8000000000000000LL) { >+ return 0x80000000; >+ } else if (t == 0x7FFFFFFFFFFFFFFFLL) { >+ return 0x7FFFFFFF; >+ } >+#endif >+ return (uint32)t; >+} >+ >+time_t convert_uint32_to_time_t(uint32 u) >+{ >+#if (defined(SIZEOF_TIME_T) && (SIZEOF_TIME_T == 8)) >+ /* time_t is 64-bit. */ >+ if (u == 0x80000000) { >+ return (time_t)0x8000000000000000LL; >+ } else if (u == 0x7FFFFFFF) { >+ return (time_t)0x7FFFFFFFFFFFFFFFLL; >+ } >+#endif >+ return (time_t)u; >+} >+ > /******************************************************************* > Yield the difference between *A and *B, in seconds, ignoring leap seconds. > ********************************************************************/ >Index: passdb/passdb.c >=================================================================== >--- passdb/passdb.c (revision 22982) >+++ passdb/passdb.c (working copy) >@@ -914,13 +914,13 @@ > goto done; > } > >- pdb_set_logon_time(sampass, logon_time, PDB_SET); >- pdb_set_logoff_time(sampass, logoff_time, PDB_SET); >- pdb_set_kickoff_time(sampass, kickoff_time, PDB_SET); >- pdb_set_bad_password_time(sampass, bad_password_time, PDB_SET); >- pdb_set_pass_can_change_time(sampass, pass_can_change_time, PDB_SET); >- pdb_set_pass_must_change_time(sampass, pass_must_change_time, PDB_SET); >- pdb_set_pass_last_set_time(sampass, pass_last_set_time, PDB_SET); >+ pdb_set_logon_time(sampass, convert_uint32_to_time_t(logon_time), PDB_SET); >+ pdb_set_logoff_time(sampass, convert_uint32_to_time_t(logoff_time), PDB_SET); >+ pdb_set_kickoff_time(sampass, convert_uint32_to_time_t(kickoff_time), PDB_SET); >+ pdb_set_bad_password_time(sampass, convert_uint32_to_time_t(bad_password_time), PDB_SET); >+ pdb_set_pass_can_change_time(sampass, convert_uint32_to_time_t(pass_can_change_time), PDB_SET); >+ pdb_set_pass_must_change_time(sampass, convert_uint32_to_time_t(pass_must_change_time), PDB_SET); >+ pdb_set_pass_last_set_time(sampass, convert_uint32_to_time_t(pass_last_set_time), PDB_SET); > > pdb_set_username(sampass, username, PDB_SET); > pdb_set_domain(sampass, domain, PDB_SET); >@@ -1102,13 +1102,13 @@ > *buf = NULL; > buflen = 0; > >- logon_time = (uint32)pdb_get_logon_time(sampass); >- logoff_time = (uint32)pdb_get_logoff_time(sampass); >- kickoff_time = (uint32)pdb_get_kickoff_time(sampass); >- bad_password_time = (uint32)pdb_get_bad_password_time(sampass); >- pass_can_change_time = (uint32)pdb_get_pass_can_change_time_noncalc(sampass); >- pass_must_change_time = (uint32)pdb_get_pass_must_change_time(sampass); >- pass_last_set_time = (uint32)pdb_get_pass_last_set_time(sampass); >+ logon_time = convert_time_t_to_uint32(pdb_get_logon_time(sampass)); >+ logoff_time = convert_time_t_to_uint32(pdb_get_logoff_time(sampass)); >+ kickoff_time = convert_time_t_to_uint32(pdb_get_kickoff_time(sampass)); >+ bad_password_time = convert_time_t_to_uint32(pdb_get_bad_password_time(sampass)); >+ pass_can_change_time = convert_time_t_to_uint32(pdb_get_pass_can_change_time_noncalc(sampass)); >+ pass_must_change_time = convert_time_t_to_uint32(pdb_get_pass_must_change_time(sampass)); >+ pass_last_set_time = convert_time_t_to_uint32(pdb_get_pass_last_set_time(sampass)); > > user_rid = pdb_get_user_rid(sampass); > group_rid = pdb_get_group_rid(sampass); >@@ -1392,7 +1392,7 @@ > LastBadPassword = pdb_get_bad_password_time(sampass); > DEBUG(7, ("LastBadPassword=%d, resettime=%d, current time=%d.\n", > (uint32) LastBadPassword, resettime, (uint32)time(NULL))); >- if (time(NULL) > (LastBadPassword + (time_t)resettime*60)){ >+ if (time(NULL) > (LastBadPassword + convert_uint32_to_time_t(resettime)*60)){ > pdb_set_bad_password_count(sampass, 0, PDB_CHANGED); > pdb_set_bad_password_time(sampass, 0, PDB_CHANGED); > if (updated) { >@@ -1445,7 +1445,7 @@ > return True; > } > >- if ((time(NULL) > (LastBadPassword + (time_t) duration * 60))) { >+ if ((time(NULL) > (LastBadPassword + convert_uint32_to_time_t(duration) * 60))) { > pdb_set_acct_ctrl(sampass, > pdb_get_acct_ctrl(sampass) & ~ACB_AUTOLOCK, > PDB_CHANGED); >Index: configure.in >=================================================================== >--- configure.in (revision 22982) >+++ configure.in (working copy) >@@ -1936,6 +1936,14 @@ > fi > > >+AC_CACHE_CHECK([for 64 bit time_t],samba_cv_SIZEOF_TIME_T,[ >+AC_TRY_RUN([#include <time.h> >+main() { exit((sizeof(time_t) == 8) ? 0 : 1); }], >+samba_cv_SIZEOF_TIME_T=yes,samba_cv_SIZEOF_TIME_T=no,samba_cv_SIZEOF_TIME_T=cross)]) >+if test x"$samba_cv_SIZEOF_TIME_T" = x"yes"; then >+ AC_DEFINE(SIZEOF_TIME_T,8,[The size of the 'time_t' type]) >+fi >+ > AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[ > AC_TRY_RUN([#include <stdio.h> > #include <sys/stat.h> >Index: utils/pdbedit.c >=================================================================== >--- utils/pdbedit.c (revision 22982) >+++ utils/pdbedit.c (working copy) >@@ -285,14 +285,14 @@ > lm_passwd, > nt_passwd, > pdb_encode_acct_ctrl(pdb_get_acct_ctrl(sam_pwent),NEW_PW_FORMAT_SPACE_PADDED_LEN), >- (uint32)pdb_get_pass_last_set_time(sam_pwent)); >+ (uint32)convert_time_t_to_uint32(pdb_get_pass_last_set_time(sam_pwent))); > } else { > uid = nametouid(pdb_get_username(sam_pwent)); > printf ("%s:%lu:%s\n", pdb_get_username(sam_pwent), (unsigned long)uid, > pdb_get_fullname(sam_pwent)); > } > >- return 0; >+ return 0; > } > > /*********************************************************
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 4630
:
2704
|
2705
|
2714
|
2719