winbind: Remove winbind_event_context
[samba.git] / source3 / winbindd / winbindd.c
index 2cd200142673f9c15f4f15952fb48180d1c21520..75f9dbb142e32033d14af546292c549c22ccbfb8 100644 (file)
@@ -44,6 +44,7 @@
 #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
@@ -59,25 +60,6 @@ static bool interactive = False;
 
 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;
@@ -90,7 +72,7 @@ struct messaging_context *winbind_messaging_context(void)
         * 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");
        }
@@ -123,7 +105,7 @@ struct imessaging_context *winbind_imessaging_context(void)
         * 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) {
@@ -243,10 +225,10 @@ static void terminate(bool is_parent)
 
        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");
@@ -306,14 +288,14 @@ bool winbindd_setup_sig_term_handler(bool parent)
        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,
@@ -324,7 +306,7 @@ bool winbindd_setup_sig_term_handler(bool parent)
                return false;
        }
 
-       se = tevent_add_signal(winbind_event_context(),
+       se = tevent_add_signal(server_event_context(),
                               is_parent,
                               SIGINT, 0,
                               winbindd_sig_term_handler,
@@ -335,7 +317,7 @@ bool winbindd_setup_sig_term_handler(bool parent)
                return false;
        }
 
-       se = tevent_add_signal(winbind_event_context(),
+       se = tevent_add_signal(server_event_context(),
                               is_parent,
                               SIGQUIT, 0,
                               winbindd_sig_term_handler,
@@ -356,7 +338,7 @@ bool winbindd_setup_stdin_handler(bool parent, bool foreground)
        if (foreground) {
                struct stat st;
 
-               is_parent = talloc(winbind_event_context(), bool);
+               is_parent = talloc(server_event_context(), bool);
                if (!is_parent) {
                        return false;
                }
@@ -372,7 +354,7 @@ bool winbindd_setup_stdin_handler(bool parent, bool foreground)
                        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,
@@ -404,15 +386,15 @@ bool winbindd_setup_sig_hup_handler(const char *lfile)
        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);
@@ -441,8 +423,8 @@ static bool winbindd_setup_sig_chld_handler(void)
 {
        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);
@@ -467,8 +449,8 @@ static bool winbindd_setup_sig_usr2_handler(void)
 {
        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);
@@ -733,7 +715,7 @@ static void process_request(struct winbindd_cli_state *state)
                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 "
@@ -827,7 +809,7 @@ static void request_finished(struct winbindd_cli_state *state)
 
        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) {
@@ -868,7 +850,7 @@ static void winbind_client_response_written(struct tevent_req *req)
        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);
@@ -936,7 +918,7 @@ static void new_connection(int listen_sock, bool privileged)
 
        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);
@@ -976,7 +958,7 @@ static void winbind_client_request_read(struct tevent_req *req)
                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]:"
@@ -1127,24 +1109,25 @@ static void remove_timed_out_clients(void)
                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);
        }
 }
 
@@ -1237,7 +1220,7 @@ static bool winbindd_setup_listeners(void)
        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;
@@ -1254,7 +1237,7 @@ static bool winbindd_setup_listeners(void)
                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) {
@@ -1263,7 +1246,7 @@ static bool winbindd_setup_listeners(void)
        }
        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;
@@ -1286,7 +1269,7 @@ static bool winbindd_setup_listeners(void)
                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) {
@@ -1295,7 +1278,7 @@ static bool winbindd_setup_listeners(void)
        }
        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:
@@ -1410,7 +1393,7 @@ static void winbindd_register_handlers(struct messaging_context *msg_ctx,
        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);
@@ -1775,7 +1758,7 @@ int main(int argc, const char **argv)
         */
 
        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));
@@ -1805,7 +1788,7 @@ int main(int argc, const char **argv)
        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 */
@@ -1826,7 +1809,7 @@ int main(int argc, const char **argv)
        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;