Система: red hat 6+postfix+dovecot2+mysql
Возник вопрос по quota-warning, квоты работают, но не приходят письма с предупреждениями, вот скрипт:
#!/bin/sh
PERCENT=$1
USER=$2
cat << EOF | /usr/libexec/dovecot/dovecot-lda -d $USER -o "plugin/quota=maildir:User quota::noenforcing"
From: postmaster@scnipigaz.ru
Subject: quota warning
Your mailbox is now $PERCENT% full.
EOF
В логах нашел ошибку: execvp(/usr/local/bin/quota-warning.sh) failed: Permission denied
Начал проверять скрипт, вот результат:
Usage: dovecot-lda [-c <config file>] [-a <address>] [-d <username>] [-p <path>]
[-f <envelope sender>] [-m <mailbox>] [-e] [-k]
lda(): Fatal: Unknown argument: plugin/quota=maildir:User quota::noenforcing
Нашел, что проблема решается удалением параметра User quota, и то что параметр –о, хоть и его нет в описании должен работать, переделал:
"plugin/quota=maildir::noenforcing"
но у меня так и осталась эта ошибка.
Прошу вашей помощи, так как не могу понять причину сбоя, конфиг dovecot:
auth_debug = yes
auth_debug_passwords = yes
auth_mechanisms = PLAIN LOGIN
auth_verbose = yes
base_dir = /var/run/dovecot/
first_valid_uid = 1000
last_valid_uid = 1000
log_timestamp = %Y-%m-%d %H:%M:%
mail_location = maildir:/home/vmail/%d/%u
mbox_write_locks = fcntl
passdb {
args = /etc/dovecot/dovecot-sql.conf
driver = sql
}
passdb {
driver = pam
}
protocols = imap pop3
protocol imap {
mail_plugins = $mail_plugins quota imap_quota autocreate
imap_client_workarounds = tb-extra-mailbox-sep
}
protocol pop3 {
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
service auth {
unix_listener /var/spool/postfix/private/auth {
group = postfix
mode = 0660
user = postfix
}
unix_listener auth-master {
group = mail
mode = 0660
user = vmail
}
unix_listener auth-userdb {
group = mail
mode = 0660
user = vmail
}
#user = nobody
}
service imap-login {
inet_listener imap {
port = 143
}
}
service imap {
executable = /usr/libexec/dovecot/imap
}
service pop3-login {
inet_listener pop3 {
port = 110
}
}
service pop3 {
executable = /usr/libexec/dovecot/pop3
}
disable_plaintext_auth = no
ssl = no
#ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
#ssl_key = </etc/pki/dovecot/private/dovecot.pem
userdb {
args = uid=1000 gid=12 home=/home/vmail/%d/%u
driver = static
}
userdb {
driver = passwd
}
protocol lda {
auth_socket_path = /var/run/dovecot/auth-master
postmaster_address = postmaster@scnipigaz.ru
sendmail_path = /usr/lib/sendmail
mail_plugins = quota
}
plugin {
autocreate = INBOX
# autocreate2 = Sent
# autocreate3 = Trash
# autocreate4 = Drafts
# autocreate5 = Junk
# autocreate6 = Spam
autosubscribe = INBOX
# autosubscribe2 = Sent
# autosubscribe3 = Trash
# autosubscribe4 = Drafts
# autosubscribe5 = Junk
# autosubscribe6 = Spam
quota = maildir:User quota
quota_rule = *:storage=500M
quota_rule2 = Trash:storage=+20%%
quota_warning = storage=95%% quota-warning 95 %u
quota_warning = storage=80%% quota-warning 80 %u
quota_warning3 = -storage=100%% quota-warning below %u # user is no longer over quota
}
service quota-warning {
executable = script /usr/local/bin/quota-warning.sh
unix_listener quota-warning {
group = mail
user = vmail
mode = 0660
}
user = vmail
}
Есть мнение, что в скрипте очень полезно отделять хедеры письма от собсно тела пустой строкой, согласно РФЦ.
Также, крайне богоугодно в шелловых и прочих скриптах последней строкой ставить комментарий, ибо тот же ЕОФ шеллом распознается именно, как ЕОФ только в виде ЕОФ\н.Я уж не говорю о массе помарок, грамматических и синтаксических ошибок в вашей копипасте, вроде некорректной нумерации квота_рулезов и двух двоеточий вместо одного перед ноэнфорсингом.
#!/bin/sh
PERCENT=$1
USER=$2
cat << EOF | /usr/libexec/dovecot/dovecot-lda -d $USER -o "plugin/quota=maildir:User quota:noenforcing"
From: postmaster@scnipigaz.ru
To: $USER
Subject: quota warningYour mailbox is now $PERCENT% full.
EOF
#аминь
>[оверквотинг удален]
> PERCENT=$1
> USER=$2
> cat << EOF | /usr/libexec/dovecot/dovecot-lda -d $USER -o "plugin/quota=maildir:User
> quota:noenforcing"
> From: postmaster@scnipigaz.ru
> To: $USER
> Subject: quota warning
> Your mailbox is now $PERCENT% full.
> EOF
> #аминь
исправил как вы сказали, все равно ошибка:
lda(): Fatal: Unknown argument: plugin/quota=maildir:User quota:noenforcing
> исправил как вы сказали, все равно ошибка:Бросьте сюда все, что выдаст `doveconf -n`
>> исправил как вы сказали, все равно ошибка:
> Бросьте сюда все, что выдаст `doveconf -n`auth_debug = yes
auth_debug_passwords = yes
auth_mechanisms = PLAIN LOGIN
auth_verbose = yes
base_dir = /var/run/dovecot/
disable_plaintext_auth = no
first_valid_uid = 1000
last_valid_uid = 1000
log_timestamp = %Y-%m-%d %H:%M:%
mail_location = maildir:/home/vmail/%d/%u
mbox_write_locks = fcntl
passdb {
args = /etc/dovecot/dovecot-sql.conf
driver = sql
}
passdb {
driver = pam
}
plugin {
autocreate = INBOX
autosubscribe = INBOX
quota = maildir:User quota
quota_rule = *:storage=500M
quota_rule2 = Trash:storage=+20%%
quota_warning = storage=80%% quota-warning 80 %u
quota_warning2 = -storage=100%% quota-warning below %u
}
protocols = imap pop3
service auth {
unix_listener /var/spool/postfix/private/auth {
group = postfix
mode = 0660
user = postfix
}
unix_listener auth-master {
group = mail
mode = 0660
user = vmail
}
unix_listener auth-userdb {
group = mail
mode = 0660
user = vmail
}
}
service imap-login {
inet_listener imap {
port = 143
}
}
service imap {
executable = /usr/libexec/dovecot/imap
}
service pop3-login {
inet_listener pop3 {
port = 110
}
}
service pop3 {
executable = /usr/libexec/dovecot/pop3
}
service quota-warning {
executable = script /usr/local/bin/quota-warning.sh
unix_listener quota-warning {
user = vmail
}
}
ssl = no
userdb {
args = uid=1000 gid=12 home=/home/vmail/%d/%u
driver = static
}
userdb {
driver = passwd
}
protocol imap {
imap_client_workarounds = tb-extra-mailbox-sep
mail_plugins = " quota imap_quota autocreate"
}
protocol pop3 {
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
protocol lda {
auth_socket_path = /var/run/dovecot/auth-master
mail_plugins = quota
postmaster_address = postmaster@domain
sendmail_path = /usr/lib/sendmail
}
>[оверквотинг удален]
> auth_debug_passwords = yes
> auth_mechanisms = PLAIN LOGIN
> auth_verbose = yes
> base_dir = /var/run/dovecot/
> disable_plaintext_auth = no
> first_valid_uid = 1000
> last_valid_uid = 1000
> log_timestamp = %Y-%m-%d %H:%M:%
> mail_location = maildir:/home/vmail/%d/%u
> mbox_write_locks = fcntlК моему великому сожалению, увы, но вам, все-таки, придется добавить строчку `mail_plugins = quota` в ваш конфиг. Примерно похожий эффект наблюдается у электрочайников - их пока в розетку не включишь, они практически не греют воду. Точно так же и здесь, пока явно не укажешь загрузку плагина, все обращения к lib10_quota_plugin.so вылетают с ошибками.
>[оверквотинг удален]
>> first_valid_uid = 1000
>> last_valid_uid = 1000
>> log_timestamp = %Y-%m-%d %H:%M:%
>> mail_location = maildir:/home/vmail/%d/%u
>> mbox_write_locks = fcntl
> К моему великому сожалению, увы, но вам, все-таки, придется добавить строчку `mail_plugins
> = quota` в ваш конфиг. Примерно похожий эффект наблюдается у электрочайников
> - их пока в розетку не включишь, они практически не греют
> воду. Точно так же и здесь, пока явно не укажешь загрузку
> плагина, все обращения к lib10_quota_plugin.so вылетают с ошибками.Добавил не работает, блин, забыл еще написать что система х64, может в этом проблема?
> Добавил не работаетпокажите снова `doveconf -n`
>блин, забыл еще написать что система х64, может в этом проблема?
А у вас система не на электричестве работает, случаем? А то подобные глюки, как правило, встречаются у систем, втыкнутых в розетку.
> Добавил не работает, блин, забыл еще написать что система х64, может в
> этом проблема?Скорее всего. Вы еще с 32битными не разобрались, а уже 32битные ставите. =)
>> Добавил не работает, блин, забыл еще написать что система х64, может в
>> этом проблема?
> Скорее всего. Вы еще с 32битными не разобрались, а уже 32битные ставите.
> =)я к тому это написал, что может в конфиге указать опцию mail_plugin_dir?
Разобпался, права на сокет 0777 и все заработало:service quota-warning {
executable = script /usr/local/bin/quota-warning.sh
unix_listener quota-warning {
mode = 0777
user = vmail
}
> service quota-warning {
> executable = script /usr/local/bin/quota-warning.sh
> unix_listener quota-warning {
> mode = 0777
> user = vmail
> }Мнээ... Не советую... Съедят...
mail_uid = vmail
mail_gid = vmail
. . . . .
service quota-warning {
executable = script /usr/local/bin/quota-warning.sh
user = $mail_uid
group = $mail_gid
unix_listener quota-warning {
user = $mail_uid
group = $mail_gid
}
}Ну, или какая у вас там группа для почты.