X-Git-Url: https://code.citadel.org/?p=citadel.git;a=blobdiff_plain;f=citadel%2Fldap.c;fp=citadel%2Fldap.c;h=f7f415a8affe0a3ddbcb7085a1082b2db45f00c9;hp=6fd3fd3093afcd2925cd57bbba12c9bb2880a4f3;hb=7ae9feb654f41173f99e96ba617d018e990da80c;hpb=3c56420d6f7066dd0d09cd404617dee3c429ab18 diff --git a/citadel/ldap.c b/citadel/ldap.c index 6fd3fd309..f7f415a8a 100644 --- a/citadel/ldap.c +++ b/citadel/ldap.c @@ -60,7 +60,7 @@ int ctdl_ldap_initialize(LDAP **ld) { int CtdlTryUserLDAP(char *username, char *found_dn, int found_dn_size, char *fullname, int fullname_size, - uid_t *uid) + uid_t *uid, int lookup_based_on_username) { LDAP *ldserver = NULL; int i; @@ -96,10 +96,16 @@ int CtdlTryUserLDAP(char *username, tv.tv_usec = 0; if (config.c_auth_mode == AUTHMODE_LDAP_AD) { - snprintf(searchstring, sizeof(searchstring), "(sAMAccountName=%s)", username); + if (lookup_based_on_username != 0) + snprintf(searchstring, sizeof(searchstring), "(displayName=%s)",username); + else + snprintf(searchstring, sizeof(searchstring), "(sAMAccountName=%s)", username); } else { - snprintf(searchstring, sizeof(searchstring), "(&(objectclass=posixAccount)(uid=%s))", username); + if (lookup_based_on_username != 0) + snprintf(searchstring, sizeof(searchstring), "(cn=%s)",username); + else + snprintf(searchstring, sizeof(searchstring), "(&(objectclass=posixAccount)(uid=%s))", username); } syslog(LOG_DEBUG, "LDAP search: %s", searchstring); @@ -157,29 +163,31 @@ int CtdlTryUserLDAP(char *username, ldap_value_free(values); } } - - if (config.c_auth_mode == AUTHMODE_LDAP_AD) { - values = ldap_get_values(ldserver, search_result, "objectGUID"); - if (values) { - if (values[0]) { - if (uid != NULL) { - *uid = abs(HashLittle(values[0], strlen(values[0]))); - syslog(LOG_DEBUG, "uid hashed from objectGUID = %d", *uid); + /* If we know the username is the CN/displayName, we already set the uid*/ + if (lookup_based_on_username==0) { + if (config.c_auth_mode == AUTHMODE_LDAP_AD) { + values = ldap_get_values(ldserver, search_result, "objectGUID"); + if (values) { + if (values[0]) { + if (uid != NULL) { + *uid = abs(HashLittle(values[0], strlen(values[0]))); + syslog(LOG_DEBUG, "uid hashed from objectGUID = %d", *uid); + } } + ldap_value_free(values); } - ldap_value_free(values); } - } - else { - values = ldap_get_values(ldserver, search_result, "uidNumber"); - if (values) { - if (values[0]) { - syslog(LOG_DEBUG, "uidNumber = %s", values[0]); - if (uid != NULL) { - *uid = atoi(values[0]); + else { + values = ldap_get_values(ldserver, search_result, "uidNumber"); + if (values) { + if (values[0]) { + syslog(LOG_DEBUG, "uidNumber = %s", values[0]); + if (uid != NULL) { + *uid = atoi(values[0]); + } } + ldap_value_free(values); } - ldap_value_free(values); } } @@ -244,6 +252,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]); for(i=0;i