summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2006-12-20 04:50:46 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:16:38 -0500
commit5d3456b22ea21f9f9728023578e5e6d58c1f5f3d (patch)
tree5aef995dda2d64820980ee3ee5058d5c216963d3
parente59e787b4868acffad49b6264e319d585643d5ab (diff)
downloadsamba-5d3456b22ea21f9f9728023578e5e6d58c1f5f3d.tar.gz
samba-5d3456b22ea21f9f9728023578e5e6d58c1f5f3d.tar.bz2
samba-5d3456b22ea21f9f9728023578e5e6d58c1f5f3d.zip
r20270: Even with the dual daemon mode the parent winbindd
still needs to contact the DC's for non async requests like enumerate users/groups etc. Now that online DC detection is tied to async events we must enable the processing of events in the main loop of winbindd. Finally got rid of the last hard coded domain->initialized = 1 code in init_child_recv() - now all domain->initialized = True gets done only in the connection manager code when either we're online and have spoken to the DC or are offline and we know we can't talk to the DC. Jeremy. (This used to be commit b3c98057fbad182f6c05c5daec6cd258dd491064)
-rw-r--r--source3/nsswitch/winbindd.c11
-rw-r--r--source3/nsswitch/winbindd_util.c18
2 files changed, 26 insertions, 3 deletions
diff --git a/source3/nsswitch/winbindd.c b/source3/nsswitch/winbindd.c
index 70875e08cb..049bc47aba 100644
--- a/source3/nsswitch/winbindd.c
+++ b/source3/nsswitch/winbindd.c
@@ -708,7 +708,7 @@ static void process_loop(void)
struct fd_event *ev;
fd_set r_fds, w_fds;
int maxfd, listen_sock, listen_priv_sock, selret;
- struct timeval timeout;
+ struct timeval timeout, ev_timeout;
/* We'll be doing this a lot */
@@ -716,8 +716,10 @@ static void process_loop(void)
message_dispatch();
+ run_events();
+
/* refresh the trusted domain cache */
-
+
rescan_trusted_domains();
/* Free up temporary memory */
@@ -745,6 +747,11 @@ static void process_loop(void)
timeout.tv_sec = WINBINDD_ESTABLISH_LOOP;
timeout.tv_usec = 0;
+ /* Check for any event timeouts. */
+ if (get_timed_events_timeout(&ev_timeout)) {
+ timeout = timeval_min(&timeout, &ev_timeout);
+ }
+
/* Set up client readers and writers */
state = winbindd_client_list();
diff --git a/source3/nsswitch/winbindd_util.c b/source3/nsswitch/winbindd_util.c
index 6f15908687..6ae08cc1ac 100644
--- a/source3/nsswitch/winbindd_util.c
+++ b/source3/nsswitch/winbindd_util.c
@@ -285,6 +285,15 @@ static void trustdom_recv(void *private_data, BOOL success)
&cache_methods,
&sid);
setup_domain_child(domain, &domain->child, NULL);
+ if (!domain->internal) {
+ /* Even in the parent winbindd we'll need to
+ talk to the DC, so try and see if we can
+ contact it. Theoretically this isn't neccessary
+ as the init_dc_connection() in init_child_recv()
+ will do this, but we can start detecting the DC
+ early here. */
+ set_domain_online_request(domain);
+ }
}
p=q;
if (p != NULL)
@@ -443,7 +452,7 @@ static void init_child_recv(void *private_data, BOOL success)
state->domain->sequence_number =
state->response->data.domain_info.sequence_number;
- state->domain->initialized = 1;
+ init_dc_connection(state->domain);
if (state->continuation != NULL)
state->continuation(state->private_data, True);
@@ -515,6 +524,13 @@ BOOL init_domain_list(void)
&cache_methods, &our_sid);
domain->primary = True;
setup_domain_child(domain, &domain->child, NULL);
+ /* Even in the parent winbindd we'll need to
+ talk to the DC, so try and see if we can
+ contact it. Theoretically this isn't neccessary
+ as the init_dc_connection() in init_child_recv()
+ will do this, but we can start detecting the DC
+ early here. */
+ set_domain_online_request(domain);
}
/* Local SAM */