Mercurial > hg > early-roguelike
comparison arogue7/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 | 1a64fd0bfea6 |
children | ca876944b196 |
comparison
equal
deleted
inserted
replaced
142:6b5fbd7c3ece | 143:7faf4568c295 |
---|---|
15 /* Print flags for scoring */ | 15 /* Print flags for scoring */ |
16 #define REALLIFE 1 /* Print out machine and logname */ | 16 #define REALLIFE 1 /* Print out machine and logname */ |
17 #define EDITSCORE 2 /* Edit the current score file */ | 17 #define EDITSCORE 2 /* Edit the current score file */ |
18 #define ADDSCORE 3 /* Add a new score */ | 18 #define ADDSCORE 3 /* Add a new score */ |
19 | 19 |
20 #define LOGFILE "arogue7.log" | |
21 | |
22 #define NAMELEN 80 | 20 #define NAMELEN 80 |
23 | 21 |
24 /* | 22 /* |
25 * File for the fun ends | 23 * File for the fun ends |
26 * Death or a total win | 24 * Death or a total win |
45 #ifdef PC7300 | 43 #ifdef PC7300 |
46 #include "sys/window.h" | 44 #include "sys/window.h" |
47 extern struct uwdata wdata, oldwin; | 45 extern struct uwdata wdata, oldwin; |
48 extern char oldtext[WTXTNUM][WTXTLEN]; | 46 extern char oldtext[WTXTNUM][WTXTLEN]; |
49 #endif | 47 #endif |
48 | |
49 extern int scorefd; | |
50 extern FILE *logfile; | |
50 | 51 |
51 #ifdef NUMNET | 52 #ifdef NUMNET |
52 /* Network machines (for mutual score keeping) */ | 53 /* Network machines (for mutual score keeping) */ |
53 static struct network Network[NUMNET] = { | 54 static struct network Network[NUMNET] = { |
54 { "ihwpt", "/t1/michael/bin/rg" }, | 55 { "ihwpt", "/t1/michael/bin/rg" }, |
205 /* Writes an entry in the log file */ | 206 /* Writes an entry in the log file */ |
206 | 207 |
207 void | 208 void |
208 writelog(unsigned long amount, int flags, short monst) | 209 writelog(unsigned long amount, int flags, short monst) |
209 { | 210 { |
210 FILE *logwriter; | |
211 char had_quest = '0'; | 211 char had_quest = '0'; |
212 char fate[LINELEN]; | 212 char fate[LINELEN]; |
213 struct linked_list *item; | 213 struct linked_list *item; |
214 struct object *obj; | 214 struct object *obj; |
215 #ifdef LOGFILE | 215 #ifdef LOGFILE |
216 if (waswizard) | 216 if (waswizard) |
217 return; | 217 return; |
218 if (logfile == NULL) | |
219 return; | |
218 /* Check for quest item */ | 220 /* Check for quest item */ |
219 for (item = pack; item != NULL; item = next(item)) { | 221 for (item = pack; item != NULL; item = next(item)) { |
220 obj = OBJPTR(item); | 222 obj = OBJPTR(item); |
221 if (obj->o_type == RELIC && obj->o_which == quest_item) | 223 if (obj->o_type == RELIC && obj->o_which == quest_item) |
222 had_quest = '1'; | 224 had_quest = '1'; |
231 else if (flags == WINNER) { | 233 else if (flags == WINNER) { |
232 strcpy(fate, "escaped"); | 234 strcpy(fate, "escaped"); |
233 } | 235 } |
234 else | 236 else |
235 return; | 237 return; |
236 /* Open and write */ | 238 /* Write */ |
237 logwriter = fopen(LOGFILE, "a"); | 239 fprintf(logfile, "%d %d %s %d %s %d %d %d %c %s\n", time(NULL), amount, |
238 if (logwriter == NULL) | |
239 return; | |
240 fprintf(logwriter, "%d %d %s %d %s %d %d %d %c %s\n", time(NULL), amount, | |
241 whoami, pstats.s_lvl, char_class[char_type].name, level, max_level, | 240 whoami, pstats.s_lvl, char_class[char_type].name, level, max_level, |
242 quest_item, had_quest, fate); | 241 quest_item, had_quest, fate); |
243 fclose(logwriter); | 242 fclose(logfile); |
244 #endif | 243 #endif |
245 return; | 244 return; |
246 } | 245 } |
247 | 246 |
248 /* | 247 /* |
293 | 292 |
294 /* | 293 /* |
295 * Open file and read list | 294 * Open file and read list |
296 */ | 295 */ |
297 | 296 |
298 if ((fd = open(score_file, O_RDWR | O_CREAT, 0666)) < 0) return; | 297 if ((fd = scorefd) < 0) return; |
299 outfd = fd; | 298 outfd = fd; |
300 | 299 |
301 #ifndef SYSTEM | 300 #ifndef SYSTEM |
302 thissys = md_gethostname(); | 301 thissys = md_gethostname(); |
303 #else | 302 #else |