www.ProFTPD.de

ProFTPD => ProFTPD - Deutsch => Thema gestartet von: hos_joker am 10. August 2006, 11:10:16



Titel: SQLUserWhereClause erweitern
Beitrag von: hos_joker am 10. August 2006, 11:10:16
Hallo,

folgende Struktur ist vorgegeben: zentrale DB mit bis zu mehreren tausend FTP-Usern. Dazu eine gewisse Anzahl von Servern, auf denen ProFTPd (+mod_sql) läuft. Die User in der DB sollen natürlich NICHT auf alle Server zugreifen, sondern nur auf einen spezifischen.

In der ftp_user Tabelle ist dazu ein Feld mit der IP des erlaubten Servers.

Ich habe jetzt folgendes versucht:
Code:
SQLUserWhereClause "login_enabled = 'Y' AND Server_IP = '%L'"

Leider löst es %L (normalerweise die IP des aktuellen FTP-Server(?)) nicht auf, das SQL-Log:
Zitat
query "SELECT username, password, uid, gid, homedir, shell FROM ftp_users WHERE (username='test_123') and ((login_enabled = 'Y' AND Server_IP = '%L')) LIMIT 1"

Wie kann ich die SQLUserWhereClause so erweitern, dass die IP-Adresse des momentanen Server an die DB übertragen wird? (Das hardcodieren der IP-adresse ist keine Option, da alle FTP-Server eine identische Konfiguration besitzen müssen) Oder gibt es andere Wege, das gewünschte Verhalten zu erreichen.

Vielen Dank für eure Ideen - falls jemand eine hat ;)



Titel: Re: SQLUserWhereClause erweitern
Beitrag von: VolGas am 10. August 2006, 12:15:53
Hallo!

Wenn (Betonung auf: Wenn!) Variabeln bei "SQLUserWhereClause" erlaubt sind, dann
sind es wahrscheinlich nur die der Direktive "LogFormat" (siehe ->hier (http://www.proftpd.de/Direktiven.54.0.html#94))

Ein "%L" ist dort nicht definiert, aber "%v" wäre eine Alternative: %v : Local server name
Du müßtest Deine SQL-Tabelle anpassen, probiere aber vorher vielleicht erst aus, ob
überhaupt eine Variabelnsubstitution bei "SQLUserWhereClause" vorgenommen wird.

Auf unseren Servern haben wir jeweils die proftpd.conf angepasst, aber wenn das wie
spekuliert funktionieren sollte...

Ich bitte um Rückmeldung.
Danke!

mfg.
  VolGas


Titel: Re: SQLUserWhereClause erweitern
Beitrag von: hos_joker am 10. August 2006, 12:22:00
Das %L hatte ich aus http://www.proftpd.de/HowTo_Logging.31.0.html

Ich befürchte auch %v würde mir, selbst wenn es ersetzt würde, nicht weiterhelfen, da dort ja der Server-String (also z.B. "Blubb-Server Version 7") vermerkt ist - und der ist ja auch bei allen Servern gleich...  :(


Titel: Re: SQLUserWhereClause erweitern
Beitrag von: VolGas am 10. August 2006, 13:19:58
Da muß ich wiedersprechen: wir haben das im Logformat und dort steht brav der Servername.
Aber lange Rede, kurzer Sinn: ich habe es bei uns auf die Gefahr von bösen Anrufen hin probiert
und so wie es aussieht, wird keine Variabelsubstitution vorgenommen. "%v" kommt beim
SQL-Server genau so an.

Ich sehe daher also nur den Weg, daß Du die jeweiligen proftpd.conf anpasst.
Ist ja nur minimal.
Sorry.

mfg.
  VolGas


Titel: Re: SQLUserWhereClause erweitern
Beitrag von: hos_joker am 10. August 2006, 13:31:37
Ok - danke erstmal für die Korrektur und die Antwort. Vielleicht hat ja jemand noch eine andere Idee (irgendwelche anderen mod's?), da unsere Konfiguration zu 99% zentral verwaltet wird (also alle server quasi-identisch sind) wäre eine separate Konfiguration leider keine Lösung.


Titel: Re: SQLUserWhereClause erweitern
Beitrag von: VolGas am 10. August 2006, 14:38:51
Mir ist noch etwas eingefallen: wenn der ProFTPD sich via Netzwerk an einen mySQL-Server
anmeldet, so könnte man evtl. den Servernamen mittels "SUBSTRING_INDEX(USER(),'@',-1)"
herausbaldobern. Das kann man bequem in sein SQL-Query einbauen und wäre allgemein
anwendbar.

mfg.
  VolGas


Titel: Re: SQLUserWhereClause erweitern
Beitrag von: hos_joker am 10. August 2006, 14:55:27
Ja, das sieht ganz gut aus. Nur statt der IP den Servernamen in die DB schreiben, dann sollte das passen. Das bringt mich schon mal enorm weiter - Danke :)

Werde dann berichten, falls noch Probleme auftauchen...