Newsgroup: it.comp.os.linux.sys
Titolo: Alias con regex su exim

Sto cercando di configurare un alias basato su regex su exim, ma non c'è modo di farlo funzionare.
 
Ho creato un router con redirect che mi pesca i file da /etc/exim4/mioalias
 
Dentro /etc/exim4/mioalias c'è:
 
^prefisso-[0-9]{4}\-[a-z}{5}@miodominio.tld        destin...@miodominio.tld
 
ma non funziona, cerca sempre di fare il delivery diretto verso 
 
prefisso-...@miodominio.tld
 
che ovviamente non esiste.
 
Facendo "exim -bt prefisso-...@miodominio.tld" vedo che 
 
# exim -bt prefisso-...@miodominio.tld
R: mioalias for prefisso-...@miodominio.tld
R: system_aliases for destin...@miodominio.tld
R: local_user for destin...@miodominio.tld
destin...@miodominio.tld
    <-- prefisso-...@miodominio.tld
  router = local_user, transport = dovecot_virtual_delivery
 
quindi sembra tutto corretto, sopratutto in base all'ultima riga dove viene identificato "destin...@miodominio.tld" a partire da prefisso-...@miodominio.tld ma nonostante ciò, ricevo un DSN di utente inesistente (per prefisso-...@miodominio.tld e non per destin...@miodominio.tld)

 ^prefisso-[0-9]{4}\-[a-z}{5}@miodominio.tld        destin...@miodominio.tld
                          ^
 
Questo � un typo di questo messaggio o lo hai anche nella mappa di Exim?
O:-)
 

 Questo è un typo di questo messaggio o lo hai anche nella mappa di Exim?
 
Perchè un typo? è un range di 4 numeri. Ma la regex sembra funzionare, il destinatario viene identificato correttamente tramite "exim -bt" però il delivery non viene fatto verso di lui ma verso l'indirizzo soggetto a regex.

 Perch� un typo? � un range di 4 numeri.
 
 
Nope.
 
^prefisso-
 
� una stringa fissa
 
 
[0-9]{4}
 
� un range di 4 numeri
 
 
\-
 
+ un "-" (in cui per inciso l'escaping � inutile)
 
 
[a-z}{5}
 
� un typo.
Fosse [a-z]{5}, sarebbe un blocco di 5 lettere minuscole. aprendo con
una quadra e chiudendo con una graffa, � solo un typo.
 

 una quadra e chiudendo con una graffa, è solo un typo.
 
Si, è un typo del messaggio, la regex è corretta qui da me.
La tua indicazione puntava da tutt'altra parte :D

 destin...@miodominio.tld)
 
Rinfresco i miei rudimenti di exim che non uso da un paio di anni...
 
La DSN te la manda exim o te la manda il server da cui spedisci ?
 
Perchè a quanto mi ricordo, i router intervengono dopo che la mail è 
stata accettata, non prima ed aggiungere un router non basta.
 
In fase di RCPT devi dirgli che quella destinazione esiste veramente.
 

 In fase di RCPT devi dirgli che quella destinazione esiste veramente.
 
Allora:
 
io -> smtp -> mx -> exim di destinazione -> dovecot
 
il mio smtp fa relay in base al dominio, gira tutto al server di destinazione con exim, il quale elabora l'alias e prova a fare il delivery verso dovecot.
Dovecot risponde "NO", l'exim risponde al mio smtp "NO" ed il mio smtp manda DSN
 
Il problema è che l'exim in questione sa perfettamente dove si trova la casella, tant'è che con "exim -bt" il router corretto viene identificato e l'alias risolto.
 
Ho anche provato a forzare l'accept per tutto ciò che inizia con "prefisso-", come da documentazione di exim, ma il risultato non cambia, cerca sempre di scrivere all'indirizzo soggetto ad alias e non a quello reale.
 
La cosa buffa è che ho esattamente 70 alias su questa macchina e tutti funzionano, non ho fatto altro che replicare il router (unico punto in cui c'è un riferimento alla mappatura alias) e aggiungere una regex

 Dovecot risponde "NO", l'exim risponde al mio smtp "NO" ed il mio smtp manda DSN
 
A dire il vero è il callout sugli MX che fallisce, ma fallisce perchè l'exim di destinazione risponde picche.
 
Inviando una mail direttamente dalla macchina exim (exim -v prefisso-...@miodominio.tld) la mail arriva.
 
In teoria, però, il callout dovrebbe simulare un invio di mail, per quale motivo exim risponde picche al callout ed invece recapita una mail se inviata da se stesso?


Ho provato a spiegartelo ma evidentemente non sono stato chiaro.
 
Il callout non fa il delivery della mail quindi i router non intervengono.
Il callout verifica che la fase RCPT vada a buon fine (e da te non va a 
buon fine) e quindi hai la DSN.
Di conseguenza, devi lavorare sulla ACL Relativa al RCPT e non nella fase 
di routing che avviene dopo (e che hai già fatto).
 
Nel caso mi sbagliassi e stessi sparando una minchiata (che ribadisco exim 
non lo uso da tanto) e non mi ricordassi gli "internals" di exim allora 
vuol dire che dei tuoi router, ce n'è uno che matcha prima e non prosegue 
oppure quello che hai fatto, semplicemente non va bene.
 
Qui la chiudo per non sparare cavolate ulteriori ma non ci sono andato 
molto lontano.

 di routing che avviene dopo (e che hai già fatto).
 
Ho capito cosa intendi, però non mi spiego come sia possibile che il callout mi riconosce correttamente tutti gli altri alias (tra cui, il mio).
 
Se fosse come dici te, non riconoscerebbe nemmeno tutti gli altri alias presenti e fallirebbero tutti i callout di verifica esistenza recipient.

 La tua indicazione puntava da tutt'altra parte :D
 
Forse non stai usando un font monospaziato.
È un po' come incrociare i flussi, "sarebbe male".

 È un po' come incrociare i flussi, "sarebbe male".
 
Lo so, ma non trovo più dove si cambia l'impostazione su Google Gruppi, da quando hanno attivato la nuova versione.

 quindi sembra tutto corretto, sopratutto in base all'ultima riga dove viene
identificato "destin...@miodominio.tld" a partire da
prefisso-...@miodominio.tld ma nonostante ci�, ricevo un DSN di utente
inesistente (per prefisso-...@miodominio.tld e non per
destin...@miodominio.tld)
 
Hai provato con exim -bh <un IP a piacere> simulando la sessione STMP?
In questo modo vedi esattamente cosa sta facendo Exim in quel momento e
dovresti trovare il problema...
 
Ciao
Luca Bertoncello
(
luca...@lucabert.de
)
 
-- 
 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it
 
 
 

 dovresti trovare il problema...
 
Non ci avevo pensato, in effetti vedo cosa fa fallire il check.
Ho una mappa con tutti gli utenti validi (e dentro questa mappa non c'è il mio alias)
 
Ora, il check è fatto da una semplice ACL require:
 
  require
    log_message = Unknown recipient $local_part@$domain
    message = Unknown recipient $local_part@$domain
    recipients = lsearch;/etc/exim4/validusers
 
in lsearch;/etc/exim4/validusers non posso mettere una regex.
Volevo quindi aggiungere un lookup rimpiazzando il recipients con:
 
recipients = lsearch;/etc/exim4/validusers : ${lookup{$local_part}wildlsearch{/etc/exim4/regex_aliases}}
 
ma se lo faccio, il require fallisce perchè non trova il recipient dentro il validusers (mentre invece il lookup ritorna yes) quindi presumo debbano essere vere ambo le condizioni.
 
Idee su come abbinare un lsearch ad un lookup ?