subscriber at viliar.net.ru
2010-Dec-24 11:16 UTC
[Dovecot] doveadm quota get -u segmentation fault
Hello! I'm trying move to dovecot2 (centos 5.5, dovecot 2.0.8, dovecot compiled/packaged via edited dovecot2.spec from fedora git). Almost all fine, I can login via imap/pop3 and work with mail. I get segfault error with "doveadm quota get -u user" Here backtrace and other info: # gdb `which doveadm` core.5202 GNU gdb (GDB) Red Hat Enterprise Linux (7.0.1-23.el5_5.2) Copyright (C) 2009 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "i386-redhat-linux-gnu". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... Reading symbols from /usr/bin/doveadm...Reading symbols from /usr/lib/debug/usr/bin/doveadm.debug...done. done. Reading symbols from /usr/lib/dovecot/libdovecot-storage.so.0...Reading symbols from /usr/lib/debug/usr/lib/dovecot/libdovecot-storage.so.0.0.0.debug...done. done. Loaded symbols for /usr/lib/dovecot/libdovecot-storage.so.0 Reading symbols from /lib/libcrypt.so.1...(no debugging symbols found)...done. Loaded symbols for /lib/libcrypt.so.1 Reading symbols from /lib/libpam.so.0...(no debugging symbols found)...done. Loaded symbols for /lib/libpam.so.0 Reading symbols from /usr/lib/dovecot/libdovecot.so.0...Reading symbols from /usr/lib/debug/usr/lib/dovecot/libdovecot.so.0.0.0.debug...done. done. Loaded symbols for /usr/lib/dovecot/libdovecot.so.0 Reading symbols from /lib/libdl.so.2...(no debugging symbols found)...done. Loaded symbols for /lib/libdl.so.2 Reading symbols from /lib/librt.so.1...(no debugging symbols found)...done. Loaded symbols for /lib/librt.so.1 Reading symbols from /lib/libc.so.6...(no debugging symbols found)...done. Loaded symbols for /lib/libc.so.6 Reading symbols from /lib/libaudit.so.0...(no debugging symbols found)...done. Loaded symbols for /lib/libaudit.so.0 Reading symbols from /lib/ld-linux.so.2...(no debugging symbols found)...done. Loaded symbols for /lib/ld-linux.so.2 Reading symbols from /lib/libpthread.so.0...(no debugging symbols found)...done. Loaded symbols for /lib/libpthread.so.0 Reading symbols from /usr/lib/dovecot/lib10_quota_plugin.so...Reading symbols from /usr/lib/debug/usr/lib/dovecot/lib10_quota_plugin.so.debug...done. done. Loaded symbols for /usr/lib/dovecot/lib10_quota_plugin.so Reading symbols from /usr/lib/dovecot/doveadm/lib10_doveadm_quota_plugin.so...Reading symbols from /usr/lib/debug/usr/lib/dovecot/doveadm/lib10_doveadm_quota_plugin.so.debug...done. done. Loaded symbols for /usr/lib/dovecot/doveadm/lib10_doveadm_quota_plugin.so Core was generated by `doveadm quota get -u xxx at xxx'. Program terminated with signal 11, Segmentation fault. #0 0x00cc2b95 in cmd_quota_get_run (ctx=0x94dd3a8, user=0x94ee098) at doveadm-quota.c:52 52 array_foreach(&quser->quota->roots, root) (gdb) bt full #0 0x00cc2b95 in cmd_quota_get_run (ctx=0x94dd3a8, user=0x94ee098) at doveadm-quota.c:52 root__foreach_end = 0x94cd548 root = 0x94dec90 #1 0x0804f079 in doveadm_mail_next_user (ctx=0x94dd3a8, input=<value optimized out>, error_r=0xbffdf4e8) at doveadm-mail.c:220 service_user = 0x94debe0 error = <value optimized out> ret = 1 #2 0x0804f18c in doveadm_mail_single_user (ctx=0x94dd3a8, argv=0x94d51d4, username=0x94d51ed "xxx at xxx", service_flags=130) at doveadm-mail.c:246 input = {module = 0x0, service = 0x0, username = 0x94d51ed "xxx at xxx", local_ip = {family = 0, u = {ip6 = {in6_u = {u6_addr8 = '\000' <repeats 15 times>, u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, u6_addr32 = {0, 0, 0, 0}}}, ip4 = {s_addr = 0}}}, remote_ip = {family = 0, u = {ip6 {in6_u = { u6_addr8 = '\000' <repeats 15 times>, u6_addr16 = {0, 0, 0, 0, 0, 0, 0, 0}, u6_addr32 = {0, 0, 0, 0}}}, ip4 = {s_addr = 0}}}, userdb_fields = 0x0, no_userdb_lookup = 0} error = <value optimized out> ret = <value optimized out> #3 0x0804f379 in doveadm_mail_cmd (cmd=0x94dc0d0, argc=3, argv=0x94d51d4) at doveadm-mail.c:418 service_flags = <value optimized out> ctx = 0x94dd3a8 getopt_args = 0x94cd2d0 "As:u:" username = 0x94d51ed "xxx at xxx" wildcard_user = 0x0 c = <value optimized out> #4 0x0804f6f8 in doveadm_mail_try_run_multi_word (cmd=0x94dc0d0, cmdname=0xcc2f18 "get", argc=4, argv=0x94d51c4) at doveadm-mail.c:453 No locals. #5 0x0804f7b7 in doveadm_mail_try_run (cmd_name=0x94d51e0 "quota", argc=4, argv=0x94d51c4) at doveadm-mail.c:476 cmd__foreach_end = 0x94dc0e8 cmd = 0x94dc0d0 cmd_name_len = 5 __FUNCTION__ = "doveadm_mail_try_run" #6 0x08053e11 in main (argc=Cannot access memory at address 0x14 ) at doveadm.c:344 cmd_name = 0x94d51e0 "quota" i = 134626935 quick_init = false c = <value optimized out> # 2.0.8: /etc/dovecot/dovecot.conf # OS: Linux 2.6.18-194.17.1.el5.028stab073.1 i686 CentOS release 5.5 (Final) simfs auth_mechanisms = plain login digest-md5 cram-md5 apop auth_socket_path = /var/run/dovecot/auth-userdb first_valid_gid = 5000 listen = * mail_location = maildir:/mail/%d/%n/maildir:INDEX=/mail/%d/%n/indexes mail_plugins = quota managesieve_notify_capability = mailto managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date passdb { args = /etc/dovecot/dovecot-sql.conf.ext driver = sql } plugin { autocreate2 = virus autocreate3 = spam sieve = ~/.dovecot.sieve sieve_dir = ~/sieve } protocols = imap pop3 lmtp sieve sieve service auth-worker { user = root } service auth { unix_listener /var/spool/postfix/private/auth { group = postfix mode = 0660 user = postfix } } service imap-login { inet_listener imap { port = 143 } inet_listener imaps { port = 993 ssl = yes } } service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { group = postfix mode = 0660 user = postfix } } service managesieve-login { inet_listener sieve { port = 4190 } inet_listener sieve_deprecated { port = 2000 } } service pop3-login { inet_listener pop3 { port = 110 } inet_listener pop3s { port = 995 ssl = yes } } ssl_cert = </etc/pki/dovecot/certs/dovecot.pem ssl_key = </etc/pki/dovecot/private/dovecot.pem userdb { driver = prefetch } userdb { args = /etc/dovecot/dovecot-sql.conf.ext driver = sql } verbose_proctitle = yes protocol lmtp { mail_plugins = quota sieve } protocol lda { mail_plugins = quota sieve } protocol imap { mail_max_userip_connections = 10 mail_plugins = quota imap_quota autocreate } protocol sieve { mail_max_userip_connections = 3 } protocol pop3 { mail_max_userip_connections = 3 mail_plugins = quota } # grep -v '^ *\(#.*\)\?$' /etc/dovecot/dovecot-sql.conf.ext driver=sqlite connect = /etc/mailserver/mail.db default_pass_scheme = PLAIN user_query = SELECT '/mail/' || domain || '/' || mail || '/maildir' as home, uid, gid, '*:storage=' || quota || 'B' AS quota_rule FROM users WHERE mail || '@' || domain = '%u' password_query = SELECT mail || '@' || domain as user, password as password, '/mail/' || domain || '/' || mail || '/maildir' as userdb_home, uid as userdb_uid, gid as userdb_gid, 'maildir:storage=' || (quota/1024) as userdb_quota, nice as userdb_nice, hosts as allow_nets FROM users WHERE mail = '%n' and domain = '%d' and access = 'Y' and %Ls = 'Y';
On Fri, 2010-12-24 at 14:16 +0300, subscriber at viliar.net.ru wrote:> I get segfault error with "doveadm quota get -u user"Fixed the crash by having it give error message instead: http://hg.dovecot.org/dovecot-2.0/rev/a293626e09e2 Then fix your config:> plugin {quota = maildir> autocreate2 = virus > autocreate3 = spam > sieve = ~/.dovecot.sieve > sieve_dir = ~/sieve > }> user_query = SELECT '/mail/' || domain || '/' || mail || '/maildir' as > home, uid, gid, '*:storage=' || quota || 'B' AS quota_rule FROM users WHERE > mail || '@' || domain = '%u'This is ok, although that kind of WHERE query can't use SQL indexes. Better to use: WHERE mail='%n' and domain = '%d'> password_query = SELECT mail || '@' || domain as user, password as > password, '/mail/' || domain || '/' || mail || '/maildir' as userdb_home, > uid as userdb_uid, gid as userdb_gid, 'maildir:storage=' || (quota/1024) as > userdb_quota,Remove userdb_quota from here and add a userdb_quota_rule matching user_query's one. I'd also remove home/userdb_home from the above query and just use global settings, also not making home same as mail location (http://wiki2.dovecot.org/VirtualUsers/Home): mail_home = /mail/%d/%n mail_location = maildir:~/maildir:INDEX=~/indexes -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 198 bytes Desc: This is a digitally signed message part URL: <http://dovecot.org/pipermail/dovecot/attachments/20101230/8701ad04/attachment-0002.bin>