Problem - exim zawsze przyjmuje pocztę :( (AC)

Jacek Osiecki joshua w hybrid.pl
Pon, 2 Sty 2006, 00:50:11 CET


Witam,

Mam dziwny problem z eximem... sam już nie wiem co to jest :(
Problem polega na tym, że w sekcji routers exim zupełnie olewa "condition"
- czy może raczej olewa je w dość dziwny sposób.

W exim.conf, w sekcji routers mam takie oto wpisy. Opisywać struktury baz mysql
nie będę, bo to nie w nich problem:

mysql_aliases:
   debug_print = "R: mysql_aliases for $local_part@$domain"
   driver = redirect
   allow_fail
   allow_defer
   domains = +local_domains
   condition = {if eq {${lookup mysql{select count(distinct remote_name) from \
               forwarder left join domain_alias on domain_alias.domain_name = \
               forwarder.domain_name where local_part = '$local_part' and \
               (forwarder.domain_name = '$domain' or  alias = '$domain')}}}{1} {1} {0}}
   data = ${lookup mysql{select distinct remote_name from forwarder  left \
          join domain_alias on domain_alias.domain_name = forwarder.domain_name where \
          local_part = '$local_part' and (forwarder.domain_name = '$domain' or  alias = '$domain')}}

mysql_localuser:
   driver = accept
   domains = +local_domains
   debug_print = "R: mysql_localuser for $local_part@$domain"
   condition = {if eq {${lookup mysql{select count(distinct mbox_name) from \
               popbox left join domain_alias on domain_alias.domain_name = \
               popbox.domain_name where local_part = '$local_part' and (popbox.domain_name \
               = '$domain' or alias = '$domain')}}}{1} {1} {0} }
   transport = mysql_procmaildelivery

Wszystko działa pięknie, ale... gdy testuję warunki dla maila nieistniejącego
w mojej domenie, to... i tak zawsze przechodzi "mysql_localuser".
Najpierw myślałem że to błąd w query, ale po sprawdzeniu wyszło że query
zwraca jednak "0" dla nieistniejącego adresu.
Zacząłem kombinować i upraszczać "condition" - i exim raczył uznać adres za
niedostarczalny dopiero wtedy, gdy zrobiłem:

   condition = ${lookup mysql{select count(distinct mbox_name) from popbox \
               left join domain_alias on domain_alias.domain_name = popbox.domain_name \
               where local_part = '$local_part' and (popbox.domain_name = '$domain' or alias = '$domain')}}


Ogólnie: jeśli mam "driver = accept", to gdy w condition jest konstrukcja
typu "{ if eq {...}{...} {1} {0} } - exim zawsze przyjmuje pocztę:

   condition = {if eq {4} {2} {1} {0}}
   condition = {if eq {${lookup mysql if(4=2,1,0) {1} {0} }

Doszedłem do tego że nawet
   condition = {false}
jest olewane, a działa dopiero:
   condition = false

W zasadzie jest to do obejścia odpowiednim query mysql, ale mimo wszystko
chciałbym zrozumieć co robię źle lub dowiedzieć się że w eximie jest
bulba...

Pozdrawiam,
-- 
Jacek Osiecki joshua w ceti.pl GG:3828944
"Poglądy polityczne mają takie znaczenie w sejmie jak upierzenie u krokodyla"
(c) Tomasz Olbratowski 2004


Więcej informacji o liście dyskusyjnej pld-users-pl