我似乎无法使用ldap3 python模块针对OpenLDAP服务器更改用户密码。类似的问题已被问及before,但这是特定于Active Directory的。
我尝试过的事情:
from ldap3.extend.standard.modifyPassword import ModifyPassword
from ldap3.utils.hashed import hashed
password = hashed(HASHED_SALTED_SHA, password)
# or..
password = '{SASL}theuser@domain.com'
modify = ModifyPassword(
connection, user.entry_get_dn(), new_password=password)
resp = modify.send()
print(modify.result)
{'referrals': None, 'result': 0, 'description': 'success', 'type': 'extendedResp', 'message': '', 'responseName': None, 'new_password': None, 'dn': '', 'responseValue': None}
描述说成功,但密码实际上没有改变。
我还尝试发送修改替换消息:
def modify_user_password(self, user, password):
dn = user.entry_get_dn()
hashed_password = hashed(HASHED_SALTED_SHA, 'MyStupidPassword')
changes = {
'userPassword': [(MODIFY_REPLACE, [hashed_password])]
}
logger.debug('dn: ' + dn)
logger.debug('changes: ' + str(changes))
success = self.engage_conn.modify(dn, changes=changes)
if success:
logger.debug('Changed password for: %s', dn)
print(self.engage_conn.result)
else:
logger.warn('Unable to change password for %s', dn)
logger.debug(str(self.engage_conn.result))
raise ValueError('stop')
连接不 SSL连接。 AD问题的答案要求连接通过SSL。这也是OpenLDAP的要求吗?
编辑:
将dn
更改为user.entry_get_dn()
后,代码似乎可以在90%的时间内正常工作。今天再次运行这些测试之后,它现在似乎始终如一。我打算在目录浏览器中查看新数据。
答案 0 :(得分:1)
更改密码似乎与文档中所述相同,并在上面的问题编辑中显示。为了将来参考,此代码似乎有效:
from ldap3 import (
HASHED_SALTED_SHA, MODIFY_REPLACE
)
from ldap3.utils.hashed import hashed
def modify_user_password(self, user, password):
dn = user.entry_get_dn()
hashed_password = hashed(HASHED_SALTED_SHA, password)
changes = {
'userPassword': [(MODIFY_REPLACE, [hashed_password])]
}
success = self.connection.modify(dn, changes=changes)
if not success:
print('Unable to change password for %s' % dn)
print(self.connection.result)
raise ValueError('Unable to change password')
澄清一些事情: