7
votes

Comment résoudre "Will_Not_perform" MS AD Répondre lorsque vous essayez de changer de mot de passe dans Scala avec le SDK LDAP non borné?

Je lance avec Active Directory, essayant de me laisser changer un mot de passe. J'ai trouvé des tonnes d'informations utiles, mais j'obtiens toujours une erreur persistante.

Certains code: xxx

donc, je reçois cela comme une erreur d'exécution:

va essayer de définir le mot de passe sur [B @ 6DD1627E avec : ModifyRequest (dn = 'cn = testeur DUDE, OU = LAB, OU = ORG, OU = FOURNISSEUR, DC = EXEMPLE, DC = NET', MODS = {Remplacer UNICODEPWD})

Échec de la LDAPException: LDAPException (résultatcode = 53 (réveil à exécuter), errorormageage = '0000001F: SVCERR: DSID-031A11E5, Problème 5003 (Will_Not_perform), Données 0 ', diagnosticMessage =' 0000001F: SVCERR: DSID-031A11E5, Problème 5003 (Will_Not_perform), Données 0 ')

Donc, parmi les choses que je connais peut causer cette erreur:

  1. ne connectez pas via SSL. (Pas le cas ici, et j'ai vérifié à 100% sûr que je suis sur le port 636 à l'aide de NetStat)
  2. Passer un mot de passe qui enfreint la politique de mot de passe Active Directory. (J'ai testé le réglage de ce mot de passe exact manuellement; il rejettera des mots de passe courts / simples, mais cela accepte celui que j'utilise dans ce code)

    Je l'ai essayé à la fois avec et sans les citations supplémentaires autour du mot de passe.

    La source d'informations la plus utile ADUNFAR était la suivante:

    http://www.dirmgr.com/blog /2010/8/26/lapap-passwordword-change-in-active-directory.html

    Mais j'ai épuisé toutes les suggestions là-bas (et beaucoup d'autres endroits).

    J'ai également essayé plusieurs autres choses, y compris la définition du mot de passe pour un autre utilisateur valide qui a été ajouté manuellement. (Celui-ci a été ajouté via le SDK également.)

    D'autres opérations fonctionnent bien. J'ai supprimé le code non pertinent mais j'ai pu rechercher, imprimer des attributs, ajouter et supprimer un utilisateur sans problème; Mais cette demande de modification échoue. Si je définis le ModifyRequest pour modifier un autre attribut, tel que le courrier électronique associé, cela fonctionne également bien.


0 commentaires

4 Réponses :


1
votes

mon hypothèse est "unicodepwd:" + '"' + newpass + '"' code> est contourner votre codage (comme chaîne code> doit être converti en octets à nouveau et je Pari, il n'utilise pas le bon codage).

Essayez d'utiliser la version de MofifyRequest qui prend des objets modification code>, puis utilisez le constructeur qui prend la valeur des attributs comme octets em>.

val newPass = "\"Jfi8ZH8#k\"".getBytes("UTF-16LE")
// note the dquotes inside the string

val mod = new Modification(ModificationType.REPLACE, "unicodePwd", newPass)


1 commentaires

Il s'avère qu'il doit être codé UTF-16le, puis converti en base64. Val NewVass = javax.xml.bind.dataTypeconverter.printbase64binary (('"" + "JFI 8ZH8 # K" +' "'). GetByte S (" utf-16le ")) Postera cela comme une réponse quand capable.



4
votes

Il s'avère qu'il doit être codé UTF-16le, puis converti en base64.

val newPass = javax.xml.bind.DatatypeConverter.printBase64Binary(('"'+"Jfi8ZH8#k"+'"').getBytes("UTF-16LE"))


0 commentaires

11
votes

Connexion non sécurisée suffisamment sécurisée

Devis de: http://support.microsoft.com/kb/269190 P>

Pour modifier cet attribut, le client doit avoir une connexion SSL (Secure Socket de 128 bits) sur le serveur. P> blockquote>

Donc, même si tout le reste a l'air bien, vous pouvez toujours obtenir un svcerr: dsid-03190f4c, problème 5003 (Will_Not_perform) code> Si la connexion est jugée non sécurisée. P> Manquant de droits d'administrateur h2>

une demande de modification peut échouer si vous essayez de faire un remplacer code> sans droits insuffisants. P>

dn: CN=johndoe,OU=Users,DC=example,DC=com
changetype: modify
delete: unicodePwd
unicodePwd:: base64(utf16le(quoted(old password)))
-
add: unicodePwd
unicodePwd:: base64(utf16le(quoted(new password)))
-


0 commentaires

0
votes

J'ai également trébuché sur cette question. J'utilise novell.directory.ldap.nettandard bibliothèque pour C #. La question dans mon cas était que le mot de passe doit être cité. Ce code a fonctionné pour moi: xxx


0 commentaires