Hello, as i've already sent it few times: it works....... but with minor patching (dirty patch bellow)
Keep in mind, that for using this patch to work, you should add
*lazy_expunge_ignore_namespace_not_found* parameter to your configuration. My own configuration below:
plugin { lazy_expunge = .EXPUNGED/ lazy_expunge_ignore_namespace_not_found = TRUE }
Patch:
diff -C3 -d -p -r -xMakefile -x.deps -x.libs -x.lo -x.o ../dovecot/src/plugins/lazy-expunge/lazy-expunge-plugin.c ./src/plugins/lazy-expunge/lazy-expunge-plugin.c *** ../dovecot/src/plugins/lazy-expunge/lazy-expunge-plugin.c
2014-04-15 18:11:56.000000000 +0300 --- ./src/plugins/lazy-expunge/lazy-expunge-plugin.c 2014-06-28 19:05:59.269530965 +0300 *************** struct lazy_expunge_mail_user { *** 34,39 **** --- 34,40 ---- struct mail_namespace *lazy_ns; const char *env; bool copy_only_last_instance;
bool ignore_namespace_notfound;
};
struct lazy_expunge_mailbox_list { *************** lazy_expunge_mail_namespaces_created(str *** 420,428 **** if (luser == NULL) return;
luser->lazy_ns = mail_namespace_find_prefix(namespaces,
luser->env); ! if (luser->lazy_ns == NULL) ! i_fatal("lazy_expunge: Unknown namespace: '%s'", luser->env); mail_namespace_ref(luser->lazy_ns);
/* we don't want to override this namespace's expunge
operation. */ --- 421,447 ---- if (luser == NULL) return;
if (namespaces->user && namespaces->user->mail_debug){
struct mail_namespace *ns;
int envl = strlen(luser->env);
for(ns = namespaces; ns != NULL; ns=ns->next){
i_warning("LAZY_EXPUNGE[%u|%s]: p%u|%s[%u], u(%s;%s)
o(%s;%s)",
envl, luser->env,
ns->prefix_len, ns->prefix, ns->type,
ns->user->username, ns->user->_home,
ns->owner?ns->owner->username:NULL,
ns->owner?ns->owner->_home:NULL
);
}
i_warning("LAZY_EXPUNGE[%u|%s]: _________________________
LIST ENDS __________________________", envl, luser->env);
} luser->lazy_ns = mail_namespace_find_prefix(namespaces,
luser->env); ! if (luser->lazy_ns == NULL){ ! if (luser->ignore_namespace_notfound){ ! i_warning("lazy_expunge: Unknown namespace: '%s'", luser->env); ! return; ! }else ! i_fatal("lazy_expunge: Unknown namespace: '%s'", luser->env); ! } mail_namespace_ref(luser->lazy_ns);
/* we don't want to override this namespace's expunge
operation. */ *************** static void lazy_expunge_mail_user_creat *** 455,460 **** --- 474,481 ---- luser->env = env; luser->copy_only_last_instance = mail_user_plugin_getenv(user, "lazy_expunge_only_last_instance") != NULL;
luser->ignore_namespace_notfound =
mail_user_plugin_getenv(user,
"lazy_expunge_ignore_namespace_not_found") != NULL;
MODULE_CONTEXT_SET(user,
lazy_expunge_mail_user_module, luser); } else if (user->mail_debug) {
2015.04.24 10:59, Paolo Cravero rašė:
Hello.
Before going into deep testing of 2.2.16 (clean install tbd), I would like to know if someone is using succesfully both ACL and Lazy_expunge plugins. Perhaps I had a config error?
Thanks, Paolo
Il 3 marzo 2015 alle 16.36 Paolo Cravero <paolo.cravero@csi.it> ha scritto:
Hello list. Following two previous unanswered requests (http://www.dovecot.org/list/dovecot/2014-August/097449.html and http://www.dovecot.org/list/dovecot/2014-May/096261.html), I fell into the same problem: ACL and lazy_expunge plugins do not work together.
I had lazy_expunge enabled working OK. Then I activated ACL plugin, and gave dovecot.2 visibily over paolo.cravero's Inbox: the IMAP connection fails on server-side. Relevant debug log is:
Mar 3 15:59:02 tst-msg03 dovecot: imap(dovecot.2@csi.it): Debug: Quota grace: root=User quota bytes=576716800 (10%) Mar 3 15:59:02 tst-msg03 dovecot: imap(dovecot.2@csi.it): Debug: dict quota: user=paolo.cravero@csi.it, uri=file:/maildata1/home/csi.it/p/paolo.cravero/dovecot-quota, noenforcing=0 Mar 3 15:59:02 tst-msg03 dovecot: imap(dovecot.2@csi.it): Debug: fs: root=/maildata1/main/csi.it/p/paolo.cravero, index=/maildata1/indexes/csi.it/p/paolo.cravero, indexpvt=, control=, inbox=, alt=/maildata1/altstorage/csi.it/p/paolo.cravero Mar 3 15:59:02 tst-msg03 dovecot: imap(dovecot.2@csi.it): Debug: acl: initializing backend with data: vfile Mar 3 15:59:02 tst-msg03 dovecot: imap(dovecot.2@csi.it): Debug: acl: acl username = paolo.cravero@csi.it Mar 3 15:59:02 tst-msg03 dovecot: imap(dovecot.2@csi.it): Debug: acl: owner = 1 Mar 3 15:59:02 tst-msg03 dovecot: imap(dovecot.2@csi.it): Debug: acl vfile: Global ACLs disabled Mar 3 15:59:02 tst-msg03 dovecot: imap(dovecot.2@csi.it): Fatal: lazy_expunge: Unknown namespace: '.EXPUNGED/'
Removing the lazy_expunge, ACLs do work as expected and I can add/remove/use them.
Is there a known compatibility issue? Or there's something wrong in my config and someone else is running with both plugins enabled?
Thanks, Paolo
PS: output of dovecot -n:
# 2.2.15: /etc/dovecot/dovecot.conf # OS: Linux 2.6.32-431.el6.x86_64 x86_64 Red Hat Enterprise Linux Server release 6.5 (Santiago) ext3 auth_mechanisms = plain login disable_plaintext_auth = no imap_client_workarounds = tb-extra-mailbox-sep lmtp_save_to_detail_mailbox = yes mail_attachment_dir = /maildata1/attachments mail_attachment_hash = %{sha256} mail_debug = yes mail_gid = 500 mail_location = mdbox:/maildata1/main/%d/%1n/%n:ALT=/maildata1/altstorage/%d/%1n/%n:INDEX=/maildata1/indexes/%d/%1n/%n mail_plugins = quota mail_log notify lazy_expunge acl mail_uid = 500 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 ihave duplicate mbox_write_locks = fcntl mdbox_rotate_size = 50 M namespace { hidden = no list = yes location = mdbox:/maildata1/main/%d/%1n/%n:INDEX=/maildata1/indexes/%d/%1n/%n:MAILBOXDIR=expunged prefix = .EXPUNGED/ subscriptions = no } namespace { list = children location = mdbox:/maildata1/main/%%d/%%1n/%%n:ALT=/maildata1/altstorage/%%d/%%1n/%%n:INDEX=/maildata1/indexes/%%d/%%1n/%%n prefix = user/%%u/ separator = / type = shared } namespace inbox { inbox = yes location = mailbox Drafts { auto = subscribe special_use = \Drafts } mailbox Junk { auto = subscribe special_use = \Junk } mailbox Sent { auto = subscribe special_use = \Sent } mailbox "Sent Messages" { special_use = \Sent } mailbox Trash { auto = subscribe special_use = \Trash } prefix = type = private } passdb { args = /etc/dovecot/dovecot-ldap.conf.ext driver = ldap } plugin { acl = vfile acl_shared_dict = file:/maildata1/db/shared-mailboxes.db lazy_expunge = .EXPUNGED/ mail_log_events = delete undelete expunge copy mailbox_delete mailbox_rename flag_change append mail_log_fields = uid box msgid size flags vsize quota = dict:User quota::file:%h/dovecot-quota quota_grace = 10%% quota_rule = *:storage=10G quota_rule2 = Trash:storage=+100M quota_warning = storage=95%% quota-warning 95 %u quota_warning2 = storage=80%% quota-warning 80 %u } protocols = imap pop3 lmtp sieve service auth { unix_listener auth-userdb { group = vmail user = vmail } } service lmtp { inet_listener lmtp { address = 10.102.42.114 port = 24 } process_min_avail = 2 user = vmail } ssl_cert = </etc/pki/dovecot/certs/dovecot.pem ssl_key = </etc/pki/dovecot/private/dovecot.pem userdb { args = /etc/dovecot/dovecot-ldap.conf.ext driver = ldap } protocol lmtp { mail_plugins = quota mail_log notify lazy_expunge acl sieve } protocol lda { mail_plugins = quota mail_log notify lazy_expunge acl sieve } protocol imap { mail_plugins = quota mail_log notify lazy_expunge acl imap_quota imap_acl }