In looking at this further, I’m not seeing how this can be configured as documented and still work.
The sieve_pipe_socket_dir setting, as the documentation suggests, appears to be
used by the plugin to construct a path to find the “script” (the socket in this
case), and it is always relative to base_dir and must include the contents of
sieve_pipe_socket_dir.
/* Try socket first */
if ( ext_config->socket_dir != NULL ) {
path = t_strconcat(senv->user->set->base_dir, "/",
ext_config->socket_dir, "/", program_name, NULL);
But nowhere in dovecot can I find a place where this subdir would be created at
startup. The only subdirs that I can find created are all explicitly hardcoded
in master-settings.c in a function called master_settings_do_fixes():
/* Make sure our permanent state directory exists */
if (mkdir_parents(set->state_dir, 0755) < 0 && errno != EEXIST)
i_fatal("mkdir(%s) failed: %m", set->state_dir);
mkdir_login_dir(set, t_strconcat(set->base_dir, "/login", NULL));
mkdir_login_dir(set, t_strconcat(set->base_dir, "/token-login", NULL));
empty_dir = t_strconcat(set->base_dir, "/empty", NULL);
if (safe_mkdir(empty_dir, 0755, master_uid, getegid()) == 0) {
i_warning("Corrected permissions for empty directory "
"%s", empty_dir);
}
Granted this is from a pretty quick browsing of the sources but I couldn’t find
where subdirs specified in service listeners might be created at startup.
I’m working around this by defining sieve_pipe_socket_dir to the current
directory (“.”), which allows the search path to resolve to base_dir, and find
the socket in there. Then I just define the listener without the subdir. This
seems to work fine and allows dovecot to start up.
Unless someone can reveal the magic incantation to use sieve_pipe_socket_dir to
create an actual subdir, though, it seems like either a documentation issue or
a bug. I’d argue the latter since the configuration variable isn’t actually
useful.00
Garth
> On Dec 17, 2017, at 4:51 PM, Garth Corral <[email protected]> wrote:
>
>
> Hi, all
>
> I’m new to the list but not to dovecot. I’ve been using it in a basic
> configuration for some time, but finally decided to tweak my deployed system
> to take advantage of some more dovecot features. In particular I’m trying to
> set up pigeonhole to implement spam retraining with imapsieve. All of this
> is with dovecot 2.2.31 (65cde28) and pigeonhole 0.4.19.
>
> Before going any further let me start by saying that I have gotten all of
> this to work. It works when I can get dovecot to start up, that is. My
> configuration is pretty much straight from the docs, with a few tweaks for my
> particular needs. I’m trying to set up a pipe service using
> sieve-extprograms, and the relevant part of my config looks like this:
>
> plugin {
>
> sieve_pipe_input_eol = lf
>
> sieve_pipe_socket_dir = sieve-pipe
> sieve_filter_socket_dir = sieve-filter
> sieve_execute_socket_dir = sieve-execute
>
> sieve_pipe_bin_dir = /usr/local/libexec/dovecot/sieve-pipe
> sieve_filter_bin_dir = /usr/local/libexec/dovecot/sieve-filter
> sieve_execute_bin_dir = /usr/local/libexec/dovecot/sieve-execute
> }
>
> service sieve-train-ham {
> executable = script /usr/local/libexec/dovecot/sieve-pipe/train-ham.sh
>
> # Needs access to dspam config and lockfiles.
> user = dspam
>
> # socket name is program-name in Sieve (without sieve-pipe/ prefix)
> unix_listener sieve-pipe/train-ham {
> }
> }
>
> It’s my understanding from reading the docs that the sieve_pipe_socket_dir
> specifies a directory that is relative to base_dir, which is the default
> /var/run/dovecot in my case. The issue I’m having is that dovecot will not
> start, and spews the following errors:
>
> dovecot: master: Error: bind(/var/run/dovecot/sieve-pipe/train-ham) failed:
> No such file or directory
> dovecot: master: Fatal: Failed to start listeners
>
> Once dovecot fails startup, it leaves /var/run/dovecot around and if I
> manually create the sieve-pipe directory there it will start up, create the
> sockets there and everything works as intended subsequently. The problem,
> though, is that on normal shutdown all of /var/run/dovecot goes away and the
> at the next startup it fails to start again. Needless to say this isn’t
> great for unintended reboots, etc.
>
> So, can anyone see anything obvious that I’m doing wrong? I’m just assuming
> that dovecot should create the needed subdir since I can’t find anything in
> the docs to suggest a way to create it otherwise. I’ve tried all I can think
> of at the moment to try to remedy this without success. I’m happy to provide
> additional details as needed to try to track this down.
>
>
> Thanks in advance,
>
> Garth
>
smime.p7s
Description: S/MIME cryptographic signature
