[Dovecot] 2.0 beta4 latest hg: segfault with virtual plugin

e-frog e-frog at gmx.de
Sat Jun 12 11:04:37 EEST 2010


On 09.05.2010 16:40, wrote e-frog:
> On 16.04.2010 19:23, wrote e-frog:
>> Hello Timo,
>>
>> latest 2.0 hg version (changeset a6b050cc4a9a) segfaults when selecting
>> a virtual mailbox.
>>
> 
> The attached patch fixes this for me.

Hello Timo,

This crash still happens in beta6. Actually it crashes on 'getquotaroot
<virtualmailbox>'. The patch posted earlier still works but there is
probably a more elegant way to fix it ...

$ telnet localhost 143
Trying ::1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE
STARTTLS AUTH=PLAIN] Dovecot ready.
a login test pass
a OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE
SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT
IDLE CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE
QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS QUOTA]
Logged in
b select "virtual/unread"
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)]
Flags permitted.
* 20 EXISTS
* 1 RECENT
* OK [UNSEEN 1] First unseen.
* OK [UIDVALIDITY 1275936581] UIDs valid
* OK [UIDNEXT 32] Predicted next UID
* OK [HIGHESTMODSEQ 1] Highest
b OK [READ-WRITE] Select completed.
c getquotaroot "virtual/unread"
Connection closed by foreign host.


Here is a fresh backtrace for hg 7a02b84ad7f5:

#0  0xb74f6a56 in array_get_modifiable_i (array=0x8f77c44,
count_r=0xbfd6cb64) at ../../../src/lib/array.h:198
No locals.
#1  0xb74f7ac1 in virtual_config_free (mbox=0x8f77af0) at
virtual-config.c:403
        bboxes = 0x8f77ce0
        i = 3218525064
        count = 3077681140
#2  0xb74fa033 in virtual_mailbox_free (box=0x8f77af0) at
virtual-storage.c:327
        mbox = 0x8f77af0
#3  0xb7505947 in fts_mailbox_free (box=0x8f77af0) at fts-storage.c:73
        fbox = 0x8f780d0
#4  0xb773ff74 in mailbox_free (_box=0xbfd6cc40) at mail-storage.c:638
        box = 0x8f77af0
#5  0xb76a33b7 in cmd_getquotaroot (cmd=0x8c8cea0) at
imap-quota-plugin.c:116
        client = 0x8c8ca98
        quser = 0x8c876a0
        ns = 0x8c83e20
        box = 0x0
        iter = 0x0
        root = 0x0
        mailbox = 0x8c8f758 "virtual/unread"
        storage_name = 0x8c8f760 "unread"
        name = 0x8c8ac00 "user"
        quotaroot_reply = 0x8c632d8
        quota_reply = 0x8c63388
#6  0x0805849d in client_command_input (cmd=0x8c8cea0) at imap-client.c:646
        client = 0x8c8ca98
        command = 0x805918d
        __FUNCTION__ = "client_command_input"
#7  0x080586d0 in client_command_input (cmd=0x8c8cea0) at imap-client.c:696
        client = 0x8c8ca98
        command = 0x8c6be6c
        __FUNCTION__ = "client_command_input"
#8  0x080587d3 in client_handle_next_command (client=0x8c8ca98,
remove_io_r=0xbfd6cd3e) at imap-client.c:737
        size = 33
#9  0x08058851 in client_handle_input (client=0x8c8ca98) at
imap-client.c:749
        _data_stack_cur_id = 3
        ret = 8
        remove_io = false
        handled_commands = false
        __FUNCTION__ = "client_handle_input"
#10 0x080589a8 in client_input (client=0x8c8ca98) at imap-client.c:788
        cmd = 0x0
        output = 0x8c863d4
        bytes = 33
        __FUNCTION__ = "client_input"
#11 0xb76f0d01 in io_loop_handler_run (ioloop=0x8c6b368) at
ioloop-epoll.c:212
        ctx = 0x8c6b488
        events = 0x8c6b4c8
        event = 0x8c6b4c8
        list = 0x8c83e78
        io = 0x8c86430
        tv = {tv_sec = 1799, tv_usec = 998763}
        events_count = 6
        t_id = 2
        msecs = 1799999
        ret = 1
        i = 0
        j = 0
        call = true
#12 0xb76efa2e in io_loop_run (ioloop=0x8c6b368) at ioloop.c:350
No locals.
#13 0xb76d9994 in master_service_run (service=0x8c6b2b8,
callback=0x806343e <client_connected>) at master-service.c:480
No locals.
#14 0x08063687 in main (argc=2, argv=0x8c6b1c0) at main.c:359
        set_roots = {0x80667a0, 0x0}
        service_flags = MASTER_SERVICE_FLAG_KEEP_CONFIG_OPEN
        storage_service_flags = MAIL_STORAGE_SERVICE_FLAG_DISALLOW_ROOT
        postlogin_socket_path = 0x8c63078 "/var/run/dovecot/imap-postlogin"
        username = 0x0
        c = -1


... the content of the dovecot-virtual:

$ cat /etc/dovecot/virtual/unread/dovecot-virtual
*
   unseen


... and finally doveconf -n:

$ doveconf -n
# 2.0.beta6 (7a02b84ad7f5): /etc/dovecot/dovecot.conf
# OS: Linux 2.6.32-22-generic-pae i686 Ubuntu 10.04 LTS
auth_username_format = %Ln
deliver_log_format = msgid=%m: from=%f: %$
dict {
  dictionary = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
}
lda_mailbox_autocreate = yes
lda_mailbox_autosubscribe = yes
mail_debug = yes
mail_plugins = quota virtual
namespace {
  hidden = no
  inbox = yes
  list = yes
  location =
  prefix =
  separator = /
  subscriptions = yes
  type = private
}
namespace {
  location = virtual:/etc/dovecot/virtual:INDEX=~/.maildir/control
  prefix = virtual/
  separator = /
  subscriptions = no
  type = private
}
passdb {
  args = /etc/dovecot/dovecot-sql.conf.ext
  driver = sql
}
plugin {
  fts = squat
  fts_squat = partial=4 full=10
  quota = dict:user::proxy::dictionary
  sieve = ~/.dovecot.sieve
  sieve_dir = ~/.sieve
  sieve_global_dir = /etc/dovecot/sieve-global/
}
postmaster_address = postmaster at ubuntu-test
protocols = imap lmtp managesieve
quota_full_tempfail = yes
sendmail_path = /usr/lib/sendmail
service auth {
  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0666
    user = postfix
  }
  unix_listener auth-userdb {
    mode = 0666
  }
}
service dict {
  unix_listener dict {
    mode = 0666
  }
}
service imap-login {
  inet_listener imaps {
    port = 0
  }
}
service imap-postlogin {
  executable = script-login rawlog -t /opt/bin/imap_wrapper.sh
  unix_listener imap-postlogin {
    mode = 0660
  }
}
service imap {
  executable = imap imap-postlogin
}
service lmtp {
  unix_listener /var/spool/postfix/dovecot-lmtp {
    group = postfix
    mode = 0660
    user = postfix
  }
}
ssl = required
ssl_cert = </etc/ssl/certs/dovecot.pem
ssl_key = </etc/ssl/private/dovecot.pem
userdb {
  args = /etc/dovecot/dovecot-sql.conf.ext
  driver = sql
}
verbose_proctitle = yes
protocol lda {
  info_log_path = /var/log/deliver.log
  log_path = /var/log/deliver.log
  mail_plugins = $mail_plugins sieve
}
protocol imap {
  mail_plugins = $mail_plugins fts fts_squat imap_quota
}
protocol lmtp {
  mail_plugins = $mail_plugins sieve
}
protocol managesieve {
  mail_plugins = virtual
}

Thanks,
e-frog


More information about the dovecot mailing list