s3:winbind: Make wcache_name_to_sid visible externally
authorVolker Lendecke <vl@samba.org>
Fri, 31 Jul 2009 22:10:46 +0000 (00:10 +0200)
committerVolker Lendecke <vl@samba.org>
Wed, 5 Aug 2009 07:21:20 +0000 (03:21 -0400)
source3/winbindd/winbindd_cache.c
source3/winbindd/winbindd_proto.h

index f273f2c8d644f47293f7b923679276e764724a0d..87594542cf47d7a0224d1367a90bdb6d035770fe 100644 (file)
@@ -1605,28 +1605,31 @@ skip_save:
        return status;
 }
 
-/* convert a single name to a sid in a domain */
-static NTSTATUS name_to_sid(struct winbindd_domain *domain,
-                           TALLOC_CTX *mem_ctx,
+NTSTATUS wcache_name_to_sid(struct winbindd_domain *domain,
                            const char *domain_name,
                            const char *name,
-                           uint32_t flags,
-                           DOM_SID *sid,
+                           struct dom_sid *sid,
                            enum lsa_SidType *type)
 {
        struct winbind_cache *cache = get_cache(domain);
-       struct cache_entry *centry = NULL;
+       struct cache_entry *centry;
        NTSTATUS status;
-       fstring uname;
+       char *uname;
 
-       if (!cache->tdb)
-               goto do_query;
+       if (cache->tdb == NULL) {
+               return NT_STATUS_NOT_FOUND;
+       }
+
+       uname = talloc_strdup_upper(talloc_tos(), name);
+       if (uname == NULL) {
+               return NT_STATUS_NO_MEMORY;
+       }
 
-       fstrcpy(uname, name);
-       strupper_m(uname);
        centry = wcache_fetch(cache, domain, "NS/%s/%s", domain_name, uname);
-       if (!centry)
-               goto do_query;
+       TALLOC_FREE(uname);
+       if (centry == NULL) {
+               return NT_STATUS_NOT_FOUND;
+       }
 
        status = centry->status;
        if (NT_STATUS_IS_OK(status)) {
@@ -1634,13 +1637,29 @@ static NTSTATUS name_to_sid(struct winbindd_domain *domain,
                centry_sid(centry, sid);
        }
 
-       DEBUG(10,("name_to_sid: [Cached] - cached name for domain %s status: %s\n",
-               domain->name, nt_errstr(status) ));
+       DEBUG(10,("name_to_sid: [Cached] - cached name for domain %s status: "
+                 "%s\n", domain->name, nt_errstr(status) ));
 
        centry_free(centry);
        return status;
+}
+
+/* convert a single name to a sid in a domain */
+static NTSTATUS name_to_sid(struct winbindd_domain *domain,
+                           TALLOC_CTX *mem_ctx,
+                           const char *domain_name,
+                           const char *name,
+                           uint32_t flags,
+                           DOM_SID *sid,
+                           enum lsa_SidType *type)
+{
+       NTSTATUS status;
+
+       status = wcache_name_to_sid(domain, domain_name, name, sid, type);
+       if (!NT_STATUS_EQUAL(status, NT_STATUS_NOT_FOUND)) {
+               return status;
+       }
 
-do_query:
        ZERO_STRUCTP(sid);
 
        /* If the seq number check indicated that there is a problem
@@ -2666,46 +2685,22 @@ bool lookup_cached_name(TALLOC_CTX *mem_ctx,
                        enum lsa_SidType *type)
 {
        struct winbindd_domain *domain;
-       struct winbind_cache *cache;
-       struct cache_entry *centry = NULL;
        NTSTATUS status;
-       fstring uname;
-       bool original_online_state;     
+       bool original_online_state;
 
        domain = find_lookup_domain_from_name(domain_name);
        if (domain == NULL) {
                return false;
        }
 
-       cache = get_cache(domain);
-
-       if (cache->tdb == NULL) {
-               return false;
-       }
-
-       fstrcpy(uname, name);
-       strupper_m(uname);
-
        /* If we are doing a cached logon, temporarily set the domain
           offline so the cache won't expire the entry */
 
        original_online_state = domain->online;
        domain->online = false;
-       centry = wcache_fetch(cache, domain, "NS/%s/%s", domain_name, uname);
+       status = wcache_name_to_sid(domain, domain_name, name, sid, type);
        domain->online = original_online_state;
 
-       if (centry == NULL) {
-               return false;
-       }
-
-       if (NT_STATUS_IS_OK(centry->status)) {
-               *type = (enum lsa_SidType)centry_uint32(centry);
-               centry_sid(centry, sid);
-       }
-
-       status = centry->status;
-       centry_free(centry);
-
        return NT_STATUS_IS_OK(status);
 }
 
index 9d4c09283abf7928702f4a1d7e539a952e45869b..e76e0cde1fb3814189532aee7dc93e56c879f512 100644 (file)
@@ -166,6 +166,11 @@ bool lookup_cached_name(TALLOC_CTX *mem_ctx,
 void cache_name2sid(struct winbindd_domain *domain, 
                    const char *domain_name, const char *name,
                    enum lsa_SidType type, const DOM_SID *sid);
+NTSTATUS wcache_name_to_sid(struct winbindd_domain *domain,
+                           const char *domain_name,
+                           const char *name,
+                           struct dom_sid *sid,
+                           enum lsa_SidType *type);
 void wcache_flush_cache(void);
 NTSTATUS wcache_count_cached_creds(struct winbindd_domain *domain, int *count);
 NTSTATUS wcache_remove_oldest_cached_creds(struct winbindd_domain *domain, const DOM_SID *sid) ;