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 (2)

  1. 匿名 より:

    昔、「おしいれのぼうけん」ていう絵本がありました。いまでもトラウマです…ねずみばぁさん…。 そんなノスタルジックな想いはともかく、現実に戻って OpenLDAP にパスワードを同期する方法について考察します。

  2. 匿名 より:

    ある調べごとがあり、「’watch node’」 という単語を 某検索エンジンに放り込んだところ、以下の表示が。 もしかして: ‘watch nude ‘ し、し、しっ、失礼なっっっ! それはともかく

Skip to main content