From 09fee9aa1801c21c8e51489eddde10130f4605ad Mon Sep 17 00:00:00 2001 From: Gerald Carter Date: Sun, 6 May 2007 21:10:30 +0000 Subject: 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) --- source3/nsswitch/winbindd_cm.c | 39 +++++++++++++++++++++++++++++++++++++-- source3/nsswitch/winbindd_dual.c | 21 --------------------- 2 files changed, 37 insertions(+), 23 deletions(-) (limited to 'source3') 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) { -- cgit