Modify windows ad password
Yuan-Chung Hsiao
ychsiao at gmail.com
Tue Sep 1 16:37:47 CEST 2009
Hi
I use python-ldap(2.3.8) to modify AD's user password.
When I run it, the password change done, it always show traceback message.
Traceback (most recent call last):
File "ldapauth.py", line 141, in <module>
modifyAD('userid','passwordblah')
File "ldapauth.py", line 105, in modifyAD
conn.modify_s(dn, attr)
File "c:\lang\python\lib\site-packages\ldap\ldapobject.py", line
327, in modify_s
msgid = self.modify(dn,modlist)
File "c:\lang\python\lib\site-packages\ldap\ldapobject.py", line
324, in modify
return self.modify_ext(dn,modlist,None,None)
File "c:\lang\python\lib\site-packages\ldap\ldapobject.py", line
297, in modify_ext
return self._ldap_call(self._l.modify_ext,dn,modlist,EncodeControlTuples(serverctrls),EncodeControlTuples(clientctrls))
File "c:\lang\python\lib\site-packages\ldap\ldapobject.py", line 96,
in _ldap_call
result = func(*args,**kwargs)
TypeError: argument 1 must be string, not None
snippets code:
def modifyAD(username, password):
LDAP_SERVER = 'ldaps://myad:636'
LDAP_ADMIN = admin at myad'
LDAP_PASSWD = ''
BASE_DN = ''
searchScope = ldap.SCOPE_SUBTREE
conn = ldap.initialize(LDAP_SERVER)
ldap.set_option(ldap.OPT_X_TLS_CACERTFILE, '-ad.pem')
ldap.set_option(ldap.OPT_REFERRALS,0)
conn.protocol_version = ldap.VERSION3
conn.bind_s(LDAP_ADMIN, LDAP_PASSWD)
searchFilter = 'cn='+username
attrs = ['unicodePwd']
ldap_result_id = conn.search_s(BASE_DN, searchScope, searchFilter, attrs)
if (ldap_result_id == []):
print 'user not found'
else:
newPassword = ('"%s"' % password).encode('utf-16-le')
for dn,entry in ldap_result_id:
attr = [( ldap.MOD_REPLACE, 'unicodePwd', newPassword)]
try:
conn.modify_s(dn, attr)
except ldap.LDAPError, error:
print 'error',error
conn.unbind_s()
Does anybody known how to solve?
Best regards,
ychsiao
More information about the python-ldap
mailing list