OpenLDAP 서버에 대해 ldap3 python 모듈을 사용하여 사용자 비밀번호를 변경할 수 없습니다. 비슷한 질문이 before이지만 Active Directory에만 해당됩니다.ldap3 라이브러리를 사용하여 OpenLDAP에서 userPassword를 변경하십시오.
from ldap3.extend.standard.modifyPassword import ModifyPassword
from ldap3.utils.hashed import hashed
password = hashed(HASHED_SALTED_SHA, password)
# or..
password = '{SASL}[email protected]'
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 연결 입니다 :
나는 또한 대체 수정 메시지를 보내려고 시도했습니다. 광고 질문에 대한 대답은 SSL을 통한 연결이 필요합니다. OpenLDAP의 요구 사항입니까?편집 :
변경 한 후 코드가 시간의 약 90 %를 일할 것 같았다 dn
user.entry_get_dn()
에. 이 테스트를 오늘 다시 실행 한 후에는 현재 일관되게 작동합니다. 나는 이것을 디렉토리 브라우저에서 신선한 데이터를 보지 못하도록 묵과 할 것입니다.
직접 oassword를 해시하면 안됩니다. 서버가 그렇게하도록하십시오. – EJP
@EJP 서버에서 처리하도록하면 일반 텍스트 암호가됩니다. 이 문제를 해결할 서버 측 설정이있을 수 있지만 내 상황에서는 사용할 수 없습니다. –
그런 다음 서버를 잘못 구성했습니다. – EJP