Qualcuno di voi usa Courier come mail server ed ha provato ad integrarlo
con Clam antivirus per controllare le email in ingresso? ClamAV ha
un'opzione --mbox per controllare le email, ma l'autore dice che è piena
di buchi e sconsiglia di usarla. Era da un po' che cercavo un modo furbo
per integrare i due programmi, ma sembra che tutte le soluzioni già
pronte siano pensate per SendMail, Exim e pochi altri. Per Courier non
avevo trovato niente di semplice.
Ieri ho scoperto l'esistenza di reformime, un programmino distribuito
con Courier che permette di esaminare e/o spacchettare una email MIME;
può anche passare le varie parti dell'email ad un filtro esterno. Allora
mi è venuta l'illuminazione: faccio chiamare /usr/bin/clamdscan da
reformime e con la piccola patch che allego[1] bastano due righe in
/etc/courier/maildroprc per fare il filtro antivirus.
Per ora ho installato il reformime patchato in /usr/bin/reformimeXexit;
se non incontro problemi, proporrò di includere la patch nella versione
ufficiale, ma prima vorrei il parere di qualcuno che fa 'ste cose non
per gioco e magari mi trova subito qualche buco grande così...
Le righe da aggiungere a /etc/courier/maildroprc: # log dei virus, per debug finché non sono sicuro che va logfile ./maildrop.log exception { `/usr/bin/reformimeXexit -X /usr/bin/clamdscan --quiet -` if ($RETURNCODE > 20) { log "Virus found!" to "./Maildir/.Virus" } }
-- 1. La patch è necessaria perché normalmente reformime ignora il risultato del filtro. Con questa modifica, se il filtro esce con uno stato diverso da 0, reformime esce a sua volta e restituisce (risultato originale + 20) al chiamante.
-- Ciao, Flavio Stanchina Trento - Italy
diff -ur courier-0.42.2-10/debian/changelog courier-0.42.2-10flavio/debian/changelog --- courier-0.42.2-10/debian/changelog 2004-02-09 16:11:08.000000000 +0100 +++ courier-0.42.2-10flavio/debian/changelog 2004-02-09 16:16:40.000000000 +0100 @@ -1,3 +1,9 @@ +courier (0.42.2-10flavio) experimental; urgency=low + + * reformime: -X returns the exit code of the launched program. + + -- Flavio Stanchina <flavio@xxxxxxxxxxxx> Mon, 9 Feb 2004 22:15:45 +0100 + courier (0.42.2-10) unstable; urgency=low * updated French translation of debconf templates (Closes: #213816, diff -ur courier-0.42.2-10/rfc2045/reformime.1 courier-0.42.2-10flavio/rfc2045/reformime.1 --- courier-0.42.2-10/rfc2045/reformime.1 2003-04-21 22:56:15.000000000 +0200 +++ courier-0.42.2-10flavio/rfc2045/reformime.1 2004-02-09 16:52:39.000000000 +0100 @@ -208,6 +208,10 @@ \fBreformime\fR's liking. If the \fB-s\fR option is not specified, the program runs once for every MIME section in the message. +.B "EXPERIMENTAL:" +If the external program terminates with a nonzero exit status, +\fBreformime\fR terminates and returns +(program exit status + 20). .sp .RS .B "Note:" diff -ur courier-0.42.2-10/rfc2045/reformime.c courier-0.42.2-10flavio/rfc2045/reformime.c --- courier-0.42.2-10/rfc2045/reformime.c 2003-03-07 01:47:30.000000000 +0100 +++ courier-0.42.2-10flavio/rfc2045/reformime.c 2004-02-09 16:43:34.000000000 +0100 @@ -615,6 +615,16 @@ while ((p2=wait(&waitstat)) != pid && p2 != -1) ; free(f); + + if ((p2 == pid) && WIFEXITED(waitstat)) + { + if (WEXITSTATUS(waitstat) != 0) + { + fprintf(stderr, "reformime: %s exited with status %d.\n", + argv[0], WEXITSTATUS(waitstat)); + exit(WEXITSTATUS(waitstat) + 20); + } + } } static void extract_section(struct rfc2045 *top_rfcp, const char *mimesection,