Make all file opens close on exec to prevent leaving files open on existing and possible future execves

This commit is contained in:
Con Kolivas 2014-08-24 19:21:16 +10:00
parent d0faecad64
commit 97b03d016f
5 changed files with 20 additions and 20 deletions

View File

@ -1337,7 +1337,7 @@ static bool rotating_log_nolock(char *msg)
bool ok = false;
filename = rotating_filename(logname, time(NULL));
fp = fopen(filename, "a+");
fp = fopen(filename, "a+e");
if (unlikely(!fp)) {
LOGERR("Failed to fopen %s in rotating_log!", filename);
goto stageleft;
@ -6100,7 +6100,7 @@ static bool reload()
start.tv_sec = DATE_BEGIN;
start.tv_usec = 0L;
filename = rotating_filename(restorefrom, start.tv_sec);
fp = fopen(filename, "r");
fp = fopen(filename, "re");
if (fp)
fclose(fp);
else {
@ -6139,7 +6139,7 @@ static bool write_pid(ckpool_t *ckp, const char *path, pid_t pid)
int oldpid;
LOGWARNING("File %s exists", path);
fp = fopen(path, "r");
fp = fopen(path, "re");
if (!fp) {
LOGEMERG("Failed to open file %s", path);
return false;
@ -6159,7 +6159,7 @@ static bool write_pid(ckpool_t *ckp, const char *path, pid_t pid)
LOGWARNING("Killing off old process %s pid %d", path, oldpid);
}
}
fp = fopen(path, "w");
fp = fopen(path, "we");
if (!fp) {
LOGERR("Failed to open file %s", path);
return false;
@ -8789,7 +8789,7 @@ static bool reload_from(tv_t *start)
LOGWARNING("%s(): from %s", __func__, buf);
filename = rotating_filename(restorefrom, start->tv_sec);
fp = fopen(filename, "r");
fp = fopen(filename, "re");
if (!fp)
quithere(1, "Failed to open '%s'", filename);
@ -8827,7 +8827,7 @@ static bool reload_from(tv_t *start)
break;
start->tv_sec += ROLL_S;
filename = rotating_filename(restorefrom, start->tv_sec);
fp = fopen(filename, "r");
fp = fopen(filename, "re");
if (!fp) {
missingfirst = strdup(filename);
free(filename);
@ -8848,7 +8848,7 @@ static bool reload_from(tv_t *start)
break;
}
filename = rotating_filename(restorefrom, start->tv_sec);
fp = fopen(filename, "r");
fp = fopen(filename, "re");
if (fp)
break;
errno = 0;
@ -9173,7 +9173,7 @@ static void confirm_reload()
start.tv_sec = DATE_BEGIN;
start.tv_usec = 0L;
filename = rotating_filename(restorefrom, start.tv_sec);
fp = fopen(filename, "r");
fp = fopen(filename, "re");
if (fp)
fclose(fp);
else {
@ -9370,7 +9370,7 @@ int main(int argc, char **argv)
/* Create the logfile */
sprintf(buf, "%s%s%s.log", ckp.logdir, ckp.name, dbcode);
ckp.logfp = fopen(buf, "a");
ckp.logfp = fopen(buf, "ae");
if (!ckp.logfp)
quit(1, "Failed to open log file %s", buf);
ckp.logfd = fileno(ckp.logfp);

View File

@ -388,7 +388,7 @@ static int get_proc_pid(proc_instance_t *pi)
FILE *fp;
sprintf(path, "%s%s.pid", pi->ckp->socket_dir, pi->processname);
fp = fopen(path, "r");
fp = fopen(path, "re");
if (!fp)
goto out;
ret = fscanf(fp, "%d", &pid);
@ -615,7 +615,7 @@ static bool write_pid(ckpool_t *ckp, const char *path, pid_t pid)
int oldpid;
LOGNOTICE("File %s exists", path);
fp = fopen(path, "r");
fp = fopen(path, "re");
if (!fp) {
LOGEMERG("Failed to open file %s", path);
return false;
@ -635,7 +635,7 @@ static bool write_pid(ckpool_t *ckp, const char *path, pid_t pid)
LOGWARNING("Killing off old process %s pid %d", path, oldpid);
}
}
fp = fopen(path, "w");
fp = fopen(path, "we");
if (!fp) {
LOGERR("Failed to open file %s", path);
return false;
@ -1223,7 +1223,7 @@ int main(int argc, char **argv)
/* Create the logfile */
sprintf(buf, "%s%s.log", ckp.logdir, ckp.name);
ckp.logfp = fopen(buf, "a");
ckp.logfp = fopen(buf, "ae");
if (!ckp.logfp)
quit(1, "Failed to make open log file %s", buf);
/* Make logging line buffered */

View File

@ -144,7 +144,7 @@ void _dsp_ktree(K_LIST *list, K_TREE *root, char *filename, char *msg, KTREE_FFL
tm.tm_min,
tm.tm_sec);
stream = fopen(filename, "a");
stream = fopen(filename, "ae");
if (!stream)
{
fprintf(stderr, "%s %s() failed to open '%s' (%d) %s",

View File

@ -999,15 +999,15 @@ bool rotating_log(const char *path, const char *msg)
bool ok = false;
filename = rotating_filename(path, time(NULL));
fd = open(filename, O_CREAT|O_RDWR, mode);
fd = open(filename, O_CREAT | O_RDWR | O_CLOEXEC , mode);
if (unlikely(fd == -1)) {
LOGERR("Failed to open %s in rotating_log!", filename);
goto stageleft;
}
fp = fdopen(fd, "a");
fp = fdopen(fd, "ae");
if (unlikely(!fp)) {
close(fd);
LOGERR("Failed to fopen %s in rotating_log!", filename);
LOGERR("Failed to fdopen %s in rotating_log!", filename);
goto stageleft;
}
if (unlikely(flock(fd, LOCK_EX))) {

View File

@ -1873,7 +1873,7 @@ out_unlock:
json_set_string(val, "username", user_instance->username);
if (ckp->logshares) {
fp = fopen(fname, "a");
fp = fopen(fname, "ae");
if (likely(fp)) {
s = json_dumps(val, 0);
len = strlen(s);
@ -2400,7 +2400,7 @@ static void *statsupdate(void *arg)
suffix_string(ghs1440, suffix1440, 16, 0);
snprintf(fname, 511, "%s/pool.status", ckp->logdir);
fp = fopen(fname, "w");
fp = fopen(fname, "we");
if (unlikely(!fp))
LOGERR("Failed to fopen %s", fname);
@ -2474,7 +2474,7 @@ static void *statsupdate(void *arg)
"hashrate1d", suffix1440);
snprintf(fname, 511, "%s/%s", ckp->logdir, client->workername);
fp = fopen(fname, "w");
fp = fopen(fname, "we");
if (unlikely(!fp)) {
LOGERR("Failed to fopen %s", fname);
continue;