使用python的ldap库,修改AD中用户密码报错
本文介绍了使用python的ldap库,修改AD中用户密码报错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
使用python的ldap库修改AD用户密码,报错信息如下:
LdapErr: DSID-0C090DA1, comment: Unknown extended request OID, data 0, v1db1
代码如下:
import ldap
my_ldap = ldap.initialize(LDAP-URL)
dn = get_dn() # 获取的dn信息是正确的
my_ldap.simple_bind_s(dn, old_pass) # bind_s通过
my_ldap.passwd_s(dn, old_pass, new_pass) # 这里抛出异常
有木有伙伴遇到同样错误的??
注:排除权限问题
解决方案
这个问题终于解决了···
1,因为修改密码需要使用ldaps协议,所以首先需要搭建一个ldap的认证服务器(需要配置域名,因为使用ip有可能connect不上),具体配置步骤可以给我留言,我将免费提供。
2,修改密码的代码如下:
# 修改密码时,不需要老密码的方式
def ldap_update_pass(old_pass, new_pass):
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
my_ldap = ldap.initialize('ldaps://adc.xxx.com:636') # ldaps://adc.xxx.com:636就是你配置的ldaps认证服务器
my_ldap.set_option(ldap.OPT_REFERRALS, 0)
my_ldap.set_option(ldap.OPT_PROTOCOL_VERSION, 3)
my_ldap.set_option(ldap.OPT_X_TLS, ldap.OPT_X_TLS_DEMAND)
my_ldap.set_option(ldap.OPT_X_TLS_DEMAND, True)
my_ldap.set_option(ldap.OPT_DEBUG_LEVEL, 255)
try:
dn = get_dn(3) # 这里获取用户的dn,因为重点是修改密码,所以get_dn()方法细节就不展示出来了
my_ldap.simple_bind_s(dn, old_pass)
unicode_pass = unicode("\"" + str(new_pass) + "\"", "iso-8859-1")
password_value = unicode_pass.encode("utf-16-le")
add_pass = [(ldap.MOD_REPLACE, 'unicodePwd', [password_value])]
my_ldap.modify_s(dn, add_pass)
return True
except Exception, e:
pass
finally:
my_ldap.unbind_s()
del my_ldap
return False
这篇关于使用python的ldap库,修改AD中用户密码报错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文