Jakob Curdes
2008-Oct-29 12:50 UTC
[Dovecot] antispam plugin claims "antispam signature not found"
Hi, I am trying to setup the antispam plugin using the direct dspam backend. I have set antispam_signature = X-DSPAM-Signature in dovecot.conf and in all mails I have signature lines like X-DSPAM-Signature: 1,49084a24139132188715614 but still, if I try to move a mail into the spam folder, i get the IMAP error message "antispam signature not found". I thought it might have to do with permissions and made sure that the user running dovecot is able to execute the dspam binary. I also tried to enable debug logging to syslog (via the .config file in the make process) but I do not see any debug messages showing up; where should these go? to the mail facility? Perhaps somebody who has a working setup can shed some light on this? Yours, JC
Jakob Curdes
2008-Nov-09 12:35 UTC
[Dovecot] antispam plugin claims "antispam signature not found"
Some weeks ago I asked a question on the antispam plugin; obviously nobody could help me. I just worked on it again but made no progress. Is actually anybody out there running the antispam plugin with dspam?? I am willing to write a Wiki page for configuring this as soon as I get it to work. The problem still remains and the outlines are: - antispam plugin is compiled, configured for dspam and debug is switched on. - plugin starts with dovecot and throws debug info to /var/log/messages (debug logging activated via syslog) - as soon as I move a message into the spam folder it gives an error message saying "antispam signature not found" I checked that the given location for the dspam executable is correct, that the user executing it (dovecot?) is actually able to execute dspam and that dspam trusts this user. I triple-checked that the signature is configured correctly. I have lines like X-DSPAM-Signature: 1,49084a24139132188715614 in all mails and my plugin conf says # mail signature (used with any backend requiring a signature) antispam_signature = X-DSPAM-Signature I do not get any error messages in the debug output, only dovecot says: dovecot: Nov 09 13:19:40 Error: IMAP(****): Next message unexpectedly lost from 49 Any ideas? How can I get a more specific debugging for the signature? Or might this still be a permission problem? Here is my plugin config: # antispam plugin - learn spam from folder antispam_signature = X-DSPAM-Signature antispam_spam = spam antispam_dspam_binary = /usr/local/bin/dspam Regards, Jakob
Eugene
2008-Nov-11 00:04 UTC
[Dovecot] antispam plugin claims "antispam signature not found"
Jakob Curdes wrote> Some weeks ago I asked a question on the antispam plugin; obviously > nobody could help me. I just worked on it again but made no progress. > Is actually anybody out there running the antispam plugin with dspam?? I > am willing to write a Wiki page for configuring this as soon as I get it > to work. > ..... > - as soon as I move a message into the spam folder it gives an error > message saying "antispam signature not found"Just had this error myself. In my case, the cause was a large spam message (above the configured MaxMessageSize parameter for DSPAM) that was skipped during tests and thus no signature was added. Might this be true in your case? As a general suggestion for Johannes: maybe it is better to ignore this error silently, just move the message and don't call DSPAM?> I checked that the given location for the dspam executable is correct, > that the user executing it (dovecot?) is actually able to execute dspam > and that dspam trusts this user. I triple-checked that the signature is > configured correctly. I have lines like> X-DSPAM-Signature: 1,49084a24139132188715614Another guess: if that comma is not a misprint, something is wrong in your setup. Regards Eugene
Guillaume HILT
2008-Nov-14 15:36 UTC
[Dovecot] antispam plugin claims "antispam signature not found"
I have the same problem and i'm wondering how should i use this patch ? I'm not familiar with the patch command. Thanks. PS: Sorry for the empty mail Johannes Berg a ?crit> On Tue, 2008-11-11 at 11:42 +0100, Johannes Berg wrote: > > >> Not sure, I personally think that moving them silently makes errors >> harder to diagnose. I'll add an option since then you can set this >> option (antispam_missing_signature = [error|move]) to move after you've >> tested and verified that it works just fine. >> > > Try this patch please, I have only compiled it so far. (there might be > rejects in the signature-log.c file unless you update to the current git > tree but you don't care about that) > > diff --git a/antispam.7 b/antispam.7 > index d07c1d0..e26db69 100644 > --- a/antispam.7 > +++ b/antispam.7 > @@ -108,6 +108,13 @@ plugin { > # mail signature (used with any backend requiring a signature) > antispam_signature = X-DSPAM-Signature > > + # action to take on mails without signature > + # (used with any backend requiring a signature) > + # (we recommend only setting this to 'move' after verifying that the > + # whole setup is working) > + # antispam_signature_missing = move # move silently without training > + antispam_signature_missing = error > + > # semicolon-separated list of Trash folders (default unset i.e. none) > # antispam_trash > # antispam_trash = trash;Trash;Deleted Items > diff --git a/signature-log.c b/signature-log.c > index ab8cd6d..5b7b306 100644 > --- a/signature-log.c > +++ b/signature-log.c > @@ -99,7 +99,12 @@ int backend_handle_mail(struct mailbox_transaction_context *t, > return -1; > } > > - signature = signature_extract(t, mail); > + ret = signature_extract(t, mail, &signature); > + if (ret) > + return ret; > + > + if (!signature) > + return 0; > > switch (wanted) { > case CLASS_SPAM: > diff --git a/signature.c b/signature.c > index 7f9d83b..7ad29d6 100644 > --- a/signature.c > +++ b/signature.c > @@ -5,6 +5,7 @@ > #include "mail-storage-private.h" > > const char *signature_hdr = "X-DSPAM-Signature"; > +static int signature_nosig_ignore = 0; > > void signature_init(void) > { > @@ -12,6 +13,16 @@ void signature_init(void) > if (tmp) > signature_hdr = tmp; > debug("signature header line is \"%s\"\n", signature_hdr); > + > + tmp = get_setting("SIGNATURE_MISSING"); > + if (!tmp) > + tmp = "error"; > + if (strcmp(tmp, "move") == 0) { > + signature_nosig_ignore = 1; > + debug("will silently move mails with missing signature\n"); > + } else if (strcmp(tmp, "error") != 0) { > + debug("invalid signature_missing setting '%s', ignoring\n", tmp); > + } > } > > int signature_extract_to_list(struct mailbox_transaction_context *t, > @@ -23,10 +34,14 @@ int signature_extract_to_list(struct mailbox_transaction_context *t, > > signatures = get_mail_headers(mail, signature_hdr); > if (!signatures || !signatures[0]) { > - mail_storage_set_error(t->box->storage, > - ME(NOTPOSSIBLE) > - "antispam signature not found"); > - return -1; > + if (!signature_nosig_ignore) { > + mail_storage_set_error(t->box->storage, > + ME(NOTPOSSIBLE) > + "antispam signature not found"); > + return -1; > + } else { > + return 0; > + } > } > > while (signatures[1]) > @@ -42,23 +57,30 @@ int signature_extract_to_list(struct mailbox_transaction_context *t, > return 0; > } > > -const char *signature_extract(struct mailbox_transaction_context *t, > - struct mail *mail) > +int signature_extract(struct mailbox_transaction_context *t, > + struct mail *mail, const char **signature) > { > const char *const *signatures; > > signatures = get_mail_headers(mail, signature_hdr); > if (!signatures || !signatures[0]) { > - mail_storage_set_error(t->box->storage, > - ME(NOTPOSSIBLE) > - "antispam signature not found"); > - return NULL; > + if (!signature_nosig_ignore) { > + mail_storage_set_error(t->box->storage, > + ME(NOTPOSSIBLE) > + "antispam signature not found"); > + return -1; > + } else { > + *signature = NULL; > + return 0; > + } > } > > while (signatures[1]) > signatures++; > > - return signatures[0]; > + *signature = signatures[0]; > + > + return 0; > } > > void signature_list_free(struct siglist **list) > diff --git a/signature.h b/signature.h > index e25d1b5..1384924 100644 > --- a/signature.h > +++ b/signature.h > @@ -16,8 +16,8 @@ void signature_init(void); > int signature_extract_to_list(struct mailbox_transaction_context *t, > struct mail *mail, struct siglist **list, > enum classification wanted); > -const char *signature_extract(struct mailbox_transaction_context *t, > - struct mail *mail); > +int signature_extract(struct mailbox_transaction_context *t, > + struct mail *mail, const char **signature); > void signature_list_free(struct siglist **list); > > extern const char *signature_hdr; > >This message contains information that may be privileged or confidential and is the property of the Capgemini Group. It is intended only for the person to whom it is addressed. If you are not the intended recipient, you are not authorized to read, print, retain, copy, disseminate, distribute, or use this message or any part thereof. If you receive this message in error, please notify the sender immediately and delete all copies of this message.