Страница 1 из 1

Алиасы доменов в Exim, Dovecot + mysql

Добавлено: 2012-07-30 11:04:09
Violator
Стоит связка postfixadmin, mysql, exim, dovecot.
В postfixadmin есть возможность создавать алиасы доменов, но exim и dovecot c таблицей alias_domain не общаются (пока) и соотв. user@aliasdomain.ru для них не существует.
Вот как они проверяют наличие пользователя в базе сейчас:
dovecot

Код: Выделить всё

password_query = SELECT password, concat('*:bytes=', quota) as userdb_quota_rule FROM mailbox WHERE username = '%u'
user_query = SELECT  CONCAT('/var/mail/exim/',LCASE(`maildir`)) as home, 26 AS uid,  26 AS gid, concat('*:bytes=',CAST(quota AS CHAR)) AS quota_rule FROM mailbox WHERE
username = '%u' AND active = '1'
квоты dovecot

Код: Выделить всё

map {
  pattern = priv/quota/storage
  table = quota2
  username_field = username
  value_field = bytes
}
map {
  pattern = priv/quota/messages
  table = quota2
  username_field = username
  value_field = messages
}
exim

Код: Выделить всё

GET_QUOTA=${lookup mysql{SELECT `maxquota` FROM `domain` \
           WHERE domain='${quote_mysql:$domain}'}{${value}M}}
MAILDIR_SIZE=${lookup mysql{SELECT `bytes` FROM `quota_domain` \
           WHERE domain='${quote_mysql:$domain}'}}
system_aliases:
    driver = redirect
    allow_fail
    allow_defer
    data = ${lookup mysql{SELECT `goto` FROM `alias` WHERE \
                `address`='${quote_mysql:$local_part@$domain}' OR \
                `address`='${quote_mysql:@$domain}'}}
virtual_user_quota_defer:
  driver          = redirect
  domains         = +local_domains
  condition =   ${if and{{>{GET_QUOTA}{0}}{>={MAILDIR_SIZE}{GET_QUOTA}}}}
  data            = :fail: Domain over quota!
  verify_sender = false
  allow_fail
dovecot_user:
  driver = accept
    condition = ${lookup mysql{SELECT `goto` FROM \
        `alias` WHERE \
        `address`='${quote_mysql:$local_part@$domain}' OR \
         `address`='${quote_mysql:@$domain}'}{yes}{no}}
    transport = dovecot_delivery
Да, да, квоты и в dovecot и в exim, т.к. dovecot не умеет одновременно проверять и доменные и персональные квоты.

Единственное что нарыл, это для dovecot:

Код: Выделить всё

password_query = SELECT DISTINCT mb.username as user, mb.password AS password, concat('/usr/local/mail/domains/', mb.maildir) as userdb_home, concat('maildir:/usr/local/mail/domains/', mb.maildir) as userdb_mail, FROM mailbox mb LEFT JOIN alias_domain ad ON mb.domain = ad.target_domain AND ad.active = 1 WHERE ((mb.username = '%u') OR (mb.local_part = '%n' AND ad.alias_domain = '%d')) AND mb.active = 1
Подобное можно конечно соорудить и для exim, но что делать с квотами, которые так же хранятся в базе? Как научить dovecot правильно обновлять квоты в ящиках, которые являются алиасами?

Думаю насчет создания view в mysql, но может у кого есть рабочее и элегантное решение?

Re: Алиасы доменов в Exim, Dovecot + mysql

Добавлено: 2012-08-03 14:09:28
xM
Э, да всё общается прекрасно.
Если вы поднимали эту связку по статье с этого сайта (и её многочисленных аналогов), то domain aliasing работает на раз-два.
Единственное что в конфиг Exim надо добавить вот что (по-моему не было этого в конфиге):

Код: Выделить всё

...
begin routers

domain_aliases:
  driver        = redirect
  domains       = ${lookup mysql{SELECT `alias_domain` FROM `alias_domain` WHERE \
                  `alias_domain`='${quote_mysql:$domain}' AND `active` ='1'}}
  data          = ${quote:$local_part}@${lookup mysql{SELECT `target_domain` FROM \
                  `alias_domain` WHERE `alias_domain`='${quote_mysql:$domain}'}}
  no_more
...
У меня лично все отлично работает с четырьмя доменами. Конфигурируется, традиционно, через postfixadmin.

Re: Алиасы доменов в Exim, Dovecot + mysql

Добавлено: 2012-08-08 16:22:16
Violator
Спасибо, попробую. А с dovecot как быть?
Ставил по одной из статей с этого сайта плюс допиливал.

Re: Алиасы доменов в Exim, Dovecot + mysql

Добавлено: 2012-08-09 13:08:26
xM
Violator писал(а):Спасибо, попробую. А с dovecot как быть?
Ставил по одной из статей с этого сайта плюс допиливал.
А что - Dovecot ? Отправляйте почту с базовых доменов и ящиков, а не с псевдонимов.
По-крайней мере у меня так настроено. Если надо разрешить отправку почты с aliases то тоже
не так трудно SQL запрос по образцу наваять.
Кстати, забыл в предыдущем посте еще один блок добавить - для mailbox-aliases (там было только
для доменов). Идёт сразу после, вторым номером. Вот он:

Код: Выделить всё

system_aliases:
  driver        = redirect
  allow_fail
  allow_defer
  data          = ${lookup mysql{SELECT `goto` FROM `alias` WHERE \
                  `address`='${quote_mysql:$local_part@$domain}' OR  \
                  `address`='${quote_mysql:@$domain}' AND `active`='1'}}