diff options
-rw-r--r-- | source3/lib/gencache.c | 11 | ||||
-rw-r--r-- | source3/libsmb/namecache.c | 4 | ||||
-rw-r--r-- | source3/libsmb/trustdom_cache.c | 1 |
3 files changed, 10 insertions, 6 deletions
diff --git a/source3/lib/gencache.c b/source3/lib/gencache.c index 871d1d1d80..dc5f32d66e 100644 --- a/source3/lib/gencache.c +++ b/source3/lib/gencache.c @@ -212,6 +212,15 @@ BOOL gencache_get(const char *keystr, char **valstr, time_t *timeout) "timeout = %s", t > time(NULL) ? "valid" : "expired", keystr, endptr+1, ctime(&t))); + if (t <= time(NULL)) { + + /* We're expired, delete the entry */ + tdb_delete(cache, keybuf); + + SAFE_FREE(databuf.dptr); + return False; + } + if (valstr) { *valstr = SMB_STRDUP(endptr+1); if (*valstr == NULL) { @@ -227,7 +236,7 @@ BOOL gencache_get(const char *keystr, char **valstr, time_t *timeout) *timeout = t; } - return t > time(NULL); + return True; } diff --git a/source3/libsmb/namecache.c b/source3/libsmb/namecache.c index afbd807198..bd4b3caeb7 100644 --- a/source3/libsmb/namecache.c +++ b/source3/libsmb/namecache.c @@ -201,9 +201,7 @@ BOOL namecache_fetch(const char *name, int name_type, struct ip_service **ip_lis if (!gencache_get(key, &value, &timeout)) { DEBUG(5, ("no entry for %s#%02X found.\n", name, name_type)); - gencache_del(key); SAFE_FREE(key); - SAFE_FREE(value); return False; } else { DEBUG(5, ("name %s#%02X found.\n", name, name_type)); @@ -314,9 +312,7 @@ BOOL namecache_status_fetch(const char *keyname, int keyname_type, if (!gencache_get(key, &value, &timeout)) { DEBUG(5, ("namecache_status_fetch: no entry for %s found.\n", key)); - gencache_del(key); SAFE_FREE(key); - SAFE_FREE(value); return False; } else { DEBUG(5, ("namecache_status_fetch: key %s -> %s\n", key, value )); diff --git a/source3/libsmb/trustdom_cache.c b/source3/libsmb/trustdom_cache.c index 8c5fb4d907..fa35f8d423 100644 --- a/source3/libsmb/trustdom_cache.c +++ b/source3/libsmb/trustdom_cache.c @@ -183,7 +183,6 @@ BOOL trustdom_cache_fetch(const char* name, DOM_SID* sid) if (!gencache_get(key, &value, &timeout)) { DEBUG(5, ("no entry for trusted domain %s found.\n", name)); SAFE_FREE(key); - SAFE_FREE(value); return False; } else { SAFE_FREE(key); |