diff --git a/source3/nsswitch/winbindd.c b/source3/nsswitch/winbindd.c index 70875e08cb9..049bc47abac 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 6f15908687b..6ae08cc1ace 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 */