summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGerald Carter <jerry@samba.org>2007-05-06 21:10:30 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:21:49 -0500
commit09fee9aa1801c21c8e51489eddde10130f4605ad (patch)
treec3aacc2082f151fb5d4ded97aaa61800a014e33b
parent89fd4444aff2c858605f71d46715e3b366e82749 (diff)
downloadsamba-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.c39
-rw-r--r--source3/nsswitch/winbindd_dual.c21
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) {