ejabberd2.1.6の外部認証オプションとしてPythonスクリプトを使用しています。
認証検証で検出されたクリアテキストのパスワードの暗号化を開始して、バックエンドデータベースにプレーンテキストで保存されないようにしたかったのです。次のコードをPythonスクリプトに追加して、ejabberdを再起動すると、ハングします。
import hashlib
clear = "barfoo"
salt = "foobar"
hash = hashlib.md5( salt + clear ).hexdigest()
hashlibを実行するには、特定の特権が必要ですか?
通常のユーザー(ejabberd)として実行すると、問題なく動作します。Pythonスクリプトをejabberdの外部認証内で実行すると、ハングします。
「ハッシュ」をファイルに書き出そうとしましたが、そこに到達することはありません...「ejabberd」ユーザーとして実行すると、ファイルに正常に書き出されます。
このライブラリをubuntuで使用する際の制限に関する情報を見つけようとしましたが、成功しませんでした。何か案は?
-SD
** 2011年2月22日: https://git.process-one.net/ejabberd/mainline/blobs/raw/2.1.x/doc/dev.html#htoc8から採用された完全なスクリプトは次のとおりです。
#!/usr/bin/python
import sys
from struct import *
import hashlib
def from_ejabberd():
input_length = sys.stdin.read(2)
(size,) = unpack('>h', input_length)
return sys.stdin.read(size).split(':')
def to_ejabberd(bool):
answer = 0
if bool:
answer = 1
token = pack('>hh', 2, answer)
sys.stdout.write(token)
sys.stdout.flush()
def auth(username, server, password):
clear = "barfoo"
salt = "foobar"
hash = hashlib.md5( salt + clear ).hexdigest()
if (password == hash): return True
else: return False
def isuser(username, server):
return True
def setpass(username, server, password):
return True
while True:
data = from_ejabberd()
success = False
if data[0] == "auth":
success = auth(data[1], data[2], data[3])
elif data[0] == "isuser":
success = isuser(data[1], data[2])
elif data[0] == "setpass":
success = setpass(data[1], data[2], data[3])
to_ejabberd(success)