LDAP修改密码

时间:2016-06-06 14:44:55

标签: python passwords ldap

我有一台Windows 2012 R2服务器和一台LDAP服务器。我写了一个python脚本来修改用户的密码(用户,谁不是管理员,想要修改自己的密码。我还有一个其他功能,当你管理时修改密码,但我不知道#39; t想要设置密码,但要修改它。这是我的代码示例:

ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
ld = ldap.initialize('ldaps://XXX:636')
ld.simple_bind_s('XXXXXXXX@ad2012.local', 'ZZZZZ')

new = {'unicodePwd':[str('"YYYYY"').decode('utf8').encode('utf-16-le')]}
old = {'unicodePwd':[str('"ZZZZZ"').decode('utf8').encode('utf-16-le')]}

ldif = modlist.modifyModlist(old, new)
ld.modify_s('A DN',ldif)

但是当我运行它时,我有一个错误(在最后一行):

  

{' info':' 00000056:AtrErr:DSID-03191083,#1:\ n \ tt:00000056:DSID-03191083,问题1005(CONSTRAINT_ATT_TYPE),数据0,Att 9005a (unicodePwd)\ n',' desc':'约束违规'}

我检查了错误:

  

"指定的网络密码不正确。"

但是,我使用相同的密码连接到用户进行更改。 我尝试用(出)双引号,用(出)utf-8,输入一个真正糟糕的旧密码......但没有任何改变,我总是有同样的错误

如果有人可以帮助我,请提前谢谢。

1 个答案:

答案 0 :(得分:0)

我实现了更改密码,这里是代码:

#!/usr/bin/env python
#coding:utf-8

import ldap
import ldap.modlist as modlist

ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
ld = ldap.initialize('ldaps://XXX:636')
ld.simple_bind_s('XXX@ad2012.local', XXX')

newpassword = 'YYY'
oldpassword = 'ZZZ'
newpassword = unicode('\"' + newpassword + '\"').encode('utf-16-le')
oldpassword = unicode('\"' + oldpassword + '\"').encode('utf-16-le')
pass_mod = [(ldap.MOD_DELETE, 'unicodePwd', [oldpassword]), (ldap.MOD_ADD, 'unicodePwd', [newpassword])]
result = ld.modify_s('A DN', pass_mod)

我希望它能帮助别人! :d