Gerben Wierda:
> > Turns out it is not hard to create the postlog client socket early
> > (i.e. before chroot). I drafted some code during my train commute,
> > needs to be cleaned up and tested. Maybe that will be sufficient
> > to make logging work on MacOS.
> 
> That sounds like a plan. For the time being I will run non-chrooted
> (postfix is pretty secure after all).

See patch below.

        Wietse

diff -ur /var/tmp/postfix-3.5-20190922/src/global/maillog_client.c 
src/global/maillog_client.c
--- /var/tmp/postfix-3.5-20190922/src/global/maillog_client.c   2019-01-30 
19:41:59.000000000 -0500
+++ src/global/maillog_client.c 2019-10-07 19:14:33.000000000 -0400
@@ -264,6 +264,8 @@
        }
        if (service_path != import_service_path)
            myfree(service_path);
+       msg_logger_control(CA_MSG_LOGGER_CTL_CONNECT_NOW,
+                          CA_MSG_LOGGER_CTL_END);
     }
 
     /*
diff -ur /var/tmp/postfix-3.5-20190922/src/util/msg_logger.c 
src/util/msg_logger.c
--- /var/tmp/postfix-3.5-20190922/src/util/msg_logger.c 2019-01-29 
17:24:42.000000000 -0500
+++ src/util/msg_logger.c       2019-10-07 19:14:33.000000000 -0400
@@ -62,6 +62,10 @@
 /* .IP CA_MSG_LOGGER_CTL_DISABLE
 /*     Disable the msg_logger. This remains in effect until the
 /*     next msg_logger_init() call.
+/* .IP CA_MSG_LOGGER_CTL_CONNECT_NOW
+/*     Close the logging socket if it was already open, and open
+/*     the logging socket now, if permitted by current settings.
+/*     Otherwise, the open is delayed until a logging request.
 /* SEE ALSO
 /*     msg(3)  diagnostics module
 /* BUGS
@@ -111,6 +115,8 @@
 static int msg_logger_fallback_only_override = 0;
 static int msg_logger_enable = 0;
 
+#define MSG_LOGGER_NEED_SOCKET() (msg_logger_fallback_only_override == 0)
+
  /*
   * Other state.
   */
@@ -130,6 +136,25 @@
 #define STR(x) vstring_str(x)
 #define LEN(x) VSTRING_LEN(x)
 
+/* msg_logger_connect - connect to logger service */
+
+static void msg_logger_connect(void)
+{
+    if (msg_logger_sock == MSG_LOGGER_SOCK_NONE) {
+       msg_logger_sock = unix_dgram_connect(msg_logger_unix_path, BLOCKING);
+       if (msg_logger_sock >= 0)
+           close_on_exec(msg_logger_sock, CLOSE_ON_EXEC);
+    }
+}
+
+/* msg_logger_disconnect - disconnect from logger service */
+
+static void msg_logger_disconnect(void)
+{
+    if (msg_logger_sock != MSG_LOGGER_SOCK_NONE)
+       (void) close(msg_logger_sock);
+    msg_logger_sock = MSG_LOGGER_SOCK_NONE;
+}
 
 /* msg_logger_print - log info to service or file */
 
@@ -203,12 +228,8 @@
      * will report ENOENT if the endpoint does not exist, ECONNREFUSED if no
      * server has opened the endpoint.
      */
-    if (msg_logger_fallback_only_override == 0
-       && msg_logger_sock == MSG_LOGGER_SOCK_NONE) {
-       msg_logger_sock = unix_dgram_connect(msg_logger_unix_path, BLOCKING);
-       if (msg_logger_sock >= 0)
-           close_on_exec(msg_logger_sock, CLOSE_ON_EXEC);
-    }
+    if (MSG_LOGGER_NEED_SOCKET())
+       msg_logger_connect();
     if (msg_logger_sock != MSG_LOGGER_SOCK_NONE) {
        send(msg_logger_sock, STR(msg_logger_buf), LEN(msg_logger_buf), 0);
     } else if (msg_logger_fallback_fn) {
@@ -286,10 +307,7 @@
        switch (name) {
        case MSG_LOGGER_CTL_FALLBACK_ONLY:
            msg_logger_fallback_only_override = 1;
-           if (msg_logger_sock != MSG_LOGGER_SOCK_NONE) {
-               (void) close(msg_logger_sock);
-               msg_logger_sock = MSG_LOGGER_SOCK_NONE;
-           }
+           msg_logger_disconnect();
            break;
        case MSG_LOGGER_CTL_FALLBACK_FN:
            msg_logger_fallback_fn = va_arg(ap, MSG_LOGGER_FALLBACK_FN);
@@ -297,6 +315,11 @@
        case MSG_LOGGER_CTL_DISABLE:
            msg_logger_enable = 0;
            break;
+       case MSG_LOGGER_CTL_CONNECT_NOW:
+           msg_logger_disconnect();
+           if (MSG_LOGGER_NEED_SOCKET())
+               msg_logger_connect();
+           break;
        default:
            msg_panic("%s: bad name %d", myname, name);
        }
diff -ur /var/tmp/postfix-3.5-20190922/src/util/msg_logger.h 
src/util/msg_logger.h
--- /var/tmp/postfix-3.5-20190922/src/util/msg_logger.h 2019-01-29 
17:24:42.000000000 -0500
+++ src/util/msg_logger.h       2019-10-07 19:14:33.000000000 -0400
@@ -35,6 +35,7 @@
 #define MSG_LOGGER_CTL_FALLBACK_ONLY   1
 #define MSG_LOGGER_CTL_FALLBACK_FN     2
 #define MSG_LOGGER_CTL_DISABLE         3
+#define MSG_LOGGER_CTL_CONNECT_NOW     4
 
 /* Safer API: type-checked arguments, external use. */
 #define CA_MSG_LOGGER_CTL_END          MSG_LOGGER_CTL_END
@@ -43,6 +44,7 @@
        MSG_LOGGER_CTL_FALLBACK_FN, CHECK_VAL(MSG_LOGGER_CTL, \
                MSG_LOGGER_FALLBACK_FN, (v))
 #define CA_MSG_LOGGER_CTL_DISABLE      MSG_LOGGER_CTL_DISABLE
+#define CA_MSG_LOGGER_CTL_CONNECT_NOW  MSG_LOGGER_CTL_CONNECT_NOW
 
 CHECK_VAL_HELPER_DCL(MSG_LOGGER_CTL, MSG_LOGGER_FALLBACK_FN);
 

Reply via email to