ispCP - Board - Support
Quota Qeries für Dovecot - Printable Version

+- ispCP - Board - Support (http://www.isp-control.net/forum)
+-- Forum: ispCP Omega International Area (/forum-22.html)
+--- Forum: German Corner (/forum-26.html)
+---- Forum: Archiv (/forum-54.html)
+---- Thread: Quota Qeries für Dovecot (/thread-7777.html)



Quota Qeries für Dovecot - TheCry - 09-06-2009 06:53 PM

Hi zusammen,
mir ist gerade etwas aufgefallen, was natürlich im Betrieb falsche Angaben ausgibt...

Laut Wiki wird folgendes Query genutzt um das Quota aus der Datenbank zu lesen
Code:
user_query = SELECT concat('/var/mail/virtual/', domain.domain_name, '/',mail_addr) as home, '1000' as uid, '8' as gid, concat('*:bytes=', quota) AS quota_rule FROM mail_users inner join domain on mail_users.domain_id = domain.domain_id WHERE mail_acc='%n' and (mail_type='normal_mail' OR mail_type='normal_mail,normal_forward');
Wenn man 5 verschiedene Mailadressen mit z.b "info@..." besitzt, bekommt man auch 5 Zeilen mit diesem Query zurückgegeben.
Und dadurch werden einer Mailbox das falsche Quota ausgegeben.
Ich bin darauf gekommen, weil ich genau dieses Problem hatte...
Wenn man in phpMyAdmin diesen Query von Hand ausführt sieht man das Ergebnis:
Code:
SELECT concat('/var/mail/virtual/', domain.domain_name, '/',mail_addr) as home, '1000' as uid, '8' as gid, concat('*:bytes=', quota) AS quota_rule FROM mail_users inner join domain on mail_users.domain_id = domain.domain_id WHERE mail_acc='info' and (mail_type='normal_mail' OR mail_type='normal_mail,normal_forward');

Nun weiss ich aber nicht was dieses "%n" bedeuted.
Der richtige Query müsste lauten
Code:
user_query = SELECT concat('/var/mail/virtual/', domain.domain_name, '/',mail_acc) as home, '1000' as uid, '8' as gid, concat('*:bytes=', quota) AS quota_rule FROM mail_users inner join domain on mail_users.domain_id = domain.domain_id WHERE mail_addr='########' and (mail_type='normal_mail' OR mail_type='normal_mail,normal_forward');
Für die #-Zeichen müsste die komplette Emailadresse drin stehen...
Jetzt weiss ich aber nicht welche Variable das ist. %n gibt nur den Mailacc an.

Könnte das mal einer bei sich überprüfen?
Und evtl. auch mitteilen was anstatt %n da rein muss?

Gruß
Sascha


Edit:
Jetzt habe ich es gefunden... Für die #_zeichen muss dann später %u rein


RE: Quota Qeries für Dovecot - BeNe - 09-07-2009 04:50 PM

Klingt logisch weil der Benutzername (%n) ja unterhalb des Domainverzeichnisses liegt uns somit NUR den Benutzername ausdrückt.
Wobei in der Query ja auch die Domain-ID drin steht und es somit doch wieder eindeutig wäre oder Rolleyes

Mal ansehen, könntest mal wieder Recht haben!

Greez BeNe


RE: Quota Qeries für Dovecot - TheCry - 09-07-2009 05:07 PM

Das ist ja das Problem..
Wenn ich einen Query auf den mail_acc mache, dann bekomme ich mehrere domaindid's und die erste holt er sich ran.
Es lautet ja ganz klar
Code:
WHERE mail_acc='%n'
Mir ist das erst aufgefallen wo ich das mail.info mir angesehen habe.

Dort sieht man genau das er auf das falsche Verzeichnis (/var/mail/virtual/) und die falsche Quota ausliest.

Richtig müssten die Queries wie folgt lauten:
dovecot-sql-domain.conf
Code:
user_query = SELECT concat('/var/mail/virtual/', domain.domain_name, '/',mail_acc) as home, '1000' as uid, '8' as gid, concat('*:bytes=', quota) AS quota_rule FROM mail_users inner join domain on mail_users.domain_id = domain.domain_id WHERE mail_addr='%u' and (mail_type='normal_mail' OR mail_type='normal_mail,normal_forward');

dovecot-sql-subdomain.conf
Code:
user_query = SELECT concat('/var/mail/virtual/', subdomain.subdomain_name, ".", domain.domain_name, '/',mail_acc) as home, '1000' as uid, '8' as gid, concat('*:bytes=', quota) AS quota_rule FROM (mail_users INNER JOIN subdomain ON mail_users.sub_id = subdomain.subdomain_id) INNER JOIN domain ON mail_users.domain_id = domain.domain_id WHERE mail_addr='%u' and concat(subdomain.subdomain_name,".",domain.domain_name)='%d';

dovecot-sql-aliasdomain.conf
Code:
user_query = SELECT concat('/var/mail/virtual/', domain_aliasses.alias_name, '/',mail_acc) as home, '1000' as uid, '8' as gid, concat('*:bytes=', quota) AS quota_rule FROM (mail_users INNER JOIN domain_aliasses ON mail_users.sub_id = domain_aliasses.alias_id) INNER JOIN domain ON mail_users.domain_id = domain.domain_id WHERE mail_addr='%u' and domain_aliasses.alias_name ='%d';