diff options
Diffstat (limited to 'source/passdb/login_cache.c')
-rw-r--r-- | source/passdb/login_cache.c | 54 |
1 files changed, 28 insertions, 26 deletions
diff --git a/source/passdb/login_cache.c b/source/passdb/login_cache.c index dc13173a3fb..7fd3b47826f 100644 --- a/source/passdb/login_cache.c +++ b/source/passdb/login_cache.c @@ -66,8 +66,7 @@ BOOL login_cache_shutdown(void) /* if we can't read the cache, oh well, no need to return anything */ LOGIN_CACHE * login_cache_read(struct samu *sampass) { - char *keystr; - TDB_DATA databuf; + TDB_DATA keybuf, databuf; LOGIN_CACHE *entry; if (!login_cache_init()) @@ -77,16 +76,17 @@ LOGIN_CACHE * login_cache_read(struct samu *sampass) return NULL; } - keystr = SMB_STRDUP(pdb_get_nt_username(sampass)); - if (!keystr || !keystr[0]) { - SAFE_FREE(keystr); + keybuf.dptr = SMB_STRDUP(pdb_get_nt_username(sampass)); + if (!keybuf.dptr || !strlen(keybuf.dptr)) { + SAFE_FREE(keybuf.dptr); return NULL; } + keybuf.dsize = strlen(keybuf.dptr) + 1; DEBUG(7, ("Looking up login cache for user %s\n", - keystr)); - databuf = tdb_fetch_bystring(cache, keystr); - SAFE_FREE(keystr); + keybuf.dptr)); + databuf = tdb_fetch(cache, keybuf); + SAFE_FREE(keybuf.dptr); if (!(entry = SMB_MALLOC_P(LOGIN_CACHE))) { DEBUG(1, ("Unable to allocate cache entry buffer!\n")); @@ -114,8 +114,8 @@ LOGIN_CACHE * login_cache_read(struct samu *sampass) BOOL login_cache_write(const struct samu *sampass, LOGIN_CACHE entry) { - char *keystr; - TDB_DATA databuf; + + TDB_DATA keybuf, databuf; BOOL ret; if (!login_cache_init()) @@ -125,11 +125,12 @@ BOOL login_cache_write(const struct samu *sampass, LOGIN_CACHE entry) return False; } - keystr = SMB_STRDUP(pdb_get_nt_username(sampass)); - if (!keystr || !keystr[0]) { - SAFE_FREE(keystr); + keybuf.dptr = SMB_STRDUP(pdb_get_nt_username(sampass)); + if (!keybuf.dptr || !strlen(keybuf.dptr)) { + SAFE_FREE(keybuf.dptr); return False; } + keybuf.dsize = strlen(keybuf.dptr) + 1; entry.entry_timestamp = time(NULL); @@ -139,9 +140,9 @@ BOOL login_cache_write(const struct samu *sampass, LOGIN_CACHE entry) entry.acct_ctrl, entry.bad_password_count, entry.bad_password_time); - databuf.dptr = SMB_MALLOC_ARRAY(uint8, databuf.dsize); + databuf.dptr = SMB_MALLOC_ARRAY(char, databuf.dsize); if (!databuf.dptr) { - SAFE_FREE(keystr); + SAFE_FREE(keybuf.dptr); return False; } @@ -151,13 +152,13 @@ BOOL login_cache_write(const struct samu *sampass, LOGIN_CACHE entry) entry.bad_password_count, entry.bad_password_time) != databuf.dsize) { - SAFE_FREE(keystr); + SAFE_FREE(keybuf.dptr); SAFE_FREE(databuf.dptr); return False; } - ret = tdb_store_bystring(cache, keystr, databuf, 0); - SAFE_FREE(keystr); + ret = tdb_store(cache, keybuf, databuf, 0); + SAFE_FREE(keybuf.dptr); SAFE_FREE(databuf.dptr); return ret == 0; } @@ -165,7 +166,7 @@ BOOL login_cache_write(const struct samu *sampass, LOGIN_CACHE entry) BOOL login_cache_delentry(const struct samu *sampass) { int ret; - char *keystr; + TDB_DATA keybuf; if (!login_cache_init()) return False; @@ -174,16 +175,17 @@ BOOL login_cache_delentry(const struct samu *sampass) return False; } - keystr = SMB_STRDUP(pdb_get_nt_username(sampass)); - if (!keystr || !keystr[0]) { - SAFE_FREE(keystr); + keybuf.dptr = SMB_STRDUP(pdb_get_nt_username(sampass)); + if (!keybuf.dptr || !strlen(keybuf.dptr)) { + SAFE_FREE(keybuf.dptr); return False; } - - DEBUG(9, ("About to delete entry for %s\n", keystr)); - ret = tdb_delete_bystring(cache, keystr); + keybuf.dsize = strlen(keybuf.dptr) + 1; + DEBUG(9, ("About to delete entry for %s\n", keybuf.dptr)); + ret = tdb_delete(cache, keybuf); DEBUG(9, ("tdb_delete returned %d\n", ret)); - SAFE_FREE(keystr); + SAFE_FREE(keybuf.dptr); return ret == 0; } + |