[Postfixbuch-users] @Aliasdomain -> @Domain
Kai Fürstenberg
kai_postfix at fuerstenberg.ws
Di Nov 25 19:50:23 CET 2008
Kai Fürstenberg schrieb:
> Thomas -Balu- Walter schrieb am 25.11.2008 16:44:
>> $ postmap -q ausgedacht at barsch-und-scholle.de mysql:/etc/postfix/mysql-domain2domain.cf
>> ausgedacht at barsch-scholle.de
>>
>> Das ist die Alias-Domain-Abfrage. Alle anderen liefern kein Ergebnis zurueck.
>
>> virtual_alias_maps =
>
>> mysql:SELECT CONCAT('%u', '@', domains.name) FROM domainaliases, domains WHERE domain_id=domains.id AND domainaliases.name="%d" AND domainaliases.mail=1 AND domains.mail=1
>
> Du prüfst immer noch auf Domain-Basis, nicht jedoch auf User-Basis.
> Schau dir deine WHERE-clause an: WHERE ... = %d (=Domain)
> Da muss aber rein: WHERE ... = %u oder WHERE ... = %s
>
> Du musst in deiner Abfrage prüfen, ob der USER existiert.
> z.B.
> SELECT CONCAT('%u', '@', domains.name) FROM mailusers WHERE user='%u'
>
> Existiert %u _nicht_ in der Tabelle, gibt's auch keinen Wert zurück,
> ergo: Mail-Adresse existiert nicht.
>
> Aber bei 'WHERE domainaliases.name="%d"' wird wohl immer was
> zurückkommen, weil die Domain ja wohl in der Tabelle domainaliases
> drinsteht.
Eine kleine Beispielabfrage:
Du hast zwei Tabellen domain_aliases und users
domain_aliases: (welche Domain wird in welche umgeschrieben)
real alias
realdoma.in aliasdoma.in
users: (welche user existieren)
email test
user at realdoma.in 12345
das Feld `test` ist nur ein Dummy
Die Abfrage lautet dann:
SELECT CONCAT( '%u', '@', (
SELECT `real`
FROM domain_aliases
WHERE `alias` = '%d'
))
FROM users
WHERE CONCAT( '%u', '@', (
SELECT `real`
FROM domain_aliases
WHERE `alias` = '%d'
))
IN (
SELECT email
FROM users
)
LIMIT 1;
Es wird nachgesehen, in welche Domain die Ausgangsdomain umgeschrieben
wird. Aus diesem Wert und dem Usernamen wird die E-Mail-Adresse (die
eigentliche) zusammengesetzt und überprüft, ob die Adresse in der
Userliste existiert. Die SQL-Cracks können das mit Sicherheit noch
optimieren, aber das Prinzip sollte klar sein.
(Lässt man LIMIT weg, wird für jede vorhandene E-Mail-Adresse in 'users'
ein Eintrag erzeugt. Also wenn vier Adressen in users stehen, bekommt
man viermal das gleiche Ergebnis angezeigt.)
--
Kai Fürstenberg
PM an: kai at fuerstenberg punkt ws
Mehr Informationen über die Mailingliste Postfixbuch-users