/*
- * 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));
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);
}
* 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)
{
{
char username[SIZ];
int found_user;
- long len;
syslog(LOG_DEBUG, "user_ops: CtdlLoginExistingUser(%s, %s)", authname, trythisname);
/* Continue attempting user validation... */
safestrncpy(username, trythisname, sizeof (username));
striplt(username);
- len = cutuserkey(username);
if (IsEmptyStr(username)) {
return login_not_found;
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);
}
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);
}
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;
}
}
}
}
- 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.
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
*/
}
-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);
}
* 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;
if (IsEmptyStr (username))
{
safestrncpy(username, pd.pw_name, sizeof username);
- len = cutuserkey(username);
}
}
else {
}
#endif /* HAVE_LDAP */
- if ((retval = internal_create_user(username, len, &usbuf, uid)) != 0)
+ if ((retval = internal_create_user(username, &usbuf, uid)) != 0)
return retval;
/*