Mercurial > hg > early-roguelike
comparison xrogue/rip.c @ 143:7faf4568c295
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.
author | John "Elwin" Edwards |
---|---|
date | Sat, 16 May 2015 13:39:26 -0400 |
parents | dd137c35c3b1 |
children | 5a77931393f4 |
comparison
equal
deleted
inserted
replaced
142:6b5fbd7c3ece | 143:7faf4568c295 |
---|---|
17 */ | 17 */ |
18 | 18 |
19 #define REALLIFE 1 /* Print out machine and logname */ | 19 #define REALLIFE 1 /* Print out machine and logname */ |
20 #define EDITSCORE 2 /* Edit the current score file */ | 20 #define EDITSCORE 2 /* Edit the current score file */ |
21 #define ADDSCORE 3 /* Add a new score */ | 21 #define ADDSCORE 3 /* Add a new score */ |
22 | |
23 #define LOGFILE "xrogue.log" | |
24 | 22 |
25 #include <curses.h> | 23 #include <curses.h> |
26 #include <time.h> | 24 #include <time.h> |
27 #include <signal.h> | 25 #include <signal.h> |
28 #include <ctype.h> | 26 #include <ctype.h> |
56 NULL | 54 NULL |
57 }; | 55 }; |
58 | 56 |
59 char *killname(); | 57 char *killname(); |
60 | 58 |
59 extern FILE *scorefi, *logfile; | |
60 | |
61 /*UNUSED*/ | 61 /*UNUSED*/ |
62 void | 62 void |
63 byebye(sig) | 63 byebye(sig) |
64 int sig; | 64 int sig; |
65 { | 65 { |
136 /* Writes an entry in the log file */ | 136 /* Writes an entry in the log file */ |
137 | 137 |
138 void | 138 void |
139 writelog(unsigned long amount, int flags, short monst) | 139 writelog(unsigned long amount, int flags, short monst) |
140 { | 140 { |
141 FILE *logwriter; | |
142 char had_quest = '0'; | 141 char had_quest = '0'; |
143 char fate[LINELEN]; | 142 char fate[LINELEN]; |
144 struct linked_list *item; | 143 struct linked_list *item; |
145 struct object *obj; | 144 struct object *obj; |
146 #ifdef LOGFILE | 145 #ifdef LOGFILE |
147 if (waswizard) | 146 if (waswizard) |
148 return; | 147 return; |
148 if (logfile == NULL) | |
149 { | |
150 /* Error message? */ | |
151 return; | |
152 } | |
149 /* Adjustments to the score */ | 153 /* Adjustments to the score */ |
150 if (level == 0 && max_level == 0) | 154 if (level == 0 && max_level == 0) |
151 amount = 0; | 155 amount = 0; |
152 if (flags == CHICKEN) | 156 if (flags == CHICKEN) |
153 amount /= 100; | 157 amount /= 100; |
167 else if (flags == WINNER) { | 171 else if (flags == WINNER) { |
168 strcpy(fate, "escaped"); | 172 strcpy(fate, "escaped"); |
169 } | 173 } |
170 else | 174 else |
171 return; | 175 return; |
172 /* Open and write */ | 176 /* Write the line */ |
173 logwriter = fopen(LOGFILE, "a"); | 177 fprintf(logfile, "%d %d %s %d %s %d %d %d %c %s\n", time(NULL), amount, |
174 if (logwriter == NULL) | |
175 return; | |
176 fprintf(logwriter, "%d %d %s %d %s %d %d %d %c %s\n", time(NULL), amount, | |
177 whoami, pstats.s_lvl, char_class[char_type].name, level, max_level, | 178 whoami, pstats.s_lvl, char_class[char_type].name, level, max_level, |
178 quest_item, had_quest, fate); | 179 quest_item, had_quest, fate); |
179 fclose(logwriter); | 180 fclose(logfile); |
180 #endif | 181 #endif |
181 return; | 182 return; |
182 } | 183 } |
183 | 184 |
184 /* | 185 /* |
232 | 233 |
233 /* | 234 /* |
234 * Open file and read list | 235 * Open file and read list |
235 */ | 236 */ |
236 | 237 |
237 if ((outf = fopen(score_file, "rb+")) == NULL) | 238 if (scorefi == NULL) |
238 { | 239 { |
239 if ((outf = fopen(score_file, "wb+")) == NULL) | 240 mvprintw(lines - 1, 0, "Unable to open or create score file: %s",score_file); |
240 { | 241 refresh(); |
241 mvprintw(lines - 1, 0, "Unable to open or create score file: %s",score_file); | 242 return; |
242 refresh(); | 243 } |
243 return; | 244 else |
244 } | 245 { |
246 outf = scorefi; | |
245 } | 247 } |
246 | 248 |
247 thissys = md_gethostname(); | 249 thissys = md_gethostname(); |
248 | 250 |
249 /* | 251 /* |