[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Wed Jan 27 17:42:56 MST 2010


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 <jra at 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 <andyhanton at 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


More information about the samba-cvs mailing list