* Copyright (c) 1987-2011 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 as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
+ * it under the terms of the GNU General Public License, version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "sysdep.h"
syslog(LOG_DEBUG, "master_startup() started\n");
time(&server_startup_time);
+ get_config();
syslog(LOG_INFO, "Opening databases\n");
open_databases();
srand(seed);
srandom(seed);
- syslog(LOG_INFO, "Initializing ipgm secret\n");
- get_config();
- config.c_ipgm_secret = rand();
put_config();
syslog(LOG_DEBUG, "master_startup() finished\n");
struct CleanupFunctionHook *fcn;
static int already_cleaning_up = 0;
- if (already_cleaning_up) while(1) sleep(1);
+ if (already_cleaning_up) while(1) usleep(1000);
already_cleaning_up = 1;
/* Run any cleanup routines registered by loadable modules */
/* timezone and daylight global variables are not portable. */
#ifdef HAVE_STRUCT_TM_TM_GMTOFF
- cprintf("%d %ld|%ld|%d\n", CIT_OK, (long)tv, tmp.tm_gmtoff, tmp.tm_isdst);
+ cprintf("%d %ld|%ld|%d|%ld\n", CIT_OK, (long)tv, tmp.tm_gmtoff, tmp.tm_isdst, server_startup_time);
#else
- cprintf("%d %ld|%ld|%d\n", CIT_OK, (long)tv, timezone, tmp.tm_isdst);
+ cprintf("%d %ld|%ld|%d|%ld\n", CIT_OK, (long)tv, timezone, tmp.tm_isdst, server_startup_time);
#endif
}
}
}
}
- fclose(fp);
+ if (fp != NULL) fclose(fp);
pc_timestamp = time(NULL);
end_critical_section(S_PUBLIC_CLIENTS);
}
if (CC->user.axlevel >= AxAideU) return(0);
if (required_level >= ac_aide) {
- cprintf("%d This command requires Aide access.\n",
+ cprintf("%d This command requires Admin access.\n",
ERROR + HIGHER_ACCESS_REQUIRED);
return(-1);
}
if (is_room_aide()) return(0);
if (required_level >= ac_room_aide) {
- cprintf("%d This command requires Aide or Room Aide access.\n",
+ cprintf("%d This command requires Admin or Room Admin access.\n",
ERROR + HIGHER_ACCESS_REQUIRED);
return(-1);
}
}
-/*
- * Perform privilege escalation for an internal program
- */
-void cmd_ipgm(char *argbuf)
-{
- int secret;
-
- secret = extract_int(argbuf, 0);
-
- /* For security reasons, we do NOT allow this command to run
- * over the network. Local sockets only.
- */
- if (!CC->is_local_socket) {
- sleep(5);
- cprintf("%d Authentication failed.\n", ERROR + PASSWORD_REQUIRED);
- }
- else if (secret == config.c_ipgm_secret) {
- CC->internal_pgm = 1;
- strcpy(CC->curr_user, "<internal program>");
- CC->cs_flags = CC->cs_flags|CS_STEALTH;
- cprintf("%d Authenticated as an internal program.\n", CIT_OK);
- }
- else {
- sleep(5);
- cprintf("%d Authentication failed.\n", ERROR + PASSWORD_REQUIRED);
- syslog(LOG_ERR, "Warning: ipgm authentication failed.\n");
- CC->kill_me = KILLME_AUTHFAILED;
- }
-}
-
/*
* Shut down the server
CtdlRegisterProtoHook(cmd_echo, "ECHO", "echo text back to the client");
CtdlRegisterProtoHook(cmd_more, "MORE", "fetch the paginator prompt");
CtdlRegisterProtoHook(cmd_iden, "IDEN", "identify the client software and location");
- CtdlRegisterProtoHook(cmd_ipgm, "IPGM", "perform privilege escalation for internal programs");
CtdlRegisterProtoHook(cmd_term, "TERM", "terminate another running session");
CtdlRegisterProtoHook(cmd_down, "DOWN", "perform a server shutdown");
CtdlRegisterProtoHook(cmd_halt, "HALT", "halt the server without exiting the server process");