Advanced Rogue family: overhaul privilege handling.

Advanced Rogue 5 and 7, and XRogue, now open the scorefile and logfile
at startup and then drop any set[ug]id privileges if the savedir is not
being used.
This commit is contained in:
John "Elwin" Edwards 2015-05-16 13:39:26 -04:00
parent 1a5e14ad9b
commit 3554339257
9 changed files with 123 additions and 38 deletions

View file

@ -16,6 +16,8 @@
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <sys/types.h>
#include <fcntl.h>
#ifdef BSD
#include <sys/time.h>
#else
@ -31,7 +33,9 @@ extern struct uwdata wdata, oldwin;
extern char oldtext[WTXTNUM][WTXTLEN];
#endif
#define SAVEDIR "."
int scorefd = -1;
FILE *logfile = NULL;
void open_records(void);
main(argc, argv, envp)
char **argv;
@ -91,6 +95,8 @@ char **envp;
if (whoami[0] == '\0')
strucpy(whoami, md_getusername(), strlen(md_getusername()));
open_records();
/*
* check for print-score option
*/
@ -161,6 +167,10 @@ char **envp;
if (!restore(file_name, envp))
exit(1);
}
else
{
md_normaluser();
}
if (argc == 2)
if (!restore(argv[1], envp)) /* Note: restore will never return */
exit(1);
@ -539,6 +549,18 @@ setup()
nonl();
}
void
open_records(void)
{
if (scorefd == -1)
scorefd = open(score_file, O_RDWR | O_CREAT, 0666);
#ifdef LOGFILE
if (logfile == NULL)
logfile = fopen(LOGFILE, "a");
#endif
return;
}
/*
* playit:
* The main loop of the program. Loop until the game is over,