使用C代码,我试图在Debian拉伸服务器上使用GSSAPI / SASL绑定到LDAP服务器。
我初始化一个kerberos凭证缓存,然后使用环境变量KRB5CCNAME
使LDAP调用知道该缓存的位置。这是代码:
#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
答案 0 :(得分:0)
事实证明,我正在使用的代码从libsasl2-modules-gssapi-heimdal
包中调用了一个库。但是,在Debian Stretch中,此软件包被破坏了:它是针对MIT库而不是针对Heimdal库构建的,从而破坏了该软件包的目的。
为解决此问题,我使用Debian Bug #880393: libsasl2-modules-gssapi-heimdal seems built against MIT处的解决方案构建了libsasl2-modules-gssapi-heimdal
的本地版本。