diff options
author | Gerald Carter <jerry@samba.org> | 2007-05-06 21:10:30 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:21:49 -0500 |
commit | 09fee9aa1801c21c8e51489eddde10130f4605ad (patch) | |
tree | c3aacc2082f151fb5d4ded97aaa61800a014e33b | |
parent | 89fd4444aff2c858605f71d46715e3b366e82749 (diff) | |
download | samba-09fee9aa1801c21c8e51489eddde10130f4605ad.tar.gz samba-09fee9aa1801c21c8e51489eddde10130f4605ad.tar.bz2 samba-09fee9aa1801c21c8e51489eddde10130f4605ad.zip |
r22715: When our primary domain does on or offline, make sure to send a msg
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)
-rw-r--r-- | source3/nsswitch/winbindd_cm.c | 39 | ||||
-rw-r--r-- | source3/nsswitch/winbindd_dual.c | 21 |
2 files changed, 37 insertions, 23 deletions
diff --git a/source3/nsswitch/winbindd_cm.c b/source3/nsswitch/winbindd_cm.c index f7b7410ba2..82c85d6246 100644 --- a/source3/nsswitch/winbindd_cm.c +++ b/source3/nsswitch/winbindd_cm.c @@ -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; } /**************************************************************** diff --git a/source3/nsswitch/winbindd_dual.c b/source3/nsswitch/winbindd_dual.c index aa6b356679..58ed19be32 100644 --- a/source3/nsswitch/winbindd_dual.c +++ b/source3/nsswitch/winbindd_dual.c @@ -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) { |