[Dovecot] Dovecot-LDA: Development questions
Steffen Kaiser
skdovecot at smail.inf.fh-bonn-rhein-sieg.de
Mon Sep 5 15:40:49 EEST 2005
Hello,
I'm tinkering with Dovecot-LDA in order to achieve:
+ Better intergration into sendmail, and
+ tweaking its way to act on errors.
Attached patch is a "brainstorming" like suggestion:
a) when sendmail is dropping a message, it spawns the LDA, captures
stderr/stdout and, if the LDA returns an exit code != 0, generates either
a DSN or, when EX_TEMPFAIL, queues the mail.
Hence, it is not necessary to have mail_send_rejection() to spawn another
sendmail instance. The attached patch suggest to introduce an
"operation_mode", in which Dovecot-LDA behaves differently for different
environments.
b) Some errors, like when spooling the message into the users folders
fails, because the user is out of quota, one should prefer tempfailing the
message, rather than a permanent error.
Attached patch includes an option "-f", which has main() to return
EX_TEMPFAIL. This is the way maildrop is acting, BTW.
===
Sendmail supports "account+detail" syntax out-of-the-box; that is for
recipient matching only the portion left of the plus-sign is significant,
the trailing portion may be used by the LDA as a hint to spool the
message. Usually the information is passed via command line to the LDA.
The libsieve seems to already support this notation, see tokens DETAIL,
subaddress, :detail and the README file:
Derrick Brashear (shadow+sieve at andrew...)
Did somebody used or have some idea how to make use of the "+detail" stuff
of libsieve? Basically the main problem in my opinion is what to query,
because the information (final physical mailbox and/or owner) one can
query is neither a header nor an envelope information (besides that the
envelope information is not available to the LDA anyway).
Consider a BCC to one recipient that expands to numerous maildrops, then
the maildrop of actual delivery attempt can not be derived from neither
the envelope nor the header information.
The only way to integrate the +detail stuff into Dovecot-LDA seems to be
when "keep" is performed (or no Sieve script is present). Then one could
spool the message into folder "detail", if it already exists -- one should
be allow other people to create mailboxes ;-)
This is no action of the Sieve library, but of the LDA calling sieve.
The Wiki mentions in the section about to setup exim:
envelope_to_add
What's this setting is doing?
In src/sieve-cmu.c, static int getenvelope, there is:
} else if (!strcasecmp(field, "to")) {
*contents = m->temp;
m->temp[0] = /*FIXME:msg_getrcptall(m, m->cur_rcpt)*/m->authuser;
m->temp[1] = NULL;
return SIEVE_OK;
So it seems appropriate to tweak dovecot_sieve_run() into:
mdata.authuser = username;
mdata.recipient = detail_on_commandline
? concat(username, "+", detail_on_commandline)
: username ;
Or better: Have the complete recipient passed via command line option?
and alter getenvelope():
m->temp[0] = m->recipient;
I think this tweaks would be better than have the "-d" option support the
plus-syntax.
===
Currently, the compiled Sieve script is placed into the same directory the
script is located itself.
How about to _always_ file the compiled script into
[CONTROLDIR]/.dovecot.sievec? That would come over the problem with the
system-wide default sieve script.
Otherwise: The README mentions a test application and I found a sievec and
sieved application (Sieve compile / decompiler) I presume.
I can not just run "make sievec" to have it compile, does somebody played
around with the Sieve stuff in LDA?
Regards,
--
Steffen Kaiser
-------------- next part --------------
A non-text attachment was scrubbed...
Name: patch.sendmail&tempfail.gz
Type: application/octet-stream
Size: 1741 bytes
Desc: Patch for sendmail and Tempfailing most errors
Url : http://dovecot.org/pipermail/dovecot/attachments/20050905/28475061/patch.sendmailtempfail.obj
More information about the dovecot
mailing list