diff options
Diffstat (limited to 'src/core/execute.c')
-rw-r--r-- | src/core/execute.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/src/core/execute.c b/src/core/execute.c index 18e25fa6e6..bc876a3292 100644 --- a/src/core/execute.c +++ b/src/core/execute.c @@ -40,6 +40,7 @@ #include <sys/poll.h> #include <linux/seccomp-bpf.h> #include <glob.h> +#include <libgen.h> #ifdef HAVE_PAM #include <security/pam_appl.h> @@ -1551,19 +1552,22 @@ void exec_context_init(ExecContext *c) { } void exec_context_tmp_dirs_done(ExecContext *c) { - assert(c); + char* dirs[] = {c->tmp_dir ? c->tmp_dir : c->var_tmp_dir, + c->tmp_dir ? c->var_tmp_dir : NULL, + NULL}; + char **dirp; - if (c->tmp_dir) { - rm_rf_dangerous(c->tmp_dir, false, true, false); - free(c->tmp_dir); - c->tmp_dir = NULL; - } + for(dirp = dirs; *dirp; dirp++) { + char *dir; + rm_rf_dangerous(*dirp, false, true, false); - if (c->var_tmp_dir) { - rm_rf_dangerous(c->var_tmp_dir, false, true, false); - free(c->var_tmp_dir); - c->var_tmp_dir = NULL; + dir = dirname(*dirp); + rmdir(dir); + + free(*dirp); } + + c->tmp_dir = c->var_tmp_dir = NULL; } void exec_context_done(ExecContext *c, bool reloading_or_reexecuting) { |