9
0
Fork 0

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
This commit is contained in:
Neels Hofmeyr 2016-09-19 03:35:53 +02:00
parent f7611c3cee
commit f41f5866ce
1 changed files with 6 additions and 4 deletions

View File

@ -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))