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 [EMAIL PROTECTED]"
  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 [EMAIL PROTECTED]"
  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 [EMAIL PROTECTED] GG:3828944
"Poglądy polityczne mają takie znaczenie w sejmie jak upierzenie u krokodyla"
(c) Tomasz Olbratowski 2004
_______________________________________________
pld-users-pl mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-users-pl

Odpowiedź listem elektroniczym