パスワードを変更できるようにするために、Active Directory と格闘しています。有益な情報がたくさん見つかりましたが、まだエラーが続いています。
いくつかのコード:
import com.unboundid.ldap.sdk._
import com.unboundid.util.ssl._
def main(args: Array[String]) : Unit = {
var sslUtil = new SSLUtil( new TrustAllTrustManager() )
var con = new LDAPConnection(sslUtil.createSSLSocketFactory())
con.connect("ldap.example.net", 636)
con.bind("ldapadmin", "adminpasswd")
val newPass = "Jfi8ZH8#k".getBytes("UTF-16LE");
val modRequest = new ModifyRequest("dn: cn=Tester Dude,ou=Lab,ou=Org,ou=Provider,DC=example,DC=net",
"changetype: modify",
"replace: unicodePwd",
"unicodePwd: " + '"' + newPass + '"')
println("\nGoing to try to set password to " + newPass + " with: " + modRequest.toString())
try {
con.modify(modRequest)
} catch {
case lde:LDAPException => println("failed LDAPException: " + lde.toString())
}
}
したがって、これを実行時エラーとして取得します。
[B@6dd1627e にパスワードを設定しようとしています: ModifyRequest(dn='cn=Tester Dude,ou=Lab,ou=Org,ou=Provider,DC=example,DC=net', mods={REPLACE unicodePwd} )
失敗した LDAPException: LDAPException(resultCode=53 (実行したくない)、errorMessage='0000001F: SvcErr: DSID-031A11E5、問題 5003 (WILL_NOT_PERFORM)、データ 0 '、diagnosticMessage='0000001F: SvcErr: DSID-031A11E5、問題 5003 (WILL_NOT_PERFORM) )、データ 0 ')
したがって、私が知っていることの中で、このエラーが発生する可能性があります。
- SSL経由で接続していません。(ここではそうではなく、netstat を使用してポート 636 を使用していることを 100% 確認しました)
- Active Directory のパスワード ポリシーに違反するパスワードを渡す。(正確なパスワードを手動で設定することをテストしました。短い/単純なパスワードは拒否されますが、このコードで使用しているパスワードは受け入れられます)
パスワードを余分な引用符で囲む場合と付けない場合の両方で試しました。
これまでで最も有用な情報源は次のとおりです。
http://www.dirmgr.com/blog/2010/8/26/ldap-password-changes-in-active-directory.html
しかし、私はそこにあるすべての提案を使い果たしました (そして他の多くの場所)。
また、手動で追加された別の有効なユーザーのパスワードを設定するなど、他にもいくつか試しました。(これもsdk経由で追加されました。)
他の操作は問題なく動作しています。無関係なコードを削除しましたが、問題なくユーザーの検索、属性の出力、追加、および削除を行うことができました。しかし、この変更リクエストは失敗します。関連付けられている電子メールなど、他の属性を変更するように ModifyRequest を設定すると、それも正常に機能します。