The branch, master has been updated
       via  627fb85... Fix bug #7072 - Accounts can't be unlocked from ldap.
      from  8e26aa3... testsuite/libsmbclient use source3 in the path of the C 
and LFLAGS

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 627fb85092f728065b6d772c41aeb75018154e86
Author: Jeremy Allison <j...@samba.org>
Date:   Wed Jan 27 16:42:06 2010 -0800

    Fix bug #7072 - Accounts can't be unlocked from ldap.
    
    Fix suggested by Andy Hanton <andyhan...@gmail.com>. The LOGIN_CACHE
    struct contains two time_t entries, but was being written to and
    read from via tdb_pack/tdb_unpack functions using explicit 32-bit int 
specifiers.
    This would break on machines with a 64-bit time_t. Use correct int
    sizes for tdb_pack/tdb_unpack.
    
    We have to fix this properly before 2037 :-).
    
    Jeremy.

-----------------------------------------------------------------------

Summary of changes:
 source3/passdb/login_cache.c |   22 +++++++++++++++-------
 1 files changed, 15 insertions(+), 7 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/passdb/login_cache.c b/source3/passdb/login_cache.c
index 2a63500..5e1c977 100644
--- a/source3/passdb/login_cache.c
+++ b/source3/passdb/login_cache.c
@@ -68,6 +68,7 @@ LOGIN_CACHE * login_cache_read(struct samu *sampass)
        char *keystr;
        TDB_DATA databuf;
        LOGIN_CACHE *entry;
+       uint32_t entry_timestamp = 0, bad_password_time = 0;
 
        if (!login_cache_init())
                return NULL;
@@ -92,17 +93,22 @@ LOGIN_CACHE * login_cache_read(struct samu *sampass)
                SAFE_FREE(databuf.dptr);
                return NULL;
        }
+       ZERO_STRUCTP(entry);
 
        if (tdb_unpack (databuf.dptr, databuf.dsize, SAM_CACHE_FORMAT,
                        &entry->entry_timestamp, &entry->acct_ctrl, 
-                       &entry->bad_password_count, 
-                       &entry->bad_password_time) == -1) {
+                       &entry->bad_password_count,
+                       &bad_password_time) == -1) {
                DEBUG(7, ("No cache entry found\n"));
                SAFE_FREE(entry);
                SAFE_FREE(databuf.dptr);
                return NULL;
        }
 
+       /* Deal with possible 64-bit time_t. */
+       entry->entry_timestamp = (time_t)entry_timestamp;
+       entry->bad_password_time = (time_t)bad_password_time;
+
        SAFE_FREE(databuf.dptr);
 
        DEBUG(5, ("Found login cache entry: timestamp %12u, flags 0x%x, count 
%d, time %12u\n",
@@ -116,6 +122,8 @@ bool login_cache_write(const struct samu *sampass, 
LOGIN_CACHE entry)
        char *keystr;
        TDB_DATA databuf;
        bool ret;
+       uint32_t entry_timestamp;
+       uint32_t bad_password_time = (uint32_t)entry.bad_password_time;
 
        if (!login_cache_init())
                return False;
@@ -130,14 +138,14 @@ bool login_cache_write(const struct samu *sampass, 
LOGIN_CACHE entry)
                return False;
        }
 
-       entry.entry_timestamp = time(NULL);
+       entry_timestamp = (uint32_t)time(NULL);
 
        databuf.dsize = 
                tdb_pack(NULL, 0, SAM_CACHE_FORMAT,
-                        entry.entry_timestamp,
+                        entry_timestamp,
                         entry.acct_ctrl,
                         entry.bad_password_count,
-                        entry.bad_password_time);
+                        bad_password_time);
        databuf.dptr = SMB_MALLOC_ARRAY(uint8, databuf.dsize);
        if (!databuf.dptr) {
                SAFE_FREE(keystr);
@@ -145,10 +153,10 @@ bool login_cache_write(const struct samu *sampass, 
LOGIN_CACHE entry)
        }
                         
        if (tdb_pack(databuf.dptr, databuf.dsize, SAM_CACHE_FORMAT,
-                        entry.entry_timestamp,
+                        entry_timestamp,
                         entry.acct_ctrl,
                         entry.bad_password_count,
-                        entry.bad_password_time)
+                        bad_password_time)
            != databuf.dsize) {
                SAFE_FREE(keystr);
                SAFE_FREE(databuf.dptr);


-- 
Samba Shared Repository

Reply via email to