为了账号安全,请及时绑定邮箱和手机立即绑定

C/Go 中的 LDAP:尝试设置 unicodePwd 时出现错误代码 53“服务器不愿意执行”

C/Go 中的 LDAP:尝试设置 unicodePwd 时出现错误代码 53“服务器不愿意执行”

Go
呼如林 2021-11-15 16:07:39
所以我正在用 Go 编写一个程序,由于 CGo,我使用了 C 绑定,并且我正在使用 ldap 来执行搜索、添加和修改操作。我可以设法做到这一切,但现在我试图在 unicodePwd mod_type 中设置密码,但我似乎无法解决错误 53:服务器不愿意执行。我知道很多东西都会导致这个错误,所以:我与 ldaps 连接。为了测试目的,我硬编码了一个由 10 个字符组成的密码,开头和结尾都带有双引号,并在 UTF-16LE、Base64 中得到了它。密码有小写字母、大写字母和标点符号。这是我的一些代码示例,我现在只是在测试东西,所以编码真的很糟糕:设置选项:C.ldap_set_option(l, LDAP_OPT_PROTOCOL_VERSION, unsafe.Pointer(&version))C.ldap_set_option(l, LDAP_OPT_REFERRALS, unsafe.Pointer(&v))初始化:C.ldap_initialize(&l, C.CString("ldaps://**.**.**.**:636"))捆绑:rc := C.ldap_simple_bind_s(l, C.CString("CN=Administrator,CN=Users,DC=intra,DC=localdomain,DC=com"), C.CString("**********"))现在是重要的部分,添加一个带有密码的用户:add_user(l, "ldaps://**.**.**.**", "636", "CN=Administrator,CN=Users,DC=intra,DC=localdomain,DC=com", "OU=*******,DC=intra,DC=localdomain,DC=com")func add_user(l *C.LDAP, host string, port string, login string, container string) {var mods [5]*C.LDAPModStrvar modClass, modCN, modSN, modPass C.LDAPModStrvar vclass [5]*C.charvar vcn [4]*C.charvar vsn [2]*C.charvar vpass [2]*C.charmodClass.mod_op = 0modClass.mod_type = C.CString("objectclass")vclass[0] = C.CString("top")vclass[1] = C.CString("person")vclass[2] = C.CString("organizationalPerson")vclass[3] = C.CString("User")vclass[4] = nilmodClass.mod_vals = &vclass[0]modCN.mod_op = 0modCN.mod_type = C.CString("cn")vcn[0] = C.CString("john")vcn[1] = nilmodCN.mod_vals = &vcn[0]modSN.mod_op = 0modSN.mod_type = C.CString("sn")vsn[0] = C.CString("mclane")vsn[1] = nilmodSN.mod_vals = &vsn[0]modPass.mod_op = 0modPass.mod_type = C.CString("unicodePwd")vpass[0] = C.CString("IgBTAHcAZQBlAHQATgBlAHcAUAB3AGQAMQAyADMAIQAiAA==")vpass[1] = nilmodPass.mod_vals = &vpass[0]mods[0] = &modClassmods[1] = &modCNmods[2] = &modSNmods[3] = &modPassmods[4] = nil我可能在这里遗漏了一些明显的东西,因为我对 GO 和 LDAP 有点陌生,但是如果您能帮我解决这个问题,我将不胜感激。我不知道这是否相关,但程序连接到 Windows Server 2012 R2 的 Active Directory,它在虚拟机中的同一台计算机上运行。另外,我是这里的新手,如果对您来说更容易,我可以在此处发布我的所有代码,但我认为仅发布重要步骤可能会更好。
查看完整描述

1 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

我不知道是否有人会感兴趣,但我在@kostix 的帮助下找到了一个解决方案,我想我会分享:C 中的扩展修改操作(使用 CGO)不起作用,但是使用一个简单的修改操作使用正确编码的 go-ldap 允许我在 Windows AD 上更改用户密码。


查看完整回答
反对 回复 2021-11-15
  • 1 回答
  • 0 关注
  • 349 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信