]> code.citadel.org Git - citadel.git/blobdiff - citadel/user_ops.c
Remove unused parameter
[citadel.git] / citadel / user_ops.c
index b78cc592fbdc84410569b7e242517707acbcc716..00b02728362cc48a6aaa60bbe554285320fc14df 100644 (file)
@@ -33,13 +33,14 @@ int chkpwd_read_pipe[2];
 
 
 /*
- * CtdlGetUser()  -  retrieve named user into supplied buffer.
- *            returns 0 on success
+ * CtdlGetUser()       retrieve named user into supplied buffer.
+ *                     returns 0 on success
  */
-int CtdlGetUserLen(struct ctdluser *usbuf, const char *name, long len)
+int CtdlGetUser(struct ctdluser *usbuf, char *name)
 {
        char usernamekey[USERNAME_SIZE];
        struct cdbdata *cdbus;
+       long len = cutuserkey(name);
 
        if (usbuf != NULL) {
                memset(usbuf, 0, sizeof(struct ctdluser));
@@ -52,26 +53,17 @@ int CtdlGetUserLen(struct ctdluser *usbuf, const char *name, long len)
                return(1);
        }
        if (usbuf != NULL) {
-               memcpy(usbuf, cdbus->ptr,
-                       ((cdbus->len > sizeof(struct ctdluser)) ?
-                        sizeof(struct ctdluser) : cdbus->len));
+               memcpy(usbuf, cdbus->ptr, ((cdbus->len > sizeof(struct ctdluser)) ?  sizeof(struct ctdluser) : cdbus->len));
        }
        cdb_free(cdbus);
-
        return (0);
 }
 
 
-int CtdlGetUser(struct ctdluser *usbuf, char *name)
-{
-       return CtdlGetUserLen(usbuf, name, cutuserkey(name));
-}
-
-
 int CtdlLockGetCurrentUser(void)
 {
        CitContext *CCC = CC;
-       return CtdlGetUserLen(&CCC->user, CCC->curr_user, cutuserkey(CCC->curr_user));
+       return CtdlGetUser(&CCC->user, CCC->curr_user);
 }
 
 
@@ -461,8 +453,10 @@ void rebuild_usersbynumber(void) {
  * getuserbyuid()  -     get user by system uid (for PAM mode authentication)
  *                    returns 0 if user was found
  *
- * WARNING: don't use this function unless you absolutely have to.  It does
- *       a sequential search and therefore is computationally expensive.
+ * WARNING:    don't use this function unless you absolutely have to.  It does
+ *             a sequential search and therefore is computationally expensive.
+ *
+ * FIXME:      build an index, dummy.
  */
 int getuserbyuid(struct ctdluser *usbuf, uid_t number)
 {
@@ -494,7 +488,6 @@ int CtdlLoginExistingUser(char *authname, const char *trythisname)
 {
        char username[SIZ];
        int found_user;
-       long len;
 
        syslog(LOG_DEBUG, "user_ops: CtdlLoginExistingUser(%s, %s)", authname, trythisname);
 
@@ -523,7 +516,6 @@ int CtdlLoginExistingUser(char *authname, const char *trythisname)
        /* Continue attempting user validation... */
        safestrncpy(username, trythisname, sizeof (username));
        striplt(username);
-       len = cutuserkey(username);
 
        if (IsEmptyStr(username)) {
                return login_not_found;
@@ -561,8 +553,7 @@ int CtdlLoginExistingUser(char *authname, const char *trythisname)
                found_user = getuserbyuid(&CC->user, pd.pw_uid);
                syslog(LOG_DEBUG, "user_ops: found it: uid=%ld, gecos=%s here: %d", (long)pd.pw_uid, pd.pw_gecos, found_user);
                if (found_user != 0) {
-                       len = cutuserkey(username);
-                       create_user(username, len, 0);
+                       create_user(username, 0);
                        found_user = getuserbyuid(&CC->user, pd.pw_uid);
                }
 
@@ -584,7 +575,7 @@ int CtdlLoginExistingUser(char *authname, const char *trythisname)
 
                found_user = getuserbyuid(&CC->user, ldap_uid);
                if (found_user != 0) {
-                       create_user(username, len, 0);
+                       create_user(username, 0);
                        found_user = getuserbyuid(&CC->user, ldap_uid);
                }
 
@@ -623,8 +614,7 @@ int CtdlLoginExistingUser(char *authname, const char *trythisname)
                if (((CC->nologin)) && (CC->user.axlevel < AxAideU)) {
                        return login_too_many_users;
                } else {
-                       safestrncpy(CC->curr_user, CC->user.fullname,
-                                       sizeof CC->curr_user);
+                       safestrncpy(CC->curr_user, CC->user.fullname, sizeof CC->curr_user);
                        return login_ok;
                }
        }
@@ -663,7 +653,18 @@ void do_login(void)
                }
        }
 
-       CtdlPutUserLock(&CCC->user);
+       /*
+        * If we are using LDAP authentication, extract the user's email addresses from the directory.
+        * FIXME make this a site configurable setting
+        */
+       #ifdef HAVE_LDAP
+               if ((CtdlGetConfigInt("c_auth_mode") == AUTHMODE_LDAP) || (CtdlGetConfigInt("c_auth_mode") == AUTHMODE_LDAP_AD)) {
+                       char new_emailaddrs[512];
+                       if (extract_email_addresses_from_ldap(CCC->ldap_dn, new_emailaddrs) == 0) {
+                               strcpy(CCC->user.emailaddrs, new_emailaddrs);
+                       }
+               }
+       #endif
 
        /*
         * No email address for user?  Make one up.
@@ -672,6 +673,8 @@ void do_login(void)
                sprintf(CCC->user.emailaddrs, "cit%ld@%s", CCC->user.usernum, CtdlGetConfigStr("c_fqdn"));
        }
        
+       CtdlPutUserLock(&CCC->user);
+
        /*
         * Populate cs_inet_email and cs_inet_other_emails with valid email addresses from the user record
         */
@@ -998,9 +1001,9 @@ int purge_user(char pname[])
 }
 
 
-int internal_create_user (const char *username, long len, struct ctdluser *usbuf, uid_t uid)
+int internal_create_user(char *username, struct ctdluser *usbuf, uid_t uid)
 {
-       if (!CtdlGetUserLen(usbuf, username, len)) {
+       if (!CtdlGetUser(usbuf, username)) {
                return (ERROR + ALREADY_EXISTS);
        }
 
@@ -1036,7 +1039,7 @@ int internal_create_user (const char *username, long len, struct ctdluser *usbuf
  * Set 'become_user' to nonzero if this is self-service account creation and we want
  * to actually log in as the user we just created, otherwise set it to 0.
  */
-int create_user(const char *newusername, long len, int become_user)
+int create_user(const char *newusername, int become_user)
 {
        struct ctdluser usbuf;
        struct ctdlroom qrbuf;
@@ -1072,7 +1075,6 @@ int create_user(const char *newusername, long len, int become_user)
                        if (IsEmptyStr (username))
                        {
                                safestrncpy(username, pd.pw_name, sizeof username);
-                               len = cutuserkey(username);
                        }
                }
                else {
@@ -1088,7 +1090,7 @@ int create_user(const char *newusername, long len, int become_user)
        }
 #endif /* HAVE_LDAP */
        
-       if ((retval = internal_create_user(username, len, &usbuf, uid)) != 0)
+       if ((retval = internal_create_user(username, &usbuf, uid)) != 0)
                return retval;
        
        /*