[Dovecot] Expire plugin: wrong mailbox separators in database?
Hi all,
I'm experimenting with the expire plugin and seem have run into a small problem. I am using Dovecot 1.2.4 on a test server. The config is taken mostly verbatim from the expire plugin wiki page [1], using MySQL as a database. See below for detailed output.
Namespace "private" has "/" configured as mailbox separator:
namespace private { separator = / prefix = inbox = yes }
The "expire =" section from dovecot.conf thus looks like this:
plugin { expire = Trash 7 INBOX/Spam 8 INBOX/Spam/To-Discard 3 ... }
Three mailboxes/folders are kept track of: Trash, INBOX/Spam and INBOX/Spam/Spam-To-Discard (this one holds messages that scored high enough to very unlikely be legitimate and should be deleted soon).
But when a message is put into one of these folders the mailbox attribute of the expires table uses "." as mailbox separator:
mysql> select * from expires; +-----------------+----------------------------+--------------+ | username | mailbox | expire_stamp | +-----------------+----------------------------+--------------+ | foo@example.org | INBOX.Spam.Spam-To-Discard | 1253114526 | | foo@example.org | INBOX.Spam | 1253114528 | +-----------------+----------------------------+--------------+
Consequently, expire-tool --test seems to choke on this:
# dovecot --exec-mail ext /usr/local/libexec/dovecot/expire-tool --test
Info: foo@example.org/INBOX.Spam.Spam-To-Discard:
mailbox 'INBOX.Spam.Spam-To-Discard' removed from config
Info: foo@example.org/INBOX.Spam: mailbox 'INBOX.Spam'
removed from config
When I manually update the mailbox attribute to use "/" as separator expire-tool seems to work correctly:
# dovecot --exec-mail ext /usr/local/libexec/dovecot/expire-tool --test
Info: foo@example.org/INBOX/Spam/Spam-To-Discard: stop, expire
time in future: Wed Sep 16 17:22:06 2009
Using "." as separator in the "expire =" line doesn't work either: the expires table isn't written to at all when a message is put in one of the specified folders. Presumably because INBOX/Spam is the real mailbox but INBOX.Spam is monitored by the expire plugin and there is no INBOX.Spam to put in messages.
So I believe this is not the expected behaviour? Or am I doing anything wrong? I'd rather not change the separator from "/" to "." in all the namespaces if that can be avoided.
Thanks in advance,
Andreas
dovecot -n:
# 1.2.4: /usr/local/etc/dovecot.conf # OS: Linux 2.6.26-2-686 i686 Debian 5.0.2 log_timestamp: %Y-%m-%d %H:%M:%S protocols: managesieve imap imaps pop3 pop3s listen: 83.65.168.220 127.0.0.1 login_dir: /usr/local/var/run/dovecot/login login_executable(default): /usr/local/libexec/dovecot/imap-login login_executable(imap): /usr/local/libexec/dovecot/imap-login login_executable(pop3): /usr/local/libexec/dovecot/pop3-login login_executable(managesieve): /usr/local/libexec/dovecot/managesieve-login mail_access_groups: mail mail_privileged_group: mail mail_location: maildir:~/Maildir mail_drop_priv_before_exec: yes mail_executable(default): /usr/local/libexec/dovecot/imap mail_executable(imap): /usr/local/libexec/dovecot/imap mail_executable(pop3): /usr/local/libexec/dovecot/pop3 mail_executable(managesieve): /usr/local/libexec/dovecot/managesieve mail_plugins(default): autocreate acl expire mail_plugins(imap): autocreate acl expire mail_plugins(pop3): expire mail_plugins(managesieve): mail_plugin_dir(default): /usr/local/lib/dovecot/imap mail_plugin_dir(imap): /usr/local/lib/dovecot/imap mail_plugin_dir(pop3): /usr/local/lib/dovecot/pop3 mail_plugin_dir(managesieve): /usr/local/lib/dovecot/managesieve namespace: type: public separator: / prefix: Public/ location: maildir:/var/mail/public:CONTROL=~/Maildir/control/public:INDEX=~/Maildir/index/public list: yes namespace: type: private separator: / prefix: Backup/ location: maildir:~/Maildir-backup hidden: yes list: no namespace: type: private separator: / inbox: yes list: yes subscriptions: yes lda: log_path: info_log_path: auth_socket_path: /var/run/dovecot/auth-master postmaster_address: postmaster@mailtest0.rise-s.com mail_plugins: sieve acl expire auth default: mechanisms: plain login passdb: driver: pam passdb: driver: sql args: /etc/dovecot/dovecot-sql.conf userdb: driver: passwd userdb: driver: static args: uid=vmail gid=vmail home=/var/vmail/%Ld/%Ln allow_all_users=yes socket: type: listen client: path: /var/spool/postfix/private/auth mode: 432 user: postfix group: postfix master: path: /var/run/dovecot/auth-master mode: 384 user: vmail plugin: expire: Trash 7 INBOX/Spam 5 INBOX/Spam/Spam-To-Discard 3 expire_dict: proxy::expire sieve: ~/.dovecot.sieve sieve_dir: ~/sieve sieve_global_path: /etc/dovecot/sieve/default.sieve sieve_global_dir: /etc/dovecot/sieve/global/ sieve_before: /etc/dovecot/sieve/before/ autocreate: Trash autocreate2: Drafts autocreate3: Sent autocreate4: INBOX/Spam autocreate5: INBOX/Spam/Spam-To-Discard autosubscribe: Trash autosubscribe2: Drafts autosubscribe3: Sent autosubscribe4: INBOX/Spam autosubscribe5: INBOX/Spam/Spam-To-Discard acl: vfile:/etc/dovecot/acl dict: expire: mysql:/etc/dovecot/dovecot-dict-expire.conf
/etc/dovecot/dovecot-dict-expire.conf:
connect = host=127.0.0.1 dbname=mailserver user=mailuser password=xxx
map { pattern = shared/expire/$user/$mailbox table = expires value_field = expire_stamp
fields { username = $user mailbox = $mailbox } }
The expires table:
CREATE TABLE expires ( username varchar(100) not null, mailbox varchar(255) not null, expire_stamp integer not null, primary key (username, mailbox) );
[1] http://wiki.dovecot.org/Plugins/Expire
Andreas Ntaflos Vienna, Austria
GPG Fingerprint: 6234 2E8E 5C81 C6CB E5EC 7E65 397C E2A8 090C A9B4
Hate to bump this, but is there nobody who uses the expire plugin and can confirm my observations?
I'd love to use the expire plugin to delete old messages filed in spam folders but as it is now I can't get it to work with the wrong mailbox separators in the table entries.
Andreas
Andreas Ntaflos
GPG Fingerprint: 6234 2E8E 5C81 C6CB E5EC 7E65 397C E2A8 090C A9B4
Andreas Ntaflos wrote:
Hate to bump this, but is there nobody who uses the expire plugin and can confirm my observations?
I'd love to use the expire plugin to delete old messages filed in spam folders but as it is now I can't get it to work with the wrong mailbox separators in the table entries.
Andreas
Your observations look reasonable to me. Looks like the expire plugin needs to be fixed so that other separator characters can be used.
-- -Eric 'shubes'
participants (3)
-
Andreas Ntaflos
-
Eric Shubert
-
Timo Sirainen