LINUX.ORG.RU
решено ФорумAdmin

doveadm не получает список всех пользователей

 , ,


0

1

Есть почтовый сервер на postfix+dovecot с авторизацией через Active Directory. Всё работает, почта ходит, народ доволен. Но есть задача раз в месяц чистить спам на всех ящиках. Проблема в том, что doveadm с параметром -A не возвращает ни одного ящика:

root ~# doveadm search -A all
root ~#
При этом для одного указанного пользователя всё работает:
root ~# doveadm search -u test all
de613e0e9785ea5175170000aa50d881 3218
de613e0e9785ea5175170000aa50d881 3219
...

Запрос через ldapsearch, как положено, вываливает кучу объектов. Т.е. лдап запрос и фильтр корректны.

ldapsearch -x -H ldap://dc.domain.net:389 -D 'ldap_postfix@domain.net' -w 'password' -b 'ou=domain,dc=domain,dc=net' -s sub '(&(objectCategory=person)(proxyAddresses=*))'

конфиг для userdb через ldap

root /etc/dovecot# cat dovecot-ldap_user.conf.ext
uris = ldap://dc.doamin.net
dn = ldap_postfix@doamin.net
dnpass = password
auth_bind = yes
auth_bind_userdn = %n@doamin.net
ldap_version = 3
base = ou=doamin,dc=doamin,dc=net
scope = subtree
user_attrs =
user_filter = (&(objectCategory=person)(sAMAccountName=%n))
pass_filter = (&(objectCategory=person)(sAMAccountName=%n))
iterate_attrs =
iterate_filter = (objectCategory=person)

Пробовал менять iterate_filter = (objectCategory=*) - никакого результата. В логах никаких ошибок.

Конечно можно написать скрипт который в цикле перебирает все ящики, но это же дикий костыль.


Чувак, у тебя исходный фильтр:

(&(objectCategory=person)(sAMAccountName=%n))

А проверяешь ты

(&(objectCategory=person)(proxyAddresses=*))

Тебе в голову вообще не приходит, что это могут быть разные вещи?

zgen ★★★★★ ()
Ответ на: комментарий от shtain

Тогда иди читай документацию сначала, а уже потом приходи с вопросами.

root ~# doveadm search -A all


http://wiki2.dovecot.org/Tools/Doveadm/Search

If the -A option is present, the command will be performed for all users.

Где тут вообще написано, что должен выводиться список пользователей?

zgen ★★★★★ ()
Последнее исправление: zgen (всего исправлений: 1 )
Ответ на: комментарий от zgen

И не должен выводиться.

Для проверки я прошу его вывести список всех писем у всех пользователей: search -A all

А он не показывает ни одного. Я предположил, что doveadm не получает список пользователей. Можно где-то посмотреть какой запрос делает doveadm к ldap-серверу и что получает в ответ? Даже в debug-логах этого нет.

shtain ()
Ответ на: комментарий от shtain

Ладно, накостылял пока на баше. Может когда-нибудь найдётся более элегантное решение.

#!/bin/sh
for user in `/bin/ls --quoting-style=shell-always /home/vmail/Maildir`; do
    /usr/bin/doveadm expunge -u $user MAILBOX Spam SAVEDBEFORE 30d
done

shtain ()
Ответ на: комментарий от shtain

Тебе написали уже решение с цитатой из документации:
# Attributes and filter to get a list of all users
#iterate_attrs = uid=user
#iterate_filter = (objectClass=posixAccount)
Запрос заданный тут вернет список (%u) пользователей, по которому уже будет отрабатывать именно user_filter

zgen ★★★★★ ()
Последнее исправление: zgen (всего исправлений: 1 )
Ответ на: комментарий от zgen

О! Спасибо, пнули в нужную сторону!

Изменил одну строчку в конфиге и всё заработало:

iterate_attrs  = =user=%{ldap:sAMAccountName}

shtain ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.