aboutsummaryrefslogtreecommitdiffstats
path: root/FICS
diff options
context:
space:
mode:
Diffstat (limited to 'FICS')
-rw-r--r--FICS/adminproc.c42
-rw-r--r--FICS/command.c9
-rw-r--r--FICS/comproc.c18
-rw-r--r--FICS/playerdb.c4
-rw-r--r--FICS/ratings.c13
5 files changed, 60 insertions, 26 deletions
diff --git a/FICS/adminproc.c b/FICS/adminproc.c
index e670d44..dfe528e 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)
@@ -373,6 +392,7 @@ com_anews(int p, param_list param)
char filename[MAX_FILENAME_SIZE] = { '\0' };
char junk[MAX_LINE_SIZE] = { '\0' };
char *junkp = NULL;
+ const char *v_scan_junk = "%" SCNd64 " " "%9s";
int found = 0;
int64_t lval = 0;
time_t crtime = 0;
@@ -384,7 +404,6 @@ com_anews(int p, param_list param)
return COM_OK;
}
-#define SCAN_JUNK ("%" SCNd64 " " "%9s")
_Static_assert(9 < ARRAY_SIZE(count), "Array too small");
if (param[0].type == 0) {
@@ -402,7 +421,7 @@ com_anews(int p, param_list param)
fclose(fp);
return COM_FAILED;
}
- if (sscanf(junk, SCAN_JUNK, &lval, count) != 2) {
+ if (sscanf(junk, v_scan_junk, &lval, count) != 2) {
warnx("%s: sscanf() error: too few items", __func__);
fclose(fp);
return COM_FAILED;
@@ -431,7 +450,7 @@ com_anews(int p, param_list param)
fclose(fp);
return COM_FAILED;
}
- if (sscanf(junk, SCAN_JUNK, &lval, count) != 2) {
+ if (sscanf(junk, v_scan_junk, &lval, count) != 2) {
warnx("%s: sscanf() error: too few items", __func__);
fclose(fp);
return COM_FAILED;
@@ -455,8 +474,11 @@ com_anews(int p, param_list param)
break;
if (strlen(junk) > 1) {
- if (sscanf(junkp, SCAN_JUNK, &lval, count) != 2)
- warnx("%s: sscanf() error...", __func__);
+ if (sscanf(junkp, v_scan_junk, &lval,
+ count) != 2) {
+ warnx("%s: sscanf() error...",
+ __func__);
+ }
crtime = lval;
diff --git a/FICS/command.c b/FICS/command.c
index 301c305..bf69bf0 100644
--- a/FICS/command.c
+++ b/FICS/command.c
@@ -722,6 +722,7 @@ rscan_news(FILE *fp, int p, time_t lc)
char count[10] = { '\0' };
char junk[MAX_LINE_SIZE] = { '\0' };
char *junkp = NULL;
+ const char *scan_fmt = "%" SCNd64 " " "%9s";
int64_t lval = 0;
time_t crtime = 0;
@@ -731,7 +732,7 @@ rscan_news(FILE *fp, int p, time_t lc)
_Static_assert(ARRAY_SIZE(count) > 9, "Unexpected array size");
- if (sscanf(junk, ("%" SCNd64 " " "%9s"), &lval, count) != 2) {
+ if (sscanf(junk, scan_fmt, &lval, count) != 2) {
warnx("%s: sscanf() error: too few items", __func__);
return;
}
@@ -755,12 +756,12 @@ rscan_news(FILE *fp, int p, time_t lc)
PRIVATE void
check_news(int p, int admin)
{
-#define SCAN_JUNK ("%" SCNd64 " " "%9s")
FILE *fp = NULL;
char count[10] = { '\0' };
char filename[MAX_FILENAME_SIZE] = { '\0' };
char junk[MAX_LINE_SIZE] = { '\0' };
char *junkp = NULL;
+ const char *v_scan_fmt = "%" SCNd64 " " "%9s";
int64_t lval = 0;
time_t crtime = 0;
time_t lc = player_lastconnect(p);
@@ -791,7 +792,7 @@ check_news(int p, int admin)
warnx("%s: fgets() error", __func__);
fclose(fp);
return;
- } else if (sscanf(junk, SCAN_JUNK, &lval, count) != 2) {
+ } else if (sscanf(junk, v_scan_fmt, &lval, count) != 2) {
warnx("%s: sscanf() error", __func__);
fclose(fp);
return;
@@ -841,7 +842,7 @@ check_news(int p, int admin)
warnx("%s: fgets() error", __func__);
fclose(fp);
return;
- } else if (sscanf(junk, SCAN_JUNK, &lval, count) != 2) {
+ } else if (sscanf(junk, v_scan_fmt, &lval, count) != 2) {
warnx("%s: sscanf() error", __func__);
fclose(fp);
return;
diff --git a/FICS/comproc.c b/FICS/comproc.c
index 06592cc..b2504fd 100644
--- a/FICS/comproc.c
+++ b/FICS/comproc.c
@@ -136,6 +136,7 @@ rscan_news2(FILE *fp, int p, int num)
char count[10] = { '\0' };
char junk[MAX_LINE_SIZE] = { '\0' };
char *junkp;
+ const char *v_scan_fmt = "%" SCNd64 " " "%9s";
int64_t lval;
time_t crtime;
@@ -143,7 +144,7 @@ rscan_news2(FILE *fp, int p, int num)
return;
if (fgets(junk, sizeof junk, fp) == NULL || feof(fp) ||
- sscanf(junk, "%" SCNd64 " " "%9s", &lval, count) != 2)
+ sscanf(junk, v_scan_fmt, &lval, count) != 2)
return;
rscan_news2(fp, p, num - 1);
@@ -164,6 +165,7 @@ com_news(int p, param_list param)
char filename[MAX_FILENAME_SIZE] = { '\0' };
char junk[MAX_LINE_SIZE] = { '\0' };
char *junkp = NULL;
+ const char *v_scan_fmt = "%" SCNd64 " " "%9s";
int found = 0;
int64_t lval = 0;
time_t crtime = 0;
@@ -175,7 +177,6 @@ com_news(int p, param_list param)
return COM_OK;
}
-#define SCAN_JUNK ("%" SCNd64 " " "%9s")
_Static_assert(9 < ARRAY_SIZE(count), "'count' too small");
if (param[0].type == 0) {
@@ -187,7 +188,7 @@ com_news(int p, param_list param)
pprintf(p, "Index of recent news items:\n");
if (fgets(junk, sizeof junk, fp) == NULL ||
- sscanf(junk, SCAN_JUNK, &lval, count) != 2) {
+ sscanf(junk, v_scan_fmt, &lval, count) != 2) {
warnx("%s: error: fgets() or sscanf()", __func__);
fclose(fp);
return COM_FAILED;
@@ -212,7 +213,7 @@ com_news(int p, param_list param)
pprintf(p, "Index of all news items:\n");
if (fgets(junk, sizeof junk, fp) == NULL ||
- sscanf(junk, SCAN_JUNK, &lval, count) != 2) {
+ sscanf(junk, v_scan_fmt, &lval, count) != 2) {
warnx("%s: error: fgets() or sscanf()", __func__);
fclose(fp);
return COM_FAILED;
@@ -238,7 +239,7 @@ com_news(int p, param_list param)
if (fgets(junk, sizeof junk, fp) == NULL || feof(fp))
break;
- if (sscanf(junkp, SCAN_JUNK, &lval, count) != 2)
+ if (sscanf(junkp, v_scan_fmt, &lval, count) != 2)
warnx("%s: sscanf() error...", __func__);
crtime = lval;
@@ -765,6 +766,8 @@ plogins(int p, char *fname)
FILE *fp = NULL;
char ipstr[20] = { '\0' };
char loginName[MAX_LOGIN_NAME + 1] = { '\0' };
+ const char *v_scan_fmt = "%" SCNu16 " %19s " "%" SCNd64 " "
+ "%d %19s\n";
int registered = 0;
int64_t lval = 0;
time_t tval = 0;
@@ -778,10 +781,9 @@ plogins(int p, char *fname)
_Static_assert(19 < ARRAY_SIZE(ipstr), "'ipstr' too small");
_Static_assert(19 < ARRAY_SIZE(loginName), "'loginName' too small");
-#define SCAN_FMT ("%" SCNu16 " %19s " "%" SCNd64 " " "%d %19s\n")
while (!feof(fp)) {
- if (fscanf(fp, SCAN_FMT, &inout, loginName, &lval, &registered,
- ipstr) != 5) {
+ if (fscanf(fp, v_scan_fmt, &inout, loginName, &lval,
+ &registered, ipstr) != 5) {
fprintf(stderr, "FICS: Error in login info format. "
"%s\n", fname);
fclose(fp);
diff --git a/FICS/playerdb.c b/FICS/playerdb.c
index 29e8d78..29e14f4 100644
--- a/FICS/playerdb.c
+++ b/FICS/playerdb.c
@@ -1721,7 +1721,7 @@ player_lastconnect(int p)
_Static_assert(19 < ARRAY_SIZE(ipstr),
"'ipstr' too small");
- if (fscanf(fp, "%d %19s " "%" SCNd64 " %d %19s\n", &inout,
+ if (fscanf(fp, ("%d %19s " "%" SCNd64 " %d %19s\n"), &inout,
loginName, &lval, &registered, ipstr) != 5) {
fprintf(stderr, "FICS: Error in login info format. %s"
"\n", fname);
@@ -1764,7 +1764,7 @@ player_lastdisconnect(int p)
_Static_assert(19 < ARRAY_SIZE(ipstr),
"'ipstr' too small");
- if (fscanf(fp, "%d %19s " "%" SCNd64 " %d %19s\n", &inout,
+ if (fscanf(fp, ("%d %19s " "%" SCNd64 " %d %19s\n"), &inout,
loginName, &lval, &registered, ipstr) != 5) {
fprintf(stderr, "FICS: Error in login info format. %s"
"\n", fname);
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;
}