#include "lib/param/param.h"
#include "lib/async_req/async_sock.h"
#include "libsmb/samlogon_cache.h"
+#include "libcli/auth/netlogon_creds_cli.h"
#undef DBGC_CLASS
#define DBGC_CLASS DBGC_WINBIND
extern bool override_logfile;
-struct tevent_context *winbind_event_context(void)
-{
- static struct tevent_context *ev = NULL;
-
- if (ev != NULL) {
- return ev;
- }
-
- /*
- * Note we MUST use the NULL context here, not the autofree context,
- * to avoid side effects in forked children exiting.
- */
- ev = samba_tevent_context_init(NULL);
- if (ev == NULL) {
- smb_panic("Could not init winbindd's messaging context.\n");
- }
- return ev;
-}
-
struct messaging_context *winbind_messaging_context(void)
{
static struct messaging_context *msg = NULL;
* Note we MUST use the NULL context here, not the autofree context,
* to avoid side effects in forked children exiting.
*/
- msg = messaging_init(NULL, winbind_event_context());
+ msg = messaging_init(NULL, server_event_context());
if (msg == NULL) {
smb_panic("Could not init winbindd's messaging context.\n");
}
* Note we MUST use the NULL context here, not the autofree context,
* to avoid side effects in forked children exiting.
*/
- msg = imessaging_init(NULL, lp_ctx, myself, winbind_event_context());
+ msg = imessaging_init(NULL, lp_ctx, myself, server_event_context());
talloc_unlink(NULL, lp_ctx);
if (msg == NULL) {
idmap_close();
- trustdom_cache_shutdown();
-
gencache_stabilize();
+ netlogon_creds_cli_close_global_db();
+
#if 0
if (interactive) {
TALLOC_CTX *mem_ctx = talloc_init("end_description");
struct tevent_signal *se;
bool *is_parent;
- is_parent = talloc(winbind_event_context(), bool);
+ is_parent = talloc(server_event_context(), bool);
if (!is_parent) {
return false;
}
*is_parent = parent;
- se = tevent_add_signal(winbind_event_context(),
+ se = tevent_add_signal(server_event_context(),
is_parent,
SIGTERM, 0,
winbindd_sig_term_handler,
return false;
}
- se = tevent_add_signal(winbind_event_context(),
+ se = tevent_add_signal(server_event_context(),
is_parent,
SIGINT, 0,
winbindd_sig_term_handler,
return false;
}
- se = tevent_add_signal(winbind_event_context(),
+ se = tevent_add_signal(server_event_context(),
is_parent,
SIGQUIT, 0,
winbindd_sig_term_handler,
if (foreground) {
struct stat st;
- is_parent = talloc(winbind_event_context(), bool);
+ is_parent = talloc(server_event_context(), bool);
if (!is_parent) {
return false;
}
return false;
}
if (S_ISFIFO(st.st_mode) || S_ISSOCK(st.st_mode)) {
- tevent_add_fd(winbind_event_context(),
+ tevent_add_fd(server_event_context(),
is_parent,
0,
TEVENT_FD_READ,
char *file = NULL;
if (lfile) {
- file = talloc_strdup(winbind_event_context(),
+ file = talloc_strdup(server_event_context(),
lfile);
if (!file) {
return false;
}
}
- se = tevent_add_signal(winbind_event_context(),
- winbind_event_context(),
+ se = tevent_add_signal(server_event_context(),
+ server_event_context(),
SIGHUP, 0,
winbindd_sig_hup_handler,
file);
{
struct tevent_signal *se;
- se = tevent_add_signal(winbind_event_context(),
- winbind_event_context(),
+ se = tevent_add_signal(server_event_context(),
+ server_event_context(),
SIGCHLD, 0,
winbindd_sig_chld_handler,
NULL);
{
struct tevent_signal *se;
- se = tevent_add_signal(winbind_event_context(),
- winbind_event_context(),
+ se = tevent_add_signal(server_event_context(),
+ server_event_context(),
SIGUSR2, 0,
winbindd_sig_usr2_handler,
NULL);
DEBUG(10, ("process_request: Handling async request %d:%s\n",
(int)state->pid, state->cmd_name));
- req = atable->send_req(state->mem_ctx, winbind_event_context(),
+ req = atable->send_req(state->mem_ctx, server_event_context(),
state, state->request);
if (req == NULL) {
DEBUG(0, ("process_request: atable->send failed for "
TALLOC_FREE(state->request);
- req = wb_resp_write_send(state, winbind_event_context(),
+ req = wb_resp_write_send(state, server_event_context(),
state->out_queue, state->sock,
state->response);
if (req == NULL) {
state->cmd_name = "no request";
state->recv_fn = NULL;
- req = wb_req_read_send(state, winbind_event_context(), state->sock,
+ req = wb_req_read_send(state, server_event_context(), state->sock,
WINBINDD_MAX_EXTRA_DATA);
if (req == NULL) {
remove_client(state);
state->privileged = privileged;
- req = wb_req_read_send(state, winbind_event_context(), state->sock,
+ req = wb_req_read_send(state, server_event_context(), state->sock,
WINBINDD_MAX_EXTRA_DATA);
if (req == NULL) {
TALLOC_FREE(state);
return;
}
- req = wait_for_read_send(state, winbind_event_context(), state->sock,
+ req = wait_for_read_send(state, server_event_context(), state->sock,
true);
if (req == NULL) {
DEBUG(0, ("winbind_client_request_read[%d:%s]:"
prev = winbindd_client_list_prev(state);
expiry_time = state->last_access + timeout_val;
- if (curr_time > expiry_time) {
- if (client_is_idle(state)) {
- DEBUG(5,("Idle client timed out, "
- "shutting down sock %d, pid %u\n",
- state->sock,
- (unsigned int)state->pid));
- } else {
- DEBUG(5,("Client request timed out, "
- "shutting down sock %d, pid %u\n",
- state->sock,
- (unsigned int)state->pid));
- }
- remove_client(state);
- } else {
+ if (curr_time <= expiry_time) {
/* list is sorted, previous clients in
list are newer */
break;
}
+
+ if (client_is_idle(state)) {
+ DEBUG(5,("Idle client timed out, "
+ "shutting down sock %d, pid %u\n",
+ state->sock,
+ (unsigned int)state->pid));
+ } else {
+ DEBUG(5,("Client request timed out, "
+ "shutting down sock %d, pid %u\n",
+ state->sock,
+ (unsigned int)state->pid));
+ }
+
+ remove_client(state);
}
}
int rc;
char *socket_path;
- pub_state = talloc(winbind_event_context(),
+ pub_state = talloc(server_event_context(),
struct winbindd_listen_state);
if (!pub_state) {
goto failed;
goto failed;
}
- fde = tevent_add_fd(winbind_event_context(), pub_state, pub_state->fd,
+ fde = tevent_add_fd(server_event_context(), pub_state, pub_state->fd,
TEVENT_FD_READ, winbindd_listen_fde_handler,
pub_state);
if (fde == NULL) {
}
tevent_fd_set_auto_close(fde);
- priv_state = talloc(winbind_event_context(),
+ priv_state = talloc(server_event_context(),
struct winbindd_listen_state);
if (!priv_state) {
goto failed;
goto failed;
}
- fde = tevent_add_fd(winbind_event_context(), priv_state,
+ fde = tevent_add_fd(server_event_context(), priv_state,
priv_state->fd, TEVENT_FD_READ,
winbindd_listen_fde_handler, priv_state);
if (fde == NULL) {
}
tevent_fd_set_auto_close(fde);
- winbindd_scrub_clients_handler(winbind_event_context(), NULL,
+ winbindd_scrub_clients_handler(server_event_context(), NULL,
timeval_current(), NULL);
return true;
failed:
smb_nscd_flush_group_cache();
if (lp_allow_trusted_domains()) {
- if (tevent_add_timer(winbind_event_context(), NULL, timeval_zero(),
+ if (tevent_add_timer(server_event_context(), NULL, timeval_zero(),
rescan_trusted_domains, NULL) == NULL) {
DEBUG(0, ("Could not trigger rescan_trusted_domains()\n"));
exit(1);
*/
status = reinit_after_fork(winbind_messaging_context(),
- winbind_event_context(),
+ server_event_context(),
false, NULL);
if (!NT_STATUS_IS_OK(status)) {
exit_daemon("Winbindd reinit_after_fork() failed", map_errno_from_nt_status(status));
rpc_lsarpc_init(NULL);
rpc_samr_init(NULL);
- winbindd_init_addrchange(NULL, winbind_event_context(),
+ winbindd_init_addrchange(NULL, server_event_context(),
winbind_messaging_context());
/* setup listen sockets */
while (1) {
frame = talloc_stackframe();
- if (tevent_loop_once(winbind_event_context()) == -1) {
+ if (tevent_loop_once(server_event_context()) == -1) {
DEBUG(1, ("tevent_loop_once() failed: %s\n",
strerror(errno)));
return 1;