diff options
-rw-r--r-- | FICS/adminproc.c | 29 | ||||
-rw-r--r-- | FICS/ratings.c | 13 |
2 files changed, 35 insertions, 7 deletions
diff --git a/FICS/adminproc.c b/FICS/adminproc.c index e670d44..cca1a89 100644 --- a/FICS/adminproc.c +++ b/FICS/adminproc.c @@ -19,6 +19,8 @@ #include <sys/param.h> #include <err.h> +#include <errno.h> +#include <fcntl.h> #include <inttypes.h> #include <stdint.h> @@ -173,6 +175,7 @@ create_news_file(int p, param_list param, int admin) { FILE *fp; char filename[MAX_FILENAME_SIZE] = { '\0' }; + int fd; ASSERT(parray[p].adminLevel >= ADMIN_ADMIN); @@ -185,10 +188,14 @@ create_news_file(int p, param_list param, int admin) msnprintf(filename, sizeof filename, "%s/adminnews.%d", news_dir, param[0].val.integer); - if ((fp = fopen(filename, "w")) != NULL) { + fd = open(filename, O_WRONLY|O_CREAT, S_IWUSR|S_IRUSR); + if (fd < 0) + return COM_FAILED; + else if ((fp = fdopen(fd, "w")) != NULL) { fprintf(fp, "%s\n", param[1].val.string); fclose(fp); - } + } else + close(fd); } } else { if (param[0].val.integer > num_news) { @@ -198,10 +205,14 @@ create_news_file(int p, param_list param, int admin) msnprintf(filename, sizeof filename, "%s/news.%d", news_dir, param[0].val.integer); - if ((fp = fopen(filename, "w")) != NULL) { + fd = open(filename, O_WRONLY|O_CREAT, S_IWUSR|S_IRUSR); + if (fd < 0) + return COM_FAILED; + else if ((fp = fdopen(fd, "w")) != NULL) { fprintf(fp, "%s\n", param[1].val.string); fclose(fp); - } + } else + close(fd); } } @@ -214,11 +225,19 @@ add_item(char *new_item, char *filename) FILE *new_fp, *old_fp; char junk[MAX_LINE_SIZE] = { '\0' }; char tmp_file[MAX_FILENAME_SIZE] = { '\0' }; + int fd; msnprintf(tmp_file, sizeof tmp_file, "%s/.tmp.idx", news_dir); - if ((new_fp = fopen(tmp_file, "w")) == NULL) + fd = open(tmp_file, O_WRONLY|O_CREAT, S_IWUSR|S_IRUSR); + + if (fd < 0) return 0; + else if ((new_fp = fdopen(fd, "w")) == NULL) { + close(fd); + return 0; + } + fprintf(new_fp, "%s", new_item); if ((old_fp = fopen(filename, "r")) == NULL) diff --git a/FICS/ratings.c b/FICS/ratings.c index 2f82e62..a719be0 100644 --- a/FICS/ratings.c +++ b/FICS/ratings.c @@ -1488,7 +1488,8 @@ UpdateRank(int type, char *addName, statistics *sNew, char *delName) char command[MAX_STRING_LENGTH]; char line[MAX_RANK_LINE] = { '\0' }; char login[MAX_LOGIN_NAME] = { '\0' }; - int comp; + int comp = 0; + int fd = -1; statistics sCur; if (GetRankFileName(RankFile, sizeof RankFile, type) < 0) @@ -1501,9 +1502,17 @@ UpdateRank(int type, char *addName, statistics *sNew, char *delName) snprintf(TmpRankFile, sizeof TmpRankFile, "%s/tmpRank", sdir); - if ((fptemp = fopen(TmpRankFile, "w")) == NULL) { + errno = 0; + fd = open(TmpRankFile, O_WRONLY|O_CREAT, S_IWUSR|S_IRUSR); + + if (fd < 0) { + warn("%s: open", __func__); + fclose(fp); + return; + } else if ((fptemp = fdopen(fd, "w")) == NULL) { warn("%s: unable to open rank file for updating", __func__); fclose(fp); + close(fd); return; } |