IMAP preauth and stats-writer

Stephan Bosch stephan at rename-it.nl
Sun Jan 6 12:37:03 EET 2019


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.



More information about the dovecot mailing list