URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 93012
[ Назад ]

Исходное сообщение
"PostFix + Dovecot 2 и quota_warning"

Отправлено sasha73 , 09-Фев-12 17:13 
Добрый день!
Подскажите, пожалуйста, уже выбился из сил, закончились идеи.
Не работает quota_warning в Dovecot 2.

Версии:

postfix-2.8.7,1
dovecot-2.0.16_1

Настройки Dovecot:

plugin {
    quota = maildir:User quota
    quota_warning = storage=75%% quota-warning 75 %u
}
service quota-warning {
  executable = script /usr/local/bin/quota-warning.sh
  user = root
  unix_listener quota-warning {
    user = root
  }
}
protocol imap {
  imap_client_workarounds = tb-extra-mailbox-sep
  mail_plugins = autocreate quota imap_quota
}
user_query = SELECT CONCAT("/var/mail/",maildir) AS home, 1005 AS uid, 1002 AS gid, CONCAT('*:storage=',  quota , 'B' ) AS quota_rule FROM mailbox WHERE username = '%u' AND active = '1'

Сильно не ругайте - это уже последние версии, пробовал уж как угодно...

Log Dovecot-а:

Feb 08 11:24:56 auth-worker: Debug: sql(x.user@domen.ua,192.168.0.5): SELECT CONCAT("/var/mail/",maildir) AS home, 1005 AS uid, 1002 AS gid, CONCAT('*:storage=',  quota , '
Feb 08 11:24:56 auth: Debug: master out: USER   2197946369      x.user@domen.ua    home=/var/mail/domen.ua/x.user/    uid=1005        gid=1002        quota_rule=*:stor
Feb 08 11:24:56 imap: Debug: Loading modules from directory: /usr/local/lib/dovecot
Feb 08 11:24:56 imap: Debug: Module loaded: /usr/local/lib/dovecot/lib10_quota_plugin.so
Feb 08 11:24:56 imap: Debug: Module loaded: /usr/local/lib/dovecot/lib11_imap_quota_plugin.so
Feb 08 11:24:56 imap: Debug: Module loaded: /usr/local/lib/dovecot/lib20_autocreate_plugin.so
Feb 08 11:24:56 imap: Debug: Added userdb setting: plugin/quota_rule=*:storage=4096000B
Feb 08 11:24:56 imap(x.user@domen.ua): Debug: Effective uid=1005, gid=1002, home=/var/mail/domen.ua/x.user/
Feb 08 11:24:56 imap(x.user@domen.ua): Debug: Quota root: name=User quota backend=dirsize args=
Feb 08 11:24:56 imap(x.user@domen.ua): Debug: Quota rule: root=User quota mailbox=* bytes=4096000 messages=0
Feb 08 11:24:56 imap(x.user@domen.ua): Debug: Quota warning: bytes=3072000 (75%) messages=0 reverse=no command=quota-warning 75 x.user@domen.ua
Feb 08 11:24:56 imap(x.user@domen.ua): Debug: maildir++: root=/var/mail/domen.ua/x.user, index=, control=, inbox=/var/mail/domen.ua/x.user, alt=
Feb 08 11:24:56 imap(x.user@domen.ua): Debug: Namespace : Using permissions from /var/mail/domen.ua/x.user: mode=0700 gid=-1
Feb 08 11:24:56 imap-login: Info: Login: user=<x.user@domen.ua>, method=PLAIN, rip=192.168.0.5, lip=192.168.0.20, mpid=9190

Как видно плагин вроде отрабатывает:
Debug: Quota warning: bytes=3072000 (75%) messages=0 reverse=no command=quota-warning 75 x.user@domen.ua
Но скрипт запускать не пытается. В скрипте есть строка для проверки:
echo "`date`   Mail qouta ! ($1 $2)" >>/usr/local/etc/dovecot/tst.quota
Ну что ему еще не хватает?

И попутный вопрос. PostFix не патчил VDA. Это обязательно делать? Что именно этот патч правит? (не нашел ответа) Именно для моей версии патча нет пока, да и PostFix вроде Квоту считает.


Содержание

Сообщения в этом обсуждении
"PostFix + Dovecot 2 и quota_warning"
Отправлено koblin , 10-Фев-12 11:34 
Проверьте права на запуск скрипта. И вообще попробуйте его самостоятельно запустить:
/usr/local/bin/quota-warning.sh 75 test@domain

И не знаю критично это или нет, но по документации в sql-запросе должно быть bytes, а не storage.. concat('*:bytes=', quota_bytes) AS quota_rule
http://wiki2.dovecot.org/Quota/Configuration#MySQL

ps на прошлой неделе настраивал тоже самое на centos6, всё работает как часы


"PostFix + Dovecot 2 и quota_warning"
Отправлено sasha73 , 10-Фев-12 12:14 
> Проверьте права на запуск скрипта. И вообще попробуйте его самостоятельно запустить:
> /usr/local/bin/quota-warning.sh 75 test@domain
> И не знаю критично это или нет, но по документации в sql-запросе
> должно быть bytes, а не storage.. concat('*:bytes=', quota_bytes) AS quota_rule
> http://wiki2.dovecot.org/Quota/Configuration#MySQL
> ps на прошлой неделе настраивал тоже самое на centos6, всё работает как
> часы

Когда писал, что в скрипте есть строка "echo", то это был намек, что скрипт проверен и с правами 777, на всякий, пока что. После запуска вашей строки в tst.quota получаем:

пятница, 10 февраля 2012 г. 09:56:27 (EET)   Mail qouta ! (75 test@domain)

Да, из документации не заметил о "bytes", проверил - результат то же (еще попробовал в очередной раз полный пусть к скрипту в конфиге Dovecot вписать):

Debug: Quota warning: bytes=3072000 (75%) messages=0 reverse=no command=/usr/local/bin/quota-warning.sh 75 x.user@domen.ua

Не пойму, не уже ли никто не пользуется этими предупреждениями о Квоте? Или у всех все работает?


"PostFix + Dovecot 2 и quota_warning"
Отправлено koblin , 10-Фев-12 12:21 
> Не пойму, не уже ли никто не пользуется этими предупреждениями о Квоте?
> Или у всех все работает?

Пользуюсь, работает.

plugin {
  quota_warning = storage=100%% quota-exceeded 100 %u
  quota_warning2 = storage=95%% quota-warning 95 %u
  quota_warning3 = storage=80%% quota-warning 80 %u
}

service quota-warning {
  executable = script /etc/dovecot/bin/quota-warning.sh
  user = virtual
  unix_listener quota-warning {
    user = virtual
  }
}

user_query = \
  SELECT CONCAT('/var/spool/mail/%d/', maildir) as home, 5000 as uid, 5000 as gid, \
  concat('*:bytes=', quota*1024) AS quota_rule \
  FROM mailbox WHERE username = '%u' AND active= ' 1'



"PostFix + Dovecot 2 и quota_warning"
Отправлено sasha73 , 10-Фев-12 13:21 
>[оверквотинг удален]
>   user = virtual
>   unix_listener quota-warning {
>     user = virtual
>   }
> }
> user_query = \
>   SELECT CONCAT('/var/spool/mail/%d/', maildir) as home, 5000 as uid, 5000 as
> gid, \
>   concat('*:bytes=', quota*1024) AS quota_rule \
>   FROM mailbox WHERE username = '%u' AND active= ' 1'

Не пойму, почему у меня не работает? Вроде бы все так же.
Не совсем понятен смысл строки "executable = script", ведь путь к скрипту quota-exceeded все равно не указан.
Тоже не понял умножение в "quota*1024" . По идее мне не нужно, PostfixAdmin ложит квоту как раз в байтах.
Остальное все один в один почти.
А что у Вас в "protocol imap {}" ?
Какая версия Dovecot-а и можно кусок его лог-а ?
Еще идеи у кого-то будут?


"PostFix + Dovecot 2 и quota_warning"
Отправлено koblin , 10-Фев-12 14:35 
Посмотрел свой лог, там тоже есть сообщения, причем сразу по три
Debug: Quota warning: bytes=524288000 (100%) messages=0 reverse=no command=quota-exceeded..
Debug: Quota warning: bytes=498073600 (95%) messages=0 reverse=no command=quota-warning...
Debug: Quota warning: bytes=419430400 (80%) messages=0 reverse=no command=quota-warning...
Я так понял они информационные, появляются каждый раз когда пользователь логинится на сервер и не имеют отношения к реальному срабатыванию лимитов.

"PostFix + Dovecot 2 и quota_warning"
Отправлено sasha73 , 10-Фев-12 17:06 
> Посмотрел свой лог, там тоже есть сообщения, причем сразу по три
> Debug: Quota warning: bytes=524288000 (100%) messages=0 reverse=no command=quota-exceeded..
> Debug: Quota warning: bytes=498073600 (95%) messages=0 reverse=no command=quota-warning...
> Debug: Quota warning: bytes=419430400 (80%) messages=0 reverse=no command=quota-warning...
> Я так понял они информационные, появляются каждый раз когда пользователь логинится на
> сервер и не имеют отношения к реальному срабатыванию лимитов.

Это понятно, я с Вами согласен! А Вы не могли бы воспроизвести срабатывание и дать этот лог? Проще это сделать временным понижением квоты юзеру.

Просто я давал вариант, где лимит реально должен был срабатывать:
Debug: Quota rule: root=User quota mailbox=* bytes=4096000 messages=0
Debug: Quota warning: bytes=3072000 (75%) messages=0 reverse=no command=quota-warning 75 x.user@domen.ua

Интересно должен ли messages=1, а не 0 ?
И можете чуть шире дать лог Dovecot-а? Не вижу, что бы вообще он подсчитывал реальную квоту. Он отображает ограничение=4096000 лимит Варнинга=3072000, а вот текущей цифры в логе нет. Хотя в свойствах папки в Thunderbird-е видно, что занято 101%


"PostFix + Dovecot 2 и quota_warning"
Отправлено sasha73 , 20-Фев-12 10:45 
> Интересно должен ли messages=1, а не 0 ?
> И можете чуть шире дать лог Dovecot-а? Не вижу, что бы вообще
> он подсчитывал реальную квоту. Он отображает ограничение=4096000 лимит Варнинга=3072000,
> а вот текущей цифры в логе нет. Хотя в свойствах папки
> в Thunderbird-е видно, что занято 101%

Вопросы до сих пор актуальны. Болел, потому не поднимал тему...


"PostFix + Dovecot 2 и quota_warning"
Отправлено кегна , 20-Фев-12 22:08 
>> Интересно должен ли messages=1, а не 0 ?
>> И можете чуть шире дать лог Dovecot-а? Не вижу, что бы вообще
>> он подсчитывал реальную квоту. Он отображает ограничение=4096000 лимит Варнинга=3072000,
>> а вот текущей цифры в логе нет. Хотя в свойствах папки
>> в Thunderbird-е видно, что занято 101%
> Вопросы до сих пор актуальны. Болел, потому не поднимал тему...

dovecot.conf:
plugin {
    quota = maildir
    quota_rule2 = Trash:storage=500M
    quota_warning = storage=95%% /usr/local/bin/quota-warning.sh 95
    quota_warning2 = storage=90%% /usr/local/bin/quota-warning.sh 90
    quota_warning3 = storage=80%% /usr/local/bin/quota-warning.sh 80
    sieve_global_path = /var/sieve/spam.sieve
}

$ cat /usr/local/bin/quota-warning.sh
#!/bin/sh
PERCENT=$1
cat << EOF | /usr/lib/dovecot/deliver -d $USER -c /usr/local/bin/warning.conf
From: abuse@xxx.ru
Subject: quota warning
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
To: $USER

Внимание!
Ваш ящик заполнен на $PERCENT%.

Пожалуйста удалите часть ненужной почты!

С уважением, системный администратор.


$ cat /usr/local/bin/warning.conf | grep -v '^#'
postmaster_address = abuse@xxx.ru
mail_location = maildir:/var/mail/%u

driver = mysql
connect = host=/var/run/mysqld/mysqld.sock dbname=.... user=..... password=.....
default_pass_scheme = MD5

password_query = SELECT username as user, password FROM mailbox WHERE username = '%u' and active='1'
user_query = SELECT CONCAT('/var/spool/mail/', `maildir`) AS `home`, 1981 AS uid, 1981 AS gid, concat('*:storage=', quota, 'B') as quota_rule FROM `mailbox` WHERE `username` = '%u'


"PostFix + Dovecot 2 и quota_warning"
Отправлено Veter111 , 20-Фев-15 10:33 
Поимел точно такую же проблему. Голову сломал, решения не нашел :(
Может здесь добрые люди в конце концов нашли решение трабла?

"PostFix + Dovecot 2 и quota_warning"
Отправлено Nnin , 08-Апр-15 14:53 
> Поимел точно такую же проблему. Голову сломал, решения не нашел :(
> Может здесь добрые люди в конце концов нашли решение трабла?

Сегодня опробовал подключение Довекот квот из АД. Работает нормально. Пишу большую памятку сейчас на будущее.

А если коротко, то необходимо файл подключения к АД /etc/dovecot/dovecot-ldap.conf привести к виду:

hosts           = 192.168.111.2:389
ldap_version    = 3
auth_bind       = yes
dn              = user@developer.com
dnpass          = 123qwe
base            = ou=Структура,dc=developer,dc=com
scope           = subtree
deref           = searching
user_filter     = (&(mail=%u)(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
pass_filter     = (&(mail=%u)(objectClass=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
pass_attrs      = userPassword=password
default_pass_scheme = CRYPT
user_attrs      = =home=/var/vmail/vmail1/%Ld/%Ln/Maildir/,=mail=maildir:/var/vmail/vmail1/%Ld/%Ln/Maildir/,=quota_rule=*:bytes=%{ldap:st}
debug_level = 0

Важное для нас это строка с параметрами user_attrs, и в ней это =quota_rule=*:bytes=%{ldap:st}, в этой строке самый важный параметр это st. Так вот, st, это есть, не что иное как поле в свойства юзера находящегося в АД.

Почему именно поле st?

Да просто мне так удобно.

Поле st принадлежит свойствам юзера живущего в АД, это поле "Область, край" в закладке "Адрес". Так вот, сюда в это поле забиваем нужный размер ящика в числовом виде, размерность байты. Т.е. если необходимо пользователю сделать объем ящика 10мб, то вбиваем 10000000.

Поле для использования в качестве квоты каждый выбирает сам.

Теперь в конфиге /etc/dovecot/dovecot.conf

В секции plugin, приводим параметр quota к виду:

plugin {
  quota = maildir:User quota
}


с картинками http://forum.lissyara.su/viewtopic.php?p=371134#p371134