Current time: 11-26-2024, 12:58 PM Hello There, Guest! (LoginRegister)


Post Reply 
 
Thread Rating:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Quota Qeries für Dovecot
Author Message
TheCry Away
Member
***

Posts: 851
Joined: Oct 2008
Reputation: 21
Post: #1
Quota Qeries für Dovecot
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
(This post was last modified: 09-06-2009 07:07 PM by TheCry.)
09-06-2009 06:53 PM
Find all posts by this user Quote this message in a reply
BeNe Offline
Moderator
*****
Moderators

Posts: 5,899
Joined: Jan 2007
Reputation: 68
Post: #2
RE: Quota Qeries für Dovecot
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
09-07-2009 04:50 PM
Visit this user's website Find all posts by this user Quote this message in a reply
TheCry Away
Member
***

Posts: 851
Joined: Oct 2008
Reputation: 21
Post: #3
RE: Quota Qeries für Dovecot
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';
09-07-2009 05:07 PM
Find all posts by this user Quote this message in a reply
Post Reply 


Forum Jump:


User(s) browsing this thread: 1 Guest(s)