[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

exim: проверка существования юзеров по нескольким базам в одном роутере



Привет!
Есть почтовый сервачёк с юзерами в нескольких разных SQL-базах, доступ к которым осуществляется с
использованием разных (не одинаковых) учётных данных.
Как в строке "condition" роутера проверить поочерёдно по обоим переменным существование
юзеров сначала "CHECK_VIRTUAL_USER", если неудачно то "CHECK1_VIRTUAL_USER"
(аналог || в bash)?

1. Устанавливаю переменные
----- /etc/exim4/conf.d/main/00_exim4-config_local -----
# Запрос проверяет существование пользователя в почтовой системе
CHECK_VIRTUAL_USER = \
${lookup pgsql{servers=xxx.xxx.xxx.xxx::5432/db000/user000/Password; SELECT
egw_addressbook.contact_email \
  FROM egw_addressbook, egw_accounts \
WHERE egw_addressbook.contact_email = '${quote_pgsql:$local_part@$domain}' \
  AND egw_addressbook.account_id IS NOT NULL \
  AND egw_accounts.account_status != '${quote_pgsql:}' \
  AND egw_addressbook.account_id = egw_accounts.account_id}{$value}fail}

# Запрос проверяет существование пользователя в почтовой системе
CHECK1_VIRTUAL_USER = \
${lookup pgsql{servers=xxx.xxx.xxx.xxx::5432/db001/user001/PasswordPassword; SELECT
egw_addressbook.contact_email \
  FROM egw_addressbook, egw_accounts \
WHERE egw_addressbook.contact_email = '${quote_pgsql:$local_part@$domain}' \
  AND egw_addressbook.account_id IS NOT NULL \
  AND egw_accounts.account_status != '${quote_pgsql:}' \
  AND egw_addressbook.account_id = egw_accounts.account_id}{$value}fail}
----- /etc/exim4/conf.d/main/00_exim4-config_local -----

2. Роутер
----- /etc/exim4/conf.d/router/950_exim4-config_dovecot_virtual_user -----
### router/950_exim4-config_dovecot_virtual_user
#################################

# This router matches local user mailboxes. If the router fails, the error
# message is "Unknown user".

dovecot_virtual_user:
  debug_print = "R: dovecot_virtual_user for $local_part@$domain"
  driver = accept
  domains = +local_domains
  local_parts = ! root
  transport = LOCAL_DELIVERY
  condition = CHECK_VIRTUAL_USER
  cannot_route_message = Unknown user
  no_more
----- /etc/exim4/conf.d/router/950_exim4-config_dovecot_virtual_user -----



Reply to: