Jump to content
Froxlor Forum
  • 0

Question

Posted

Hallo,

froxlor kommt ja mit einer Datenbankabfrage für den postfix-Parameter smtpd-sender-login-maps, die das SASL-Login mit der MAIL-FROM Adresse abgleicht - sprich tim@example.com kann auch nur als tim@example.com versenden, wenn man das aktiviert. Nun habe ich hier aber häufig Anwendungsfälle, in denen tim auch als timea@example.com (gleicher domainpart) oder sogar tim@example.de (abweichender, aber dem Froxlor-Kunden zugeordneter domainpart) versenden können soll.

Ich frage mich, ob man (also ich jetzt individuell) dazu nicht die SQL-query abändern könnte und wenn ja wie:

Wir haben:

SELECT DISTINCT username FROM mail_users WHERE email in ((SELECT mail_virtual.email_full FROM mail_virtual WHERE mail_virtual.email = '%s' UNION SELECT mail_virtual.destination FROM mail_virtual WHERE mail_virtual.email = '%s'));

Das "%s" steht laut postfix-Doku für "address". Wenn der SASL tim@example.com also als tim@example.com oder timea@example.com versenden dürfen soll, müsste es doch genügen, das erste Vorkommen von "%s" durch "%d" zu ersetzen - nicht?

SELECT DISTINCT username FROM mail_users WHERE email in ((SELECT mail_virtual.email_full FROM mail_virtual WHERE mail_virtual.email = '%d' UNION SELECT mail_virtual.destination FROM mail_virtual WHERE mail_virtual.email = '%s'));

Ferner scheint das auch nur so mit catch-all-Konten zu klappen (zumindest aus SQL-Sicht), ich bin mir nicht klar ob postfix dann noch localpart und domainpart durchprobiert.

Nun lässt sich das doch sicher auch so bauen, dass ein beliebiges Konto eines Froxlor-Kunden im Namen aller Nutzer und Domains des Kunden versenden dürfte. Das verkompliziert das SELECT dann, weil über die Kunde-ID gegangen werden muss. Gibt es hier SQL-Kenntnisse, die das ermöglichen würden?

4 answers to this question

Recommended Posts

  • 0
Posted

Grundsätzlich gebe ich dir Recht, es wäre sinnvoll sowas zu haben, allerdings vorallem auf senden im Namen anderer bezogen, ist man schnell bei äußerst komplexen abfragen (und auch entsprechender Verwaltung im Frontend). Lässt sich aber sicher Mal durchdenken und skizzieren 

  • 0
Posted

Ja, dass das im UI ne Menge Arbeit bedeuten würde ist mir klar.

Ich möchte erstmal wissen, ob die %d Ersetzung von der Adressberechtigung auf die Domainberechtigung wechselt. Man könnte das ja als Tipp in die Doku aufnehmen.

Die Kür wäre dann, wenn ein DB:Profi mal schaut wie man diese Anfrage auf alle Domains des Kunden, zu dem das Saale-Login passt, erweitert.

  • 0
Posted
9 minutes ago, rseffner said:

Ich möchte erstmal wissen, ob die %d Ersetzung von der Adressberechtigung auf die Domainberechtigung wechselt.

steht doch alles in der manual:

		%s     This is replaced by the input key.  SQL quoting  is  used
                     to  make  sure that the input key does not add unexpected
                     metacharacters.
                     
		%u     When the input key is an address of the form user@domain,
                     %u  is  replaced  by  the  SQL  quoted  local part of the
                     address.  Otherwise, %u is replaced by the entire  search
                     string.   If  the  localpart  is empty, the query is sup-
                     pressed and returns no results.

              %d     When the input key is an address of the form user@domain,
                     %d  is  replaced  by  the  SQL  quoted domain part of the
                     address.  Otherwise, the query is suppressed and  returns
                     no results.

 

53 minutes ago, rseffner said:

müsste es doch genügen, das erste Vorkommen von "%s" durch "%d" zu ersetzen - nicht?

Nein, deine Abfrage lautet sonst: where email = 'domain.tld'

Du wirst also keine results bekommen. wenn müsstest du auch die Abfrage entsprechend anpassen auf z.B. where email LIKE '%%@%d (was sowas wie: LIKE '%@domain.tld' ergeben sollte)

  • 0
Posted

Ich krame das hier nochmal raus, weil ich mich dann nicht weiter drum gekümmert habe:

Wir haben doch aktuell folgende Query in der mysql-virtual_sender_permissions.cf

SELECT DISTINCT username FROM mail_users WHERE email in ((SELECT mail_virtual.email_full FROM mail_virtual WHERE mail_virtual.email = '%s' UNION SELECT mail_virtual.destination FROM mail_virtual WHERE mail_virtual.email = '%s'));

Damit (und den settings in main.cf) müssen nach wie vor SASL login und envelope from übereinstimmen.
Um eine Analogie zum catch-all - also ein send-all - zu realisieren, habe ich in den smptd_sender_restrictions das reject_sender_login_mismatch entfernt. Nun könnte doch aber jeder SASL-Nutzer mit einer beliebigen (die eines anderen Kontos, die eines anderen Froxlor-Kunden, ja sogar jeder beliebiger) Adresse versenden. Das sollte ich tunlichst wieder einschränken.

Pflicht wäre ein match zwischen SASL domain und envelope from domain.
Wäre das dann korrekt?

# VOR permit_sasl_autheticated
check_sender_access mysql:/etc/postfix/mysql-sender-domain-check.cf,

# da drin dann
user = xxx
password = xxx
hosts = 127.0.0.1
dbname = xxx
query = SELECT domain FROM mail_virtual WHERE '%s' LIKE CONCAT('%%', domain)

# und auf reject_sender_login_mismatch verzichten oder ZWISCHEN check_sender_access und permit_sasl_authenticted?


Kür wäre dann aber ein Match zwischen SASL domain und beliebiger envelope from domain des Froxlor-Kunden.

Kann denn jemand eine entsprechende Query formulieren?


Danke für die Aufmerksamkeit, Ronny

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×
×
  • Create New...