June 5, 20232 yr 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?
June 5, 20232 yr 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
June 5, 20232 yr Author 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.
June 5, 20232 yr 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)
October 22, 20241 yr Author 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