2016-05-20 4 views
1

Ich versuche, ein MS Active Directory-Passwort-Attribut mit ldap in Go zurücksetzen. AD wird nicht gut mit ldap.PasswordModifyRequest spielen, also verwende ich ldap.NewModifyRequest. (Mit gopkg.in/ldap.v2)Golang utf16le Codierung für ldap Passwort-Attribut

AD wird das Passwort in Anführungszeichen und Utf16LE codiert umgeben akzeptieren, in Python ich diese

unicode_pass = unicode("\"secret\"", "iso-8859-1") 
password_value = unicode_pass.encode("utf-16-le") 
mod_attrs = [(ldap.MOD_REPLACE, "unicodePwd", [password_value])] 
l.modify_s(user_dn, mod_attrs) 

mit tun können Wie kann ich dies tun in Go? Mit ldap.NewModifyRequest und Replace kann ich andere Attribute ändern, aber ich brauche Request[]string für den aktualisierten Wert zu übergeben, das mein verschlüsseltes Passwort muss sein, und ich bin mit in Art Mismatches, wenn ich spiele, um mit utf16.Encode ...

modify := ldap.NewModifyRequest(dn) 
modify.Replace("unicodePwd", []string{"encodedsecret"}) 

Danke.

+0

könnten Sie die Fehlermeldungen zur Verfügung stellen? – poopoothegorilla

Antwort

2

Sie können das golang.org/x/text/encoding/unicode-Paket verwenden, um Ihre Zeichenfolge als UTF16 zu codieren.

Mit diesem Paket erhalten Sie so etwas schreiben kann:

utf16 := unicode.UTF16(unicode.LittleEndian, unicode.IgnoreBOM) 

encoded, err := utf16.NewEncoder().String("encodedsecret") 

modify := ldap.NewModifyRequest(dn) 
modify.Replace("unicodePwd", []string{encoded}) 

// do something with modify 
+0

Das hat perfekt funktioniert - danke! – steverippl