我正在与 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 连接。(这里不是这种情况,我已经检查了 100% 确定我使用 netstat 在端口 636 上)
- 传递违反 Active Directory 密码策略的密码。(我已经测试过手动设置该确切密码;它会拒绝短/简单密码,但它接受我在此代码中使用的密码)
我已经尝试过密码周围有和没有额外的引号。
迄今为止最有用的信息来源是:
http://www.dirmgr.com/blog/2010/8/26/ldap-password-changes-in-active-directory.html
但是我已经用尽了那里(以及许多其他地方)的所有建议。
我还尝试了其他几件事,包括为手动添加的不同有效用户设置密码。(这个也是通过 sdk 添加的。)
其他操作正常。我已经删除了不相关的代码,但我能够毫无问题地搜索、打印属性、添加和删除用户;但此修改请求失败。如果我将 ModifyRequest 设置为更改其他一些属性,例如关联的电子邮件,那也可以正常工作。