r18312: Change gencache_get slightly: Delete expired keys, and only strdup the value
authorVolker Lendecke <vlendec@samba.org>
Sat, 9 Sep 2006 21:40:47 +0000 (21:40 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 16:51:19 +0000 (11:51 -0500)
if a valid entry was found. The newer calls got the latter one wrong, change
the older calls.

Volker
(This used to be commit 554e68887bc84510690226c9b07a872e7a282abe)

source3/lib/gencache.c
source3/libsmb/namecache.c
source3/libsmb/trustdom_cache.c

index 871d1d1d8020ad41b4a389c5a8c02a92c57ed53c..dc5f32d66eaa331219d4a1ad96499e472ede6585 100644 (file)
@@ -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;
 } 
 
 
index afbd807198f17aa78327dcc7e47d1733d8ff583d..bd4b3caeb7d32751ee122fcc9d9bbaa396429ab5 100644 (file)
@@ -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 ));
index 8c5fb4d907135e2cc9ef5460deade29e9cece6cb..fa35f8d4230a1e3bb22e17bcfe5176495f5fb4e6 100644 (file)
@@ -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);