Fix winbindd running on a Samba DC,
authorSimo Sorce <idra@samba.org>
Fri, 1 Feb 2008 18:50:04 +0000 (13:50 -0500)
committerSimo Sorce <idra@samba.org>
Fri, 1 Feb 2008 19:23:43 +0000 (14:23 -0500)
This patch make sure we do not try to contact smbd in the main dameon
to avoid deadlocks.
All the operations that require connecting to smbd are performed in
the domain child anyway.
(This used to be commit 9347d34b502bef70cdae8f3e8acd9796dba49581)

source3/winbindd/winbindd_dual.c
source3/winbindd/winbindd_util.c

index 778886d8e28b87767f2d0eb63082563bc324f912..2739ab542e2cf988fa2c5d5d4a38bba44dd75fb8 100644 (file)
@@ -34,6 +34,7 @@
 #define DBGC_CLASS DBGC_WINBIND
 
 extern bool override_logfile;
+extern struct winbindd_methods cache_methods;
 
 /* Read some data from a client connection */
 
@@ -991,6 +992,16 @@ static bool fork_domain_child(struct winbindd_child *child)
                        child);
        }
 
+       /* Special case for Winbindd on a Samba DC,
+        * We want to make sure the child can connect to smbd
+        * but not the main daemon */
+
+       if (child->domain && child->domain->internal && IS_DC) {
+               child->domain->internal = False;
+               child->domain->methods = &cache_methods;
+               child->domain->online = False;
+       }
+
        while (1) {
 
                int ret;
index 70468b6bcd2df85644fe53fffe03bbb0130b35b2..795209619ced8ffcb121ecec4e1dd65e9e2b3054 100644 (file)
@@ -82,9 +82,6 @@ static bool is_internal_domain(const DOM_SID *sid)
        if (sid == NULL)
                return False;
 
-       if ( IS_DC )
-               return sid_check_is_builtin(sid);
-
        return (sid_check_is_domain(sid) || sid_check_is_builtin(sid));
 }
 
@@ -93,9 +90,6 @@ static bool is_in_internal_domain(const DOM_SID *sid)
        if (sid == NULL)
                return False;
 
-       if ( IS_DC )
-               return sid_check_is_in_builtin(sid);
-
        return (sid_check_is_in_our_domain(sid) || sid_check_is_in_builtin(sid));
 }