X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fldap.c;h=8e51087b9550d6c93168139361d35b276ac7ab30;hb=219bbe065f3a3e1117f3fadd3e28164098d4f625;hp=eebf6545d62dddcab0f090d6a124de4294db0b3f;hpb=7665351daed3df378c8711d43d36b08bb2fcf323;p=citadel.git diff --git a/citadel/ldap.c b/citadel/ldap.c index eebf6545d..8e51087b9 100644 --- a/citadel/ldap.c +++ b/citadel/ldap.c @@ -22,6 +22,7 @@ int ctdl_require_ldap_version = 3; #include "citadel_ldap.h" #include "ctdl_module.h" #include "user_ops.h" +#include "internet_addressing.h" #include "config.h" #ifdef HAVE_LDAP @@ -40,7 +41,7 @@ int ctdl_ldap_initialize(LDAP **ld) { snprintf(server_url, sizeof server_url, "ldap://%s:%d", CtdlGetConfigStr("c_ldap_host"), CtdlGetConfigInt("c_ldap_port")); ret = ldap_initialize(ld, server_url); if (ret != LDAP_SUCCESS) { - syslog(LOG_ALERT, "LDAP: Could not connect to %s : %s", server_url, strerror(errno)); + syslog(LOG_ERR, "ldap: could not connect to %s : %m", server_url); *ld = NULL; return(errno); } @@ -77,13 +78,13 @@ int CtdlTryUserLDAP(char *username, striplt(CtdlGetConfigStr("c_ldap_bind_dn")); striplt(CtdlGetConfigStr("c_ldap_bind_pw")); - syslog(LOG_DEBUG, "LDAP bind DN: %s", CtdlGetConfigStr("c_ldap_bind_dn")); + syslog(LOG_DEBUG, "ldap: bind DN: %s", CtdlGetConfigStr("c_ldap_bind_dn")); i = ldap_simple_bind_s(ldserver, (!IsEmptyStr(CtdlGetConfigStr("c_ldap_bind_dn")) ? CtdlGetConfigStr("c_ldap_bind_dn") : NULL), (!IsEmptyStr(CtdlGetConfigStr("c_ldap_bind_pw")) ? CtdlGetConfigStr("c_ldap_bind_pw") : NULL) ); if (i != LDAP_SUCCESS) { - syslog(LOG_ALERT, "LDAP: Cannot bind: %s (%d)", ldap_err2string(i), i); + syslog(LOG_ERR, "ldap: Cannot bind: %s (%d)", ldap_err2string(i), i); return(i); } @@ -105,7 +106,7 @@ int CtdlTryUserLDAP(char *username, } } - syslog(LOG_DEBUG, "LDAP search: %s", searchstring); + syslog(LOG_DEBUG, "ldap: search: %s", searchstring); (void) ldap_search_ext_s( ldserver, /* ld */ CtdlGetConfigStr("c_ldap_base_dn"), /* base */ @@ -124,7 +125,7 @@ int CtdlTryUserLDAP(char *username, * the search succeeds. Instead, we check to see whether search_result is still NULL. */ if (search_result == NULL) { - syslog(LOG_DEBUG, "LDAP search: zero results were returned"); + syslog(LOG_DEBUG, "ldap: zero search results were returned"); ldap_unbind(ldserver); return(2); } @@ -137,7 +138,7 @@ int CtdlTryUserLDAP(char *username, user_dn = ldap_get_dn(ldserver, entry); if (user_dn) { - syslog(LOG_DEBUG, "dn = %s", user_dn); + syslog(LOG_DEBUG, "ldap: dn = %s", user_dn); } if (CtdlGetConfigInt("c_auth_mode") == AUTHMODE_LDAP_AD) { @@ -145,7 +146,7 @@ int CtdlTryUserLDAP(char *username, if (values) { if (values[0]) { if (fullname) safestrncpy(fullname, values[0], fullname_size); - syslog(LOG_DEBUG, "displayName = %s", values[0]); + syslog(LOG_DEBUG, "ldap: displayName = %s", values[0]); } ldap_value_free(values); } @@ -155,7 +156,7 @@ int CtdlTryUserLDAP(char *username, if (values) { if (values[0]) { if (fullname) safestrncpy(fullname, values[0], fullname_size); - syslog(LOG_DEBUG, "cn = %s", values[0]); + syslog(LOG_DEBUG, "ldap: cn = %s", values[0]); } ldap_value_free(values); } @@ -168,7 +169,7 @@ int CtdlTryUserLDAP(char *username, if (values[0]) { if (uid != NULL) { *uid = abs(HashLittle(values[0], strlen(values[0]))); - syslog(LOG_DEBUG, "uid hashed from objectGUID = %d", *uid); + syslog(LOG_DEBUG, "ldap: uid hashed from objectGUID = %d", *uid); } } ldap_value_free(values); @@ -178,7 +179,7 @@ int CtdlTryUserLDAP(char *username, values = ldap_get_values(ldserver, search_result, "uidNumber"); if (values) { if (values[0]) { - syslog(LOG_DEBUG, "uidNumber = %s", values[0]); + syslog(LOG_DEBUG, "ldap: uidNumber = %s", values[0]); if (uid != NULL) { *uid = atoi(values[0]); } @@ -197,7 +198,7 @@ int CtdlTryUserLDAP(char *username, ldap_unbind(ldserver); if (!user_dn) { - syslog(LOG_DEBUG, "No such user was found."); + syslog(LOG_DEBUG, "ldap: No such user was found."); return(4); } @@ -213,20 +214,20 @@ int CtdlTryPasswordLDAP(char *user_dn, const char *password) int i = (-1); if (IsEmptyStr(password)) { - syslog(LOG_DEBUG, "LDAP: empty passwords are not permitted"); + syslog(LOG_DEBUG, "ldap: empty passwords are not permitted"); return(1); } - syslog(LOG_DEBUG, "LDAP: trying to bind as %s", user_dn); + syslog(LOG_DEBUG, "ldap: trying to bind as %s", user_dn); i = ctdl_ldap_initialize(&ldserver); if (i == LDAP_SUCCESS) { ldap_set_option(ldserver, LDAP_OPT_PROTOCOL_VERSION, &ctdl_require_ldap_version); i = ldap_simple_bind_s(ldserver, user_dn, password); if (i == LDAP_SUCCESS) { - syslog(LOG_DEBUG, "LDAP: bind succeeded"); + syslog(LOG_DEBUG, "ldap: bind succeeded"); } else { - syslog(LOG_DEBUG, "LDAP: Cannot bind: %s (%d)", ldap_err2string(i), i); + syslog(LOG_DEBUG, "ldap: Cannot bind: %s (%d)", ldap_err2string(i), i); } ldap_set_option(ldserver, LDAP_OPT_REFERRALS, (void *)LDAP_OPT_OFF); ldap_unbind(ldserver); @@ -250,7 +251,7 @@ int vcard_set_props_iff_different(struct vCard *v,char *propname,int numvals, ch if (strcmp(vals[i],oldval)) break; } if (i!=numvals) { - syslog(LOG_DEBUG, "LDAP: vcard property %s, element %d of %d changed from %s to %s\n", propname, i, numvals, oldval, vals[i]); + syslog(LOG_DEBUG, "ldap: vcard property %s, element %d of %d changed from %s to %s\n", propname, i, numvals, oldval, vals[i]); for(i=0;i 512) { + syslog(LOG_ERR, "ldap: can't fit all email addresses into user record"); + } + else { + if (!IsEmptyStr(emailaddrs)) { + strcat(emailaddrs, "|"); + } + strcat(emailaddrs, mail[q]); + } + } + } + } + } + + /* free the results */ + ldap_msgfree(search_result); + + /* unbind so we can go back in as the authenticating user */ + ldap_unbind(ldserver); + return(0); +} + #endif /* HAVE_LDAP */