> On 25/08/2021 20:22 Dan Conway <darkc0de at archnix6.net> wrote:
>
>
> Hello,
>
> I'm currently researching how services work within Dovecot and what
> scope these services are capable of. For example, I created a service as
> such:
>
> service myservice {
> ? executable = /home/me/executable
> ? type????????? = worker
> ? unix_listener myservice {
> ??? mode = 0666
> ? }
> }
>
>
> When data is provided to the myservice unix socket, Dovecot appears to
> create a new process by executing "/home/me/executable". I found
out
> about "status updates" through examining the logs. At first I
received this:
>
> master: Error: service(myservice): Initial status notification not
> received in 30 seconds, killing the process
>
> What is this status notification?
>
> I found out that writing to file descriptor 5 from the executable does
> seem to be valid. When I write out 12 bytes I don't get an error, but
> when I write out 13 bytes I get the following:
>
> master: Error: service(dmon): service sent partial status update (13 bytes)
>
> What I've also noticed is that exiting 0 will cause Dovecot to spawn
the
> process again, in what appears to be infinitely.
>
> Are there any resources/documentation that I could reference to learn
> more about how services work on a lower level besides just looking at
> the source code?
>
> Thanks.
Making native services requires practically C program using lib-master. We
provide a simple helpers called `script` and `login-script` which wrap your
program as a Dovecot service and provide you parameters from stdin and, when
possible, lets you write into stdout your reply.
See https://github.com/dovecot/core/blob/master/src/util/script.c#L83 for
provided input.
You can use it like
service foobar {
executable = script /path/to/your/stuff
unix_listener myservice {
mode = 0666
}
}
btw, there is no `type = worker` setting, see
https://doc.dovecot.org/configuration_manual/service_configuration/
Aki