gpt4 book ai didi

c - 如何在 WinLDAP 中使用 ldap_sasl_bind?

转载 作者:可可西里 更新时间:2023-11-01 11:54:08 26 4
gpt4 key购买 nike

我目前使用 ldap_bind_s使用 SEC_WINNT_AUTH_IDENTITY 结构绑定(bind)到我的 C 应用程序中的服务器,但该函数被标记为已弃用。出于这个原因,我想将其更改为 ldap_sasl_bind_s功能。

int main(void) { 
LDAP *ld;
int rc = 0;
char *binddn = "cn=admin,dc=local";
const int version = LDAP_VERSION3;
SEC_WINNT_AUTH_IDENTITY wincreds;
struct berval saslcred;

wincreds.User = "admin";
wincreds.UserLength = 5;
wincreds.Password = "secret";
wincreds.PasswordLength = 6;
wincreds.Domain = NULL;
wincreds.DomainLength = 0;
wincreds.Flags = SEC_WINNT_AUTH_IDENTITY_ANSI;

ld = ldap_initA("localhost", LDAP_PORT);
ldap_set_optionA(ld, LDAP_OPT_PROTOCOL_VERSION, &version);

rc = ldap_bind_sA(ld, binddn, (PCHAR)&wincreds, LDAP_AUTH_DIGEST);
printf("0x%x\n", rc); // It's OK (0x0)
ldap_unbind(ld);

saslcred.bv_val = "secret";
saslcred.bv_len = 6;

rc = ldap_sasl_bind_sA(ld, binddn, "DIGEST-MD5", &saslcred, NULL, NULL, NULL);
printf("0x%x\n", rc); // Returns with 0x59
ldap_unbind(ld)

return 0;
}

ldap_sasl_bind_s 返回 LDAP_PARAM_ERROR 代码。很明显,上面的函数参数是错误的,但是我找不到带有 winldap 和 SASL 绑定(bind)的工作示例代码。

我将不胜感激一些指导,如何使这段代码工作。

最佳答案

ldap_sasl_bind_sA 的最后一个参数不能为 NULL。它必须指向函数可以放置服务器响应的位置 (struct berval*)。

...
struct berval* serverResponse = NULL;
rc = ldap_sasl_bind_sA(ld, binddn, "DIGEST-MD5", &saslcred, NULL, NULL, &serverResponse);
...

关于c - 如何在 WinLDAP 中使用 ldap_sasl_bind?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21501002/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com