[exim-conf] новый механизм проверки квот виртуальных пользователей на этапе RCPT To

Victor Ustugov victor на corvax.kiev.ua
Пн Июл 29 11:11:50 EEST 2013


приветствую

Victor Ustugov wrote:

> в mailertable добавлен новый тип транспорта lmtplocal для доставки почты
> локальных доменов на нелокальные lmtp сервера.
> 
> от типа транспорта lmtp он отличается тем, что применяется только к
> письмам из локальных доменов и работает уже после разворачивания алиасов
> до штатной локальной доставки, в то время как транспорт доставка через
> mailertable с использованием транспорта lmtp работает еще до dnslookup
> роутера.
> 
> данный транспорт может использоваться в случаях, когда база учетных
> записей и алиасов едина для нескольких почтовых серверов, а доставка с
> основного сервера производится по lmtp уже после разворачивания алиасов.

в первую очередь для описанного выше случая, а также для всех случаев,
когда данные о размере и количестве писем накапливаются не в файле
maildirsize в мейлдире пользователей, введены два новых значения для
переменной описания проверки квот confVIRT_MDIR_QUOTA -
VERIFY_RCPT_CUSTOM_DEFER и VERIFY_RCPT_CUSTOM_REJECT.

в общем случае новые значения confVIRT_MDIR_QUOTA могут использоваться
при необходимости проверять квоты на этапе RCPT To пользовательским
способом, например запросами к БД (например MySQL), LDAP серверу и т. д.

отличаются значения типом ответа отправителю, что следует из названий
самих значений.

при использовании VERIFY_RCPT_CUSTOM_DEFER и VERIFY_RCPT_CUSTOM_REJECT
условие проверки квот необходимо описать в переменной
confVIRT_MDIR_QUOTA_CUSTOM_CONDITION не в виде запроса, а в виде
полноценной конструкции условия.

если квота превышена, то условие должно вернуть yes, если не превышена,
то no.

пример:

define(`confVIRT_MDIR_QUOTA_CUSTOM_CONDITION', `${lookup mysql{SELECT
passwd.quota_limit_bytes-quota.bytes AS free FROM passwd, quota WHERE
passwd.id = "${quote_mysql:$local_part@$domain}" AND quota.username =
"${quote_mysql:$local_part@$domain}"}{${if <{${eval:$value-${if
<{$message_size}{1}{10k}{$message_size}}}}{0}{yes}{no}}}{no}}')dnl

строки явно будут перенесены, но разобрать логику вполне можно.

в данном случае запросом к БД получена разница между значением квоты,
хранящемся в таблице учетных записей почтовых пользователей, и реальным
размером всех писем, хранящимся в отдельной таблице, и обновляемым
IMAP/POP3 сервером, а также LDA (например, dovecot и его deliver,
который на самом деле dovecot-lda), затем от нее отнимается размер
письма (если он передан в параметре SIZE команды MAIL From, если не
передан, то используется среднепотолочный размер 10k), а полученное
значение сравнивается с нулем.

если полученная величина меньше нуля, то квота превышена.

следует иметь ввиду, что данная проверка квоты на этапе RCPT To работает
одновременно с проверкой существования пользователей.
т. о. проверка квоты не будет осуществляться для пользователей,
перечисленных в файле skip_verify_recipient

-- 
Best wishes Victor Ustugov  mailto:victor на corvax.kiev.ua
public GnuPG/PGP key:       http://victor.corvax.kiev.ua/corvax.asc
ICQ UIN: 371808614          JID: corvax на corvax.kiev.ua
nic-handle: CRV-UANIC




Подробная информация о списке рассылки exim-conf