<div dir="ltr"><div dir="ltr"><div dir="ltr">Hello all,<div><br></div><div>As part of the system I'm cobbling together, I have a need for sharing folders between users. I've followed the various pieces of documentation and seem to have something working but have encountered an odd issue.</div><div><br></div><div>When user1 shares a folder with user2, then on first access user2 gets a "permission denied" error when trying to access the folder. If I immediately try to access the folder again, then everything is okay. The logs talk about the index.pvt files being inconsistent, which seems to result in the error the first time but allows access the second.</div><div><br></div><div>I've searched the mailing lists and it seems that this was seen a few years ago and is due to the index files being empty but there didn't seem to be a resolution.</div><div><br></div><div>At the moment, I am filing messages into folders under INBOX, which means that the INBOX itself is empty (though I've seen the same behaviour if I put some messages in there as well).</div><div><br></div><div>Can anyone suggest a fix/workaround? I've included my config and some log entries below. In the logs, the "tester@..." user is trying to access the folder "INBOX/tester2" shared by "foo123@...".</div><div><br></div><div>(Bonus question: can anyone suggest a mail client that allows easy access to shared folders? For the life of me I can't see how to do it in Thunderbird, so I'm using a python script at the moment.)</div><div><br></div><div>Thanks in advance,</div><div><br></div><div>Felix</div><div><br></div><div><div># 2.3.7.2 (3c910f64b): /etc/dovecot/dovecot.conf</div><div># Pigeonhole version 0.5.7.2 ()</div><div># OS: Linux 5.10.16.3-microsoft-standard-WSL2 x86_64 Ubuntu 20.04.3 LTS overlay</div><div># Hostname: ptm-dovecot-5b466fb667-gk6f7</div><div>auth_debug = yes</div><div>auth_debug_passwords = yes</div><div>auth_master_user_separator = *</div><div>auth_username_chars =</div><div>auth_verbose = yes</div><div>dict {</div><div>  acl = pgsql:/etc/dovecot/conf.d/dovecot-dict-sql.conf.ext</div><div>}</div><div>disable_plaintext_auth = no</div><div>log_path = /dev/stderr</div><div>mail_debug = yes</div><div>mail_location = maildir:/home/vmail/%u</div><div>mail_plugins = acl</div><div>master_user_separator = *</div><div>namespace {</div><div>  inbox = yes</div><div>  location =</div><div>  prefix =</div><div>  separator = /</div><div>  type = private</div><div>}</div><div>namespace {</div><div>  list = children</div><div>  location = maildir:/home/vmail/%%u:INDEXPVT=~/Maildir/shared/%%u</div><div>  prefix = shared/%%u/</div><div>  separator = /</div><div>  subscriptions = no</div><div>  type = shared</div><div>}</div><div>passdb {</div><div>  args = /etc/dovecot/conf.d/dovecot-sql.conf.ext</div><div>  driver = sql</div><div>}</div><div>plugin {</div><div>  acl = vfile:/etc/dovecot/dovecot-acl:cache_secs=6</div><div>  acl_defaults_from_inbox = yes</div><div>  acl_shared_dict = proxy::acl</div><div>  sieve_default = /etc/dovecot/conf.d/user-to-folder.sieve</div><div>}</div><div>protocols = imap lmtp</div><div>service auth {</div><div>  unix_listener auth-userdb {</div><div>    group = vmail</div><div>    mode = 0600</div><div>    user = vmail</div><div>  }</div><div>  user = root</div><div>}</div><div>service lmtp {</div><div>  inet_listener lmtp {</div><div>    address = 0.0.0.0</div><div>    port = 24</div><div>  }</div><div>}</div><div>userdb {</div><div>  args = /etc/dovecot/conf.d/dovecot-sql.conf.ext</div><div>  driver = sql</div><div>}</div><div>protocol lmtp {</div><div>  log_path = /home/vmail/dovecot-deliver.log</div><div>  mail_plugins = acl sieve</div><div>  postmaster_address = <a href="mailto:admin@mydomain.com">admin@mydomain.com</a></div><div>}</div><div>protocol imap {</div><div>  mail_plugins = acl imap_acl</div><div>}</div></div><div><br></div><div><br></div><div>Log output:<br><br><div>Nov 03 14:38:27 : Debug: acl: initializing backend with data: vfile:/etc/dovecot/dovecot-acl:cache_secs=6</div><div>Nov 03 14:38:27 : Debug: acl: acl username = <a href="mailto:tester@dovecot.mydomain.com">tester@dovecot.mydomain.com</a></div><div>Nov 03 14:38:27 : Debug: acl: owner = 1</div><div>Nov 03 14:38:27 : Debug: acl vfile: Global ACL file: /etc/dovecot/dovecot-acl</div><div>Nov 03 14:38:27 : Debug: Namespace : type=shared, prefix=shared/%u/, sep=/, inbox=no, hidden=no, list=children, subscriptions=no location=maildir:/home/vmail/%u:INDEXPVT=~/Maildir/shared/%u</div><div>Nov 03 14:38:27 : Debug: shared: root=/var/run/dovecot, index=, indexpvt=, control=, inbox=, alt=</div><div>Nov 03 14:38:27 : Debug: acl: initializing backend with data: vfile:/etc/dovecot/dovecot-acl:cache_secs=6</div><div>Nov 03 14:38:27 : Debug: acl: acl username = <a href="mailto:tester@dovecot.mydomain.com">tester@dovecot.mydomain.com</a></div><div>Nov 03 14:38:27 : Debug: acl: owner = 0</div><div>Nov 03 14:38:27 : Debug: acl vfile: Global ACL file: /etc/dovecot/dovecot-acl</div><div>Nov 03 14:38:27 : Debug: Mailbox INBOX: Mailbox opened because: SELECT</div><div>Nov 03 14:38:27 : Debug: acl vfile: file /home/vmail/<a href="http://tester@dovecot.mydomain.com/dovecot-acl">tester@dovecot.mydomain.com/dovecot-acl</a> not found</div><div>Nov 03 14:38:27 : Debug: Namespace : /home/vmail/<a href="mailto:tester@dovecot.mydomain.com">tester@dovecot.mydomain.com</a> doesn't exist yet, using default permissions</div><div>Nov 03 14:38:27 : Debug: Namespace : Using permissions from /home/vmail/<a href="mailto:tester@dovecot.mydomain.com">tester@dovecot.mydomain.com</a>: mode=0700 gid=default</div><div>Nov 03 14:38:27 : Debug: acl vfile: file /home/vmail/<a href="http://tester@dovecot.mydomain.com/dovecot-acl">tester@dovecot.mydomain.com/dovecot-acl</a> not found</div><div>Nov 03 14:38:27 : Debug: auth-master: userdb lookup(<a href="mailto:foo123@dovecot.mydomain.com">foo123@dovecot.mydomain.com</a>): Started userdb lookup</div><div>Nov 03 14:38:27 : Debug: auth-master: conn unix:/var/run/dovecot/auth-userdb: Connecting</div><div>Nov 03 14:38:27 : Debug: auth-master: conn unix:/var/run/dovecot/auth-userdb: Client connected (fd=18)</div><div>Nov 03 14:38:27 auth: Debug: master in: USER<span style="white-space:pre">    </span>1<span style="white-space:pre">    </span><a href="mailto:foo123@dovecot.mydomain.com">foo123@dovecot.mydomain.com</a><span style="white-space:pre">   </span>service=imap</div><div>Nov 03 14:38:27 auth: Debug: sql(<a href="mailto:foo123@dovecot.mydomain.com">foo123@dovecot.mydomain.com</a>): Performing userdb lookup</div><div>Nov 03 14:38:27 auth: Debug: sql(<a href="mailto:foo123@dovecot.mydomain.com">foo123@dovecot.mydomain.com</a>): SELECT home, uid, gid FROM users WHERE userid = 'foo123' AND domain = '<a href="http://dovecot.mydomain.com">dovecot.mydomain.com</a>'</div><div>Nov 03 14:38:27 auth: Debug: sql(<a href="mailto:foo123@dovecot.mydomain.com">foo123@dovecot.mydomain.com</a>): Finished userdb lookup</div><div>Nov 03 14:38:27 auth: Debug: userdb out: USER<span style="white-space:pre">    </span>1<span style="white-space:pre">    </span><a href="mailto:foo123@dovecot.mydomain.com">foo123@dovecot.mydomain.com</a><span style="white-space:pre">   </span>home=/tmp/foo123<span style="white-space:pre">     </span>uid=5000<span style="white-space:pre">     </span>gid=5001</div><div>Nov 03 14:38:27 : Debug: auth-master: userdb lookup(<a href="mailto:foo123@dovecot.mydomain.com">foo123@dovecot.mydomain.com</a>): auth USER input: <a href="mailto:foo123@dovecot.mydomain.com">foo123@dovecot.mydomain.com</a> home=/tmp/foo123 uid=5000 gid=5001</div><div>Nov 03 14:38:27 : Debug: auth-master: userdb lookup(<a href="mailto:foo123@dovecot.mydomain.com">foo123@dovecot.mydomain.com</a>): Finished userdb lookup (username=<a href="mailto:foo123@dovecot.mydomain.com">foo123@dovecot.mydomain.com</a> home=/tmp/foo123 uid=5000 gid=5001)</div><div>Nov 03 14:38:27 : Debug: maildir++: root=/home/vmail/<a href="mailto:foo123@dovecot.mydomain.com">foo123@dovecot.mydomain.com</a>, index=, indexpvt=/tmp/foo123/Maildir/shared/<a href="mailto:foo123@dovecot.mydomain.com">foo123@dovecot.mydomain.com</a>, control=, inbox=/home/vmail/<a href="mailto:foo123@dovecot.mydomain.com">foo123@dovecot.mydomain.com</a>, alt=</div><div>Nov 03 14:38:27 : Debug: acl: initializing backend with data: vfile:/etc/dovecot/dovecot-acl:cache_secs=6</div><div>Nov 03 14:38:27 : Debug: acl: acl username = <a href="mailto:foo123@dovecot.mydomain.com">foo123@dovecot.mydomain.com</a></div><div>Nov 03 14:38:27 : Debug: acl: owner = 1</div><div>Nov 03 14:38:27 : Debug: acl vfile: Global ACL file: /etc/dovecot/dovecot-acl</div><div>Nov 03 14:38:27 : Debug: maildir++: root=/home/vmail/<a href="mailto:foo123@dovecot.mydomain.com">foo123@dovecot.mydomain.com</a>, index=, indexpvt=/tmp/tester/Maildir/shared/<a href="mailto:foo123@dovecot.mydomain.com">foo123@dovecot.mydomain.com</a>, control=, inbox=/home/vmail/<a href="mailto:foo123@dovecot.mydomain.com">foo123@dovecot.mydomain.com</a>, alt=</div><div>Nov 03 14:38:27 : Debug: acl: initializing backend with data: vfile:/etc/dovecot/dovecot-acl:cache_secs=6</div><div>Nov 03 14:38:27 : Debug: acl: acl username = <a href="mailto:tester@dovecot.mydomain.com">tester@dovecot.mydomain.com</a></div><div>Nov 03 14:38:27 : Debug: acl: owner = 0</div><div>Nov 03 14:38:27 : Debug: acl vfile: Global ACL file: /etc/dovecot/dovecot-acl</div><div>Nov 03 14:38:27 : Debug: Mailbox shared/<a href="http://foo123@dovecot.mydomain.com/INBOX">foo123@dovecot.mydomain.com/INBOX</a>: Mailbox opened because: SELECT</div><div>Nov 03 14:38:27 : Debug: acl vfile: reading file /home/vmail/<a href="http://foo123@dovecot.mydomain.com/dovecot-acl">foo123@dovecot.mydomain.com/dovecot-acl</a></div><div>Nov 03 14:38:27 : Error: /tmp/tester/Maildir/shared/<a href="http://foo123@dovecot.mydomain.com/.INBOX/dovecot.index.pvt">foo123@dovecot.mydomain.com/.INBOX/dovecot.index.pvt</a> reset, view is now inconsistent</div><div>Nov 03 14:38:27 : Debug: Namespace shared/: Using permissions from : mode=0700 gid=default</div><div>Nov 03 14:38:27 : Debug: acl vfile: file /home/vmail/<a href="http://foo123@dovecot.mydomain.com/.INBOX.tester2/dovecot-acl">foo123@dovecot.mydomain.com/.INBOX.tester2/dovecot-acl</a> not found</div><div>Nov 03 14:38:27 : Error: /tmp/tester/Maildir/shared/<a href="http://foo123@dovecot.mydomain.com/.INBOX/dovecot.index.pvt">foo123@dovecot.mydomain.com/.INBOX/dovecot.index.pvt</a> view is inconsistent</div><div>Nov 03 14:38:27 : Debug: Mailbox shared/<a href="http://foo123@dovecot.mydomain.com/INBOX/tester2">foo123@dovecot.mydomain.com/INBOX/tester2</a>: Mailbox opened because: SELECT</div><div>Nov 03 14:38:27 : Error: /tmp/tester/Maildir/shared/<a href="http://foo123@dovecot.mydomain.com/.INBOX.tester2/dovecot.index.pvt">foo123@dovecot.mydomain.com/.INBOX.tester2/dovecot.index.pvt</a> reset, view is now inconsistent</div><div>Nov 03 14:38:28 : Error: /tmp/tester/Maildir/shared/<a href="http://foo123@dovecot.mydomain.com/.INBOX.tester2/dovecot.index.pvt">foo123@dovecot.mydomain.com/.INBOX.tester2/dovecot.index.pvt</a> view is inconsistent</div><div>Nov 03 14:38:28 : Debug: Mailbox shared/<a href="http://foo123@dovecot.mydomain.com/INBOX/tester2">foo123@dovecot.mydomain.com/INBOX/tester2</a>: UID 1: Opened mail because: prefetch</div><div>Nov 03 14:38:28 : Debug: Mailbox shared/<a href="http://foo123@dovecot.mydomain.com/INBOX/tester2">foo123@dovecot.mydomain.com/INBOX/tester2</a>: UID 1: Opened mail because: access</div><div>Nov 03 14:38:28 : Debug: Mailbox shared/<a href="http://foo123@dovecot.mydomain.com/INBOX/tester2">foo123@dovecot.mydomain.com/INBOX/tester2</a>: UID 1: Opened mail because: full mail</div><div>Nov 03 14:38:28 : Info: FETCH failed: Permission denied in=360 out=2880 deleted=0 expunged=0 trashed=0 hdr_count=0 hdr_bytes=0 body_count=1 body_bytes=857</div></div><div><br></div></div></div></div>