r22715: When our primary domain does on or offline, make sure to send a msg
authorGerald Carter <jerry@samba.org>
Sun, 6 May 2007 21:10:30 +0000 (21:10 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:21:49 +0000 (12:21 -0500)
to the idmap child.

Also remove the check for the global offline state in child_msg_offline()
as this means we cannot mark domains offline due to network outages.
(This used to be commit 1b99e8b521eae3e9fa775577de01116bb20fb8b3)

source3/nsswitch/winbindd_cm.c
source3/nsswitch/winbindd_dual.c

index f7b7410ba236bc7b1cdd9be7d47a3b84ecdeb90d..82c85d624612b183aa498afc6c9c5e9f0458c90d 100644 (file)
@@ -246,8 +246,9 @@ static void check_domain_online_handler(struct event_context *ctx,
         struct winbindd_domain *domain =
                 (struct winbindd_domain *)private_data;
 
-       DEBUG(10,("check_domain_online_handler: called for domain %s\n",
-               domain->name ));
+       DEBUG(10,("check_domain_online_handler: called for domain "
+                 "%s (online = %s)\n", domain->name, 
+                 domain->online ? "True" : "False" ));
 
        if (domain->check_online_event) {
                TALLOC_FREE(domain->check_online_event);
@@ -349,6 +350,23 @@ void set_domain_offline(struct winbindd_domain *domain)
 
        DEBUG(10,("set_domain_offline: added event handler for domain %s\n",
                domain->name ));
+
+       /* Send an offline message to the idmap child when our
+          primary domain goes offline */
+
+       if ( domain->primary ) {
+               struct winbindd_child *idmap = idmap_child();
+               
+               if ( idmap->pid != 0 ) {
+                       message_send_pid(pid_to_procid(idmap->pid), 
+                                        MSG_WINBIND_OFFLINE, 
+                                        domain->name, 
+                                        strlen(domain->name)+1, 
+                                        False);
+               }                       
+       }
+
+       return; 
 }
 
 /****************************************************************
@@ -409,6 +427,23 @@ static void set_domain_online(struct winbindd_domain *domain)
        message_deregister(MSG_WINBIND_FAILED_TO_GO_ONLINE);
 
        domain->online = True;
+
+       /* Send an online message to the idmap child when our
+          primary domain comes online */
+
+       if ( domain->primary ) {
+               struct winbindd_child *idmap = idmap_child();
+               
+               if ( idmap->pid != 0 ) {
+                       message_send_pid(pid_to_procid(idmap->pid), 
+                                        MSG_WINBIND_ONLINE, 
+                                        domain->name, 
+                                        strlen(domain->name)+1, 
+                                        False);
+               }                       
+       }
+
+       return; 
 }
 
 /****************************************************************
index aa6b356679e87996770c54b70a1a30ee3bfcd5ba..58ed19be32de1e3c3f9379ece2e451fff0a52c25 100644 (file)
@@ -504,21 +504,6 @@ void winbind_msg_offline(int msg_type, struct process_id src,
                }
                DEBUG(5,("winbind_msg_offline: marking %s offline.\n", domain->name));
                set_domain_offline(domain);
-
-               /* Send an offline message to the idmap child when our
-                  primary domain goes offline */
-
-               if ( domain->primary ) {
-                       struct winbindd_child *idmap = idmap_child();
-
-                       if ( idmap->pid != 0 ) {
-                               message_send_pid(pid_to_procid(idmap->pid), 
-                                                MSG_WINBIND_OFFLINE, 
-                                                domain->name, 
-                                                strlen(domain->name)+1, 
-                                                False);
-                       }                       
-               }
        }
 
        for (child = children; child != NULL; child = child->next) {
@@ -703,12 +688,6 @@ static void child_msg_offline(int msg_type, struct process_id src,
                return;
        }
 
-       /* Set our global state as offline. */
-       if (!set_global_winbindd_state_offline()) {
-               DEBUG(10,("child_msg_offline: offline request failed.\n"));
-               return;
-       }
-
        /* Mark the requested domain offline. */
 
        for (domain = domain_list(); domain; domain = domain->next) {