Instrument the cache code in winbindd so I can tell what is going on.
authorJeremy Allison <jra@samba.org>
Tue, 10 Jun 2003 21:53:24 +0000 (21:53 +0000)
committerJeremy Allison <jra@samba.org>
Tue, 10 Jun 2003 21:53:24 +0000 (21:53 +0000)
No CR#.
Jeremy.

source/nsswitch/winbindd_cache.c

index 4ee886b21458cd2991f719e58529804cc083c9ad..6491528696372724ae84be0eddbeac8d73757447 100644 (file)
@@ -45,12 +45,14 @@ void wcache_flush_cache(void)
 {
        extern BOOL opt_nocache;
 
-       if (!wcache) return;
+       if (!wcache)
+               return;
        if (wcache->tdb) {
                tdb_close(wcache->tdb);
                wcache->tdb = NULL;
        }
-       if (opt_nocache) return;
+       if (opt_nocache)
+               return;
 
        wcache->tdb = tdb_open_log(lock_path("winbindd_cache.tdb"), 5000, 
                                   TDB_DEFAULT, O_RDWR | O_CREAT | O_TRUNC, 0600);
@@ -58,6 +60,7 @@ void wcache_flush_cache(void)
        if (!wcache->tdb) {
                DEBUG(0,("Failed to open winbindd_cache.tdb!\n"));
        }
+       DEBUG(10,("wcache_flush_cache success\n"));
 }
 
 void winbindd_check_cache_size(time_t t)
@@ -95,7 +98,8 @@ static struct winbind_cache *get_cache(struct winbindd_domain *domain)
        extern struct winbindd_methods msrpc_methods;
        struct winbind_cache *ret = wcache;
 
-       if (ret) return ret;
+       if (ret)
+               return ret;
        
        ret = smb_xmalloc(sizeof(*ret));
        ZERO_STRUCTP(ret);
@@ -122,7 +126,8 @@ static struct winbind_cache *get_cache(struct winbindd_domain *domain)
 */
 static void centry_free(struct cache_entry *centry)
 {
-       if (!centry) return;
+       if (!centry)
+               return;
        SAFE_FREE(centry->data);
        free(centry);
 }
@@ -194,8 +199,16 @@ static char *centry_string(struct cache_entry *centry, TALLOC_CTX *mem_ctx)
 /* the server is considered down if it can't give us a sequence number */
 static BOOL wcache_server_down(struct winbindd_domain *domain)
 {
-       if (!wcache->tdb) return False;
-       return (domain->sequence_number == DOM_SEQUENCE_NONE);
+       BOOL ret;
+
+       if (!wcache->tdb)
+               return False;
+       ret = (domain->sequence_number == DOM_SEQUENCE_NONE);
+
+       if (ret)
+               DEBUG(10,("wcache_server_down: server for Domain %s down\n",
+                       domain->name ));
+       return ret;
 }
 
 static NTSTATUS fetch_cache_seqnum( struct winbindd_domain *domain, time_t now )
@@ -210,8 +223,10 @@ static NTSTATUS fetch_cache_seqnum( struct winbindd_domain *domain, time_t now )
        snprintf( key, sizeof(key), "SEQNUM/%s", domain->name );
        
        data = tdb_fetch_by_string( wcache->tdb, key );
-       if ( !data.dptr || data.dsize!=8 )
+       if ( !data.dptr || data.dsize!=8 ) {
+               DEBUG(10,("fetch_cache_seqnum: invalid data size key [%s]\n", key ));
                return NT_STATUS_UNSUCCESSFUL;
+       }
        
        domain->sequence_number = IVAL(data.dptr, 0);
        domain->last_seq_check  = IVAL(data.dptr, 4);
@@ -219,8 +234,12 @@ static NTSTATUS fetch_cache_seqnum( struct winbindd_domain *domain, time_t now )
        /* have we expired? */
        
        time_diff = now - domain->last_seq_check;
-       if ( time_diff < 0 || time_diff > lp_winbind_cache_time() )
+       if ( time_diff < 0 || time_diff > lp_winbind_cache_time() ) {
+               DEBUG(10,("fetch_cache_seqnum: timeout [%s][%u @ %u]\n",
+                       domain->name, domain->sequence_number,
+                       (uint32)domain->last_seq_check));
                return NT_STATUS_UNSUCCESSFUL;
+       }
 
        DEBUG(10,("fetch_cache_seqnum: success [%s][%u @ %u]\n", 
                domain->name, domain->sequence_number, 
@@ -235,9 +254,11 @@ static NTSTATUS store_cache_seqnum( struct winbindd_domain *domain )
        fstring key_str;
        char buf[8];
        
-       if (!wcache->tdb) 
+       if (!wcache->tdb) {
+               DEBUG(10,("store_cache_seqnum: tdb == NULL\n"));
                return NT_STATUS_UNSUCCESSFUL;
-               
+       }
+
        snprintf( key_str, sizeof(key_str), "SEQNUM/%s", domain->name );
        key.dptr = key_str;
        key.dsize = strlen(key_str)+1;
@@ -247,8 +268,10 @@ static NTSTATUS store_cache_seqnum( struct winbindd_domain *domain )
        data.dptr = buf;
        data.dsize = 8;
        
-       if ( tdb_store( wcache->tdb, key, data, TDB_REPLACE) == -1 )
+       if ( tdb_store( wcache->tdb, key, data, TDB_REPLACE) == -1 ) {
+               DEBUG(10,("store_cache_seqnum: tdb_store fail key [%s]\n", key_str ));
                return NT_STATUS_UNSUCCESSFUL;
+       }
 
        DEBUG(10,("store_cache_seqnum: success [%s][%u @ %u]\n", 
                domain->name, domain->sequence_number, 
@@ -277,6 +300,7 @@ static NTSTATUS refresh_sequence_number(struct winbindd_domain *domain,
           __a lot__       --jerry */
 
        if ( !force && (time_diff < lp_winbind_cache_time()) ) {
+               DEBUG(10, ("refresh_sequence_number: %s time ok\n", domain->name));
                return NT_STATUS_OK;
        }
 
@@ -323,12 +347,14 @@ done:
 /*
   decide if a cache entry has expired
 */
-static BOOL centry_expired(struct winbindd_domain *domain, struct cache_entry *centry)
+static BOOL centry_expired(struct winbindd_domain *domain, const char *keystr, struct cache_entry *centry)
 {
        /* if the server is OK and our cache entry came from when it was down then
           the entry is invalid */
        if (domain->sequence_number != DOM_SEQUENCE_NONE && 
            centry->sequence_number == DOM_SEQUENCE_NONE) {
+               DEBUG(10,("centry_expired: Key %s for domain %s invalid sequence.\n",
+                       keystr, domain->name ));
                return True;
        }
 
@@ -336,9 +362,14 @@ static BOOL centry_expired(struct winbindd_domain *domain, struct cache_entry *c
           current sequence number then it is OK */
        if (wcache_server_down(domain) || 
            centry->sequence_number == domain->sequence_number) {
+               DEBUG(10,("centry_expired: Key %s for domain %s is good.\n",
+                       keystr, domain->name ));
                return False;
        }
 
+       DEBUG(10,("centry_expired: Key %s for domain %s expired\n",
+               keystr, domain->name ));
+
        /* it's expired */
        return True;
 }
@@ -376,9 +407,9 @@ static struct cache_entry *wcache_fetch(struct winbind_cache *cache,
        key.dptr = kstr;
        key.dsize = strlen(kstr);
        data = tdb_fetch(wcache->tdb, key);
-       free(kstr);
        if (!data.dptr) {
                /* a cache miss */
+               free(kstr);
                return NULL;
        }
 
@@ -389,6 +420,9 @@ static struct cache_entry *wcache_fetch(struct winbind_cache *cache,
 
        if (centry->len < 8) {
                /* huh? corrupt cache? */
+               DEBUG(10,("wcache_fetch: Corrupt cache for key %s domain %s (len < 8) ?\n",
+                               kstr, domain->name ));
+               free(kstr);
                centry_free(centry);
                return NULL;
        }
@@ -396,18 +430,28 @@ static struct cache_entry *wcache_fetch(struct winbind_cache *cache,
        centry->status = NT_STATUS(centry_uint32(centry));
        centry->sequence_number = centry_uint32(centry);
 
-       if (centry_expired(domain, centry)) {
+       if (centry_expired(domain, kstr, centry)) {
                extern BOOL opt_dual_daemon;
 
+               DEBUG(10,("wcache_fetch: entry %s expired for domain %s\n",
+                       kstr, domain->name ));
+
                if (opt_dual_daemon) {
                        extern BOOL background_process;
                        background_process = True;
+                       DEBUG(10,("wcache_fetch: background processing expired entry %s for domain %s\n",
+                               kstr, domain->name ));
+
                } else {
+                       free(kstr);
                        centry_free(centry);
                        return NULL;
                }
        }
 
+       DEBUG(10,("wcache_fetch: returning entry %s for domain %s\n",
+               kstr, domain->name ));
+       free(kstr);
        return centry;
 }
 
@@ -417,7 +461,8 @@ static struct cache_entry *wcache_fetch(struct winbind_cache *cache,
 static void centry_expand(struct cache_entry *centry, uint32 len)
 {
        uint8 *p;
-       if (centry->len - centry->ofs >= len) return;
+       if (centry->len - centry->ofs >= len)
+               return;
        centry->len *= 2;
        p = realloc(centry->data, centry->len);
        if (!p) {
@@ -462,7 +507,8 @@ static void centry_put_string(struct cache_entry *centry, const char *s)
 
        len = strlen(s);
        /* can't handle more than 254 char strings. Truncating is probably best */
-       if (len > 254) len = 254;
+       if (len > 254)
+               len = 254;
        centry_put_uint8(centry, len);
        centry_expand(centry, len);
        memcpy(centry->data + centry->ofs, s, len);
@@ -476,7 +522,8 @@ struct cache_entry *centry_start(struct winbindd_domain *domain, NTSTATUS status
 {
        struct cache_entry *centry;
 
-       if (!wcache->tdb) return NULL;
+       if (!wcache->tdb)
+               return NULL;
 
        centry = smb_xmalloc(sizeof(*centry));
 
@@ -528,7 +575,8 @@ static void wcache_save_name_to_sid(struct winbindd_domain *domain, NTSTATUS sta
        fstring uname;
 
        centry = centry_start(domain, status);
-       if (!centry) return;
+       if (!centry)
+               return;
        len = sid_size(sid);
        centry_expand(centry, len);
        centry_put_uint32(centry, type);
@@ -537,6 +585,7 @@ static void wcache_save_name_to_sid(struct winbindd_domain *domain, NTSTATUS sta
        fstrcpy(uname, name);
        strupper_unix(uname);
        centry_end(centry, "NS/%s/%s", domain->name, uname);
+       DEBUG(10,("wcache_save_name_to_sid: %s -> %s\n", uname, sid_string_static(sid) ));
        centry_free(centry);
 }
 
@@ -546,12 +595,14 @@ static void wcache_save_sid_to_name(struct winbindd_domain *domain, NTSTATUS sta
        struct cache_entry *centry;
 
        centry = centry_start(domain, status);
-       if (!centry) return;
+       if (!centry)
+               return;
        if (NT_STATUS_IS_OK(status)) {
                centry_put_uint32(centry, type);
                centry_put_string(centry, name);
        }
        centry_end(centry, "SN/%s/%d", domain->name, rid);
+       DEBUG(10,("wcache_save_sid_to_name: %s -> %s\n", sid_string_static(sid), name ));
        centry_free(centry);
 }
 
@@ -561,12 +612,14 @@ static void wcache_save_user(struct winbindd_domain *domain, NTSTATUS status, WI
        struct cache_entry *centry;
 
        centry = centry_start(domain, status);
-       if (!centry) return;
+       if (!centry)
+               return;
        centry_put_string(centry, info->acct_name);
        centry_put_string(centry, info->full_name);
        centry_put_uint32(centry, info->user_rid);
        centry_put_uint32(centry, info->group_rid);
        centry_end(centry, "U/%s/%d", domain->name, info->user_rid);
+       DEBUG(10,("wcache_save_user: %s/%d -> %s\n", domain->name, info->user_rid, info->acct_name ));
        centry_free(centry);
 }
 
@@ -582,14 +635,17 @@ static NTSTATUS query_user_list(struct winbindd_domain *domain,
        NTSTATUS status;
        int i, retry;
 
-       if (!cache->tdb) goto do_query;
+       if (!cache->tdb)
+               goto do_query;
 
        centry = wcache_fetch(cache, domain, "UL/%s", domain->name);
-       if (!centry) goto do_query;
+       if (!centry)
+               goto do_query;
 
        *num_entries = centry_uint32(centry);
        
-       if (*num_entries == 0) goto do_cached;
+       if (*num_entries == 0)
+               goto do_cached;
 
        (*info) = talloc(mem_ctx, sizeof(**info) * (*num_entries));
        if (! (*info)) smb_panic("query_user_list out of memory");
@@ -621,6 +677,9 @@ do_cached:
        } else
                status = centry->status;
 
+       DEBUG(10,("query_user_list: [Cached] - cached list for domain %s status %s\n",
+               domain->name, get_friendly_nt_error_msg(status) ));
+
        centry_free(centry);
        return status;
 
@@ -643,6 +702,10 @@ do_query:
 
        retry = 0;
        do {
+
+               DEBUG(10,("query_user_list: [Cached] - doing backend query for list for domain %s\n",
+                       domain->name ));
+
                status = cache->backend->query_user_list(domain, mem_ctx, num_entries, info);
                if (!NT_STATUS_IS_OK(status))
                        DEBUG(3, ("query_user_list: returned 0x%08x, retrying\n", NT_STATUS_V(status)));
@@ -657,7 +720,8 @@ do_query:
        /* and save it */
        refresh_sequence_number(domain, False);
        centry = centry_start(domain, status);
-       if (!centry) goto skip_save;
+       if (!centry)
+               goto skip_save;
        centry_put_uint32(centry, *num_entries);
        for (i=0; i<(*num_entries); i++) {
                centry_put_string(centry, (*info)[i].acct_name);
@@ -695,14 +759,17 @@ static NTSTATUS enum_dom_groups(struct winbindd_domain *domain,
        NTSTATUS status;
        int i;
 
-       if (!cache->tdb) goto do_query;
+       if (!cache->tdb)
+               goto do_query;
 
        centry = wcache_fetch(cache, domain, "GL/%s/domain", domain->name);
-       if (!centry) goto do_query;
+       if (!centry)
+               goto do_query;
 
        *num_entries = centry_uint32(centry);
        
-       if (*num_entries == 0) goto do_cached;
+       if (*num_entries == 0)
+               goto do_cached;
 
        (*info) = talloc(mem_ctx, sizeof(**info) * (*num_entries));
        if (! (*info)) smb_panic("enum_dom_groups out of memory");
@@ -725,6 +792,9 @@ do_cached:
        } else
                status = centry->status;
 
+        DEBUG(10,("enum_dom_groups: [Cached] - cached list for domain %s status %s\n",
+               domain->name, get_friendly_nt_error_msg(status) ));
+
        centry_free(centry);
        return status;
 
@@ -737,12 +807,16 @@ do_query:
        if (!NT_STATUS_IS_OK(domain->last_status))
                return domain->last_status;
 
+       DEBUG(10,("enum_dom_groups: [Cached] - doing backend query for list for domain %s\n",
+               domain->name ));
+
        status = cache->backend->enum_dom_groups(domain, mem_ctx, num_entries, info);
 
        /* and save it */
        refresh_sequence_number(domain, False);
        centry = centry_start(domain, status);
-       if (!centry) goto skip_save;
+       if (!centry)
+               goto skip_save;
        centry_put_uint32(centry, *num_entries);
        for (i=0; i<(*num_entries); i++) {
                centry_put_string(centry, (*info)[i].acct_name);
@@ -767,14 +841,17 @@ static NTSTATUS enum_local_groups(struct winbindd_domain *domain,
        NTSTATUS status;
        int i;
 
-       if (!cache->tdb) goto do_query;
+       if (!cache->tdb)
+               goto do_query;
 
        centry = wcache_fetch(cache, domain, "GL/%s/local", domain->name);
-       if (!centry) goto do_query;
+       if (!centry)
+               goto do_query;
 
        *num_entries = centry_uint32(centry);
        
-       if (*num_entries == 0) goto do_cached;
+       if (*num_entries == 0)
+               goto do_cached;
 
        (*info) = talloc(mem_ctx, sizeof(**info) * (*num_entries));
        if (! (*info)) smb_panic("enum_dom_groups out of memory");
@@ -797,6 +874,9 @@ do_cached:
        } else
                status = centry->status;
 
+       DEBUG(10,("enum_local_groups: [Cached] - cached list for domain %s status %s\n",
+               domain->name, get_friendly_nt_error_msg(status) ));
+
        centry_free(centry);
        return status;
 
@@ -809,12 +889,16 @@ do_query:
        if (!NT_STATUS_IS_OK(domain->last_status))
                return domain->last_status;
 
+       DEBUG(10,("enum_local_groups: [Cached] - doing backend query for list for domain %s\n",
+               domain->name ));
+
        status = cache->backend->enum_local_groups(domain, mem_ctx, num_entries, info);
 
        /* and save it */
        refresh_sequence_number(domain, False);
        centry = centry_start(domain, status);
-       if (!centry) goto skip_save;
+       if (!centry)
+               goto skip_save;
        centry_put_uint32(centry, *num_entries);
        for (i=0; i<(*num_entries); i++) {
                centry_put_string(centry, (*info)[i].acct_name);
@@ -839,16 +923,22 @@ static NTSTATUS name_to_sid(struct winbindd_domain *domain,
        NTSTATUS status;
        fstring uname;
 
-       if (!cache->tdb) goto do_query;
+       if (!cache->tdb)
+               goto do_query;
 
        fstrcpy(uname, name);
        strupper_unix(uname);
        centry = wcache_fetch(cache, domain, "NS/%s/%s", domain->name, uname);
-       if (!centry) goto do_query;
+       if (!centry)
+               goto do_query;
        *type = centry_uint32(centry);
        sid_parse((char *)centry->data + centry->ofs, centry->len - centry->ofs, sid);
 
        status = centry->status;
+
+       DEBUG(10,("name_to_sid: [Cached] - cached name for domain %s status %s\n",
+               domain->name, get_friendly_nt_error_msg(status) ));
+
        centry_free(centry);
        return status;
 
@@ -866,6 +956,9 @@ do_query:
              || NT_STATUS_EQUAL(domain->last_status, NT_STATUS_ACCESS_DENIED)))
                return domain->last_status;
 
+       DEBUG(10,("name_to_sid: [Cached] - doing backend query for name for domain %s\n",
+               domain->name ));
+
        status = cache->backend->name_to_sid(domain, name, sid, type);
 
        /* and save it */
@@ -893,15 +986,21 @@ static NTSTATUS sid_to_name(struct winbindd_domain *domain,
 
        sid_peek_rid(sid, &rid);
 
-       if (!cache->tdb) goto do_query;
+       if (!cache->tdb)
+               goto do_query;
 
        centry = wcache_fetch(cache, domain, "SN/%s/%d", domain->name, rid);
-       if (!centry) goto do_query;
+       if (!centry)
+               goto do_query;
        if (NT_STATUS_IS_OK(centry->status)) {
                *type = centry_uint32(centry);
                *name = centry_string(centry, mem_ctx);
        }
        status = centry->status;
+
+       DEBUG(10,("sid_to_name: [Cached] - cached name for domain %s status %s\n",
+               domain->name, get_friendly_nt_error_msg(status) ));
+
        centry_free(centry);
        return status;
 
@@ -920,6 +1019,9 @@ do_query:
              || NT_STATUS_EQUAL(domain->last_status, NT_STATUS_ACCESS_DENIED)))
                return domain->last_status;
 
+       DEBUG(10,("sid_to_name: [Cached] - doing backend query for name for domain %s\n",
+               domain->name ));
+
        status = cache->backend->sid_to_name(domain, mem_ctx, sid, name, type);
 
        /* and save it */
@@ -941,7 +1043,8 @@ static NTSTATUS query_user(struct winbindd_domain *domain,
        struct cache_entry *centry = NULL;
        NTSTATUS status;
 
-       if (!cache->tdb) goto do_query;
+       if (!cache->tdb)
+               goto do_query;
 
        centry = wcache_fetch(cache, domain, "U/%s/%d", domain->name, user_rid);
 
@@ -957,13 +1060,18 @@ static NTSTATUS query_user(struct winbindd_domain *domain,
                goto do_query;
        }
 
-       if (!centry) goto do_query;
+       if (!centry)
+               goto do_query;
 
        info->acct_name = centry_string(centry, mem_ctx);
        info->full_name = centry_string(centry, mem_ctx);
        info->user_rid = centry_uint32(centry);
        info->group_rid = centry_uint32(centry);
        status = centry->status;
+
+       DEBUG(10,("query_user: [Cached] - cached info for domain %s status %s\n",
+               domain->name, get_friendly_nt_error_msg(status) ));
+
        centry_free(centry);
        return status;
 
@@ -975,6 +1083,9 @@ do_query:
        if (!NT_STATUS_IS_OK(domain->last_status))
                return domain->last_status;
 
+       DEBUG(10,("sid_to_name: [Cached] - doing backend query for info for domain %s\n",
+               domain->name ));
+
        status = cache->backend->query_user(domain, mem_ctx, user_rid, info);
 
        /* and save it */
@@ -996,7 +1107,8 @@ static NTSTATUS lookup_usergroups(struct winbindd_domain *domain,
        NTSTATUS status;
        int i;
 
-       if (!cache->tdb) goto do_query;
+       if (!cache->tdb)
+               goto do_query;
 
        centry = wcache_fetch(cache, domain, "UG/%s/%d", domain->name, user_rid);
 
@@ -1012,20 +1124,27 @@ static NTSTATUS lookup_usergroups(struct winbindd_domain *domain,
                goto do_query;
        }
 
-       if (!centry) goto do_query;
+       if (!centry)
+               goto do_query;
 
        *num_groups = centry_uint32(centry);
        
-       if (*num_groups == 0) goto do_cached;
+       if (*num_groups == 0)
+               goto do_cached;
 
        (*user_gids) = talloc(mem_ctx, sizeof(**user_gids) * (*num_groups));
-       if (! (*user_gids)) smb_panic("lookup_usergroups out of memory");
+       if (! (*user_gids))
+               smb_panic("lookup_usergroups out of memory");
        for (i=0; i<(*num_groups); i++) {
                (*user_gids)[i] = centry_uint32(centry);
        }
 
 do_cached:     
        status = centry->status;
+
+       DEBUG(10,("lookup_usergroups: [Cached] - cached info for domain %s status %s\n",
+               domain->name, get_friendly_nt_error_msg(status) ));
+
        centry_free(centry);
        return status;
 
@@ -1038,6 +1157,9 @@ do_query:
        if (!NT_STATUS_IS_OK(domain->last_status))
                return domain->last_status;
 
+       DEBUG(10,("lookup_usergroups: [Cached] - doing backend query for info for domain %s\n",
+               domain->name ));
+
        status = cache->backend->lookup_usergroups(domain, mem_ctx, user_rid, num_groups, user_gids);
 
        /* and save it */
@@ -1067,14 +1189,17 @@ static NTSTATUS lookup_groupmem(struct winbindd_domain *domain,
        NTSTATUS status;
        int i;
 
-       if (!cache->tdb) goto do_query;
+       if (!cache->tdb)
+               goto do_query;
 
        centry = wcache_fetch(cache, domain, "GM/%s/%d", domain->name, group_rid);
-       if (!centry) goto do_query;
+       if (!centry)
+               goto do_query;
 
        *num_names = centry_uint32(centry);
        
-       if (*num_names == 0) goto do_cached;
+       if (*num_names == 0)
+               goto do_cached;
 
        (*rid_mem) = talloc(mem_ctx, sizeof(**rid_mem) * (*num_names));
        (*names) = talloc(mem_ctx, sizeof(**names) * (*num_names));
@@ -1092,6 +1217,10 @@ static NTSTATUS lookup_groupmem(struct winbindd_domain *domain,
 
 do_cached:     
        status = centry->status;
+
+       DEBUG(10,("lookup_groupmem: [Cached] - cached info for domain %s status %s\n",
+               domain->name, get_friendly_nt_error_msg(status) ));
+
        centry_free(centry);
        return status;
 
@@ -1106,13 +1235,17 @@ do_query:
        if (!NT_STATUS_IS_OK(domain->last_status))
                return domain->last_status;
 
+       DEBUG(10,("lookup_groupmem: [Cached] - doing backend query for info for domain %s\n",
+               domain->name ));
+
        status = cache->backend->lookup_groupmem(domain, mem_ctx, group_rid, num_names, 
                                                 rid_mem, names, name_types);
 
        /* and save it */
        refresh_sequence_number(domain, False);
        centry = centry_start(domain, status);
-       if (!centry) goto skip_save;
+       if (!centry)
+               goto skip_save;
        centry_put_uint32(centry, *num_names);
        for (i=0; i<(*num_names); i++) {
                centry_put_uint32(centry, (*rid_mem)[i]);
@@ -1145,6 +1278,9 @@ static NTSTATUS trusted_domains(struct winbindd_domain *domain,
 {
        struct winbind_cache *cache = get_cache(domain);
 
+       DEBUG(10,("trusted_domains: [Cached] - doing backend query for info for domain %s\n",
+               domain->name ));
+
        /* we don't cache this call */
        return cache->backend->trusted_domains(domain, mem_ctx, num_domains, 
                                               names, dom_sids);
@@ -1155,6 +1291,9 @@ static NTSTATUS domain_sid(struct winbindd_domain *domain, DOM_SID *sid)
 {
        struct winbind_cache *cache = get_cache(domain);
 
+       DEBUG(10,("domain_sid: [Cached] - doing backend query for info for domain %s\n",
+               domain->name ));
+
        /* we don't cache this call */
        return cache->backend->domain_sid(domain, sid);
 }