[Dovecot] Per user quota on MySQL

M. Rodrigo Monteiro
2010-12-17T17:20:13Z

Hi!

I'm new on Dovecot.
I'm using:
- CentOS 5.5
- Kernel 2.6.18-194.26.1.el5 x86_64
- Dovecot 2.0.8 (from source)
- Postfix 2.7.2 (from source)
- MySQL 5.0.77 (CentOS binary)
- Postfixadmin 2.3.2 (from source)
- Horde Webmail 1.2.9
- Thunderbird 3.1.7 (from CentOS)

I follow this how to: http://wiki2.dovecot.org/HowTo/DovecotLDAPostfixAdminMySQL
I was able to send and recieve e-mail via Postfix/Dovecot.

I'm having troubles in the quota.
As I said, I use Postfixadmin to manage users.
When I log in Horde, it says that the quota is unlimited. Thunderbird too.

I think it's because of the configuration on Dovecot.


Here it's my confs files:


====dovecot.conf
====#ssl_cert_file = /etc/pki/dovecot/certs/myserver.example.com.crt
#ssl_key_file = /etc/pki/dovecot/private/myserver.example.com.key
#ssl_ca_file = /etc/pki/dovecot/certs/ca-bundle.crt
#default_login_user = nobody
disable_plaintext_auth = no
log_path = /var/log/dovecot.log


auth_mechanisms = plain login
first_valid_uid = 200
last_valid_uid = 200
mail_location = maildir:/var/vmail/%d/%u
ssl = no

passdb {
  args = /usr/local/dovecot/etc/dovecot/sql.conf
  driver = sql
}
plugin {
  #acl = vfile:/usr/local/dovecot/etc/dovecot/acls
  quota = maildir:storage=10240:messages=1000
  trash = /usr/local/dovecot/etc/dovecot/trash.conf
}
service auth {
  unix_listener auth-userdb {
    group = vmail
    mode = 0660
    user = vmail
  }
  unix_listener auth-master {
    group = vmail
    mode = 0660
    user = vmail
  }
  unix_listener /var/spool/postfix/private/auth {
    group = vmail
    mode = 0660
    user = postfix
  }
  user = dovecot
}
userdb {
  args = /usr/local/dovecot/etc/dovecot/sql.conf
  driver = sql
}
userdb {
  driver = prefetch
}
protocol imap {
  imap_client_workarounds = delay-newmail
  mail_plugins = quota imap_quota
}
protocol pop3 {
  mail_plugins = quota
  pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
protocol lda {
  mail_plugins = quota
  postmaster_address = postmaster at mydomain.com
  #log_path = /var/log/dovecot.log
  #info_log_path = /var/log/dovecot.log
}
====

====sql.conf
====driver = mysql
connect = host=localhost dbname=postfix user=dovecot password=password
user_query = SELECT concat('/var/vmail/', maildir) as home,
concat('maildir:/var/vmail/', maildir) as mail, 200 AS uid, 200 AS
gid, concat('maildir:storage=', floor(quota/1024)) AS quota FROM
mailbox WHERE username = '%u' AND active = '1'
====

====mysql
====mysql> select * from mailbox;
+----------------------+------------------------------------+--------------+-----------------------+---------+------------+----------------+---------------------+---------------------+--------+
| username             | password                           | name
    | maildir               | quota   | local_part | domain         |
created             | modified            | active |
+----------------------+------------------------------------+--------------+-----------------------+---------+------------+----------------+---------------------+---------------------+--------+
| teste at mydomain.com | $1$bb3d6a71$IF/FORTbdoIqdzBLuSciJ0 | E-mail
Teste | mydomain.com/teste/ | 1024000 | teste      | mydomain.com |
2010-12-17 10:32:16 | 2010-12-17 11:46:24 |      1 |
+----------------------+------------------------------------+--------------+-----------------------+---------+------------+----------------+---------------------+---------------------+--------+
====

====mysql_virtual_mailbox_limit_maps.cf
====user            = postfix
password        = password
hosts           = localhost
dbname          = postfix
query           = SELECT quota FROM mailbox WHERE username='%s' AND
active = '1'
====

I think it's it. If I forgot something, please let me know.


Regards,
Rodrigo.

--

M. Rodrigo Monteiro

"Free as in Freedom, not free as in free beer"
"As we are liberated from our own fear, our presence automatically
liberates others"
Linux User # 403730

Pense antes de imprimir. Think before printing.

AVISO LEGAL
Esta mensagem ? destinada exclusivamente para a(s) pessoa(s) a quem ?
dirigida, podendo conter informa??o confidencial e/ou legalmente
privilegiada. Se voc? n?o for destinat?rio desta mensagem, desde j?
fica notificado de abster-se a divulgar, copiar, distribuir, examinar
ou, de qualquer forma, utilizar a informa??o contida nesta mensagem,
por ser ilegal. Caso voc? tenha recebido esta mensagem por engano,
pedimos que nos retorne este E-Mail, promovendo, desde logo, a
elimina??o do seu conte?do em sua base de dados, registros ou sistema
de controle. Fica desprovida de efic?cia e validade a mensagem que
contiver v?nculos obrigacionais, expedida por quem n?o detenha poderes
de representa??o.

LEGAL ADVICE
This message is exclusively destined for the people to whom it is
directed, and it can bear private and/or legally exceptional
information. If you are not addressee of this message, since now you
are advised to not release, copy, distribute, check or, otherwise, use
the information contained in this message, because it is illegal. If
you received this message by mistake, we ask you to return this email,
making possible, as soon as possible, the elimination of its contents
of your database, registrations or controls system. The message that
bears any mandatory links, issued by someone who has no representation
powers, shall be null or void.