* Citadel context management stuff.
* Here's where we (hopefully) have all the code that manipulates contexts.
*
* Citadel context management stuff.
* Here's where we (hopefully) have all the code that manipulates contexts.
*
*
* 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.
*
* 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.
time_t last_purge = 0; /* Last dead session purge */
int num_sessions = 0; /* Current number of sessions */
int next_pid = 0;
time_t last_purge = 0; /* Last dead session purge */
int num_sessions = 0; /* Current number of sessions */
int next_pid = 0;
/*
* Locate a context by its session number and terminate it if the user is able.
* User can NOT terminate their current session.
/*
* Locate a context by its session number and terminate it if the user is able.
* User can NOT terminate their current session.
begin_critical_section(S_SESSION_TABLE);
for (ccptr = ContextList; ccptr != NULL; ccptr = ccptr->next) {
if (session_num == ccptr->cs_pid) {
begin_critical_section(S_SESSION_TABLE);
for (ccptr = ContextList; ccptr != NULL; ccptr = ccptr->next) {
if (session_num == ccptr->cs_pid) {
- if (ccptr->IO != NULL) {
- AsyncIO *IO = ccptr->IO;
- end_critical_section(S_SESSION_TABLE);
- KillAsyncIOContext(IO);
- }
+ if (ccptr->user.usernum == CCC->user.usernum)
+ ccptr->kill_me = KILLME_ADMIN_TERMINATE;
- {
- if (ccptr->user.usernum == CCC->user.usernum)
- ccptr->kill_me = KILLME_ADMIN_TERMINATE;
- else
- ccptr->kill_me = KILLME_IDLE;
- end_critical_section(S_SESSION_TABLE);
- }
+ ccptr->kill_me = KILLME_IDLE;
+ end_critical_section(S_SESSION_TABLE);
- if (killed > 0)
- CON_syslog(LOG_INFO, "Scheduled %d idle sessions for termination\n", killed);
- if (longrunners > 0)
- CON_syslog(LOG_INFO, "Didn't terminate %d protected idle sessions", longrunners);
+ if (killed > 0) {
+ syslog(LOG_INFO, "context: scheduled %d idle sessions for termination", killed);
+ }
+ if (longrunners > 0) {
+ syslog(LOG_INFO, "context: did not terminate %d protected idle sessions", longrunners);
+ }
- CON_syslog(LOG_INFO, "terminate_all_sessions() is murdering %s", ccptr->curr_user);
+ syslog(LOG_INFO, "context: terminate_all_sessions() is murdering %s CC[%d]", ccptr->curr_user, ccptr->cs_pid);
- CON_syslog(LOG_DEBUG, "RemoveContext(%s) session %d", c, con->cs_pid);
-/// cit_backtrace();
+ syslog(LOG_DEBUG, "context: RemoveContext(%s) session %d", c, con->cs_pid);
/* Run any cleanup routines registered by loadable modules.
* Note: We have to "become_session()" because the cleanup functions
/* Run any cleanup routines registered by loadable modules.
* Note: We have to "become_session()" because the cleanup functions
- CON_syslog(LOG_NOTICE, "[%3d]SRV[%s] Session ended.", con->cs_pid, c);
+ syslog(LOG_INFO, "context: [%3d]SRV[%s] Session ended.", con->cs_pid, c);
strcpy(con->lastcmdname, " ");
strcpy(con->cs_clientname, "(unknown)");
strcpy(con->curr_user, NLI);
strcpy(con->lastcmdname, " ");
strcpy(con->cs_clientname, "(unknown)");
strcpy(con->curr_user, NLI);
*con->fake_username = '\0';
*con->fake_hostname = '\0';
*con->fake_roomname = '\0';
*con->cs_clientinfo = '\0';
*con->fake_username = '\0';
*con->fake_hostname = '\0';
*con->fake_roomname = '\0';
*con->cs_clientinfo = '\0';
safestrncpy(con->cs_addr, "", sizeof con->cs_addr);
con->cs_UDSclientUID = -1;
con->cs_host[sizeof con->cs_host - 1] = 0;
safestrncpy(con->cs_addr, "", sizeof con->cs_addr);
con->cs_UDSclientUID = -1;
con->cs_host[sizeof con->cs_host - 1] = 0;
/*fill in the user data structure */
if(getsockopt(con->client_socket, SOL_SOCKET, SO_PEERCRED, &credentials, &ucred_length)) {
/*fill in the user data structure */
if(getsockopt(con->client_socket, SOL_SOCKET, SO_PEERCRED, &credentials, &ucred_length)) {
- syslog(LOG_NOTICE, "Session (%s) started from %s (%s).\n", con->ServiceName, con->cs_host, con->cs_addr);
+ syslog(LOG_INFO, "context: session (%s) started from %s (%s)", con->ServiceName, con->cs_host, con->cs_addr);
- syslog(LOG_NOTICE, "Session (%s) started via local socket UID:%d.\n", con->ServiceName, con->cs_UDSclientUID);
+ syslog(LOG_INFO, "context: session (%s) started via local socket with uid=%d", con->ServiceName, con->cs_UDSclientUID);
- internal_create_user (sysname, len, &(context->user), -1) ;
+ internal_create_user(sysname, &(context->user), -1) ;
/* Check to see if the system user needs upgrading */
if (context->user.usernum == 0)
{ /* old system user with number 0, upgrade it */
context->user.usernum = get_new_user_number();
/* Check to see if the system user needs upgrading */
if (context->user.usernum == 0)
{ /* old system user with number 0, upgrade it */
context->user.usernum = get_new_user_number();
- CON_syslog(LOG_INFO, "Upgrading system user \"%s\" from user number 0 to user number %ld\n", context->user.fullname, context->user.usernum);
+ syslog(LOG_INFO, "context: upgrading system user \"%s\" from user number 0 to user number %ld", context->user.fullname, context->user.usernum);
/* add user to the database */
CtdlPutUser(&(context->user));
cdb_store(CDB_USERSBYNUMBER, &(context->user.usernum), sizeof(long), context->user.fullname, strlen(context->user.fullname)+1);
/* add user to the database */
CtdlPutUser(&(context->user));
cdb_store(CDB_USERSBYNUMBER, &(context->user.usernum), sizeof(long), context->user.fullname, strlen(context->user.fullname)+1);
- CON_syslog(LOG_DEBUG, "dead_session_purge(): purging session %d, reason=%d\n", rem->cs_pid, rem->kill_me);
+ syslog(LOG_DEBUG, "context: dead_session_purge() purging session %d, reason=%d", rem->cs_pid, rem->kill_me);