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

@ -20,8 +20,6 @@
#define EDITSCORE 2 /* Edit the current score file */
#define ADDSCORE 3 /* Add a new score */
#define LOGFILE "xrogue.log"
#include <curses.h>
#include <time.h>
#include <signal.h>
@ -58,6 +56,8 @@ NULL
char *killname();
extern FILE *scorefi, *logfile;
/*UNUSED*/
void
byebye(sig)
@ -138,7 +138,6 @@ register short monst;
void
writelog(unsigned long amount, int flags, short monst)
{
FILE *logwriter;
char had_quest = '0';
char fate[LINELEN];
struct linked_list *item;
@ -146,6 +145,11 @@ writelog(unsigned long amount, int flags, short monst)
#ifdef LOGFILE
if (waswizard)
return;
if (logfile == NULL)
{
/* Error message? */
return;
}
/* Adjustments to the score */
if (level == 0 && max_level == 0)
amount = 0;
@ -169,14 +173,11 @@ writelog(unsigned long amount, int flags, short monst)
}
else
return;
/* Open and write */
logwriter = fopen(LOGFILE, "a");
if (logwriter == NULL)
return;
fprintf(logwriter, "%d %d %s %d %s %d %d %d %c %s\n", time(NULL), amount,
/* Write the line */
fprintf(logfile, "%d %d %s %d %s %d %d %d %c %s\n", time(NULL), amount,
whoami, pstats.s_lvl, char_class[char_type].name, level, max_level,
quest_item, had_quest, fate);
fclose(logwriter);
fclose(logfile);
#endif
return;
}
@ -234,14 +235,15 @@ short monst;
* Open file and read list
*/
if ((outf = fopen(score_file, "rb+")) == NULL)
if (scorefi == NULL)
{
if ((outf = fopen(score_file, "wb+")) == NULL)
{
mvprintw(lines - 1, 0, "Unable to open or create score file: %s",score_file);
refresh();
return;
}
mvprintw(lines - 1, 0, "Unable to open or create score file: %s",score_file);
refresh();
return;
}
else
{
outf = scorefi;
}
thissys = md_gethostname();