Default notifier socket name to spooldir-dependent path even for abstract names
authorJeremy Harris <jgh146exb@wizmail.org>
Sun, 8 Mar 2020 22:24:37 +0000 (22:24 +0000)
committerJeremy Harris <jgh146exb@wizmail.org>
Sun, 8 Mar 2020 23:18:21 +0000 (23:18 +0000)
15 files changed:
doc/doc-docbook/spec.xfpt
doc/doc-txt/OptionLists.txt
src/src/daemon.c
src/src/expand.c
src/src/globals.c
src/src/globals.h
src/src/queue.c
src/src/readconf.c
test/confs/0621
test/runtest
test/stderr/0433
test/stderr/0438
test/stderr/0609
test/stderr/1007
test/stderr/2201

index 25abda9e54389f36692f5d01f48390eaa17b9240..f91d51792d8907c60e58ca3e01d2f827d46aa7a8 100644 (file)
@@ -14309,6 +14309,7 @@ listed in more than one group.
 .row &%daemon_startup_sleep%&        "time to sleep between tries"
 .row &%extra_local_interfaces%&      "not necessarily listened on"
 .row &%local_interfaces%&            "on which to listen, with optional ports"
+.row &%notifier_socket%&             "override compiled-in value"
 .row &%pid_file_path%&               "override compiled-in value"
 .row &%queue_run_max%&               "maximum simultaneous queue runners"
 .endtable
@@ -16382,6 +16383,24 @@ harm. This option overrides the &%pipe_as_creator%& option of the &(pipe)&
 transport driver.
 
 
+.new
+.option notifier_socket main string "$spool_directory/exim_daemon_notify"
+This option gives the name for a unix-domain socket on which the daemon
+listens for work and information-requests.
+Only installations running multiple daemons sharing a spool directory
+should need to modify the default.
+
+The option is expanded before use.
+If the platform supports Linux-style abstract socket names, the result
+is used with a nul byte prefixed.
+Otherwise, it should be a full path name and use a directory accessible
+to Exim.
+
+If the Exim command line uses a &%-oX%& option and does not use &%-oP%&
+then a notifier socket is not created.
+.wen
+
+
 .option openssl_options main "string list" "+no_sslv2 +no_sslv3 +single_dh_use +no_ticket +no_renegotiation"
 .cindex "OpenSSL "compatibility options"
 This option allows an administrator to adjust the SSL options applied
index 2978aed35f6297d94bd95739dbfcd6e9b2ae0304..717f87e571a90e9238197b3330ca9603727b9b84 100644 (file)
@@ -399,6 +399,8 @@ mx_domains                           domain list     unset         dnslookup
 mx_fail_domains                      domain list     unset         dnslookup         4.43
 mysql_servers                        string list     unset         main              3.03
 never_users                          string list     unset         main
+notifier_socket                             string          "$spool_directory/exim_daemon_notify"
+                                                                  main              4.94
 notify_comsat                        boolean         false         appendfile
 once                                 string*         unset         autoreply
 once_file_size                       integer         0             autoreply         3.20
index ac507b0236813e55fdb508655b4a21c9ba4863e2..2813a50d1b262f430151c3d2fdf045a43a14d3e5 100644 (file)
@@ -972,7 +972,7 @@ if (daemon_notifier_fd >= 0)
   daemon_notifier_fd = -1;
 #ifndef EXIM_HAVE_ABSTRACT_UNIX_SOCKETS
     {
-    uschar * s = string_sprintf("%s/%s", spool_directory, NOTIFIER_SOCKET_NAME);
+    uschar * s = expand_string(notifier_socket);
     DEBUG(D_any) debug_printf("unlinking notifier socket %s\n", s);
     Uunlink(s);
     }
@@ -1010,7 +1010,14 @@ const uschar * where;
 struct sockaddr_un sa_un = {.sun_family = AF_UNIX};
 int len;
 
-DEBUG(D_any) debug_printf("creating notifier socket ");
+if (override_local_interfaces && !override_pid_file_path)
+  {
+  DEBUG(D_any)
+    debug_printf("-oX used without -oP so not creating notifier socket\n");
+  return;
+  }
+
+DEBUG(D_any) debug_printf("creating notifier socket\n");
 
 #ifdef SOCK_CLOEXEC
 if ((fd = socket(PF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0)) < 0)
@@ -1024,13 +1031,14 @@ if ((fd = socket(PF_UNIX, SOCK_DGRAM, 0)) < 0)
 #ifdef EXIM_HAVE_ABSTRACT_UNIX_SOCKETS
 sa_un.sun_path[0] = 0; /* Abstract local socket addr - Linux-specific? */
 len = offsetof(struct sockaddr_un, sun_path) + 1
-  + snprintf(sa_un.sun_path+1, sizeof(sa_un.sun_path)-1, "%s", NOTIFIER_SOCKET_NAME);
-DEBUG(D_any) debug_printf("@%s\n", sa_un.sun_path+1);
+  + snprintf(sa_un.sun_path+1, sizeof(sa_un.sun_path)-1, "%s",
+             expand_string(notifier_socket));
+DEBUG(D_any) debug_printf(" @%s\n", sa_un.sun_path+1);
 #else                  /* filesystem-visible and persistent; will neeed removal */
 len = offsetof(struct sockaddr_un, sun_path)
-  + snprintf(sa_un.sun_path, sizeof(sa_un.sun_path), "%s/%s", 
-               spool_directory, NOTIFIER_SOCKET_NAME);
-DEBUG(D_any) debug_printf("%s\n", sa_un.sun_path);
+  + snprintf(sa_un.sun_path, sizeof(sa_un.sun_path), "%s", 
+             expand_string(notifier_socket));
+DEBUG(D_any) debug_printf(" %s\n", sa_un.sun_path);
 #endif
 
 if (bind(fd, (const struct sockaddr *)&sa_un, len) < 0)
index 3c3184347871c178e174c4a37f7605eade728f75..4377ea1aa2ed9e518a8047e8584e962674fa9126 100644 (file)
@@ -1791,11 +1791,12 @@ debug_printf("local addr '%s%s'\n",
 #ifdef EXIM_HAVE_ABSTRACT_UNIX_SOCKETS
 sa_un.sun_path[0] = 0; /* Abstract local socket addr - Linux-specific? */
 len = offsetof(struct sockaddr_un, sun_path) + 1
-  + snprintf(sa_un.sun_path+1, sizeof(sa_un.sun_path)-1, "%s", NOTIFIER_SOCKET_NAME);
+  + snprintf(sa_un.sun_path+1, sizeof(sa_un.sun_path)-1, "%s",
+             expand_string(notifier_socket));
 #else
 len = offsetof(struct sockaddr_un, sun_path)
-  + snprintf(sa_un.sun_path, sizeof(sa_un.sun_path), "%s/%s",
-               spool_directory, NOTIFIER_SOCKET_NAME);
+  + snprintf(sa_un.sun_path, sizeof(sa_un.sun_path), "%s",
+             expand_string(notifier_socket));
 #endif
 
 if (connect(fd, (const struct sockaddr *)&sa_un, len) < 0)
index 4ce15acaaac7c98f37d08c02785adf13f770a146..a771f1193d7bc87982d03b4434fe783157dfc0e6 100644 (file)
@@ -1164,6 +1164,7 @@ int     mime_part_count        = -1;
 #endif
 
 uid_t  *never_users            = NULL;
+uschar *notifier_socket        = US"$spool_directory/" NOTIFIER_SOCKET_NAME ;
 
 const int on                   = 1;    /* for setsockopt */
 const int off                  = 0;
index 1fea9c9b00e3345f27c16bfcc0a7ed87df309ec5..28d170cdc700c152464271c43cf74c775d2b1b8e 100644 (file)
@@ -735,8 +735,7 @@ extern int     mime_part_count;
 extern BOOL    mua_wrapper;            /* TRUE when Exim is wrapping an MUA */
 
 extern uid_t  *never_users;            /* List of uids never to be used */
-#ifdef WITH_CONTENT_SCAN
-#endif
+extern uschar *notifier_socket;        /* Name for daemon notifier unix-socket */
 
 extern const int on;                   /* For setsockopt */
 extern const int off;
index 53dc6e026c6ce6d4ceb9b364fa71c99206d83738..1b70c02b61ef807aeb20920b2b5e5326e906334a 100644 (file)
@@ -1536,12 +1536,12 @@ if ((fd = socket(AF_UNIX, SOCK_DGRAM, 0)) >= 0)
 #ifdef EXIM_HAVE_ABSTRACT_UNIX_SOCKETS
   int len = offsetof(struct sockaddr_un, sun_path) + 1
     + snprintf(sa_un.sun_path+1, sizeof(sa_un.sun_path)-1, "%s",
-       NOTIFIER_SOCKET_NAME);
+               expand_string(notifier_socket));
   sa_un.sun_path[0] = 0;
 #else
   int len = offsetof(struct sockaddr_un, sun_path)
-    + snprintf(sa_un.sun_path, sizeof(sa_un.sun_path), "%s/%s",
-       spool_directory, NOTIFIER_SOCKET_NAME);
+    + snprintf(sa_un.sun_path, sizeof(sa_un.sun_path), "%s",
+               expand_string(notifier_socket));
 #endif
 
   if (sendto(fd, buf, sizeof(buf), 0, (struct sockaddr *)&sa_un, len) < 0)
index c8a3dffba127a017347f8f67bb8784505cd8ecce..a506d9f1da0504af34642a7d7c7aed4b310b7c7b 100644 (file)
@@ -227,6 +227,7 @@ static optionlist optionlist_config[] = {
   { "mysql_servers",            opt_stringptr,   {&mysql_servers} },
 #endif
   { "never_users",              opt_uidlist,     {&never_users} },
+  { "notifier_socket",          opt_stringptr,   {&notifier_socket} },
 #ifndef DISABLE_TLS
   { "openssl_options",          opt_stringptr,   {&openssl_options} },
 #endif
index 32d906203943b9112ddf655ce08352661c1b6668..ef3427df9573f4890b8d099bc1d6a78407378e72 100644 (file)
@@ -8,6 +8,7 @@
 domainlist local_domains = test.ex
 qualify_domain = test.ex
 queue_only
+notifier_socket = DIR/spool/this_my_notify_socket
 
 log_selector = +millisec
 
index 994ff9ff884c6cc615db23db315ea960cd5d4db2..aeb0d8f53eab91ee7fb293371db80bd913c5f31f 100755 (executable)
@@ -1218,8 +1218,9 @@ RESET_AFTER_EXTRA_LINE_READ:
     next if /in\shosts_require_dane\?\sno\s\(option\sunset\)/x;
 
     # daemon notifier socket
-    s/^(creating notifier socket) .*$/$1/;
-    s/^(\s*\d+|ppppp) (creating notifier socket) .+$/ppppp $2/;
+    s/^(\s*\d+|ppppp) (creating notifier socket)$/ppppp $2/;
+    s/^ \@(.*exim_daemon_notify)$/ $1/;
+    s/^(\s*\d+|ppppp)  \@(.*exim_daemon_notify)$/ppppp  $2/;
     next if /unlinking notifier socket/;
 
     # DISABLE_OCSP
index f9ac402e1ff63fe33d601b52e040df67c6fa9644..9972ae7d1cacfc15d0ac068b658b22b6324cdcfc 100644 (file)
@@ -8,6 +8,7 @@ admin user
 dropping to exim gid; retaining priv uid
 originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME
 ppppp creating notifier socket
+ppppp  TESTSUITE/spool/exim_daemon_notify
 listening on all interfaces (IPv4) port 1225
 pid written to TESTSUITE/spool/exim-daemon.pid
 changed uid/gid: running as a daemon
@@ -28,6 +29,7 @@ admin user
 dropping to exim gid; retaining priv uid
 originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME
 ppppp creating notifier socket
+ppppp  TESTSUITE/spool/exim_daemon_notify
 listening on all interfaces (IPv4) port 1225
 listening on all interfaces (IPv4) port 1226
 pid written to TESTSUITE/spool/exim-daemon.pid
@@ -49,6 +51,7 @@ admin user
 dropping to exim gid; retaining priv uid
 originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME
 ppppp creating notifier socket
+ppppp  TESTSUITE/spool/exim_daemon_notify
 listening on 127.0.0.1 port 1228
 listening on all interfaces (IPv4) port 1225
 listening on all interfaces (IPv4) port 1226
@@ -71,6 +74,7 @@ admin user
 dropping to exim gid; retaining priv uid
 originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME
 ppppp creating notifier socket
+ppppp  TESTSUITE/spool/exim_daemon_notify
 listening on all interfaces (IPv4) port 1225
 listening on all interfaces (IPv4) port 1226
 listening on 127.0.0.1 port 1228
@@ -95,6 +99,7 @@ originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME
 daemon_smtp_port overridden by -oX:
   <: 1227
 creating notifier socket
+ TESTSUITE/spool/exim_daemon_notify
 listening on 127.0.0.1 port 1228
 listening on all interfaces (IPv4) port 1227
 pid written to TESTSUITE/spool/exim-daemon.pid
@@ -118,6 +123,7 @@ originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME
 local_interfaces overridden by -oX:
   <; 0.0.0.0.1225; 0.0.0.0.1226
 creating notifier socket
+ TESTSUITE/spool/exim_daemon_notify
 listening on all interfaces (IPv4) port 1225
 listening on all interfaces (IPv4) port 1226
 pid written to TESTSUITE/spool/exim-daemon.pid
index 4fbd577050219594652a57ccb13134574235e0da..1b39cfddc0cce9fbdb1b8da98d3a93e7aad02152 100644 (file)
@@ -10,6 +10,7 @@ originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME
 daemon_smtp_port overridden by -oX:
   <: 1225
 creating notifier socket
+ TESTSUITE/spool/exim_daemon_notify
 listening on all interfaces (IPv4) port 1225
 pid written to TESTSUITE/spool/exim-daemon.pid
 changed uid/gid: running as a daemon
@@ -32,6 +33,7 @@ originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME
 daemon_smtp_port overridden by -oX:
   <: 1225
 creating notifier socket
+ TESTSUITE/spool/exim_daemon_notify
 listening on all interfaces (IPv4) port 1225
 pid written to TESTSUITE/spool/exim-daemon.anotherpid
 changed uid/gid: running as a daemon
@@ -54,6 +56,7 @@ originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME
 daemon_smtp_port overridden by -oX:
   <: 1225
 creating notifier socket
+ TESTSUITE/spool/exim_daemon_notify
 listening on all interfaces (IPv4) port 1225
 pid written to TESTSUITE/spool/mypidfile
 changed uid/gid: running as a daemon
index b8df9c3014587b7973be56abc5ba044dcdc169b1..fcae2635e069e94df2b8fbffb2b6c4de877ce053 100644 (file)
@@ -7,6 +7,7 @@ dropping to exim gid; retaining priv uid
 ppppp daemon_smtp_port overridden by -oX:
 ppppp   <: 1225
 ppppp creating notifier socket
+ppppp  TESTSUITE/spool/exim_daemon_notify
 ppppp listening on all interfaces (IPv4) port 1225
 ppppp pid written to TESTSUITE/spool/exim-daemon.pid
 ppppp LOG: MAIN
index 8eefcb56cf7393fad6f861c7dd89d4164c9b8395..ebfae6aa149c7f23efd009fdaff30ca9b38fb169 100644 (file)
@@ -8,6 +8,7 @@ admin user
 dropping to exim gid; retaining priv uid
 originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME
 ppppp creating notifier socket
+ppppp  TESTSUITE/spool/exim_daemon_notify
 listening on all interfaces (IPv6) port 1225
 listening on all interfaces (IPv4) port 1225
 pid written to TESTSUITE/spool/exim-daemon.pid
@@ -29,6 +30,7 @@ admin user
 dropping to exim gid; retaining priv uid
 originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME
 ppppp creating notifier socket
+ppppp  TESTSUITE/spool/exim_daemon_notify
 listening on all interfaces (IPv6) port 1225
 listening on all interfaces (IPv4) port 1225
 listening on all interfaces (IPv6) port 1226
@@ -52,6 +54,7 @@ admin user
 dropping to exim gid; retaining priv uid
 originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME
 ppppp creating notifier socket
+ppppp  TESTSUITE/spool/exim_daemon_notify
 listening on all interfaces (IPv6) port 1225
 listening on all interfaces (IPv4) port 1225
 listening on all interfaces (IPv6) port 1226
@@ -76,6 +79,7 @@ admin user
 dropping to exim gid; retaining priv uid
 originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME
 ppppp creating notifier socket
+ppppp  TESTSUITE/spool/exim_daemon_notify
 listening on all interfaces (IPv6) port 1225
 listening on all interfaces (IPv4) port 1225
 listening on all interfaces (IPv6) port 1226
@@ -100,6 +104,7 @@ admin user
 dropping to exim gid; retaining priv uid
 originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME
 ppppp creating notifier socket
+ppppp  TESTSUITE/spool/exim_daemon_notify
 listening on ip6:ip6:ip6:ip6:ip6:ip6:ip6:ip6 port 1225
 listening on ip6:ip6:ip6:ip6:ip6:ip6:ip6:ip6 port 1226
 pid written to TESTSUITE/spool/exim-daemon.pid
@@ -123,6 +128,7 @@ originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME
 daemon_smtp_port overridden by -oX:
   <: 1227
 creating notifier socket
+ TESTSUITE/spool/exim_daemon_notify
 listening on all interfaces (IPv6) port 1227
 listening on all interfaces (IPv4) port 1227
 listening on 127.0.0.1 port 1228
@@ -149,6 +155,7 @@ daemon_smtp_port overridden by -oX:
 local_interfaces overridden by -oX:
   <; 127.0.0.1
 creating notifier socket
+ TESTSUITE/spool/exim_daemon_notify
 listening on 127.0.0.1 port 1227
 listening on 127.0.0.1 port 1225
 pid written to TESTSUITE/spool/exim-daemon.pid
@@ -172,6 +179,7 @@ originator: uid=CALLER_UID gid=CALLER_GID login=CALLER name=CALLER_NAME
 local_interfaces overridden by -oX:
   <; ::0.1225; 0.0.0.0.1225; 0.0.0.0.1226
 creating notifier socket
+ TESTSUITE/spool/exim_daemon_notify
 listening on all interfaces (IPv6) port 1225
 listening on all interfaces (IPv4) port 1225
 listening on all interfaces (IPv4) port 1226
index 181a27f77299667a72a31875509f16fbecf4a3d0..34426ed13c1fad4240dd2044672d2b121c863476 100644 (file)
@@ -194,6 +194,7 @@ dropping to exim gid; retaining priv uid
 ppppp daemon_smtp_port overridden by -oX:
 ppppp   <: 1225
 ppppp creating notifier socket
+ppppp  TESTSUITE/spool/exim_daemon_notify
 ppppp listening on all interfaces (IPv4) port 1225
 ppppp pid written to TESTSUITE/spool/exim-daemon.pid
 ppppp LOG: MAIN