我在 ejabberd 2.1.6 中使用 python 脚本作为外部身份验证选项。
我想开始加密在 auth 验证中遇到的明文密码,这样它们就不会以纯文本形式存储在后端数据库中。当我将以下代码添加到我的 python 脚本并重新启动 ejabberd 时,它挂起:
import hashlib
clear = "barfoo"
salt = "foobar"
hash = hashlib.md5( salt + clear ).hexdigest()
hashlib 是否需要特定权限才能运行?
当我以普通用户(ejabberd)的身份运行它时,它可以正常工作。当 python 脚本在 ejabberd 的外部身份验证中运行时,它会挂起。
我试图让它将“哈希”写入文件,但它永远不会到达那里......如果我以“ejabberd”用户身份运行它,它会很好地写入文件。
我试图找到有关在 ubuntu 上使用这个库的限制信息,但没有成功。有任何想法吗?
-sd
** 22.02.2011:这是改编自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)