Ldap 3 Python Смена пароля

ad_dn = "CN=User,OU=Office,DC=domen,DC=domen"
username = 'User'
new_pwd = 'SD782Jsdaas2'   
newpwd_utf16 = '"{0}"'.format(new_pwd).encode('utf-16-le')
mod_list = [
   (MODIFY_REPLACE, "unicodePwd", newpwd_utf16),
]
conn.modify(ad_dn.format(username), mod_list)

Пытаюсь поменять пароль, выдаёт ошибку:

ldap3.core.exceptions.LDAPChangeError: changes must be a dictionary

Как я могу это решить?


Ответы (2 шт):

Автор решения: Violet
def search_ad(last='*', login='*'):
c.bind()
c.search('ou=Офис,dc=DOMAIN,dc=local',
         '(&(objectCategory=Person)(sn={})(sAMAccountName={}))'.format(last, login), SUBTREE,
         attributes=['sAMAccountName', 'givenName', 'sn', 'cn', 'whenCreated', 'lastLogon', 'pwdLastSet',
                     'msDS-UserPasswordExpiryTimeComputed', 'memberOf', 'ipPhone', 'lockoutTime',
                     'distinguishedName'])
a = c.entries
c.unbind()
return a



place = search_ad(last=login.split(" ")[1])
    for i in place:
            place = str(i['distinguishedName'])
    place = place[place.find(",") + 1:]
    c.bind()
    a = c.extend.microsoft.modify_password(user='cn=' + login + ',' + str(place), new_password=uis_password)
    c.unbind()
→ Ссылка
Автор решения: Dmitry

Спасибо за ваш ответ - но ваш пример ничего не изменил. Пароль сменить не получается. В вашем примере есть поиск - по факту нужен только DN, для примера работы скрипта я могу его получить из PowerShell скриптом:

Get-ADUser -Identity _user_logon_ -Properties 
* | Select-Object _atrr_name_
→ Ссылка