2009年12月18日金曜日

Active DirectoryのユーザーのパスワードをLDAPS経由で変更する

Active Directoryに登録されているユーザーのパスワードを変更するときに、unicodePwd属性をreplaceしてしまうと、パスワード履歴のポリシーが効かないことを知った。

http://support.microsoft.com/kb/269190/ja

ここを参考に、unicodePwd属性をDELETE + ADDで処理すると、きちんと履歴のポリシーも反映されることが分かった。
ちなみに、複雑性のチェックは、REPLACEでも問題無かったので気づかなかった。

Pythonのテストプログラムはこんな感じ。


#!/usr/bin/python

import ldap

oldpassword = "pass12345"
newpassword = "newass"

def unicodePassword(plainpasswd):
return ('"%s"' % plainpasswd).encode("utf-16le")

ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_NEVER)
ldap.set_option(ldap.OPT_REFERRALS, 0)
conn = ldap.initialize("ldaps://win2008")
conn.bind_s("Administrator@example.com","adminpass")
username = "testuser1"
filter = "(sAMAccountName=%s)" % username
rt = conn.search_s("dc=example,dc=com", ldap.SCOPE_SUBTREE, filter)
for (dn,attrs) in rt:
if dn:
userdn=dn

print userdn

unipass = unicodePassword(newpassword)
oldunipass = unicodePassword(oldpassword)
mod_attrs = [(ldap.MOD_DELETE, 'unicodePwd', oldunipass)] + [(ldap.MOD_ADD,'unicodePwd',unipass)]
# mod_attrs = [(ldap.MOD_REPLACE, 'unicodePwd', unipass)]
conn.modify_s(userdn, mod_attrs)





0 件のコメント:

コメントを投稿