X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fuser_ops.c;h=dab7f296baed524f125cc5f849672ad6f5805998;hb=8db8def130c7e0b01dfce85aa2bc207e22188b94;hp=31864a27bdd336e86ffc36ef1168be98301de5c7;hpb=07a2459e8adcace90dfa3c36be48a606ac2bf511;p=citadel.git diff --git a/citadel/user_ops.c b/citadel/user_ops.c index 31864a27b..dab7f296b 100644 --- a/citadel/user_ops.c +++ b/citadel/user_ops.c @@ -1,7 +1,7 @@ /* * Server functions which perform operations on user objects. * - * Copyright (c) 1987-2017 by the citadel.org team + * Copyright (c) 1987-2018 by the citadel.org team * * This program is open source software; you can redistribute it and/or * modify it under the terms of the GNU General Public License, version 3. @@ -541,9 +541,7 @@ int CtdlLoginExistingUser(char *authname, const char *trythisname) return login_not_found; } - /* Locate the associated Citadel account. - * If not found, make one attempt to create it. - */ + /* Locate the associated Citadel account. If not found, make one attempt to create it. */ found_user = getuserbyuid(&CC->user, pd.pw_uid); if (found_user != 0) { create_user(username, CREATE_USER_DO_NOT_BECOME_USER, pd.pw_uid); @@ -619,66 +617,57 @@ int CtdlLoginExistingUser(char *authname, const char *trythisname) */ void do_login(void) { - struct CitContext *CCC = CC; - - CCC->logged_in = 1; - syslog(LOG_NOTICE, "user_ops: <%s> logged in", CCC->curr_user); + CC->logged_in = 1; + syslog(LOG_NOTICE, "user_ops: <%s> logged in", CC->curr_user); - CtdlGetUserLock(&CCC->user, CCC->curr_user); - ++(CCC->user.timescalled); - CCC->previous_login = CCC->user.lastcall; - time(&CCC->user.lastcall); + CtdlGetUserLock(&CC->user, CC->curr_user); + ++(CC->user.timescalled); + CC->previous_login = CC->user.lastcall; + time(&CC->user.lastcall); /* If this user's name is the name of the system administrator * (as specified in setup), automatically assign access level 6. */ - if (!strcasecmp(CCC->user.fullname, CtdlGetConfigStr("c_sysadm"))) { - CCC->user.axlevel = AxAideU; + if ( (!IsEmptyStr(CtdlGetConfigStr("c_sysadm"))) && (!strcasecmp(CC->user.fullname, CtdlGetConfigStr("c_sysadm"))) ) { + CC->user.axlevel = AxAideU; } - /* If we're authenticating off the host system, automatically give - * root the highest level of access. - */ + /* If we're authenticating off the host system, automatically give root the highest level of access. */ if (CtdlGetConfigInt("c_auth_mode") == AUTHMODE_HOST) { - if (CCC->user.uid == 0) { - CCC->user.axlevel = AxAideU; + if (CC->user.uid == 0) { + CC->user.axlevel = AxAideU; } } + CtdlPutUserLock(&CC->user); - /* - * If we are using LDAP authentication, extract the user's email addresses from the directory. - */ + /* If we are using LDAP authentication, extract the user's email addresses from the directory. */ #ifdef HAVE_LDAP if ((CtdlGetConfigInt("c_auth_mode") == AUTHMODE_LDAP) || (CtdlGetConfigInt("c_auth_mode") == AUTHMODE_LDAP_AD)) { char new_emailaddrs[512]; if (CtdlGetConfigInt("c_ldap_sync_email_addrs") > 0) { - if (extract_email_addresses_from_ldap(CCC->ldap_dn, new_emailaddrs) == 0) { - CtdlSetEmailAddressesForUser(CCC->user.fullname, new_emailaddrs); + if (extract_email_addresses_from_ldap(CC->ldap_dn, new_emailaddrs) == 0) { + CtdlSetEmailAddressesForUser(CC->user.fullname, new_emailaddrs); } } } #endif - /* - * No email address for user? Make one up. - */ - if (IsEmptyStr(CCC->user.emailaddrs)) { - sprintf(CCC->user.emailaddrs, "cit%ld@%s", CCC->user.usernum, CtdlGetConfigStr("c_fqdn")); + /* If the user does not have any email addresses assigned, generate one. */ + if (IsEmptyStr(CC->user.emailaddrs)) { + AutoGenerateEmailAddressForUser(&CC->user); } - - CtdlPutUserLock(&CCC->user); /* * Populate cs_inet_email and cs_inet_other_emails with valid email addresses from the user record */ - strcpy(CCC->cs_inet_email, CCC->user.emailaddrs); - char *firstsep = strstr(CCC->cs_inet_email, "|"); + strcpy(CC->cs_inet_email, CC->user.emailaddrs); + char *firstsep = strstr(CC->cs_inet_email, "|"); if (firstsep) { - strcpy(CCC->cs_inet_other_emails, firstsep+1); + strcpy(CC->cs_inet_other_emails, firstsep+1); *firstsep = 0; } else { - CCC->cs_inet_other_emails[0] = 0; + CC->cs_inet_other_emails[0] = 0; } /* Create any personal rooms required by the system. @@ -728,7 +717,7 @@ void CtdlUserLogout(void) strcpy(CCC->fake_roomname, ""); CCC->logged_in = 0; - /* Check to see if the user was deleted whilst logged in and purge them if necessary */ + /* Check to see if the user was deleted while logged in and purge them if necessary */ if ((CCC->user.axlevel == AxDeleted) && (CCC->user.usernum)) { purge_user(CCC->user.fullname); } @@ -949,8 +938,9 @@ int purge_user(char pname[]) makeuserkey(usernamekey, pname, cutuserkey(pname)); /* If the name is empty we can't find them in the DB any way so just return */ - if (IsEmptyStr(pname)) + if (IsEmptyStr(pname)) { return(ERROR + NO_SUCH_USER); + } if (CtdlGetUser(&usbuf, pname) != 0) { syslog(LOG_ERR, "user_ops: cannot purge user <%s> - not found", pname);