Fix daemon-SIGHUP on FreeBSD
authorJeremy Harris <jgh146exb@wizmail.org>
Sat, 6 Feb 2021 17:30:37 +0000 (17:30 +0000)
committerJeremy Harris <jgh146exb@wizmail.org>
Sat, 6 Feb 2021 17:30:37 +0000 (17:30 +0000)
Cherry-picked from: beb5d85c7d

doc/doc-txt/ChangeLog
src/src/daemon.c

index b7e310f04403ec2552e44c6c68698a4918b70cb6..c9ad2e259cee8af2c90e58f1dc3a94c7e80f73c3 100644 (file)
@@ -142,6 +142,14 @@ JH/39 Bug 2691: fix $local_part_data.  When the matching list element
       referred to a file, bad data was returned.  This likely also affected
       $domain_part_data.
 
+JH/41 Fix daemon SIGHUP on FreeBSD.  Previously, a named socket for IPC was
+      left undeleted; the attempt to re-create it then failed - resulting in
+      the usual "SIGHUP tp have daemon reload configuration" to not work.
+      This affected any platform not supporting "abstract" Unix-domain
+      sockets (i.e. not Linux).
+
+
+
 
 Exim version 4.94
 -----------------
index 9d491593fd545fef3cab0f78290dad5dd5afee72..ca3dd2cf1314e3cf6f76618f6d0fc430ec01c4ef 100644 (file)
@@ -130,11 +130,30 @@ if (smtp_out) smtp_printf("421 %s\r\n", FALSE, smtp_msg);
 /*************************************************
 *************************************************/
 
+#ifndef EXIM_HAVE_ABSTRACT_UNIX_SOCKETS
+static void
+unlink_notifier_socket(void)
+{
+uschar * s = expand_string(notifier_socket);
+DEBUG(D_any) debug_printf("unlinking notifier socket %s\n", s);
+Uunlink(s);
+}
+#endif
+
+
 static void
 close_daemon_sockets(int daemon_notifier_fd,
   int * listen_sockets, int listen_socket_count)
 {
-if (daemon_notifier_fd >= 0) (void) close(daemon_notifier_fd);
+if (daemon_notifier_fd >= 0)
+  {
+  (void) close(daemon_notifier_fd);
+  daemon_notifier_fd = -1;
+#ifndef EXIM_HAVE_ABSTRACT_UNIX_SOCKETS
+  unlink_notifier_socket();
+#endif
+  }
+
 for (int i = 0; i < listen_socket_count; i++) (void) close(listen_sockets[i]);
 }
 
@@ -972,11 +991,7 @@ if (daemon_notifier_fd >= 0)
   close(daemon_notifier_fd);
   daemon_notifier_fd = -1;
 #ifndef EXIM_HAVE_ABSTRACT_UNIX_SOCKETS
-    {
-    uschar * s = expand_string(notifier_socket);
-    DEBUG(D_any) debug_printf("unlinking notifier socket %s\n", s);
-    Uunlink(s);
-    }
+  unlink_notifier_socket();
 #endif
   }