On Mon 25/02/2013 16:39, Timo Sirainen wrote:
> Since you're using directors, you can use mail_nfs_index=no and 
> mail_nfs_storage=no. The performance will be better.

Ok but that'll have to wait until we've fully migrated from our current
MX servers with direct access to the mailboxes to lmtp.

> The main problem here is that you create indexes using %u, but there are 3 
> different valid %us: uid, mail and mailAlternateAddress. So you're most 
> likely hitting problems for users whose mails are being delivered using 
> mailAlternateAddress. Those alias expansions should normally be handled by 
> your MTA.

Alas no. The MTA does handle alias expansions :

root@vader:lmtp $ ldapsearch -h deer -x mail=dalev...@otenet.gr uid uidNumber 
gidNumber mail mailAlternateAddress mailPath folderPath -LLL     
dn: uid=daleviz1,ou=people,dc=otenet,dc=gr
uid: daleviz1
uidNumber: 69757
gidNumber: 647
mail: dalev...@otenet.gr
mailAlternateAddress: dovecott...@otenet.gr
mailPath: /var/mail/U/V/H/daleviz1
folderPath: /var/mail/folders/U/V/H/daleviz1

root@vader:lmtp $ telnet deneb.otenet.gr 25
Trying 83.235.66.54...
Connected to deneb.otenet.gr (83.235.66.54).
Escape character is '^]'.
220 ESMTP
helo otenet.gr
250 deneb.otenet.gr
mail from:<dalev...@otenet.gr>
250 2.1.0 Ok
rcpt to:<dovecott...@otenet.gr>
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
test mail
.
250 2.0.0 from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as E78418E0023
quit
221 2.0.0 Bye
Connection closed by foreign host.

Feb 26 00:19:07 deneb postfix/lmtp[19885]: E78418E0023: 
to=<dalev...@otenet.gr>, orig_to=<dovecott...@otenet.gr>, 
relay=pop08.otenet.gr[83.235.66.47]:24, delay=0.03, delays=0.01/0/0/0.02, 
dsn=2.0.0, status=sent (250 2.0.0 <dalev...@otenet.gr> GgW/NcziK1GCKwAADehEhg 
Saved)

Feb 26 00:19:07 pop08 dovecot: lmtp(11138, dalev...@otenet.gr): 
GgW/NcziK1GCKwAADehEhg: msgid=unspecified: saved mail to INBOX

> With the above config you should be able to solve this by not using %u but 
> the LDAP's mail field. So something like (with cleaning up the whole config):
> 
> user_attrs = \
>   =user=%{ldap:mail}, \
>   =home=%{ldap:folderPath}, \
>   =quota_rule=*:storage=%{ldap:mailQuota}M, \
>   =uid=%{ldap:uidNumber}, \
>   =gid=%{ldap:gidNumber}, \
>   
> =mail=mbox:~/:INBOX=%{ldap:mailPath}:INDEX=/indexes/%1M{ldap:mail}/%2.1M{ldap:mail}/%3.1M{ldap:mail}/%{ldap:mail}

I tried it but unfortunately the problem remains :

Feb 26 00:02:28 pop08 dovecot: lmtp(26796, 
dinos.mpalani...@3230.syzefxis.gov.gr): Error: 
stat(/var/index/dovecot/7/8/3/ama...@3230.syzefxis.go
v.gr/.imap/INBOX/dovecot.index.log) failed: Permission denied 
(euid=10117261(<unknown>) egid=165(<unknown>) missing +x perm: 
/var/index/dovecot
/7/8/3/ama...@3230.syzefxis.gov.gr, dir owned by 10117262:165 mode=0700)
Feb 26 00:02:28 pop08 dovecot: lmtp(26796, 
dinos.mpalani...@3230.syzefxis.gov.gr): Error: 
stat(/var/index/dovecot/7/8/3/ama...@3230.syzefxis.go
v.gr/.imap/INBOX/dovecot.index) failed: Permission denied 
(euid=10117261(<unknown>) egid=165(<unknown>) missing +x perm: 
/var/index/dovecot/7/8
/3/ama...@3230.syzefxis.gov.gr, dir owned by 10117262:165 mode=0700)
Feb 26 00:02:28 pop08 dovecot: lmtp(26796, 
dinos.mpalani...@3230.syzefxis.gov.gr): QYsqEkjfK1GsaAAADehEhg: sieve: 
msgid=<19dfa2f0f211951c56596c
9600194...@otenet.gr>: stored mail into mailbox 'INBOX'

These two users, dinos.mpalani...@3230.syzefxis.gov.gr and
ama...@3230.syzefxis.gov.gr have nothing in common apart from belonging
to the same domain.

root@vader:lmtp $ ldapsearch -h deer -x 
mail=dinos.mpalani...@3230.syzefxis.gov.gr uid uidNumber gidNumber mail 
mailAlternateAddress mailPath f
olderPath -LLL                                                                  
                                                               
dn: uid=3230_syzefxis_gov_gr_user_003,ou=people,dc=otenet,dc=gr
uid: 3230_syzefxis_gov_gr_user_003
uidNumber: 10117261
gidNumber: 165
mail: dinos.mpalani...@3230.syzefxis.gov.gr
mailPath: /var/mail/C/3/6/3230_syzefxis_gov_gr_user_003
folderPath: /var/mail/folders/C/3/6/3230_syzefxis_gov_gr_user_003

root@vader:lmtp $ ldapsearch -h deer -x mail=ama...@3230.syzefxis.gov.gr uid 
uidNumber gidNumber mail mailAlternateAddress mailPath folderPath 
-LLL
dn: uid=3230_syzefxis_gov_gr_user_002,ou=people,dc=otenet,dc=gr
uid: 3230_syzefxis_gov_gr_user_002
uidNumber: 10117262
gidNumber: 165
mail: ama...@3230.syzefxis.gov.gr
mailPath: /var/mail/C/3/6/3230_syzefxis_gov_gr_user_002
folderPath: /var/mail/folders/C/3/6/3230_syzefxis_gov_gr_user_002

However as you can see it tries to write to amalia's index while delivering to 
dinos.mpalanikas.
Of course we're only talking about 1 failure in 578 successful deliveries 
however that server currently only serves less than 5% of our customres right 
now and we're worried that if we go full scale the problem will simply become 
greater.

> Easier of course would be if you could determine mailPath using a static 
> template, then you could just use the global mail_location and %u directly, 
> because the %u gets normalized to same as "mail" field.

Indeed but I think that would mean getting rid of our legacy 3-level hashing 
algorithm and using dovecot's own which in turn would mean having to move 
mailboxes around for hundrends of thousands of users.

Dimos Alevizos

Reply via email to