aboutsummaryrefslogtreecommitdiffstats
path: root/gtp/gtp.c
diff options
context:
space:
mode:
authorNeels Hofmeyr <nhofmeyr@sysmocom.de>2016-09-19 03:35:53 +0200
committerNeels Hofmeyr <nhofmeyr@sysmocom.de>2016-10-14 11:39:49 +0000
commitf41f5866cebbf88b6ae09ec8bd00c308f4d9f315 (patch)
treef8dd43e0d82e34fed3093245504982693255bdb5 /gtp/gtp.c
parentf7611c3ceea4afffeded41e287a3200a578e8a5b (diff)
gsn_restart file: wrap umask change tightly around file creation
An fopen("w") error used to omit the umask() call to reinstate the previous umask. Also an fopen("r") at the top will never create a file and hence does not need a umask set. Instead, wrap the umask change and change-back tightly around the single fopen("w") call. Change-Id: If7d948e2f2ba47ecebba5614f18235a53b273d14
Diffstat (limited to 'gtp/gtp.c')
-rw-r--r--gtp/gtp.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/gtp/gtp.c b/gtp/gtp.c
index ccb2611..dcbe777 100644
--- a/gtp/gtp.c
+++ b/gtp/gtp.c
@@ -648,7 +648,6 @@ static void log_restart(struct gsn_t *gsn)
int counter = 0;
char *filename;
- i = umask(022);
filename = talloc_asprintf(NULL, "%s/%s", gsn->statedir, RESTART_FILE);
OSMO_ASSERT(filename);
@@ -658,7 +657,6 @@ static void log_restart(struct gsn_t *gsn)
"State information file (%s) not found. Creating new file.\n",
filename);
} else {
- umask(i);
rc = fscanf(f, "%d", &counter);
if (rc != 1) {
LOGP(DLGTP, LOGL_ERROR,
@@ -674,14 +672,18 @@ static void log_restart(struct gsn_t *gsn)
gsn->restart_counter = (unsigned char)counter;
gsn->restart_counter++;
- if (!(f = fopen(filename, "w"))) {
+ /* Keep the umask closely wrapped around our fopen() call in case the
+ * log outputs cause file creation. */
+ i = umask(022);
+ f = fopen(filename, "w");
+ umask(i);
+ if (!f) {
LOGP(DLGTP, LOGL_ERROR,
"fopen(path=%s, mode=%s) failed: Error = %s\n", filename,
"w", strerror(errno));
goto free_filename;
}
- umask(i);
fprintf(f, "%d\n", gsn->restart_counter);
close_file:
if (fclose(f))