Ich habe einen RADIUS-Server, der in der Vergangenheit ein benutzerdefiniertes Skript zur Authentifizierung aufgerufen hat. In /etc/freeradius/sites-enabled/default habe ich die folgenden Zeilen geändert, um dies zu erreichen:
authorize{
update control{
Auth-Type := `/usr/bin/php5 -f /usr/api/apilogin.php %{User-Name} %{User-Password}`
}
}
Das hat gut funktioniert, wenn ich PHP verwendet habe und in der Datei „Akzeptieren“ oder „Ablehnen“ ausgegeben habe. Jetzt habe ich das Problem, dass ich ein Python-Skript verwenden muss. Ich habe eine Datei apilogin.py erstellt, die „Akzeptieren“ oder „Ablehnen“ ausgibt, und sie mit folgendem aufgerufen:
authorize{
update control{
Auth-Type := `/usr/bin/python /usr/api/apilogin.py %{User-Name} %{User-Password}`
}
}
Leider antwortet der RADIUS immer mit einem Access-Reject-Paket. Die Datei apilogin.py hängt normalerweise ein Textlogfile mit "Erfolgreicher/Fehlgeschlagener Login für ..." an. Wenn ich den Login aber mit radtest testen will, wird das Textlogfile nicht angehängt. Ich denke also, das Skript wird gar nicht aufgerufen.
Wenn Sie das Skript über „/usr/bin/python /usr/api/apilogin.py testuser testpwd“ aufrufen, druckt das Skript „Accept“, hängt das Protokoll an und wird wie vorgesehen beendet.
Ich verstehe nicht, warum das mit PHP funktioniert, aber nicht mit Python. Ist echo in PHP ein speziellerer Befehl, da es einen Unterschied zwischen „echo“ und „print“ gibt?
Ich freue mich über jeden Hinweis!