sizeof(state->request));
if (len != sizeof(state->request)) {
- DEBUG(0, ("Got invalid request length: %d\n", (int)len));
+ DEBUG(len > 0 ? 0 : 3, ("Got invalid request length: %d\n", (int)len));
state->finished = True;
return;
}
void (*continuation)(void *private_data, BOOL success),
void *private_data)
{
- struct winbindd_async_request *state, *tmp;
+ struct winbindd_async_request *state;
SMB_ASSERT(continuation != NULL);
state->continuation = continuation;
state->private_data = private_data;
- DLIST_ADD_END(child->requests, state, tmp);
+ DLIST_ADD_END(child->requests, state, struct winbindd_async_request *);
schedule_async_request(child);
for (domain = domain_list(); domain; domain = domain->next) {
DEBUG(5,("child_msg_offline: marking %s offline.\n", domain->name));
- domain->online = False;
+ set_domain_offline(domain);
+ }
+}
+
+/* Ensure any negative cache entries with the netbios or realm names are removed. */
+
+void winbindd_flush_negative_conn_cache(struct winbindd_domain *domain)
+{
+ flush_negative_conn_cache_for_domain(domain->name);
+ if (*domain->alt_name) {
+ flush_negative_conn_cache_for_domain(domain->alt_name);
}
}
/* Set our global state as online. */
set_global_winbindd_state_online();
- winbindd_flush_nscd_cache();
+ smb_nscd_flush_user_cache();
+ smb_nscd_flush_group_cache();
- /* Mark everything online - delete any negative cache entries
- to force an immediate reconnect. */
+ /* Try and mark everything online - delete any negative cache entries
+ to force a reconnect now. */
for (domain = domain_list(); domain; domain = domain->next) {
DEBUG(5,("child_msg_online: marking %s online.\n", domain->name));
- domain->online = True;
- check_negative_conn_cache_timeout(domain->name, domain->dcname, 0);
+ winbindd_flush_negative_conn_cache(domain);
+ set_domain_online_request(domain);
}
}
char *buf = NULL;
if ((buf = talloc_asprintf(mem_ctx, "global:%s ",
- get_global_winbindd_state_online() ?
+ get_global_winbindd_state_offline() ?
"Offline":"Online")) == NULL) {
return NULL;
}
int fdpair[2];
struct winbindd_cli_state state;
extern BOOL override_logfile;
+ time_t startup_time;
if (socketpair(AF_UNIX, SOCK_STREAM, 0, fdpair) != 0) {
DEBUG(0, ("Could not open child pipe: %s\n",
message_register(MSG_WINBIND_ONLINE,child_msg_online);
message_register(MSG_WINBIND_ONLINESTATUS,child_msg_onlinestatus);
+ if ( child->domain ) {
+ child->domain->startup = True;
+ }
+ startup_time = time(NULL);
+
while (1) {
int ret;
GetTimeOfDay(&now);
+ if (child->domain && child->domain->startup && (now.tv_sec > startup_time + 30)) {
+ /* No longer in "startup" mode. */
+ DEBUG(10,("fork_domain_child: domain %s no longer in 'startup' mode.\n",
+ child->domain->name ));
+ child->domain->startup = False;
+ }
+
tp = get_timed_events_timeout(&t);
if (tp) {
DEBUG(11,("select will use timeout of %u.%u seconds\n",