Тема: Ошибка при doveadm -Dv purge (Прочитано 12297 раз)
Почтовый сервер (postfix+dovecot) авторизуется через 389-Directory Server. Учеток более 3500.
Выполнение такой команды:
doveadm -Dv purge -A > doveadm.debug
после обработки некоторого количества учеток, заканчивается ошибкой.
doveadm(test@primer.ru): Debug: acl: owner = 0
doveadm(test@primer.ru): Debug: acl vfile: Global ACL directory: (none)
doveadm(test@primer.ru): Debug: acl vfile: file /var/spool/dovecot/mailboxes/primer.ru/test/mailboxes/dovecot-acl not found
doveadm: Error: Failed to iterate through some users
Файл doveadm.debug содержит следующее:
10 / 2000
20 / 2000
30 / 2000
…
1950 / 2000
1960 / 2000
1970 / 2000
1980 / 2000
1990 / 2000
2000 / 2000
Где искать причину? Это какое-то ограничение в 2000 учеток? Или ошибки в директори сервере?
Записан
Здравствуйте! Ошибка, вероятнее всего, в ограничениях на количество возвращаемых записей в ответ на поисковый запрос. Как я понял из беглого гугления, 2000 — это как раз значение по умолчанию для sizelimit в 389-ds. Так как сам не являюсь пользователем этого сервера каталогов, могу только посоветовать посмотреть здесь и здесь.
Егор
Записан
Спасибо за ответ!
Удалось решить проблему самостоятельно следующим образом:
на директори сервере в свойствах ветки config заменила значение параметра nsslapd-sizelimit с 2000 на 4000
все учетки обработались и папки с почтой пожались даже больше, чем надеялась
может быть кому-нибудь тоже поможет …
Записан
Reply or subscribe to this bug.
Toggle useless messages
Report forwarded
to debian-bugs-dist@lists.debian.org, Dovecot Maintainers <jaldhar-dovecot@debian.org>
:
Bug#699121
; Package dovecot-core
.
(Sun, 27 Jan 2013 20:24:07 GMT) (full text, mbox, link).
Acknowledgement sent
to Joel Lopes Da Silva <joel@lopes-da-silva.com>
:
New Bug report received and forwarded. Copy sent to Dovecot Maintainers <jaldhar-dovecot@debian.org>
.
(Sun, 27 Jan 2013 20:24:07 GMT) (full text, mbox, link).
Message #5 received at submit@bugs.debian.org (full text, mbox, reply):
Package: dovecot-core Version: 1:2.1.7-6 Severity: normal Problem description ------------------- I was trying to setup dovecot SASL authentication for my postfix server, using a postgresql database as the back end for authentication. I was able to get this to work and tested it using the following technique: http://qmail.jms1.net/test-auth.shtml However, part of the SQL configuration of dovecot is defining the iterate_query, and I could not get that to work. I have a valid SQL query, and I'm using valid credentials for the database, but I get the following error every time: # doveadm fetch -A user ALL doveadm(root): Error: userdb list: Disconnected unexpectedly doveadm: Error: Failed to iterate through some users zsh: exit 75 doveadm fetch -A user ALL After enabling debug logs in both dovecot (cf. output of doveconf -n below) and postgresql, here's what I see in /var/log/syslog when I issue that command: Jan 27 11:47:18 orange dovecot: auth: Debug: Loading modules from directory: /usr/lib/dovecot/modules/auth Jan 27 11:47:18 orange dovecot: auth: Debug: Module loaded: /usr/lib/dovecot/modules/auth/libdriver_pgsql.so Jan 27 11:47:18 orange dovecot: auth: Error: userdb connection: Failed to get peer's credentials Jan 27 11:47:18 orange postgres[3177]: [2-1] 2013-01-27 11:47:18 PST LOG: 00000: connection received: host=::1 port=35751 Jan 27 11:47:18 orange postgres[3177]: [2-2] 2013-01-27 11:47:18 PST LOCATION: BackendInitialize, postmaster.c:3474 Jan 27 11:47:18 orange postgres[3177]: [3-1] 2013-01-27 11:47:18 PST LOG: 00000: connection authorized: user=dovecot database=mail Jan 27 11:47:18 orange postgres[3177]: [3-2] 2013-01-27 11:47:18 PST LOCATION: PerformAuthentication, postinit.c:230 Jan 27 11:47:18 orange dovecot: auth: pgsql(localhost): Connected to database mail Personal research ----------------- I did some digging around the only useful log: userdb connection: Failed to get peer's credentials I found that it's generated by the following piece of code: 691 if (net_getunixcred(conn->fd, &cred) < 0) { 692 i_error("userdb connection: Failed to get peer's credentials"); 693 return -1; 694 } in auth-master-connection.c's auth_master_connection_set_permissions function. (cf. http://fossies.org/dox/dovecot-2.1.13/auth-master-connection_8c_source.html) So I looked at net_getunixcred and I found that my version of dovecot-core could not possibly be running the following code: 697 #if defined(HAVE_GETPEEREID) 698 /* OSX 10.4+, FreeBSD 4.6+, OpenBSD 3.0+, NetBSD 5.0+ */ 699 if (getpeereid(fd, &cred_r->uid, &cred_r->gid) < 0) { 700 i_error("getpeereid() failed: %m"); 701 return -1; 702 } 703 return 0; otherwise I would have seen this log like I did the other: "getpeereid() failed: %m" Similarly, we cannot possibly be running the Linux branch starting with: 704 #elif defined(SO_PEERCRED) 705 /* Linux */ So we must be going through: 716 #elif defined(HAVE_GETPEERUCRED) 717 /* Solaris */ 718 ucred_t *ucred = NULL; 719 720 if (getpeerucred(fd, &ucred) < 0) { 721 i_error("getpeerucred() failed: %m"); 722 return -1; 723 } 724 cred_r->uid = ucred_geteuid(ucred); 725 cred_r->gid = ucred_getrgid(ucred); 726 ucred_free(ucred); 727 728 if (cred_r->uid == (uid_t)-1 || 729 cred_r->gid == (gid_t)-1) { 730 errno = EINVAL; 731 return -1; 732 } 733 return 0; 734 #else 735 errno = EINVAL; 736 return -1; 737 #endif (cf. http://fossies.org/dox/dovecot-2.1.13/network_8c_source.html#l00695) Looking at the comment, I'd easily speculate that we're probably not even running the Solaris branch, so I suspect dovecot-core is being built for kfreebsd-amd64 with neither of the following definitions: HAVE_GETPEEREID SO_PEERCRED HAVE_GETPEERUCRED If I am right, then there's no chance this could ever work on this architecture; in that case, fixing the bug might be a matter of making sure one of these libraries/APIs is used for compiling dovecot-core. Additional debugging information -------------------------------- Here's the content of my /etc/dovecot/dovecot-sql.conf.ext with my postgresql user password redacted: driver = pgsql connect = host=localhost dbname=mail user=dovecot password=REDACTED default_pass_scheme = SHA512-CRYPT password_query = SELECT address AS user, password FROM mailboxes INNER JOIN domains ON domains.domain = '%L{domain}' AND domains.active = true AND domains.mailboxes = true WHERE address = '%L{user}' AND mailboxes.active = true user_query = SELECT concat_ws('/', '%d', '%u', '') AS home, 114 AS uid, 114 AS gid FROM mailboxes INNER JOIN domains ON domains.domain = '%d' AND domains.active = true AND domains.mailboxes = true WHERE address = '%s' AND mailboxes.active = true iterate_query = SELECT address AS user FROM mailboxes INNER JOIN domains ON domain = split_part(address, '@', 2) AND domains.active = true AND domains.mailboxes = true WHERE mailboxes.active = true Here's my postgresql database model: CREATE TABLE domains ( domain varchar(255) NOT NULL, aliases boolean NOT NULL DEFAULT true, mailboxes boolean NOT NULL DEFAULT false, maxquota bigint NOT NULL DEFAULT 0, active boolean NOT NULL DEFAULT true, created timestamptz NOT NULL DEFAULT current_timestamp, modified timestamptz NOT NULL DEFAULT current_timestamp, PRIMARY KEY (domain) ); CREATE TABLE aliases ( source varchar(255) NOT NULL, destination text NOT NULL, active boolean NOT NULL DEFAULT true, created timestamptz NOT NULL DEFAULT current_timestamp, modified timestamptz NOT NULL DEFAULT current_timestamp, PRIMARY KEY (source) ); CREATE TABLE mailboxes ( address varchar(255) NOT NULL, password varchar(255) NOT NULL, quota bigint NOT NULL DEFAULT 0, active boolean NOT NULL DEFAULT true, created timestamptz NOT NULL DEFAULT current_timestamp, modified timestamptz NOT NULL DEFAULT current_timestamp, PRIMARY KEY (address) ); And here are the permissions I granted to the dovecot postgresql user: GRANT CONNECT ON DATABASE mail TO dovecot; GRANT SELECT ON TABLE domains TO dovecot; GRANT SELECT ON TABLE aliases TO dovecot; GRANT SELECT ON TABLE mailboxes TO dovecot; Here's what I get when running that iterate_query in the psql query interpretor (domains redacted): mail=# SELECT address AS user FROM mailboxes INNER JOIN domains ON domain = split_part(address, '@', 2) AND domains.active = true AND domains.mailboxes = true WHERE mailboxes.active = true; user -------------------- addr-1@REDACTED.com addr-3@REDACTED.com (2 rows) I don't think it's very important for this bug report, but for your information, 114 refers to the uid and gid of my virtual_mail unix account and group: # grep 114 /etc/passwd /etc/shadow /etc/group /etc/passwd:virtual_mail:x:114:114:Virtual mail administrator,,,:/var/mail/virtual:/bin/false /etc/group:virtual_mail:x:114: Please let me know if you need any additional information. -- Package-specific info: dovecot configuration --------------------- # 2.1.7: /etc/dovecot/dovecot.conf # OS: GNU/kFreeBSD 9.0-2-amd64 x86_64 auth_debug = yes auth_debug_passwords = yes auth_mechanisms = plain login auth_verbose = yes auth_verbose_passwords = plain mail_debug = yes mail_location = maildir:%{home}/mail 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-sql.conf.ext driver = sql } service auth { unix_listener /var/spool/postfix/private/auth { group = postfix mode = 0660 user = postfix } } ssl = no ssl_cert = </etc/dovecot/dovecot.pem ssl_key = </etc/dovecot/private/dovecot.pem userdb { args = /etc/dovecot/dovecot-sql.conf.ext driver = sql } verbose_ssl = yes -- System Information: Debian Release: 7.0 APT prefers testing APT policy: (500, 'testing') Architecture: kfreebsd-amd64 (x86_64) Kernel: kFreeBSD 9.0-2-amd64 Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Versions of packages dovecot-core depends on: ii adduser 3.113+nmu3 ii libbz2-1.0 1.0.6-4 ii libc0.1 2.13-37 ii libpam-runtime 1.1.3-7.1 ii libpam0g 1.1.3-7.1 ii libssl1.0.0 1.0.1c-4 ii openssl 1.0.1c-4 ii ucf 3.0025+nmu3 ii zlib1g 1:1.2.7.dfsg-13 dovecot-core recommends no packages. Versions of packages dovecot-core suggests: pn dovecot-gssapi <none> pn dovecot-imapd <none> pn dovecot-ldap <none> pn dovecot-lmtpd <none> pn dovecot-managesieved <none> pn dovecot-mysql <none> ii dovecot-pgsql 1:2.1.7-6 pn dovecot-pop3d <none> pn dovecot-sieve <none> pn dovecot-solr <none> pn dovecot-sqlite <none> ii ntp 1:4.2.6.p5+dfsg-2 Versions of packages dovecot-core is related to: ii dovecot-core [dovecot-common] 1:2.1.7-6 pn dovecot-dbg <none> pn dovecot-dev <none> pn dovecot-gssapi <none> pn dovecot-imapd <none> pn dovecot-ldap <none> pn dovecot-lmtpd <none> pn dovecot-managesieved <none> pn dovecot-mysql <none> ii dovecot-pgsql 1:2.1.7-6 pn dovecot-pop3d <none> pn dovecot-sieve <none> pn dovecot-sqlite <none> -- no debconf information
Information forwarded
to debian-bugs-dist@lists.debian.org, Dovecot Maintainers <jaldhar-dovecot@debian.org>
:
Bug#699121
; Package dovecot-core
.
(Tue, 19 Feb 2013 08:48:05 GMT) (full text, mbox, link).
Acknowledgement sent
to Timo Sirainen <tss@iki.fi>
:
Extra info received and forwarded to list. Copy sent to Dovecot Maintainers <jaldhar-dovecot@debian.org>
.
(Tue, 19 Feb 2013 08:48:05 GMT) (full text, mbox, link).
Message #10 received at 699121@bugs.debian.org (full text, mbox, reply):
On Sun, 2013-01-27 at 12:21 -0800, Joel Lopes Da Silva wrote: > # doveadm fetch -A user ALL > doveadm(root): Error: userdb list: Disconnected unexpectedly > doveadm: Error: Failed to iterate through some users > zsh: exit 75 doveadm fetch -A user ALL .. > Jan 27 11:47:18 orange dovecot: auth: Error: userdb connection: Failed to get peer's credentials As you noticed, apparently getsockopt(SO_PEERCRED) doesn't work with kFreeBSD. You can anyway work around the problem by giving everyone access to the userdb socket: service auth { unix_listener userdb { mode = 0777 } }
Information forwarded
to debian-bugs-dist@lists.debian.org, Dovecot Maintainers <jaldhar-dovecot@debian.org>
:
Bug#699121
; Package dovecot-core
.
(Wed, 13 Mar 2013 07:03:03 GMT) (full text, mbox, link).
Acknowledgement sent
to Joel Lopes Da Silva <joel@lopes-da-silva.com>
:
Extra info received and forwarded to list. Copy sent to Dovecot Maintainers <jaldhar-dovecot@debian.org>
.
(Wed, 13 Mar 2013 07:03:03 GMT) (full text, mbox, link).
Message #15 received at 699121@bugs.debian.org (full text, mbox, reply):
On Feb 19, 2013, at 12:19 AM, Timo Sirainen <tss@iki.fi> wrote: > On Sun, 2013-01-27 at 12:21 -0800, Joel Lopes Da Silva wrote: > >> # doveadm fetch -A user ALL >> doveadm(root): Error: userdb list: Disconnected unexpectedly >> doveadm: Error: Failed to iterate through some users >> zsh: exit 75 doveadm fetch -A user ALL > .. >> Jan 27 11:47:18 orange dovecot: auth: Error: userdb connection: Failed to get peer's credentials > > As you noticed, apparently getsockopt(SO_PEERCRED) doesn't work with > kFreeBSD. You can anyway work around the problem by giving everyone > access to the userdb socket: > > service auth { > unix_listener userdb { > mode = 0777 > } > } This workaround works for me. Thanks Timo. Do you think there might be an equivalent API we could use on kFreeBSD to accomplish the same behavior as the one available on Linux? -- Joel Lopes Da Silva
Information forwarded
to debian-bugs-dist@lists.debian.org, Dovecot Maintainers <jaldhar-dovecot@debian.org>
:
Bug#699121
; Package dovecot-core
.
(Wed, 20 Mar 2013 19:12:04 GMT) (full text, mbox, link).
Acknowledgement sent
to Timo Sirainen <tss@iki.fi>
:
Extra info received and forwarded to list. Copy sent to Dovecot Maintainers <jaldhar-dovecot@debian.org>
.
(Wed, 20 Mar 2013 19:12:04 GMT) (full text, mbox, link).
Message #20 received at 699121@bugs.debian.org (full text, mbox, reply):
On Wed, 2013-03-13 at 00:00 -0700, Joel Lopes Da Silva wrote: > > As you noticed, apparently getsockopt(SO_PEERCRED) doesn't work with > > kFreeBSD. You can anyway work around the problem by giving everyone > > access to the userdb socket: > > > > service auth { > > unix_listener userdb { > > mode = 0777 > > } > > } > > This workaround works for me. Thanks Timo. > > Do you think there might be an equivalent API we could use on kFreeBSD to accomplish the same behavior as the one available on Linux? src/lib/net.c net_getunixcred() has multiple ways to do it for different OSes. You could try if one of them works.
Send a report that this bug log contains spam.
Debian bug tracking system administrator <owner@bugs.debian.org>.
Last modified:
Thu Feb 9 10:24:04 2023;
Machine Name:
buxtehude
Debian Bug tracking system
Debbugs is free software and licensed under the terms of the GNU
Public License version 2. The current version can be obtained
from https://bugs.debian.org/debbugs-source/.
Copyright © 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson,
2005-2017 Don Armstrong, and many other contributors.
I’d like to use doveadm to expunge (and more). When I run
doveadm search -u 'some@email.com' mailbox Trash savedbefore 90d
it works. But when I use -A, it doesn’t.
doveadm search -A mailbox Trash savedbefore 90d
The result is (with debug option)
doveadm(root): Error: userdb list: Request timed out
doveadm(root): Debug: expire: Couldn't optimize search query: mailbox Trash not in expire database
doveadm: Error: Failed to iterate through some users
my dovecot.conf interesting settings:
first_valid_gid = 107
first_valid_uid = 107
last_valid_gid = 107
last_valid_uid = 107
protocols = imap
service auth {
unix_listener /var/spool/postfix/private/auth {
group = postfix
mode = 0660
user = postfix
}
unix_listener auth-master {
group = mail
mode = 0666
user = vmail
}
user = nobody
}
protocol imap {
mail_plugins = $mail_plugins imap_acl
}
protocol lda {
auth_socket_path = /var/run/dovecot/auth-master
hostname = brzezina.com.pl
mail_plugin_dir = /usr/lib/dovecot/modules/
mail_plugins = sieve
postmaster_address = postmaster@brzezina.com.pl
sendmail_path = /usr/sbin/sendmail
}
mail_plugins = $mail_plugins expire
plugin {
expire = Trash
expire = Trash/*
expire = Spam
expire_dict = proxy::expire
}
My userdb is in postgresql, and dovecot-sql.conf.ext has iterate_query uncommented:
# Query to get a list of all usernames.
iterate_query = SELECT address AS user FROM users
I suppose, that because I run it from root, it tries to find system userdb but it should use sql userdb. But don’t know how to force it. I tried to use -S but don’t know what.