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の要件ですか?
編集:dn
user.entry_get_dn()
にコードを変更した後
は、時間の約90%を動作するように見えました。今日、これらのテストをもう一度実行した後は、一貫して動作するように見えます。私はこれをチョークして、ディレクトリブラウザで新鮮なデータを表示しないようにします。
自分でoasswordをハッシュしないでください。サーバーにそれをさせてください。 – EJP
@EJPサーバーに処理させようとすると、結果はプレーンテキストのパスワードになります。これを修正するサーバー側の設定があるかもしれませんが、私の状況では有効になっていません。 –
これで、サーバーを誤って構成しました。 – EJP