Add a singleton cache
authorVolker Lendecke <vl@samba.org>
Thu, 20 Dec 2007 15:05:57 +0000 (16:05 +0100)
committerVolker Lendecke <vl@samba.org>
Fri, 21 Dec 2007 08:58:20 +0000 (09:58 +0100)
First user is yp_default_domain
(This used to be commit c19363eb77fcc3e1bf3341e6373d38f1e91fc08f)

source3/include/memcache.h
source3/lib/access.c

index 36cde98bd331f208ffeec6525abddec45a463b59..c4a2974b6293a1a5707ace88eec043fad93bf279 100644 (file)
@@ -32,7 +32,8 @@ enum memcache_number {
        SID_GID_CACHE,
        GETWD_CACHE,
        GETPWNAM_CACHE,         /* talloc */
-       MANGLE_HASH2_CACHE
+       MANGLE_HASH2_CACHE,
+       SINGLETON_CACHE
 };
 
 struct memcache *memcache_init(TALLOC_CTX *mem_ctx, size_t max_size);
index 1e4df83607912d8627b8582e6ed52a4087771d82..6a463446d1a0ae926a5d828b96d8aba239109c8b 100644 (file)
@@ -97,13 +97,29 @@ static bool string_match(const char *tok,const char *s)
                }
        } else if (tok[0] == '@') { /* netgroup: look it up */
 #ifdef HAVE_NETGROUP
-               static char *mydomain = NULL;
+               DATA_BLOB tmp;
+               char *mydomain = NULL;
                char *hostname = NULL;
                bool netgroup_ok = false;
 
-               if (!mydomain)
+               if (memcache_lookup(
+                           NULL, SINGLETON_CACHE,
+                           data_blob_string_const("yp_default_domain"),
+                           &tmp)) {
+
+                       SMB_ASSERT(tmp.length > 0);
+                       mydomain = (tmp.data[0] == '\0')
+                               ? NULL : (char *)tmp.data;
+               }
+               else {
                        yp_get_default_domain(&mydomain);
 
+                       memcache_add(
+                               NULL, SINGLETON_CACHE,
+                               data_blob_string_const("yp_default_domain"),
+                               data_blob_string_const(mydomain?mydomain:""));
+               }
+
                if (!mydomain) {
                        DEBUG(0,("Unable to get default yp domain. "
                                "Try without it.\n"));