ADSIを使用してOpenLDAPにパスワードを同期する
VBScript で書かれていますので、拡張子を vbs として保存してください。
このソースの解説はこちら。
【IDM】Active Directory から OpenLDAP への パスワードの同期 その2 ~ ADSI でパスワードを同期する
-------------------------------
On Error Resume Next
strDomain = "dc=example64,dc=jp"
strUserName = "testuser01"
strPassword = "ABC123@"
strLdapServer = "fedora01.example-fedora.jp"
strLdapUser = "uid=" & strUserName & ",ou=People,dc=example-fedora,dc=jp"
strManagerDN = "cn=Manager,dc=example-fedora,dc=jp"
strManagerPassword = "password"
'ユーザーを検索
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConnection
objCommand.CommandText = _
"<LDAP://" & strDomain & ">;" & _
"(&(objectCategory=person)(objectClass=user)" & _
"(sAMAccountName=" & strUserName & "));" & _
"DistinguishedName,sAMAccountName,unixUserPassword;" & _
"subtree"
Set objRecordSet = objCommand.Execute
'ユーザーのパスワード変更
Do Until objRecordset.EOF
strDN = objRecordset.Fields("DistinguishedName")
objRecordset.movenext
Loop
Set objUser = GetObject("LDAP://" & strDN)
objUser.SetPassword strPassword
objUser.SetInfo
'AD内でunixUserPassword が同期されるまで待つ
Wscript.Sleep 3000
'変更後のパスワードを取得
Set objRecordSet2 = objCommand.Execute
Do Until objRecordset2.EOF
arrUNIXUSERPASSWORD = objRecordset2.Fields("unixUserPassword")
For i = 1 To LenB(arrUNIXUSERPASSWORD(0))
strA = MidB(arrUNIXUSERPASSWORD(0), i, 1)
strB = AscB(strA)
strUnixUserPassword = strUnixUserPassword & Chr(strB)
Next
objRecordset2.movenext
Loop
'OpenLDAPに接続
set objLDAP = GetObject("LDAP:")
set objUser = objLDAP.OpenDSObject("LDAP://" & strLdapServer & "/" & strLdapUser, _
strManagerDN, _
strManagerPassword, _
0)
'パスワードを変更
objUser.Put "userPassword", "{CRYPT}" & strUnixUserPassword
objUser.SetInfo
'パスワードが変更されたかどうかをチェック
set objChkUser = objLDAP.OpenDSObject("LDAP://" & strLdapServer, _
strLdapUser, _
strPassword, _
0)
If Err.Number = 0 then
Wscript.Echo "パスワードは正しく同期されました(" & strLdapUser & ")"
else
Wscript.Echo "パスワードの同期でエラーが発生しました(" & strLdapUser & ")"
End If
Comments
- Anonymous
January 01, 2003
The comment has been removed - Anonymous
January 01, 2003
ある調べごとがあり、「'watch node'」 という単語を 某検索エンジンに放り込んだところ、以下の表示が。 もしかして: 'watch nude ' し、し、しっ、失礼なっっっ! それはともかく