2017-01-23 10 views
1

Я вытаскиваю свои волосы, пытаясь отправить запрос на обновление собственного пароля с помощью скрипта. вот код:Python 3.5, ldap3 и modify_password()

#!/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") 

ошибка, что я получаю:

{ 'дп': '', 'тип': 'modifyResponse', 'Описание': 'unwillingToPerform', 'рефералов': Нет, 'результат': 53, 'сообщение': '00002077: SvcErr: DSID-03190E44, проблема 5003 (WILL_NOT_PERFORM), данные 0 \ п \ x00'}

Любая идея, что Я поступаю неправильно?

У меня есть полный доступ к DC, и я убедился, что пароли правильные и т. Д. Я прочитал все документы и просто не могу опустить его в голову.

любая помощь будет большой !!

+0

Вы можете снова проверить свой пароль. FYI: https: //ldapwiki.com/wiki/WILL_NOT_PERFORM – suiwenfeng

+0

Проверено (я сбросил пароль через AD), я также сделал пользователя администратором домена, чтобы убедиться, что нет проблем с разрешением. – Comm4nd0

+0

Если вы считаете, что это не проблема с паролем, попробуйте, если вы можете создать соединение без NTLM в первую очередь. - authentication = NTLM - – suiwenfeng

ответ

1

OK спасибо всем за вашу помощь и разработчикам на 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) 

Мысль я бы разместить рабочее решение, как там, кажется, не быть любой на интернетах !! Боже, скорость моего товарища пополняет людей.

0

Попробуйте использовать ldaps: // вместо ldap: //. или вообще не использовать схему и передать use_ssl = True в определении сервера. Соединение AD должно использовать ssl для изменения пароля.

+0

ОК, так что это то, что я пробовал, но он все еще не работал: 'code server = Server ('ldaps: //192.168.0.80', get_info = ALL) ' – Comm4nd0

+0

Разве это не' ad_modify_password() ' ? – marabu

+0

как бы выглядела вся линия? – Comm4nd0

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") 
1

ldap3.modify_password() в качестве версии 0.9.4.2 не работает с Active Directory, потому что он использует расширенную операцию изменения пароля, которая не поддерживается AD. MS нашел way to do things different with AD, похоже. Автору ldap3 (cannatag) было известно об этом и вскоре добавлено ad_modify_password(). Вам придется использовать более новую версию ldap3.