diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2013-10-22 20:39:18 -0400 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2013-10-22 22:54:09 -0400 |
commit | d8c9d3a468e61ee2a2b2c3454e662398b0885411 (patch) | |
tree | 071accb03d22bffa24f1a2c1c2284a3c70570bc8 /src/core | |
parent | 0fb0c56f5283a8a94560f595768a801c8240a9bd (diff) |
systemd: use unit name in PrivateTmp directories
Unit name is used whole in the directory name, so that the unit name
can be easily extracted from it, e.g. "/tmp/systemd-abcd.service-DEDBIF1".
https://bugzilla.redhat.com/show_bug.cgi?id=957439
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/execute.c | 2 | ||||
-rw-r--r-- | src/core/namespace.c | 15 | ||||
-rw-r--r-- | src/core/namespace.h | 5 |
3 files changed, 14 insertions, 8 deletions
diff --git a/src/core/execute.c b/src/core/execute.c index 8f09233e3e..e04f46f036 100644 --- a/src/core/execute.c +++ b/src/core/execute.c @@ -1089,7 +1089,7 @@ int exec_spawn(ExecCommand *command, free(line); if (context->private_tmp && !context->tmp_dir && !context->var_tmp_dir) { - r = setup_tmpdirs(&context->tmp_dir, &context->var_tmp_dir); + r = setup_tmpdirs(unit_id, &context->tmp_dir, &context->var_tmp_dir); if (r < 0) return r; } diff --git a/src/core/namespace.c b/src/core/namespace.c index 936f36839b..b453f8dc09 100644 --- a/src/core/namespace.c +++ b/src/core/namespace.c @@ -184,26 +184,29 @@ static int make_read_only(BindMount *m) { return 0; } -int setup_tmpdirs(char **tmp_dir, +int setup_tmpdirs(const char *unit_id, + char **tmp_dir, char **var_tmp_dir) { int r = 0; - char tmp_dir_template[] = "/tmp/systemd-private-XXXXXX", - var_tmp_dir_template[] = "/var/tmp/systemd-private-XXXXXX"; + _cleanup_free_ char *tmp = NULL, *var = NULL; assert(tmp_dir); assert(var_tmp_dir); - r = create_tmp_dir(tmp_dir_template, tmp_dir); + tmp = strjoin("/tmp/systemd-", unit_id, "-XXXXXXX", NULL); + var = strjoin("/var/tmp/systemd-", unit_id, "-XXXXXXX", NULL); + + r = create_tmp_dir(tmp, tmp_dir); if (r < 0) return r; - r = create_tmp_dir(var_tmp_dir_template, var_tmp_dir); + r = create_tmp_dir(var, var_tmp_dir); if (r == 0) return 0; /* failure */ rmdir(*tmp_dir); - rmdir(tmp_dir_template); + rmdir(tmp); free(*tmp_dir); *tmp_dir = NULL; diff --git a/src/core/namespace.h b/src/core/namespace.h index ddb579468d..ee7416b7bd 100644 --- a/src/core/namespace.h +++ b/src/core/namespace.h @@ -23,7 +23,10 @@ #include <stdbool.h> -int setup_tmpdirs(char **tmp_dir, char **var_tmp_dir); +int setup_tmpdirs(const char *unit_id, + char **tmp_dir, + char **var_tmp_dir); + int setup_namespace(char **read_write_dirs, char **read_only_dirs, char **inaccessible_dirs, |