BUG 9766: Cache name_to_sid/sid_to_name correctly.
authorAndreas Schneider <asn@samba.org>
Thu, 4 Apr 2013 10:18:25 +0000 (12:18 +0200)
committerKarolin Seeger <kseeger@samba.org>
Fri, 26 Apr 2013 07:25:04 +0000 (09:25 +0200)
If there is no domain_name specified we still need to set to for
caching else we will not find the entry later if we lookup the entry
with the domain_name.

Reviewed-by: Guenther Deschner <gd@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
Signed-off-by: Andreas Schneider <asn@samba.org>
Autobuild-User(master): Günther Deschner <gd@samba.org>
Autobuild-Date(master): Tue Apr  9 16:32:44 CEST 2013 on sn-devel-104
(cherry picked from commit afcbaf373a1959f2323ffa729886b688c2b965e3)

source3/winbindd/winbindd_cache.c

index 81b9b1799b8f8107df6882985c9bba79c4958b43..033ea770db5daecf5752d9d0c71984059d75a507 100644 (file)
@@ -945,6 +945,15 @@ static void wcache_save_name_to_sid(struct winbindd_domain *domain,
        centry = centry_start(domain, status);
        if (!centry)
                return;
+
+       if (domain_name[0] == '\0') {
+               struct winbindd_domain *mydomain =
+                       find_domain_from_sid_noinit(sid);
+               if (mydomain != NULL) {
+                       domain_name = mydomain->name;
+               }
+       }
+
        centry_put_uint32(centry, type);
        centry_put_sid(centry, sid);
        fstrcpy(uname, name);
@@ -965,6 +974,14 @@ static void wcache_save_sid_to_name(struct winbindd_domain *domain, NTSTATUS sta
        if (!centry)
                return;
 
+       if (domain_name[0] == '\0') {
+               struct winbindd_domain *mydomain =
+                       find_domain_from_sid_noinit(sid);
+               if (mydomain != NULL) {
+                       domain_name = mydomain->name;
+               }
+       }
+
        if (NT_STATUS_IS_OK(status)) {
                centry_put_uint32(centry, type);
                centry_put_string(centry, domain_name);
@@ -1781,6 +1798,10 @@ NTSTATUS wcache_name_to_sid(struct winbindd_domain *domain,
                return NT_STATUS_NO_MEMORY;
        }
 
+       if (domain_name[0] == '\0') {
+               domain_name = domain->name;
+       }
+
        centry = wcache_fetch(cache, domain, "NS/%s/%s", domain_name, uname);
        TALLOC_FREE(uname);
        if (centry == NULL) {