(main, init_server, emp_server.6): Add -R command line option to set

a seed for the random function.

(nightlybuild.sh): Add the -R 1 for the server.
(nightlybuild.sh): Switch to -R 1 for the fairland as 1 is safer.
Some systems might generate lousy randomness from a
zero seed.

(prng.patch): Not required anymore, -R 1 is used instead.

(main, emp_server.6): Rename -r and -R to -u and -U.  "-R" is now used for random seed.
This commit is contained in:
Ron Koenderink 2007-10-23 03:05:56 +00:00
parent c115ed1327
commit ec484e17a7
5 changed files with 31 additions and 475 deletions

View file

@ -106,10 +106,11 @@ print_usage(char *program_name)
#endif
" -p threading debug mode, implies -d\n"
#ifdef _WIN32
" -r remove service `%s'\n"
" -R NAME remove service NAME\n"
" -u uninstall service `%s'\n"
" -U NAME uninstall service NAME\n"
#endif
" -s enable stack checking\n"
" -R RANDOM-SEED random seed\n"
" -v display version information and exit\n",
program_name, dflt_econfig
#ifdef _WIN32
@ -130,13 +131,14 @@ main(int argc, char **argv)
#endif
char *config_file = NULL;
int op, sig;
unsigned seed = time(NULL);
#ifdef _WIN32
# define XOPTS "iI:rR:"
# define XOPTS "iI:uU:"
#else
# define XOPTS
#endif
while ((op = getopt(argc, argv, "de:hpsv" XOPTS)) != EOF) {
while ((op = getopt(argc, argv, "de:hpsR:v" XOPTS)) != EOF) {
switch (op) {
case 'p':
flags |= EMPTH_PRINT;
@ -155,16 +157,19 @@ main(int argc, char **argv)
case 'i':
install_service_set++;
break;
case 'R':
case 'U':
service_name = optarg;
/* fall through */
case 'r':
case 'u':
remove_service_set++;
break;
#endif /* _WIN32 */
case 's':
flags |= EMPTH_STACKCHECK;
break;
case 'R':
seed = strtoul(optarg, NULL, 10);
break;
case 'v':
printf("%s\n\n%s", version, legal);
return EXIT_SUCCESS;
@ -181,7 +186,7 @@ main(int argc, char **argv)
if ((debug || flags || config_file != NULL) &&
remove_service_set) {
fprintf(stderr, "Can't use -p, -s, -d or -e with either "
"-r or -R options\n");
"-u or -U options\n");
exit(EXIT_FAILURE);
}
if ((debug || flags) && install_service_set) {
@ -190,7 +195,7 @@ main(int argc, char **argv)
exit(EXIT_FAILURE);
}
if (install_service_set && remove_service_set) {
fprintf(stderr, "Can't use both -r or -R and -i or -I "
fprintf(stderr, "Can't use both -u or -U and -i or -I "
"options\n");
exit(EXIT_FAILURE);
}
@ -237,7 +242,7 @@ main(int argc, char **argv)
return install_service(program_name, service_name, config_file);
#endif /* _WIN32 */
init_server();
init_server(seed);
#if defined(_WIN32)
if (daemonize != 0) {
@ -295,9 +300,9 @@ main(int argc, char **argv)
* Initialize for serving, acquire resources.
*/
void
init_server(void)
init_server(unsigned seed)
{
srandom(time(NULL));
srandom(seed);
#if defined(_WIN32)
loc_NTInit();
#endif