Newsgroup: it.comp.os.linux.sys
Titolo: acl su header in exim

Sapete dirmi come si potrebbe fare un lookup mysql in una
ACL basata su header?
Sto leggendo della documentazione, ma non sono ancora molto pratico di exim.
Vorrei, ad esempio, poter rigettare tutti i messaggi che hanno un
determinato header, con un determinato valore, presi da db.
Il massimo sarebbe poter attivare una acl associata ad una query simile:
SELECT stringa FROM rbl_headers WHERE header = '$header_name'
   AND value = '$header_value'
i nomi delle variabili sono ovviamente inventati.
Io so fare il lookup di un host, usando la direttiva "host" con
associata la "lookup mysql", ma la stessa query messa in "condition"
non funziona.
Forse perchè il condition deve fare un match tra alcuni valori e non 
ottere una lista di elementi come "host" ?
Sapete darmi una mano?
-- 
Non tocca a noi dominare tutte le maree del mondo,
il nostro compito è di fare il possibile per la
salvezza degli anni nei quali viviamo,
sradicando il male dai campi che conosciamo.

 ottere una lista di elementi come "host" ?
Beh, ovviamente devi mettere questo controllo nell'ACL dedicata a DATA
(quella richiamata dopo che il "." alla fine del messaggio e' stato
spedito).
Molto alla buona, potrebbe bastare una cosa del tipo:
  deny   message         = 555 PDV03 - This message contains invalid
headers
         condition       = ${if eq {${lookup mysql {SELECT stringa
FROM rbl_header WHERE header = 'h_Header'}}} {$h_Header} {yes}{no}}
Dove $h_Header e' il nome dell'Header che vuoi controllare.
Ciao
Luca Bertoncello
(
luca...@lucabert.de

 Dove $h_Header e' il nome dell'Header che vuoi controllare.
Ecco cosa mancava, l'if con eq.
Io ho sparato direttamente il lookup.
Però, così come hai scritto te controllo la presenza o meno di un
header, io invece devo controllare la presenza di un determinato valore
in un determinato header. Nel 99% dei casi devo bloccare sul From, ma 
preferirei fare una singola ACL piuttosto che una per ciascuna tipologia
di header.
Praticamente l'equivalente Exim di questa mappa postifix:
/^From: Ciccio.*$/   REJECT
Che controlla la presenza di una riga che risponda a tale regexp.
Per questioni di praticità, siccome ne ho alcune migliaia, ho separato
a livello mysql gli header dai controlli generici del body, ma alla fin
fine, il check viene fatto su tutto il corpo della mail.
Con Exim, come posso verificare una cosa simile?
Se proprio butta mail, faccio una ACL header per header...


 Con Exim, come posso verificare una cosa simile?
Mmm... questa e' una bella domanda...
Sinceramente non mi e' mai capitata una cosa del genere, quindi non
saprei bene come muovermi.
Ad una prima occhiata nella documentazione di Exim non c'e' un modo
per avere la lista degli Headers, ma ci credo poco...
Ti consiglio vivamente di mandare la domanda alla lista di Exim! Li
sicuramente qualcuno sapra' aiutarti!
Ciao
Luca Bertoncello
(
luca...@lucabert.de
)

 di header.
Questo funziona, nel caso servisse a qualche altra persona:
deny message  = "Header From rejected."
   log_message = "Header From rejected."
   condition   = ${lookup mysql{SELECT 1 FROM rbl_from WHERE 
'${quote_mysql:$h_from:}' REGEXP stringa}{yes}{no}}
"stringa" è il nome della colonna su MySQL e contiene le regexp
degli header da bloccare.


 degli header da bloccare.
Scusa, ma ne sei sicuro?
Da come leggo la Query, direi proprio che funziona SOLO per il From...
Non per Header vari, come mi sembrava di aver capito servisse a te...
Ciao
Luca Bertoncello
(
luca...@lucabert.de
)

 Non per Header vari, come mi sembrava di aver capito servisse a te...
Funziona solo per il From.
Per gli altri (ovvero fare una singola ACL per bloccare tutte
le coppie header/regexp in base al database sono in attesa di
risposta da qualche utente della ML di Exim.
-- 
Non tocca a noi dominare tutte le maree del mondo,
il nostro compito č di fare il possibile per la
