From 547a20bfefa1815d5bef48bc2a6b24cf38736c09 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Wed, 5 Jan 2022 16:52:23 -0500 Subject: [PATCH] While hunting for an internet address bug, cleaning up more style. --- citadel/internet_addressing.c | 15 +- citadel/modules/upgrade/serv_upgrade.c | 192 +++++++++---------------- citadel/user_ops.c | 159 ++++++++------------ 3 files changed, 132 insertions(+), 234 deletions(-) diff --git a/citadel/internet_addressing.c b/citadel/internet_addressing.c index e4bd18a6e..e67a9dc12 100644 --- a/citadel/internet_addressing.c +++ b/citadel/internet_addressing.c @@ -1618,22 +1618,19 @@ void CtdlRebuildDirectoryIndex(void) { } -/* - * Configure Internet email addresses for a user account, updating the Directory Index in the process - */ -void CtdlSetEmailAddressesForUser(char *requested_user, char *new_emailaddrs) -{ +// Configure Internet email addresses for a user account, updating the Directory Index in the process +void CtdlSetEmailAddressesForUser(char *requested_user, char *new_emailaddrs) { struct ctdluser usbuf; int i; char buf[SIZ]; - if (CtdlGetUserLock(&usbuf, requested_user) != 0) { // We are relying on the fact that the DirectoryIndex functions don't lock. - return; // Silently fail here if we can't acquire a lock on the user record. + if (CtdlGetUserLock(&usbuf, requested_user) != 0) { // We can lock because the DirectoryIndex functions don't lock. + return; // Silently fail here if the specified user does not exist. } syslog(LOG_DEBUG, "internet_addressing: setting email addresses for <%s> to <%s>", usbuf.fullname, new_emailaddrs); - /* Delete all of the existing directory index records for the user (easier this way) */ + // Delete all of the existing directory index records for the user (easier this way) for (i=0; i @@ -44,34 +42,29 @@ #include "serv_vcard.h" #include "internet_addressing.h" -/* - * oldver is the version number of Citadel Server which was active on the previous run of the program, learned from the system configuration. - * If we are running a new Citadel Server for the first time, oldver will be 0. - * We keep this value around for the entire duration of the program run because we'll need it during several stages of startup. - */ +// oldver is the version number of Citadel Server which was active on the previous run of the program, learned from the system configuration. +// If we are running a new Citadel Server for the first time, oldver will be 0. +// We keep this value around for the entire duration of the program run because we'll need it during several stages of startup. int oldver = 0; -/* - * Try to remove any extra users with number 0 - */ -void fix_sys_user_name(void) -{ +// Try to remove any extra users with number 0 +void fix_sys_user_name(void) { struct ctdluser usbuf; char usernamekey[USERNAME_SIZE]; while (CtdlGetUserByNumber(&usbuf, 0) == 0) { - /* delete user with number 0 and no name */ + // delete user with number 0 and no name if (IsEmptyStr(usbuf.fullname)) { cdb_delete(CDB_USERS, "", 0); } else { - /* temporarily set this user to -1 */ + // temporarily set this user to -1 usbuf.usernum = -1; CtdlPutUser(&usbuf); } } - /* Delete any "user 0" accounts */ + // Delete any "user 0" accounts while (CtdlGetUserByNumber(&usbuf, -1) == 0) { makeuserkey(usernamekey, usbuf.fullname); cdb_delete(CDB_USERS, usernamekey, strlen(usernamekey)); @@ -79,9 +72,7 @@ void fix_sys_user_name(void) } -/* - * Back end processing function for reindex_uids() - */ +// Back end processing function for reindex_uids() void reindex_uids_backend(char *username, void *data) { struct ctdluser us; @@ -102,10 +93,8 @@ void reindex_uids_backend(char *username, void *data) { } -/* - * Build extauth index of all users with uid-based join (system auth, LDAP auth) - * Also changes all users with a uid of CTDLUID to NATIVE_AUTH_UID (-1) - */ +// Build extauth index of all users with uid-based join (system auth, LDAP auth) +// Also changes all users with a uid of CTDLUID to NATIVE_AUTH_UID (-1) void reindex_uids(void) { syslog(LOG_WARNING, "upgrade: reindexing and applying uid changes"); ForEachUser(reindex_uids_backend, NULL); @@ -113,10 +102,8 @@ void reindex_uids(void) { } -/* - * These accounts may have been created by code that ran between mid 2008 and early 2011. - * If present they are no longer in use and may be deleted. - */ +// These accounts may have been created by code that ran between mid 2008 and early 2011. +// If present they are no longer in use and may be deleted. void remove_thread_users(void) { char *deleteusers[] = { "SYS_checkpoint", @@ -147,10 +134,8 @@ void remove_thread_users(void) { } -/* - * Attempt to guess the name of the time zone currently in use - * on the underlying host system. - */ +// Attempt to guess the name of the time zone currently in use +// on the underlying host system. void guess_time_zone(void) { FILE *fp; char buf[PATH_MAX]; @@ -167,13 +152,9 @@ void guess_time_zone(void) { } -/* - * Per-room callback function for ingest_old_roominfo_and_roompic_files() - * - * This is the second pass, where we process the list of rooms with info or pic files. - */ -void iorarf_oneroom(char *roomname, char *infofile, char *picfile) -{ +// Per-room callback function for ingest_old_roominfo_and_roompic_files() +// This is the second pass, where we process the list of rooms with info or pic files. +void iorarf_oneroom(char *roomname, char *infofile, char *picfile) { FILE *fp; long data_length; char *unencoded_data; @@ -266,13 +247,9 @@ struct iorarf_list { }; -/* - * Per-room callback function for ingest_old_roominfo_and_roompic_files() - * - * This is the first pass, where the list of qualifying rooms is gathered. - */ -void iorarf_backend(struct ctdlroom *qrbuf, void *data) -{ +// Per-room callback function for ingest_old_roominfo_and_roompic_files() +// This is the first pass, where the list of qualifying rooms is gathered. +void iorarf_backend(struct ctdlroom *qrbuf, void *data) { FILE *fp; struct iorarf_list **iorarf_list = (struct iorarf_list **)data; @@ -311,13 +288,10 @@ void iorarf_backend(struct ctdlroom *qrbuf, void *data) } -/* - * Prior to Citadel Server version 902, room info and pictures (which comprise the - * displayed banner for each room) were stored in the filesystem. If we are upgrading - * from version >000 to version >=902, ingest those files into the database. - */ -void ingest_old_roominfo_and_roompic_files(void) -{ +// Prior to Citadel Server version 902, room info and pictures (which comprise the +// displayed banner for each room) were stored in the filesystem. If we are upgrading +// from version >000 to version >=902, ingest those files into the database. +void ingest_old_roominfo_and_roompic_files(void) { struct iorarf_list *il = NULL; CtdlForEachRoom(iorarf_backend, &il); @@ -334,10 +308,8 @@ void ingest_old_roominfo_and_roompic_files(void) } -/* - * For upgrades in which a new config setting appears for the first time, set default values. - * For new installations (oldver == 0) also set default values. - */ +// For upgrades in which a new config setting appears for the first time, set default values. +// For new installations (oldver == 0) also set default values. void update_config(void) { if (oldver < 606) { @@ -380,14 +352,12 @@ void update_config(void) { } -/* - * Helper function for move_inet_addrs_from_vcards_to_user_records() - * - * Call this function as a ForEachUser backend in order to queue up - * user names, or call it with a null user to make it do the processing. - * This allows us to maintain the list as a static instead of passing - * pointers around. - */ +// Helper function for move_inet_addrs_from_vcards_to_user_records() +// +// Call this function as a ForEachUser backend in order to queue up +// user names, or call it with a null user to make it do the processing. +// This allows us to maintain the list as a static instead of passing +// pointers around. void miafvtur_backend(char *username, void *data) { struct ctdluser usbuf; char primary_inet_email[512] = { 0 }; @@ -417,11 +387,8 @@ void miafvtur_backend(char *username, void *data) { } -/* - * If our system still has a "refcount_adjustments.dat" sitting around from an old version, ingest it now. - */ -int ProcessOldStyleAdjRefCountQueue(void) -{ +// If our system still has a "refcount_adjustments.dat" sitting around from an old version, ingest it now. +int ProcessOldStyleAdjRefCountQueue(void) { int r; FILE *fp; struct arcq arcq_rec; @@ -449,22 +416,15 @@ int ProcessOldStyleAdjRefCountQueue(void) } -/* - * Prior to version 912 we kept a user's various Internet email addresses in their vCards. - * This function moves them over to the user record, which is where we keep them now. - */ -void move_inet_addrs_from_vcards_to_user_records(void) -{ +// Prior to version 912 we kept a user's various Internet email addresses in their vCards. +// This function moves them over to the user record, which is where we keep them now. +void move_inet_addrs_from_vcards_to_user_records(void) { ForEachUser(miafvtur_backend, NULL); CtdlRebuildDirectoryIndex(); } - - -/* - * We found the legacy sieve config in the user's config room. Store the message number in the user record. - */ +// We found the legacy sieve config in the user's config room. Store the message number in the user record. void mifm_found_config(long msgnum, void *userdata) { struct ctdluser *us = (struct ctdluser *)userdata; @@ -473,15 +433,13 @@ void mifm_found_config(long msgnum, void *userdata) { } -/* - * Helper function for migrate_inbox_filter_msgnums() - */ +// Helper function for migrate_inbox_filter_msgnums() void mifm_backend(char *username, void *data) { struct ctdluser us; char roomname[ROOMNAMELEN]; if (CtdlGetUserLock(&us, username) == 0) { - /* Take a spin through the user's personal config room */ + // Take a spin through the user's personal config room syslog(LOG_DEBUG, "Processing <%s> (%ld)", us.fullname, us.usernum); snprintf(roomname, sizeof roomname, "%010ld.%s", us.usernum, USERCONFIGROOM); if (CtdlGetRoom(&CC->room, roomname) == 0) { @@ -492,19 +450,14 @@ void mifm_backend(char *username, void *data) { } -/* - * Prior to version 930 we used a MIME type search to locate the user's inbox filter rules. - * This function locates those ruleset messages and simply stores the message number in the user record. - */ -void migrate_inbox_filter_msgnums(void) -{ +// Prior to version 930 we used a MIME type search to locate the user's inbox filter rules. +// This function locates those ruleset messages and simply stores the message number in the user record. +void migrate_inbox_filter_msgnums(void) { ForEachUser(mifm_backend, NULL); } -/* - * Create a default administrator account so we can log in to a new installation - */ +// Create a default administrator account so we can log in to a new installation void create_default_admin_account(void) { struct ctdluser usbuf; @@ -517,10 +470,8 @@ void create_default_admin_account(void) { } -/* - * Based on the server version number reported by the existing database, - * run in-place data format upgrades until everything is up to date. - */ +// Based on the server version number reported by the existing database, +// run in-place data format upgrades until everything is up to date. void pre_startup_upgrades(void) { oldver = CtdlGetConfigInt("MM_hosted_upgrade_level"); @@ -567,35 +518,28 @@ void pre_startup_upgrades(void) { CtdlSetConfigInt("MM_hosted_upgrade_level", REV_LEVEL); - /* - * Negative values for maxsessions are not allowed. - */ + // Negative values for maxsessions are not allowed. if (CtdlGetConfigInt("c_maxsessions") < 0) { CtdlSetConfigInt("c_maxsessions", 0); } - /* We need a system default message expiry policy, because this is - * the top level and there's no 'higher' policy to fall back on. - * By default, do not expire messages at all. - */ + // We need a system default message expiry policy, because this is + // the top level and there's no 'higher' policy to fall back on. + // By default, do not expire messages at all. if (CtdlGetConfigInt("c_ep_mode") == 0) { CtdlSetConfigInt("c_ep_mode", EXPIRE_MANUAL); CtdlSetConfigInt("c_ep_value", 0); } - /* - * If this is the first run on an empty database, create a default administrator - */ + // If this is the first run on an empty database, create a default administrator if (oldver == 0) { create_default_admin_account(); } } -/* - * Based on the server version number reported by the existing database, - * run in-place data format upgrades until everything is up to date. - */ +// Based on the server version number reported by the existing database, +// run in-place data format upgrades until everything is up to date. void post_startup_upgrades(void) { syslog(LOG_INFO, "Existing database version on disk is %d", oldver); diff --git a/citadel/user_ops.c b/citadel/user_ops.c index a8f7b3423..c9cb525db 100644 --- a/citadel/user_ops.c +++ b/citadel/user_ops.c @@ -98,18 +98,14 @@ int CtdlGetUser(struct ctdluser *usbuf, char *name) } -int CtdlLockGetCurrentUser(void) -{ +int CtdlLockGetCurrentUser(void) { CitContext *CCC = CC; return CtdlGetUser(&CCC->user, CCC->curr_user); } -/* - * CtdlGetUserLock() - same as getuser() but locks the record - */ -int CtdlGetUserLock(struct ctdluser *usbuf, char *name) -{ +// CtdlGetUserLock() - same as getuser() but locks the record +int CtdlGetUserLock(struct ctdluser *usbuf, char *name) { int retcode; retcode = CtdlGetUser(usbuf, name); @@ -120,41 +116,29 @@ int CtdlGetUserLock(struct ctdluser *usbuf, char *name) } -/* - * CtdlPutUser() - write user buffer into the correct place on disk - */ -void CtdlPutUser(struct ctdluser *usbuf) -{ +// CtdlPutUser() - write user buffer into the correct place on disk +void CtdlPutUser(struct ctdluser *usbuf) { char usernamekey[USERNAME_SIZE]; - makeuserkey(usernamekey, usbuf->fullname); usbuf->version = REV_LEVEL; cdb_store(CDB_USERS, usernamekey, strlen(usernamekey), usbuf, sizeof(struct ctdluser)); } -void CtdlPutCurrentUserLock() -{ +void CtdlPutCurrentUserLock() { CtdlPutUser(&CC->user); } -/* - * CtdlPutUserLock() - same as putuser() but locks the record - */ -void CtdlPutUserLock(struct ctdluser *usbuf) -{ +// CtdlPutUserLock() - same as putuser() but locks the record +void CtdlPutUserLock(struct ctdluser *usbuf) { CtdlPutUser(usbuf); end_critical_section(S_USERS); } -/* - * rename_user() - this is tricky because the user's display name is the database key - * - * Returns 0 on success or nonzero if there was an error... - * - */ +// rename_user() - this is tricky because the user's display name is the database key +// Returns 0 on success or nonzero if there was an error... int rename_user(char *oldname, char *newname) { int retcode = RENAMEUSER_OK; struct ctdluser usbuf; @@ -162,14 +146,14 @@ int rename_user(char *oldname, char *newname) { char oldnamekey[USERNAME_SIZE]; char newnamekey[USERNAME_SIZE]; - /* Create the database keys... */ + // Create the database keys... makeuserkey(oldnamekey, oldname); makeuserkey(newnamekey, newname); - /* Lock up and get going */ + // Lock up and get going begin_critical_section(S_USERS); - /* We cannot rename a user who is currently logged in */ + // We cannot rename a user who is currently logged in if (CtdlIsUserLoggedIn(oldname)) { end_critical_section(S_USERS); return RENAMEUSER_LOGGED_IN; @@ -183,11 +167,12 @@ int rename_user(char *oldname, char *newname) { if (CtdlGetUser(&usbuf, oldname) != 0) { retcode = RENAMEUSER_NOT_FOUND; } - else { /* Sanity checks succeeded. Now rename the user. */ + else { // Sanity checks succeeded. Now rename the user. if (usbuf.usernum == 0) { syslog(LOG_DEBUG, "user_ops: can not rename user \"Citadel\"."); retcode = RENAMEUSER_NOT_FOUND; - } else { + } + else { syslog(LOG_DEBUG, "user_ops: renaming <%s> to <%s>", oldname, newname); cdb_delete(CDB_USERS, oldnamekey, strlen(oldnamekey)); safestrncpy(usbuf.fullname, newname, sizeof usbuf.fullname); @@ -204,10 +189,8 @@ int rename_user(char *oldname, char *newname) { } -/* - * Convert a username into the format used as a database key prior to version 928 - * This only gets called by reindex_user_928() - */ +// Convert a username into the format used as a database key prior to version 928 +// This only gets called by reindex_user_928() void makeuserkey_pre928(char *key, const char *username) { int i; @@ -223,10 +206,8 @@ void makeuserkey_pre928(char *key, const char *username) { } -/* - * Read a user record using the pre-v928 index format, and write it back using the v928-and-higher index format. - * This ONLY gets called during an upgrade from version <928 to version >=928. - */ +// Read a user record using the pre-v928 index format, and write it back using the v928-and-higher index format. +// This ONLY gets called during an upgrade from version <928 to version >=928. void reindex_user_928(char *username, void *out_data) { char oldkey[USERNAME_SIZE]; @@ -256,14 +237,12 @@ void reindex_user_928(char *username, void *out_data) { } -/* - * Index-generating function used by Ctdl[Get|Set]Relationship - */ +// Index-generating function used by Ctdl[Get|Set]Relationship int GenerateRelationshipIndex(char *IndexBuf, long RoomID, long RoomGen, - long UserID) -{ + long UserID +) { struct { long iRoomID; long iRoomGen; @@ -279,32 +258,26 @@ int GenerateRelationshipIndex(char *IndexBuf, } -/* - * Back end for CtdlSetRelationship() - */ -void put_visit(visit *newvisit) -{ +// Back end for CtdlSetRelationship() +void put_visit(visit *newvisit) { char IndexBuf[32]; int IndexLen = 0; memset (IndexBuf, 0, sizeof (IndexBuf)); - /* Generate an index */ + // Generate an index IndexLen = GenerateRelationshipIndex(IndexBuf, newvisit->v_roomnum, newvisit->v_roomgen, newvisit->v_usernum); - /* Store the record */ + // Store the record cdb_store(CDB_VISIT, IndexBuf, IndexLen, newvisit, sizeof(visit) ); } -/* - * Define a relationship between a user and a room - */ +// Define a relationship between a user and a room void CtdlSetRelationship(visit *newvisit, struct ctdluser *rel_user, struct ctdlroom *rel_room) { - /* We don't use these in Citadel because they're implicit by the - * index, but they must be present if the database is exported. - */ + // We don't use these in Citadel because they're implicit by the + // index, but they must be present if the database is exported. newvisit->v_roomnum = rel_room->QRnumber; newvisit->v_roomgen = rel_room->QRgen; newvisit->v_usernum = rel_user->usernum; @@ -424,8 +397,7 @@ int CtdlAccessCheck(int required_level) /* * Is the user currently logged in an Admin? */ -int is_aide(void) -{ +int is_aide(void) { if (CC->user.axlevel >= AxAideU) return(1); else @@ -436,8 +408,7 @@ int is_aide(void) /* * Is the user currently logged in an Admin *or* the room Admin for this room? */ -int is_room_aide(void) -{ +int is_room_aide(void) { if (!CC->logged_in) { return(0); @@ -457,8 +428,7 @@ int is_room_aide(void) * * Note: fetching a user this way requires one additional database operation. */ -int CtdlGetUserByNumber(struct ctdluser *usbuf, long number) -{ +int CtdlGetUserByNumber(struct ctdluser *usbuf, long number) { struct cdbdata *cdbun; int r; @@ -502,8 +472,7 @@ void rebuild_usersbynumber(void) { * Returns 0 if user was found * This now uses an extauth index. */ -int getuserbyuid(struct ctdluser *usbuf, uid_t number) -{ +int getuserbyuid(struct ctdluser *usbuf, uid_t number) { struct cdbdata *cdbextauth; long usernum = 0; StrBuf *claimed_id; @@ -530,8 +499,7 @@ int getuserbyuid(struct ctdluser *usbuf, uid_t number) /* * Back end for cmd_user() and its ilk */ -int CtdlLoginExistingUser(const char *trythisname) -{ +int CtdlLoginExistingUser(const char *trythisname) { char username[SIZ]; int found_user; @@ -652,11 +620,8 @@ int CtdlLoginExistingUser(const char *trythisname) } -/* - * session startup code which is common to both cmd_pass() and cmd_newu() - */ -void do_login(void) -{ +// session startup code which is common to both cmd_pass() and cmd_newu() +void do_login(void) { CC->logged_in = 1; syslog(LOG_NOTICE, "user_ops: <%s> logged in", CC->curr_user); @@ -665,14 +630,13 @@ void do_login(void) 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 this user's name is the name of the system administrator + // (as specified in setup), automatically assign access level 6. 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 (CC->user.uid == 0) { CC->user.axlevel = AxAideU; @@ -680,7 +644,7 @@ void do_login(void) } 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. 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) { @@ -690,20 +654,18 @@ void do_login(void) } } - /* If the user does not have any email addresses assigned, generate one. */ + // If the user does not have any email addresses assigned, generate one. if (IsEmptyStr(CC->user.emailaddrs)) { AutoGenerateEmailAddressForUser(&CC->user); } - /* Populate the user principal identity, which is consistent and never aliased */ + // Populate the user principal identity, which is consistent and never aliased strcpy(CC->cs_principal_id, ""); makeuserkey(CC->cs_principal_id, CC->user.fullname); strcat(CC->cs_principal_id, "@"); strcat(CC->cs_principal_id, CtdlGetConfigStr("c_fqdn")); - /* - * Populate cs_inet_email and cs_inet_other_emails with valid email addresses from the user record - */ + // Populate cs_inet_email and cs_inet_other_emails with valid email addresses from the user record strcpy(CC->cs_inet_email, CC->user.emailaddrs); char *firstsep = strstr(CC->cs_inet_email, "|"); if (firstsep) { @@ -714,24 +676,22 @@ void do_login(void) CC->cs_inet_other_emails[0] = 0; } - /* Create any personal rooms required by the system. - * (Technically, MAILROOM should be there already, but just in case...) - */ + // Create any personal rooms required by the system. + // (Technically, MAILROOM should be there already, but just in case...) CtdlCreateRoom(MAILROOM, 4, "", 0, 1, 0, VIEW_MAILBOX); CtdlCreateRoom(SENTITEMS, 4, "", 0, 1, 0, VIEW_MAILBOX); CtdlCreateRoom(USERTRASHROOM, 4, "", 0, 1, 0, VIEW_MAILBOX); CtdlCreateRoom(USERDRAFTROOM, 4, "", 0, 1, 0, VIEW_MAILBOX); - /* Run any startup routines registered by loadable modules */ + // Run any startup routines registered by loadable modules PerformSessionHooks(EVT_LOGIN); - /* Enter the lobby */ + // Enter the lobby CtdlUserGoto(CtdlGetConfigStr("c_baseroom"), 0, 0, NULL, NULL, NULL, NULL); } -void logged_in_response(void) -{ +void logged_in_response(void) { cprintf("%d %s|%d|%ld|%ld|%u|%ld|%ld\n", CIT_OK, CC->user.fullname, CC->user.axlevel, CC->user.timescalled, CC->user.posted, @@ -741,36 +701,33 @@ void logged_in_response(void) } -void CtdlUserLogout(void) -{ +void CtdlUserLogout(void) { CitContext *CCC = MyContext(); syslog(LOG_DEBUG, "user_ops: CtdlUserLogout() logging out <%s> from session %d", CCC->curr_user, CCC->cs_pid); - /* Run any hooks registered by modules... */ + // Run any hooks registered by modules... PerformSessionHooks(EVT_LOGOUT); - /* - * Clear out some session data. Most likely, the CitContext for this - * session is about to get nuked when the session disconnects, but - * since it's possible to log in again without reconnecting, we cannot - * make that assumption. - */ + // Clear out some session data. Most likely, the CitContext for this + // session is about to get nuked when the session disconnects, but + // since it's possible to log in again without reconnecting, we cannot + // make that assumption. CCC->logged_in = 0; - /* Check to see if the user was deleted while 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); } - /* Clear out the user record in memory so we don't behave like a ghost */ + // Clear out the user record in memory so we don't behave like a ghost memset(&CCC->user, 0, sizeof(struct ctdluser)); CCC->curr_user[0] = 0; CCC->cs_inet_email[0] = 0; CCC->cs_inet_other_emails[0] = 0; CCC->cs_inet_fn[0] = 0; - /* Free any output buffers */ + // Free any output buffers unbuffer_output(); } -- 2.30.2