Python 3.5,ldap3和modify_password()

时间:2017-01-23 21:47:38

标签: python ldap python-3.5 ldap3

我一直在试图通过脚本发送更新我自己密码的请求。这是代码:

#!/usr/bin/python3.5

from ldap3 import Server, Connection, NTLM, ALL

server = Server('ldap://192.168.0.80', use_ssl=True)

conn = Connection(server, user="local\\dctest", password="Pa55word1", authentication=NTLM, auto_bind=True)

dn = "CN=dctest,CN=Users,DC=home,DC=local"

conn.extend.microsoft.modify_password(dn, new_password="Pa55word2", old_password="Pa55word1")

我得到的错误是:

  

{'dn':'','type':'modifyResponse','description':   'unwillingToPerform','推荐':无,'结果':53,'消息':   '00002077:SvcErr:DSID-03190E44,问题5003(WILL_NOT_PERFORM),   数据0 \ n \ x00'}

知道我做错了吗?

我可以完全访问DC,并确保密码正确等等。我已经阅读了所有文档,而且无法理解它。

任何帮助都会很棒!!

4 个答案:

答案 0 :(得分:1)

版本0.9.4.2的ldap3.modify_password()不能与Active Directory一起使用,因为它使用了AD不支持的密码修改扩展操作。 MS似乎找到了way to do things different with AD。 ldap3作者(cannatag)意识到了这一点,并在之后不久添加了ad_modify_password()。您必须使用较新版本的ldap3。

答案 1 :(得分:1)

好的,谢谢大家的帮助,以及github上的开发人员。

我用来完成这项工作的代码是......

from ldap3 import Server, Connection

server = Server('ldaps://<AD server address>', use_ssl=True)
conn = Connection(server, user="<domain>\\<username>", password="<current password>", auto_bind=True)

dn = 'CN=<username>,OU=Users,DC=<dominaname>'

res = conn.extend.microsoft.modify_password(dn, old_password='<current password>', new_password='<new password>')
print(res)

以为我发布了工作解决方案,因为互联网上似乎没有任何内容!上帝加快了我的伙伴们的速度。

答案 2 :(得分:0)

尝试使用ldaps://而不是ldap://。或者根本不使用该方案,并在服务器定义中传递use_ssl = True。 AD连接必须使用ssl来修改密码。

答案 3 :(得分:0)

您使用的是哪个版本的ldap3?从ldap3 2.2版的源代码中可以看出,该函数应该以类似的方式使用:

#!/usr/bin/python3.5
from ldap3 import Server, Connection, NTLM, ALL
server = Server('ldap://192.168.0.80', use_ssl=True)
conn = Connection(server, user="local\\dctest", password="Pa55word1", authentication=NTLM, auto_bind=True)
res = ldap3.extend.microsoft.modifyPassword(conn, user, "new_Pa55word2", "old_Pa55word1")