RIP BOOL. Convert BOOL -> bool. I found a few interesting
[samba.git] / source3 / libsmb / namecache.c
index afbd807198f17aa78327dcc7e47d1733d8ff583d..b569100d94fef3b2a235a257d912bbb610ed4336 100644 (file)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,8 +17,7 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "includes.h"
@@ -34,7 +33,7 @@
  *         false on failure
  **/
 
-BOOL namecache_enable(void)
+bool namecache_enable(void)
 {
        /*
         * Check if name caching disabled by setting the name cache
@@ -69,7 +68,7 @@ BOOL namecache_enable(void)
  *         false on failure
  **/
  
-BOOL namecache_shutdown(void)
+bool namecache_shutdown(void)
 {
        if (!gencache_shutdown()) {
                DEBUG(2, ("namecache_shutdown: Couldn't close namecache on top of gencache.\n"));
@@ -112,13 +111,13 @@ static char* namecache_key(const char *name, int name_type)
  *        ip addresses being stored
  **/
 
-BOOL namecache_store(const char *name, int name_type,
+bool namecache_store(const char *name, int name_type,
                      int num_names, struct ip_service *ip_list)
 {
        time_t expiry;
        char *key, *value_string;
        int i;
-       BOOL ret;
+       bool ret;
 
        /*
         * we use gecache call to avoid annoying debug messages about
@@ -142,6 +141,10 @@ BOOL namecache_store(const char *name, int name_type,
        }
        
        key = namecache_key(name, name_type);
+       if (!key) {
+               return False;
+       }
+
        expiry = time(NULL) + lp_name_cache_timeout();
 
        /*
@@ -176,7 +179,7 @@ BOOL namecache_store(const char *name, int name_type,
  *         false if name isn't found in the cache or has expired
  **/
 
-BOOL namecache_fetch(const char *name, int name_type, struct ip_service **ip_list,
+bool namecache_fetch(const char *name, int name_type, struct ip_service **ip_list,
                      int *num_names)
 {
        char *key, *value;
@@ -198,12 +201,13 @@ BOOL namecache_fetch(const char *name, int name_type, struct ip_service **ip_lis
         * Use gencache interface - lookup the key
         */
        key = namecache_key(name, name_type);
+       if (!key) {
+               return False;
+       }
 
        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));
@@ -220,6 +224,31 @@ BOOL namecache_fetch(const char *name, int name_type, struct ip_service **ip_lis
        return *num_names > 0;          /* true only if some ip has been fetched */
 }
 
+/**
+ * Remove a namecache entry. Needed for site support.
+ *
+ **/
+
+bool namecache_delete(const char *name, int name_type)
+{
+       bool ret;
+       char *key;
+
+       if (!gencache_init())
+               return False;
+
+       if (name_type > 255) {
+               return False; /* Don't fetch non-real name types. */
+       }
+
+       key = namecache_key(name, name_type);
+       if (!key) {
+               return False;
+       }
+       ret = gencache_del(key);
+       SAFE_FREE(key);
+       return ret;
+}
 
 /**
  * Delete single namecache entry. Look at the
@@ -269,13 +298,13 @@ static char *namecache_status_record_key(const char *name, int name_type1,
 
 /* Store a name status record. */
 
-BOOL namecache_status_store(const char *keyname, int keyname_type,
+bool namecache_status_store(const char *keyname, int keyname_type,
                int name_type, struct in_addr keyip,
                const char *srvname)
 {
        char *key;
        time_t expiry;
-       BOOL ret;
+       bool ret;
 
        if (!gencache_init())
                return False;
@@ -298,7 +327,7 @@ BOOL namecache_status_store(const char *keyname, int keyname_type,
 
 /* Fetch a name status record. */
 
-BOOL namecache_status_fetch(const char *keyname, int keyname_type,
+bool namecache_status_fetch(const char *keyname, int keyname_type,
                        int name_type, struct in_addr keyip, char *srvname_out)
 {
        char *key = NULL;
@@ -314,9 +343,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 ));