s3: Fix bug 7253
authorVolker Lendecke <vl@samba.org>
Tue, 16 Mar 2010 20:03:34 +0000 (21:03 +0100)
committerKarolin Seeger <kseeger@samba.org>
Fri, 18 Jun 2010 06:33:29 +0000 (08:33 +0200)
acct_ctrl is 32 bit in LOGIN_CACHE, but "w" as a format specifier for
tdb_unpack only writes 16 bits. Okay on x86, not okay on Solaris.

Thanks to Vladimir.Marek@Sun.COM!

Volker
(cherry picked from commit 556b6f83d66d7268651ac7ba153fa47ff6a5e776)

source3/passdb/login_cache.c

index 5630372a013eeea69a511f1c15f3dd4e13f7c52f..5adb24c45a7277f73a50ec28b0d48a00d9eba9f6 100644 (file)
@@ -69,6 +69,7 @@ LOGIN_CACHE * login_cache_read(struct samu *sampass)
        TDB_DATA databuf;
        LOGIN_CACHE *entry;
        uint32_t entry_timestamp = 0, bad_password_time = 0;
+       uint16_t acct_ctrl;
 
        if (!login_cache_init())
                return NULL;
@@ -97,7 +98,7 @@ LOGIN_CACHE * login_cache_read(struct samu *sampass)
 
        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"));
@@ -106,6 +107,12 @@ LOGIN_CACHE * login_cache_read(struct samu *sampass)
                return NULL;
        }
 
+       /*
+        * 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;