Op 06/01/2019 om 18:12 schreef John Fawcett:
On 06/01/2019 11:37, Stephan Bosch wrote:
Op 06/01/2019 om 03:35 schreef John Fawcett:
On 06/01/2019 02:26, John Fawcett wrote:

Can't see anything in the Dovecot 2.3.4 code that would give this
problem, setting

stats_writer_socket_path =

will overwrite the default value and dovecot does not attempt to
open a socket in that case.

Using your configuration (though not FreeBSD) I don't get the
net_connect_unix error whether I use a blank setting or leave the
default. In the case of leaving the default I do get an additional
process (dovecot/stats). No errors on connecting to the imap service
or by running preauth (with the dovecot daemon already running).

The net_connect_unix() error with a zero length socket name is
inexplicable to me, unless it's got a non printing character in it
or there is something different happening on FreeBSD.

One suggestion is to run with the default setting, but look at
resolving the permission problem for the default socket creation at
/var/run/dovecot/stats-writer rather than working round it.

John

Just following up, I don't get the error when I run preauth as root with
-u parameter. I do get something similar when I run as the user (this
wil the socket path set to blank)

Centos 7:

Error: net_connect_unix() failed: Connection refused

FreeBSD 11.2:

Error: net_connect_unix() failed: No such file or directory

So it's close. If I get time I'll see if I can track it down.
Does this fix it?

diff --git a/src/lib-master/master-service.c
b/src/lib-master/master-service.c
index 3de11fa1b..3c60a7a39 100644
--- a/src/lib-master/master-service.c
+++ b/src/lib-master/master-service.c
@@ -341,7 +341,7 @@ master_service_init(const char *name, enum
master_service_flags flags,
         if ((flags & MASTER_SERVICE_FLAG_DONT_SEND_STATS) == 0) {
                 /* Initialize stats-client early so it can see all
events. */
                 value = getenv(DOVECOT_STATS_WRITER_SOCKET_PATH);
-               if (value != NULL)
+               if (value != NULL && *value != '\0')
                         service->stats_client =
stats_client_init(value, FALSE);
         }


Regards,

Stephan.

Hi Stephan

that fixes the issue that I reproduced. For the OP he will probably need
to wait for this to be picked up for FreeBSD ports.

This code seems safer than the original but it is still a mystery as to
why DOVECOT_STATS_WRITER_SOCKET_PATH is being put into the environment
as an empty string (changed behaviour reported by OP compared to 2.3.2.1_1).

Behavior changed because the code I patched didn't exist in 2.3.2.1.

Regards,

Stephan.

Reply via email to