sieve not updating headers?

Daniel J. Luke dluke at geeklair.net
Fri Jun 11 05:25:03 EEST 2021


Hello,

I've recently converted from using procmail as an lda to using lmtp+sieve (and it's overall great).

My setup is currently doing post-queue spamassassin to pickup user rules (and to be substantially similar to how it worked before). It mostly works, but I get some mail forwarded from another host that also runs spamassassin, so the mail comes with X-Spam headers already set.

I can see that my sieve_before script successfully sends the message off to spamc/spamd - however the message ends up in my mailbox with only the pre-existing X-Spam headers (I had expected them to be replaced or to see duplicates). I thought I'd try to just strip them from incoming mail so I used deleteheader, I got a trace saying it matches and deletes the headers, then sends the mail off to spamc/spamd - but the message that ends up in my mailbox has the headers that were presumably deleted.

My before.sieve looks like this:

require ["vnd.dovecot.filter","editheader"];                                                             
                                                                                                         
# rule:[spamfilter]                                                                                      
if size :under 10485760                                                                                  
{                                                                                                        
    deleteheader :matches "X-Spam-Flag" "*";                                                            
    deleteheader :matches "X-Spam-Status" "*";                                                          
    deleteheader :matches "X-Spam-Level" "*";                                                           
    deleteheader :matches "X-Spam-Checker-Version" "*";                                                 
                                                                                                         
    filter "spamc" ["-s","10485760","-U","/var/run/spamd.sock"];                                         
}                                                                                                        

Trace file says:

      ## Started executing script 'before'
   6: size :under test
   6:   comparing message size 4197
   6:   with lower limit 10485760
   6: jump if result is false
   6:   not jumping
  11: deleteheader command 
  11:   deleting matching occurrences of header `X-Spam-Flag'
  11:   header `X-Spam-Flag' not found
  12: deleteheader command 
  12:   deleting matching occurrences of header `X-Spam-Status'
  12:     starting `:matches' match with `i;ascii-casemap' comparator:
  12:     matching value `No, score=-0.2 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DKIM_..
.'
  12:       with key `*' => 1
  12:     deleting header with value `No, score=-0.2 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALI
D_AU,DKIM_VALID_EF,FREEMAIL_FROM,HTML_MESSAGE, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham au
tolearn_force=no version=3.4.2'
  12:     finishing match with result: matched
  13: deleteheader command 
  13:   deleting matching occurrences of header `X-Spam-Level'
  13:   header `X-Spam-Level' not found
  14: deleteheader command 
  14:   deleting matching occurrences of header `X-Spam-Checker-Version'
  14:     starting `:matches' match with `i;ascii-casemap' comparator:
  14:     matching value `SpamAssassin 3.4.2 (2018-09-13) on braeburn.macports.org'
  14:       with key `*' => 1
  14:     deleting header with value `SpamAssassin 3.4.2 (2018-09-13) on braeburn.macports.org'
  14:     finishing match with result: matched
  16: filter action
  16:   execute program `spamc'
  16:   executed program successfully
  16:   changed message
      ## Finished executing script 'before'

It then falls through my personal sieve filter and hits the implicit keep at the end and ends up in my inbox - with the original headers.

So, two questions:
1. What am I missing?
2. Is there a way to match any X-Spam-* header? (when I tried deleteheader :matches "X-Spam*" it didn't match anything).

Thanks.

-- 
Daniel J. Luke



More information about the dovecot mailing list