cyrus-imapd 2.1.15, sieve, lmtpd, and return-path header
Chris Stromsoe
cbs at cts.ucla.edu
Mon Sep 22 21:08:23 EDT 2003
>From what I can tell, lmtpengine.c:lmtpmod() calls lmtpengine.c:savemsg()
to read the message and get it onto disk, then lmtpd.c:deliver() to call
sieve rules and deliver the message.
lmtpengine.c:savemsg() calls fprintf() to add the Return-Path header to
the output on disk. lmtpengine.c:fill_cache() loops over input, reading
headers one by one, adding to the header cache.
lmtpd.c:deliver() matches headers from the header cache. But, since
lmtpengine.c:savemsg() never adds the generated Return-Path to the cache,
so the generated Return-Path can't be matched against. This is also the
case for the locally generated Received: header.
While there may not be much call to match against the last-hop received
header (unless maybe you want to take different actions depending on the
origin of mail from different remote last-hop LMTP mta's), there is
interest (at least here) for being able to filter on return-path.
Would you (CMU) take a patch splitting fill_cache into two parts --
fill_cache() and insert_cache_element()? insert_cache_element() could
then be used earlier in savemsg() to insert the generated headers into the
header cache so that sieve recipes could use them. Does that sound like
the correct fix?
-Chris
On Mon, 22 Sep 2003, Chris Stromsoe wrote:
> Before I start digging through the source, does lmtpd add the
> Return-Path header before or after calling sieve routines? The first
> recipe below works, the second does not.
>
> # works
> require ["fileinto","regex"];
> if allof (header :regex "From" ".*") {
> fileinto "test1";
> }
>
> #fails
> require ["fileinto","regex"];
> if allof (header :regex "Return-Path" ".*") {
> fileinto "test1";
> }
>
>
>
>
> -Chris
>
More information about the Info-cyrus
mailing list