summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 */