#include <afsconfig.h>
#include <afs/param.h>
+#ifdef IGNORE_SOME_GCC_WARNINGS
+# pragma GCC diagnostic warning "-Wdeprecated-declarations"
+#endif
#include <afs/stds.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+#ifdef HAVE_SYS_RESOURCE_H
+#include <sys/resource.h>
+#endif
#ifdef AFS_NT40_ENV
#include <winsock2.h>
#include <direct.h>
#include "bosprototypes.h"
#include <rx/rxkad.h>
#include <rx/rxstat.h>
-#include <rx/rxstat_prototypes.h>
#include <afs/keys.h>
#include <afs/ktime.h>
#include <afs/afsutil.h>
struct afsconf_dir *bozo_confdir = 0; /* bozo configuration dir */
static PROCESS bozo_pid;
-struct rx_securityClass *bozo_rxsc[3];
const char *bozo_fileName;
FILE *bozo_logFile;
+const char *DoCore;
int DoLogging = 0;
int DoSyslog = 0;
#ifndef AFS_NT40_ENV
#define ADDRSPERSITE 16 /* Same global is in rx/rx_user.c */
afs_uint32 SHostAddrs[ADDRSPERSITE];
-#ifdef BOS_RESTRICTED_MODE
int bozo_isrestricted = 0;
int bozo_restdisable = 0;
bozo_isrestricted = 0;
bozo_restdisable = 1;
}
-#endif
struct bztemp {
FILE *file;
/* create all the bozo dirs */
static int
-CreateDirs(void)
+CreateDirs(const char *coredir)
{
if ((!strncmp
(AFSDIR_USR_DIRPATH, AFSDIR_CLIENT_ETC_DIRPATH,
symlink(AFSDIR_SERVER_CELLSERVDB_FILEPATH,
AFSDIR_CLIENT_CELLSERVDB_FILEPATH);
#endif /* AFS_NT40_ENV */
+ if (coredir)
+ MakeDir(coredir);
return 0;
}
afs_int32 i, goal;
struct bnode *tb;
char *parms[MAXPARMS];
-#ifdef BOS_RESTRICTED_MODE
int rmode;
-#endif
/* rename BozoInit to BosServer for the user */
if (!aname) {
if (code < 0)
perror("bosconfig rename");
}
-#ifdef BOS_NEW_CONFIG
if (access(AFSDIR_SERVER_BOZCONFNEW_FILEPATH, 0) == 0) {
code =
renamefile(AFSDIR_SERVER_BOZCONFNEW_FILEPATH,
if (code < 0)
perror("bosconfig rename");
}
-#endif
}
- /* setup default times we want to do restarts */
- bozo_nextRestartKT.mask = KTIME_HOUR | KTIME_MIN | KTIME_DAY;
- bozo_nextRestartKT.hour = 4; /* 4 am */
+ /* don't do server restarts by default */
+ bozo_nextRestartKT.mask = KTIME_NEVER;
+ bozo_nextRestartKT.hour = 0;
bozo_nextRestartKT.min = 0;
- bozo_nextRestartKT.day = 0; /* Sunday */
+ bozo_nextRestartKT.day = 0;
+
+ /* restart processes at 5am if their binaries have changed */
bozo_nextDayKT.mask = KTIME_HOUR | KTIME_MIN;
bozo_nextDayKT.hour = 5;
bozo_nextDayKT.min = 0;
bozo_nextDayKT.sec = ktsec;
continue;
}
-#ifdef BOS_RESTRICTED_MODE
+
if (strncmp(tbuffer, "restrictmode", 12) == 0) {
code = sscanf(tbuffer, "restrictmode %d", &rmode);
if (code != 1) {
bozo_isrestricted = rmode;
continue;
}
-#endif
if (strncmp("bnode", tbuffer, 5) != 0) {
code = -1;
if (!tfile)
return -1;
btemp.file = tfile;
-#ifdef BOS_RESTRICTED_MODE
+
fprintf(tfile, "restrictmode %d\n", bozo_isrestricted);
-#endif
fprintf(tfile, "restarttime %d %d %d %d %d\n", bozo_nextRestartKT.mask,
bozo_nextRestartKT.day, bozo_nextRestartKT.hour,
bozo_nextRestartKT.min, bozo_nextRestartKT.sec);
IOMGR_Sleep(60);
now = FT_ApproxTime();
-#ifdef BOS_RESTRICTED_MODE
if (bozo_restdisable) {
bozo_Log("Restricted mode disabled by signal\n");
bozo_restdisable = 0;
}
-#endif
+
if (bozo_newKTs) { /* need to recompute restart times */
bozo_newKTs = 0; /* done for a while */
nextRestart = ktime_next(&bozo_nextRestartKT, BOZO_MINSKIP);
int rxMaxMTU = -1;
afs_uint32 host = htonl(INADDR_ANY);
char *auditFileName = NULL;
+ struct rx_securityClass **securityClasses;
+ afs_int32 numClasses;
#ifndef AFS_NT40_ENV
int nofork = 0;
struct stat sb;
sigaction(SIGABRT, &nsa, NULL);
#endif
osi_audit_init();
-#ifdef BOS_RESTRICTED_MODE
signal(SIGFPE, bozo_insecureme);
-#endif
#ifdef AFS_NT40_ENV
/* Initialize winsock */
/* some path inits */
bozo_fileName = AFSDIR_SERVER_BOZCONF_FILEPATH;
+ DoCore = AFSDIR_SERVER_LOGS_DIRPATH;
/* initialize the list of dirpaths that the bosserver has
* an interest in monitoring */
} else if (strncmp(argv[code], "-syslog=", 8) == 0) {
DoSyslog = 1;
DoSyslogFacility = atoi(argv[code] + 8);
+ } else if (strncmp(argv[code], "-cores=", 7) == 0) {
+ if (strcmp((argv[code]+7), "none") == 0)
+ DoCore = 0;
+ else
+ DoCore = (argv[code]+7);
} else if (strcmp(argv[code], "-nofork") == 0) {
nofork = 1;
}
} else if (strcmp(argv[code], "-enable_process_stats") == 0) {
rx_enableProcessRPCStats();
}
-#ifdef BOS_RESTRICTED_MODE
else if (strcmp(argv[code], "-restricted") == 0) {
bozo_isrestricted = 1;
}
-#endif
else if (strcmp(argv[code], "-rxbind") == 0) {
rxBind = 1;
}
rxMaxMTU = atoi(argv[++code]);
if ((rxMaxMTU < RX_MIN_PACKET_SIZE) ||
(rxMaxMTU > RX_MAX_PACKET_DATA_SIZE)) {
- printf("rxMaxMTU %d invalid; must be between %d-%lu\n",
+ printf("rxMaxMTU %d invalid; must be between %d-%" AFS_SIZET_FMT "\n",
rxMaxMTU, RX_MIN_PACKET_SIZE,
RX_MAX_PACKET_DATA_SIZE);
exit(1);
"[-rxmaxmtu <bytes>] [-rxbind] [-allow-dotted-principals]"
"[-syslog[=FACILITY]] "
"[-enable_peer_stats] [-enable_process_stats] "
+ "[-cores=<none|path>] \n"
"[-nofork] " "[-help]\n");
#else
printf("Usage: bosserver [-noauth] [-log] "
"[-audit-interafce <file|sysvmq> (default is file)] "
"[-rxmaxmtu <bytes>] [-rxbind] [-allow-dotted-principals]"
"[-enable_peer_stats] [-enable_process_stats] "
+ "[-cores=<none|path>] \n"
"[-help]\n");
#endif
fflush(stdout);
bnode_Register("cron", &cronbnode_ops, 2);
/* create useful dirs */
- CreateDirs();
+ CreateDirs(DoCore);
/* chdir to AFS log directory */
- chdir(AFSDIR_SERVER_LOGS_DIRPATH);
+ if (DoCore)
+ chdir(DoCore);
+ else
+ chdir(AFSDIR_SERVER_LOGS_DIRPATH);
#if 0
fputs(AFS_GOVERNMENT_MESSAGE, stdout);
#endif
}
+#if defined(RLIMIT_CORE) && defined(HAVE_GETRLIMIT)
+ {
+ struct rlimit rlp;
+ getrlimit(RLIMIT_CORE, &rlp);
+ if (!DoCore)
+ rlp.rlim_cur = 0;
+ else
+ rlp.rlim_max = rlp.rlim_cur = RLIM_INFINITY;
+ setrlimit(RLIMIT_CORE, &rlp);
+ getrlimit(RLIMIT_CORE, &rlp);
+ bozo_Log("Core limits now %d %d\n",(int)rlp.rlim_cur,(int)rlp.rlim_max);
+ }
+#endif
+
/* Write current state of directory permissions to log file */
DirAccessOK();
/* allow super users to manage RX statistics */
rx_SetRxStatUserOk(bozo_rxstat_userok);
- /* have bcrypt key now */
-
afsconf_SetNoAuthFlag(tdir, noAuth);
-
- bozo_rxsc[0] = rxnull_NewServerSecurityObject();
- bozo_rxsc[1] = (struct rx_securityClass *)0;
- bozo_rxsc[2] =
- rxkad_NewServerSecurityObject(0, tdir, afsconf_GetKey, NULL);
+ afsconf_BuildServerSecurityObjects(tdir, 0, &securityClasses, &numClasses);
/* Disable jumbograms */
rx_SetNoJumbo();
host = SHostAddrs[0];
}
- tservice = rx_NewServiceHost(host, /* port */ 0, /* service id */ 1,
- /*service name */ "bozo",
- /* security classes */
- bozo_rxsc,
- /* numb sec classes */ 3, BOZO_ExecuteRequest);
+ tservice = rx_NewServiceHost(host, 0, /* service id */ 1,
+ "bozo", securityClasses, numClasses,
+ BOZO_ExecuteRequest);
rx_SetMinProcs(tservice, 2);
rx_SetMaxProcs(tservice, 4);
rx_SetStackSize(tservice, BOZO_LWP_STACKSIZE); /* so gethostbyname works (in cell stuff) */
}
tservice =
- rx_NewServiceHost(host, 0, RX_STATS_SERVICE_ID, "rpcstats", bozo_rxsc,
- 3, RXSTATS_ExecuteRequest);
+ rx_NewServiceHost(host, 0, RX_STATS_SERVICE_ID, "rpcstats",
+ securityClasses, numClasses, RXSTATS_ExecuteRequest);
rx_SetMinProcs(tservice, 2);
rx_SetMaxProcs(tservice, 4);
rx_StartServer(1); /* donate this process */