r23054: Move the check for the lookup_domain of S-1-22-{1,2} before the
authorGerald Carter <jerry@samba.org>
Mon, 21 May 2007 21:33:51 +0000 (21:33 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:22:17 +0000 (12:22 -0500)
check for IS_DC.  Otherwise we will for example fail to lookup a
sid of S-1-22-1-780 because it has no valid struct winbindd_domain*
in the list.   Thanks to Simo for the catch.
(This used to be commit f53aa56998411b90de238e12e9c3de7f2ff0d2b6)

source3/nsswitch/winbindd_util.c

index e05f698ee8ddab0b82e8ca80c696f667e7b910ae..13971be8b711ed5f7a3d066a65d49fffba4691b9 100644 (file)
@@ -902,6 +902,16 @@ struct winbindd_domain *find_builtin_domain(void)
 
 struct winbindd_domain *find_lookup_domain_from_sid(const DOM_SID *sid)
 {
+       /* SIDs in the S-1-22-{1,2} domain should be handled by our passdb */
+
+       if ( sid_check_is_in_unix_groups(sid) || 
+            sid_check_is_unix_groups(sid) ||
+            sid_check_is_in_unix_users(sid) ||
+            sid_check_is_unix_users(sid) )
+       {
+               return find_domain_from_sid(get_global_sam_sid());
+       }
+
        /* A DC can't ask the local smbd for remote SIDs, here winbindd is the
         * one to contact the external DC's. On member servers the internal
         * domains are different: These are part of the local SAM. */
@@ -912,18 +922,7 @@ struct winbindd_domain *find_lookup_domain_from_sid(const DOM_SID *sid)
        if (IS_DC || is_internal_domain(sid) || is_in_internal_domain(sid)) {
                DEBUG(10, ("calling find_domain_from_sid\n"));
                return find_domain_from_sid(sid);
-       }
-
-       /* SIDs in the S-1-22-{1,2} domain should be handled by our passdb */
-
-       if ( sid_check_is_in_unix_groups(sid) || 
-            sid_check_is_unix_groups(sid) ||
-            sid_check_is_in_unix_users(sid) ||
-            sid_check_is_unix_users(sid) )
-       {
-               return find_domain_from_sid(get_global_sam_sid());
-       }
-       
+       }       
 
        /* On a member server a query for SID or name can always go to our
         * primary DC. */
@@ -934,18 +933,18 @@ struct winbindd_domain *find_lookup_domain_from_sid(const DOM_SID *sid)
 
 struct winbindd_domain *find_lookup_domain_from_name(const char *domain_name)
 {
-       if (IS_DC || strequal(domain_name, "BUILTIN") ||
-           strequal(domain_name, get_global_sam_name()))
-               return find_domain_from_name_noinit(domain_name);
-
-       /* The "Unix User" and "Unix Group" domain our handled by passdb */
-
        if ( strequal(domain_name, unix_users_domain_name() ) ||
             strequal(domain_name, unix_groups_domain_name() ) )
        {
                return find_domain_from_name_noinit( get_global_sam_name() );
        }
 
+       if (IS_DC || strequal(domain_name, "BUILTIN") ||
+           strequal(domain_name, get_global_sam_name()))
+               return find_domain_from_name_noinit(domain_name);
+
+       /* The "Unix User" and "Unix Group" domain our handled by passdb */
+
        return find_our_domain();
 }