Hallo,
da ich einfache MySQL Syntax eher nur lesen kann, wende ich mich an Euch
eine Abfrage für eine postfix Filtertabelle zu formulieren.
Postfix kennt eine Mailadresse und übergibt sie als "%s", das Ergebnis der
Abfrage wird 'greylist' oder '' lauten. Für die Übergabe habe ich
offensichtlich nur die Variable query, die ich mit normaler MySQL-Syntax
füllen kann. Nun zur Komplexität der Fragestellung:
Es gibt die Tabelle 'mail_users', diese enthält u.a. 'id', 'email' und
'policy'.
- 'id' - int(11) - AUTO_INCREMENT
- 'email' - varchar(255) = vollständige Emailadresse eines lokalen Kontos
- 'policy' - enum('greylist,'') = postfix erwartet von der Abfrage eintweder
nix oder den Namen einer vorher konfigurierten polica, hier 'greylist'
Soweit, so einfach: "SELECT policy FROM mail_users WHERE email='%s' AND
policy='greylist' LIMIT 1" liefert mit 'greylist' oder nichts, so wie ich es
will.
Nun können aber auch Adressen in der DB sein, die einer Weiterleitung dienen
oder Alias auf ein Konto sind, das steht in der Tabelle 'mail_virtual'.
- 'id' - int(11) - AUTO_INCREMENT
- 'email' - varchar(255) = vollständige Emailadresse
- 'popaccount' - int(11) - referenzier damit auf die 'id' in 'mail_users'
oder ist schlicht '0', wenn es kein lokales Konto gibt
- 'destination' - text - eine Zieladresse
- 'iscachtall' - tinyint(1) - '0' oder '1' für das selbsterklärende Nein
oder Ja
Nehmen wir an, ich habe das Konto [email protected], die aliase
[email protected], [email protected] dazu und das catchall-Konto
[email protected], sähen die Tabellen wohl wie folgt aus:
mail_users
11, [email protected], greylist
84, [email protected], greylist
mail_virtual
41, [email protected], 11, [email protected], 0
57, [email protected], 11, [email protected], 0
133, [email protected], 84, [email protected], 1
287, [email protected], 0, [email protected], 0
Da ich meine Policies nur für lokale Konten durchsetzen will, hat sich der
Entwickler hinter dem Adminpanel wohl gedacht, gehört die Policy ans Konto
und nicht die Mailadresse. Aus Sicht des Webfrontends wird 'greylist' nur
für [email protected] und [email protected] gesetzt soll aj aber für alle
zugehörigen Aliase und ggf. auch für catchall gelten.
Wie muss nun die Abfrage für meine o.g. 'query' Variable lauten wenn die
Übergaben von %s als:
[email protected] dann 'greylist',
[email protected] dann 'greylist',
[email protected] dann 'greylist',
[email protected] dann 'greylist',
[email protected] dann '' liefern soll?
Sicherlich wäre es für diese Aufgabenstellung einfacher, wenn die 'policy'
an der Adresse in 'mail_virtual' stehen würde, aber das bedeutet ein
aufwändiges Ändern des Webfrontends und löst das catchall-Problem noch
nicht.
Mit freundlichen Grüßen / Kind regards
Ronny Seffner
--
Ronny Seffner | Alter Viehweg 1 | 01665 Klipphausen
www.seffner.de | [email protected] | +49 35245 72950
_______________________________________________
Lug-dd maillist - [email protected]
https://ssl.schlittermann.de/mailman/listinfo/lug-dd