我研究了hashlib source,虽然它似乎不需要太多,但它确实导入了.so文件作为模块,其中一个模块命中了openssl。这一切看起来都很安全,但是如果ejabberd试图阻止对第三方代码的调用(或者如果运行了SELinux或其他类似的东西),那么事情可能会变得很奇怪。我在回复中看到了这个:>>> import _md5
>>> _md5.__file__
'/usr/lib/python2.7/lib-dynload/_md5module.so'
在你的盒子上试试这个然后试着把
^{pr2}$
或者只是import _md5
(将适当的路径更新到您的代码中)在有问题的行之前,然后使用一些跟踪语句。对_hashlib而不是_md5尝试相同的方法(hashlib默认为包装openssl的_hashlib,但如果它没有加载或没有所需的哈希,则返回到_md5、_sha等)。如果不是导入失败/挂起,那么可以尝试调用\u md5.new(salt+clear)并_hashlib.openssl\u md5(盐+清)看看是不是其中之一。在
如果是导入错误,则可能解决了类似的问题here
我不认识ejabberd,所以我不能把他们的解决方案和你的问题联系起来。在
不过,我不得不说:在我所知道的所有python实现中,条件中的=而不是==会引发语法错误,也就是说,程序甚至永远不会进入main while循环。在