]> git.netwichtig.de Git - user/henk/code/exim.git/blobdiff - src/src/daemon.c
Pass authenticator pubname through spool. Bug 2648
[user/henk/code/exim.git] / src / src / daemon.c
index 8c9abc7dcc34227f65e2f046ddcc4a10b7505cee..78a4d8ec2ba137fc3d24188ca224a555e8b3d8b3 100644 (file)
@@ -59,7 +59,6 @@ Returns:  nothing
 static void
 sighup_handler(int sig)
 {
-sig = sig;    /* Keep picky compilers happy */
 sighup_seen = TRUE;
 signal(SIGHUP, sighup_handler);
 }
@@ -83,7 +82,6 @@ Returns:  nothing
 static void
 main_sigchld_handler(int sig)
 {
-sig = sig;    /* Keep picky compilers happy */
 os_non_restarting_signal(SIGCHLD, SIG_DFL);
 sigchld_seen = TRUE;
 }
@@ -952,8 +950,7 @@ if ((f = Ufopen(pid_file_path, "rb")))
   }
 else
   DEBUG(D_any)
-    debug_printf("%s\n", string_open_failed(errno, "pid file %s",
-      pid_file_path));
+    debug_printf("%s\n", string_open_failed("pid file %s", pid_file_path));
 exim_exit(EXIT_SUCCESS);
 }
 
@@ -966,6 +963,10 @@ daemon_die(void)
 {
 int pid;
 
+#if !defined(DISABLE_TLS) && (defined(EXIM_HAVE_INOTIFY) || defined(EXIM_HAVE_KEVENT))
+tls_watch_invalidate();
+#endif
+
 if (daemon_notifier_fd >= 0)
   {
   close(daemon_notifier_fd);
@@ -1010,6 +1011,11 @@ const uschar * where;
 struct sockaddr_un sa_un = {.sun_family = AF_UNIX};
 int len;
 
+if (!notifier_socket || !*notifier_socket)
+  {
+  DEBUG(D_any) debug_printf("-oY used so not creating notifier socket\n");
+  return;
+  }
 if (override_local_interfaces && !override_pid_file_path)
   {
   DEBUG(D_any)
@@ -1824,8 +1830,7 @@ if (f.running_in_test_harness || write_pid)
     }
   else
     DEBUG(D_any)
-      debug_printf("%s\n", string_open_failed(errno, "pid file %s",
-        pid_file_path));
+      debug_printf("%s\n", string_open_failed("pid file %s", pid_file_path));
   }
 
 /* Set up the handler for SIGHUP, which causes a restart of the daemon. */
@@ -2038,6 +2043,9 @@ malware_init();
 #ifdef SUPPORT_SPF
 spf_init();
 #endif
+#ifndef DISABLE_TLS
+tls_daemon_init();
+#endif
 
 /* Close the log so it can be renamed and moved. In the few cases below where
 this long-running process writes to the log (always exceptional conditions), it
@@ -2276,8 +2284,18 @@ for (;;)
     fd_set select_listen;
 
     FD_ZERO(&select_listen);
+#ifndef DISABLE_TLS
+    if (tls_watch_fd >= 0)
+      {
+      FD_SET(tls_watch_fd, &select_listen);
+      if (tls_watch_fd > max_socket) max_socket = tls_watch_fd;
+      }
+#endif
     if (daemon_notifier_fd >= 0)
+      {
       FD_SET(daemon_notifier_fd, &select_listen);
+      if (daemon_notifier_fd > max_socket) max_socket = daemon_notifier_fd;
+      }
     for (int sk = 0; sk < listen_socket_count; sk++)
       {
       FD_SET(listen_sockets[sk], &select_listen);
@@ -2320,8 +2338,8 @@ for (;;)
     errno = select_errno;
 
 #ifndef DISABLE_TLS
-    /* Create or rotate any required keys */
-    tls_daemon_init();
+    /* Create or rotate any required keys; handle (delayed) filewatch event */
+    tls_daemon_tick();
 #endif
 
     /* Loop for all the sockets that are currently ready to go. If select
@@ -2334,6 +2352,15 @@ for (;;)
 
       if (!select_failed)
        {
+#if !defined(DISABLE_TLS) && (defined(EXIM_HAVE_INOTIFY) || defined(EXIM_HAVE_KEVENT))
+       if (tls_watch_fd >= 0 && FD_ISSET(tls_watch_fd, &select_listen))
+         {
+         FD_CLR(tls_watch_fd, &select_listen);
+          tls_watch_trigger_time = time(NULL); /* Set up delayed event */
+         tls_watch_discard_event(tls_watch_fd);
+         break;        /* to top of daemon loop */
+         }
+#endif
        if (  daemon_notifier_fd >= 0
           && FD_ISSET(daemon_notifier_fd, &select_listen))
          {