Назад | Перейти на главную страницу

Dovecot не будет работать со значением квоты из LDAP, которое включает букву «S», добавленную к размеру?

У меня есть IMAP-система courier-imap, поддерживаемая LDAP, содержащая пользовательские данные. Я хочу преобразовать IMAP в dovecot, и я могу успешно настроить базовый вход; что работает правильно.

Но я спотыкаюсь при включении команды QUOTA. Бэкэнд квоты в dovecot не может инициализироваться, потому что к значению квоты, хранящемуся в LDAP, добавлен буква S. Когда dovecot анализирует это значение, он думает, что это спецификация модуля, жалуется и прерывает работу:

Feb  6 09:12:15 site02 dovecot: auth: Debug: ldap(todd@todd.com,10.1.1.238,
  <JzSd+b/xswAKAQHu>): result: gidNumber=1000 uidNumber=1101 
  homeDirectory=/netapp1/mail/maildirs/t/o/d/todd.todd.com 
  quota=943718400S
Feb  6 09:12:15 site02 dovecot: imap(todd@todd.com): Error: user todd@todd.com: 
  Initialization failed: Failed to initialize quota: Invalid quota root quota: 
  Invalid rule *:bytes=943718400S: Invalid rule limit value 'bytes=943718400S': 
  Unknown unit: S

Вышесказанное взято на машине разработки. Выходные данные отладки показывают, что значение, возвращаемое при поиске LDAP, равно 943718400S, и эта голубятня не распознает S как действительная единица.

Я ожидал, что он будет работать правильно, потому что согласно документации на http://wiki2.dovecot.org/Quota/Configuration, он отмечает Конфигурация, специфичная для серверной части, в настоящее время используется только с серверной частью квот Maildir ++. Это означает, что у вас может быть квота в формате Maildir ++ (например, «10000000S»). Либо эта документация содержит ошибку, либо я понимаю документацию

Данные в LDAP нельзя изменить, поэтому, как мне кажется, на ум приходят четыре подхода:

  1. Может ли dovecot устанавливать переменные и манипулировать строками в файле конфигурации? Если да, то это предпочтительный способ.
  2. Удалите букву S из значения квоты при поиске LDAP. (Возможно ли это, как можно сделать с помощью SQL-запросов?)
  3. Удалите букву S из значения квоты в plugins / quota.c.
  4. Подделайте это, добавив букву "S" в качестве единицы и установив множитель на 1 в plugins / quota.c.

Будем признательны за любые предложения о том, какой из них был бы наилучшим способом продвижения вперед. Далее следуют необработанные данные и конфигурации.

Вывод dovecot -n:

auth_debug = yes
disable_plaintext_auth = no
listen = *
mail_fsync = always
mail_nfs_index = yes
mail_nfs_storage = yes
mail_plugins = " quota"
mbox_write_locks = fcntl
mmap_disable = yes
namespace inbox {
  inbox = yes
  location = 
  mailbox Drafts {
    special_use = \Drafts
  }
  mailbox Junk {
    special_use = \Junk
  }
  mailbox Sent {
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
  mailbox Trash {
    special_use = \Trash
  }
  prefix = 
}
passdb {
  args = /etc/dovecot/dovecot-ldap.conf.ext
  driver = ldap
}
plugin {
  quota = maildir:User quota
}
protocols = imap
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem
userdb {
  args = /etc/dovecot/dovecot-ldap.conf.ext
  driver = ldap
}
protocol imap {
  mail_plugins = " quota imap_quota"
}

Указанный выше файл dovecot ldap:

hosts = localhost
dn = cn=ldap_user,dc=dev,dc=ivenue,dc=net
dnpass = ldap_pass
auth_bind = no
ldap_version = 3
base = ou=users,dc=dev,dc=ivenue,dc=net
deref = never
scope = subtree
user_attrs = homeDirectory=home,uidNumber=uid,gidNumber=gid,=quota_rule=*:bytes=%{ldap:quota}
user_filter = (&(objectClass=posixAccount)(objectClass=CourierMailAccount)(uid=%u))
pass_attrs = mail=user,userPassword=password
pass_filter = (&(objectClass=posixAccount)(objectClass=CourierMailAccount)(uid=%u))
iterate_attrs = mail=user
iterate_filter = (&(objectClass=posixAccount)(objectClass=CourierMailAccount))
default_pass_scheme = PLAIN

LDIF для этого тестового пользователя:

# todd.todd.com, users, dev.ivenue.net
dn: uid=todd.todd.com,ou=users,dc=dev,dc=ivenue,dc=net
gidNumber: 1000
uidNumber: 1101
shadowMax: 99999
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
objectClass: account
objectClass: CourierMailAccount
uid: todd@todd.com
uid: todd.todd.com
mail: todd@todd.com
gecos:: IA==
shadowLastChange: 11740
cn:: IA==
homeDirectory: /netapp1/mail/maildirs/t/o/d/todd.todd.com
description: customerNumber->46791
shadowWarning: 7
quota: 943718400S
loginShell: /bin/sh

Добавлено 7 февраля: Показана конфигурация квоты для maildir:

# doveconf -a | egrep "mail_loca|quota"
lmtp_rcpt_check_quota = no
mail_location = 
mail_plugins = " quota"
  quota = maildir:User quota
quota_full_tempfail = no
  mail_plugins = " quota imap_quota"