]> code.citadel.org Git - citadel.git/blobdiff - citadel/ldap.c
LOCK HER UP
[citadel.git] / citadel / ldap.c
index 63f9efa8930dc95d63bf9a0adbbf3d44e4111a42..8c60ee508d353adc637f393c12725a90daf987d3 100644 (file)
@@ -141,6 +141,7 @@ int CtdlTryUserLDAP(char *username,
                        syslog(LOG_DEBUG, "ldap: dn = %s", user_dn);
                }
 
+/* begin - centralize this */
                if (CtdlGetConfigInt("c_auth_mode") == AUTHMODE_LDAP_AD) {
                        values = ldap_get_values(ldserver, search_result, "displayName");
                        if (values) {
@@ -161,6 +162,8 @@ int CtdlTryUserLDAP(char *username,
                                ldap_value_free(values);
                        }
                }
+/* end - centralize this */
+
                /* If we know the username is the CN/displayName, we already set the uid*/
                if (lookup_based_on_username==0) {
                        if (CtdlGetConfigInt("c_auth_mode") == AUTHMODE_LDAP_AD) {
@@ -546,7 +549,7 @@ int extract_email_addresses_from_ldap(char *ldap_dn, char *emailaddrs)
 /*
  * Scan LDAP for users and populate Citadel's user database with everyone
  */
-void CtdlPopulateUsersFromLDAP(void)
+void CtdlSynchronizeUsersFromLDAP(void)
 {
        LDAP *ldserver = NULL;
        int i;
@@ -555,13 +558,13 @@ void CtdlPopulateUsersFromLDAP(void)
        char *user_dn = NULL;
        char searchstring[1024];
        struct timeval tv;
-       // char **values;
+       char **values;
 
        if ((CtdlGetConfigInt("c_auth_mode") != AUTHMODE_LDAP) && (CtdlGetConfigInt("c_auth_mode") != AUTHMODE_LDAP_AD)) {
                return;         // not running LDAP
        }
 
-       syslog(LOG_INFO, "ldap: populating Citadel user database from LDAP");
+       syslog(LOG_INFO, "ldap: synchronizing Citadel user database from LDAP");
 
        if (ctdl_ldap_initialize(&ldserver) != LDAP_SUCCESS) {
                return;
@@ -588,7 +591,7 @@ void CtdlPopulateUsersFromLDAP(void)
        if (CtdlGetConfigInt("c_auth_mode") == AUTHMODE_LDAP_AD) {
                        snprintf(searchstring, sizeof(searchstring), "(&(objectClass=user)(objectClass=person)(!(objectClass=computer)))");
        } else {
-                       snprintf(searchstring, sizeof(searchstring), "(objectClassinetOrgPerson)");
+                       snprintf(searchstring, sizeof(searchstring), "(objectClass=inetOrgPerson)");
        }
 
        syslog(LOG_DEBUG, "ldap: search: %s", searchstring);
@@ -622,6 +625,49 @@ void CtdlPopulateUsersFromLDAP(void)
                user_dn = ldap_get_dn(ldserver, entry);
                if (user_dn) {
                        syslog(LOG_DEBUG, "ldap: found %s", user_dn);
+
+                       int fullname_size = 256;
+                       char fullname[256] = { 0 } ;
+                       uid_t uid = (-1);
+
+                       if (CtdlGetConfigInt("c_auth_mode") == AUTHMODE_LDAP_AD) {
+                               values = ldap_get_values(ldserver, entry, "displayName");       // AD schema: fullname = displayName
+                               if (values) {
+                                       if (values[0]) {
+                                               safestrncpy(fullname, values[0], fullname_size);
+                                       }
+                                       ldap_value_free(values);
+                               }
+                               values = ldap_get_values(ldserver, entry, "objectGUID");        // AD schema: uid hashed from objectGUID
+                               if (values) {
+                                       if (values[0]) {
+                                               uid = abs(HashLittle(values[0], strlen(values[0])));
+                                       }
+                                       ldap_value_free(values);
+                               }
+                       }
+                       else {
+                               values = ldap_get_values(ldserver, entry, "cn");                // POSIX schema: fullname = cn
+                               if (values) {
+                                       if (values[0]) {
+                                               safestrncpy(fullname, values[0], fullname_size);
+                                       }
+                                       ldap_value_free(values);
+                               }
+                               values = ldap_get_values(ldserver, entry, "uidNumber");         // POSIX schema: uid = uidNumber
+                               if (values) {
+                                       if (values[0]) {
+                                               uid = atoi(values[0]);
+                                       }
+                                       ldap_value_free(values);
+                               }
+                       }
+
+                       syslog(LOG_DEBUG, "\033[33mldap: display name: <%s> , uid = <%d>\033[0m", fullname, uid);
+
+                       // FIXME now create or update the user
+
+
                }
 
                entry = ldap_next_entry(ldserver, entry);