Convert get_root_nt_token to memcache
authorVolker Lendecke <vl@samba.org>
Fri, 28 Dec 2007 16:24:39 +0000 (17:24 +0100)
committerVolker Lendecke <vl@samba.org>
Fri, 28 Dec 2007 16:24:39 +0000 (17:24 +0100)
(This used to be commit fada689893314bed2fc78588b3fd9b144f4c808a)

source3/auth/token_util.c
source3/include/memcache.h
source3/lib/memcache.c

index 27c98c9581183bedf0ea54490ee02ef1ab4824ed..a1b4edfb7ae023bd0b372866aa7a0040e945e2cb 100644 (file)
@@ -77,12 +77,19 @@ bool nt_token_check_domain_rid( NT_USER_TOKEN *token, uint32 rid )
 
 NT_USER_TOKEN *get_root_nt_token( void )
 {
-       static NT_USER_TOKEN *token = NULL;
+       struct nt_user_token *token = NULL;
        DOM_SID u_sid, g_sid;
        struct passwd *pw;
+       void *cache_data;
 
-       if ( token )
-               return token;
+       cache_data = memcache_lookup_talloc(
+               NULL, SINGLETON_CACHE_TALLOC,
+               data_blob_string_const("root_nt_token"));
+
+       if (cache_data != NULL) {
+               return talloc_get_type_abort(
+                       cache_data, struct nt_user_token);
+       }
 
        if ( !(pw = sys_getpwnam( "root" )) ) {
                DEBUG(0,("get_root_nt_token: getpwnam(\"root\") failed!\n"));
@@ -97,6 +104,11 @@ NT_USER_TOKEN *get_root_nt_token( void )
 
        token = create_local_nt_token(NULL, &u_sid, False,
                                      1, &global_sid_Builtin_Administrators);
+
+       memcache_add_talloc(
+               NULL, SINGLETON_CACHE_TALLOC,
+               data_blob_string_const("root_nt_token"), token);
+
        return token;
 }
 
index c615efa695fe74349b240005f9c35b51dc578da9..5a0ce63cb76c8d75cab1efbdabe69fd8da25706f 100644 (file)
@@ -34,6 +34,7 @@ enum memcache_number {
        GETPWNAM_CACHE,         /* talloc */
        MANGLE_HASH2_CACHE,
        PDB_GETPWSID_CACHE,     /* talloc */
+       SINGLETON_CACHE_TALLOC, /* talloc */
        SINGLETON_CACHE
 };
 
index c06e7ceacc9837a6489a4715cf05d9fa6e734693..6dee61af505c40fe180ca982d1eb30bc0a06e56d 100644 (file)
@@ -47,6 +47,7 @@ static bool memcache_is_talloc(enum memcache_number n)
        switch (n) {
        case GETPWNAM_CACHE:
        case PDB_GETPWSID_CACHE:
+       case SINGLETON_CACHE_TALLOC:
                result = true;
                break;
        default: