Mercurial > hg > early-roguelike
comparison arogue7/main.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 | 796e2a10cd41 |
| children | aac28331e71d |
comparison
equal
deleted
inserted
replaced
| 142:6b5fbd7c3ece | 143:7faf4568c295 |
|---|---|
| 14 | 14 |
| 15 #include "curses.h" | 15 #include "curses.h" |
| 16 #include <stdlib.h> | 16 #include <stdlib.h> |
| 17 #include <string.h> | 17 #include <string.h> |
| 18 #include <signal.h> | 18 #include <signal.h> |
| 19 #include <sys/types.h> | |
| 20 #include <fcntl.h> | |
| 19 #ifdef BSD | 21 #ifdef BSD |
| 20 #include <sys/time.h> | 22 #include <sys/time.h> |
| 21 #else | 23 #else |
| 22 #include <time.h> | 24 #include <time.h> |
| 23 #endif | 25 #endif |
| 29 #include <ctype.h> | 31 #include <ctype.h> |
| 30 extern struct uwdata wdata, oldwin; | 32 extern struct uwdata wdata, oldwin; |
| 31 extern char oldtext[WTXTNUM][WTXTLEN]; | 33 extern char oldtext[WTXTNUM][WTXTLEN]; |
| 32 #endif | 34 #endif |
| 33 | 35 |
| 34 #define SAVEDIR "." | 36 int scorefd = -1; |
| 37 FILE *logfile = NULL; | |
| 38 void open_records(void); | |
| 35 | 39 |
| 36 main(argc, argv, envp) | 40 main(argc, argv, envp) |
| 37 char **argv; | 41 char **argv; |
| 38 char **envp; | 42 char **envp; |
| 39 { | 43 { |
| 89 parse_opts(env); | 93 parse_opts(env); |
| 90 | 94 |
| 91 if (whoami[0] == '\0') | 95 if (whoami[0] == '\0') |
| 92 strucpy(whoami, md_getusername(), strlen(md_getusername())); | 96 strucpy(whoami, md_getusername(), strlen(md_getusername())); |
| 93 | 97 |
| 98 open_records(); | |
| 99 | |
| 94 /* | 100 /* |
| 95 * check for print-score option | 101 * check for print-score option |
| 96 */ | 102 */ |
| 97 if (argc == 2 && strcmp(argv[1], "-s") == 0) | 103 if (argc == 2 && strcmp(argv[1], "-s") == 0) |
| 98 { | 104 { |
| 158 | 164 |
| 159 if (use_savedir) | 165 if (use_savedir) |
| 160 { | 166 { |
| 161 if (!restore(file_name, envp)) | 167 if (!restore(file_name, envp)) |
| 162 exit(1); | 168 exit(1); |
| 169 } | |
| 170 else | |
| 171 { | |
| 172 md_normaluser(); | |
| 163 } | 173 } |
| 164 if (argc == 2) | 174 if (argc == 2) |
| 165 if (!restore(argv[1], envp)) /* Note: restore will never return */ | 175 if (!restore(argv[1], envp)) /* Note: restore will never return */ |
| 166 exit(1); | 176 exit(1); |
| 167 lowtime = (int) time(&now); | 177 lowtime = (int) time(&now); |
| 537 raw(); /* Cbreak mode */ | 547 raw(); /* Cbreak mode */ |
| 538 noecho(); /* Echo off */ | 548 noecho(); /* Echo off */ |
| 539 nonl(); | 549 nonl(); |
| 540 } | 550 } |
| 541 | 551 |
| 552 void | |
| 553 open_records(void) | |
| 554 { | |
| 555 if (scorefd == -1) | |
| 556 scorefd = open(score_file, O_RDWR | O_CREAT, 0666); | |
| 557 #ifdef LOGFILE | |
| 558 if (logfile == NULL) | |
| 559 logfile = fopen(LOGFILE, "a"); | |
| 560 #endif | |
| 561 return; | |
| 562 } | |
| 563 | |
| 542 /* | 564 /* |
| 543 * playit: | 565 * playit: |
| 544 * The main loop of the program. Loop until the game is over, | 566 * The main loop of the program. Loop until the game is over, |
| 545 * refreshing things and looking at the proper times. | 567 * refreshing things and looking at the proper times. |
| 546 */ | 568 */ |
