以前、認証用にカスタム スクリプトを呼び出す RADIUS サーバーがありました。/etc/freeradius/sites-enabled/default で、これを実現するために次の行を変更しました。
authorize{
update control{
Auth-Type := `/usr/bin/php5 -f /usr/api/apilogin.php %{User-Name} %{User-Password}`
}
}
PHP を使用してファイルに「Accept」または「Reject」をエコーしたときは、これは正常に動作しました。現在は、Python スクリプトを使用する必要があるという問題が発生しています。「Accept」または「Reject」を出力する apilogin.py ファイルを作成し、次のように呼び出しました。
authorize{
update control{
Auth-Type := `/usr/bin/python /usr/api/apilogin.py %{User-Name} %{User-Password}`
}
}
残念ながら、RADIUS は常に Access-Reject パッケージで応答します。apilogin.py ファイルは通常、「... のログイン成功/失敗」を含むテキスト ログ ファイルを追加します。ただし、radtest でログインをテストする場合、テキスト ログ ファイルが追加されません。そのため、スクリプトはまったく呼び出されないと考えられます。
「/usr/bin/python /usr/api/apilogin.py testuser testpwd」経由でスクリプトを呼び出すと、スクリプトは Accept を出力し、ログを追加して意図したとおりに終了します。
なぜこれが PHP では機能するのに Python では機能しないのか理解できません。「echo」と「print」には違いがあるので、PHP の echo はより特殊なコマンドなのでしょうか?
ヒントがあればありがたいです!