diff options
Diffstat (limited to 'source3')
-rw-r--r-- | source3/passdb/login_cache.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/source3/passdb/login_cache.c b/source3/passdb/login_cache.c index cf6c796321..eba83ea686 100644 --- a/source3/passdb/login_cache.c +++ b/source3/passdb/login_cache.c @@ -68,6 +68,7 @@ bool login_cache_read(struct samu *sampass, struct login_cache *entry) char *keystr; TDB_DATA databuf; uint32_t entry_timestamp = 0, bad_password_time = 0; + uint16_t acct_ctrl; if (!login_cache_init()) { return false; @@ -92,7 +93,7 @@ bool login_cache_read(struct samu *sampass, struct login_cache *entry) if (tdb_unpack (databuf.dptr, databuf.dsize, SAM_CACHE_FORMAT, &entry_timestamp, - &entry->acct_ctrl, + &acct_ctrl, &entry->bad_password_count, &bad_password_time) == -1) { DEBUG(7, ("No cache entry found\n")); @@ -100,6 +101,12 @@ bool login_cache_read(struct samu *sampass, struct login_cache *entry) return false; } + /* + * Deal with 32-bit acct_ctrl. In the tdb we only store 16-bit + * ("w" in SAM_CACHE_FORMAT). Fixes bug 7253. + */ + entry->acct_ctrl = acct_ctrl; + /* Deal with possible 64-bit time_t. */ entry->entry_timestamp = (time_t)entry_timestamp; entry->bad_password_time = (time_t)bad_password_time; |