0

使用 C 代码我试图在 Debian 延伸服务器上使用 GSSAPI/SASL 绑定到 LDAP 服务器。

我初始化了一个 kerberos 凭据缓存,然后使用环境变量使 LDAP 调用知道该缓存的位置KRB5CCNAME。这是代码:

#include <ldap.h>
#include <krb5.h>
#define CACHE_NAME "MEMORY:ldapconnect"

/* Set up Kerberos credentials cache in CACHE_NAME */
[... omitted to save space ...]

/* Create LDAP object */
char *ldapuri = "ldap://ldap.example.com";
LDAP *ld = NULL;
code = ldap_initialize(&ld, ldapuri);

/* Make the LDAP object be version 3 */
int option = LDAP_VERSION3;
code = ldap_set_option(ld, LDAP_OPT_PROTOCOL_VERSION, &option);

/* Set the environment variable KRB5CCNAME to CACHE_NAME */ 
putenv((char *) "KRB5CCNAME=" CACHE_NAME);

/* Do the LDAP bind using SASL */
code = ldap_sasl_interactive_bind_s(ld, NULL, "GSSAPI", NULL, NULL,
                                    LDAP_SASL_QUIET, ad_interact_sasl,
                                    NULL);

如果我改变CACHE_NAME它的FILE:/tmp/ldapconnect工作原理。只有在CACHE_NAME使用时MEMORY:才会失败。

出于安全性和简单性等原因,我想使用MEMORY:缓存类型,但除了使用缓存类型外,我无法使上述内容正常工作FILE:

我正在使用的相关库:

# debian stretch
libldap-2.4-2      2.4.44+dfsg-5+deb9u2
libsasl2-2         2.1.27~101-g0780600+dfsg-3
libkrb5-26-heimdal 7.5.0+dfsg-2.1
4

1 回答 1

0

事实证明,我使用的代码从libsasl2-modules-gssapi-heimdal包中调用了一个库。然而,在 Debian stretch 中,这个包被破坏了:它是针对 MIT 库而不是 Heimdal 库构建的,因此违背了包的目的。

为了解决这个问题,我在Debian Bug #880393: libsasl2-modules-gssapi-heimdallibsasl2-modules-gssapi-heimdal构建了一个本地版本的解决方案,似乎是针对 MIT 构建的。

于 2018-12-12T11:59:13.187 回答