X-Git-Url: http://git.samba.org/samba.git/?p=ira%2Fwip.git;a=blobdiff_plain;f=source3%2Fpassdb%2Flogin_cache.c;h=5e1c9775cdf19c09d5372484dd779955cfbbdb5c;hp=2a6350045be730ce690bcd31b80ad9b567942f46;hb=627fb85092f728065b6d772c41aeb75018154e86;hpb=8e26aa3d7cec968584283634fe3dce5553387c8c;ds=sidebyside diff --git a/source3/passdb/login_cache.c b/source3/passdb/login_cache.c index 2a6350045be..5e1c9775cdf 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);