用于ldap密码属性的Golang utf16le编码

时间:2016-05-20 20:05:32

标签: go ldap

我尝试使用Go中的ldap重置MS Active Directory密码属性。 AD无法与ldap.PasswordModifyRequest很好地配对,因此我使用ldap.NewModifyRequest。 (使用gopkg.in/ldap.v2)

AD将接受引号括起来的密码和utf16le编码,在Python中我可以使用

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)

我怎么能在Go中这样做?使用ldap.NewModifyRequestReplace我可以更改其他属性,但我需要传递Request []string以获取更新后的值,这需要是我的编码密码,而且我需要;当我玩utf16.Encode ...

时,我遇到了类型不匹配的问题
modify := ldap.NewModifyRequest(dn)
modify.Replace("unicodePwd", []string{"encodedsecret"})

感谢。

1 个答案:

答案 0 :(得分:3)

您可以使用golang.org/x/text/encoding/unicode包将字符串编码为UTF16。

使用这个包你可以这样写:

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