execute: split out creation of runtime dirs into its own functions

This commit is contained in:
Lennart Poettering 2016-08-25 10:12:57 +02:00 committed by Djalal Harouni
parent fe3c2583be
commit 07689d5d2c

View file

@ -1789,6 +1789,37 @@ static int setup_private_users(uid_t uid, gid_t gid) {
return 0; return 0;
} }
static int setup_runtime_directory(
const ExecContext *context,
const ExecParameters *params,
uid_t uid,
gid_t gid) {
char **rt;
int r;
assert(context);
assert(params);
STRV_FOREACH(rt, context->runtime_directory) {
_cleanup_free_ char *p;
p = strjoin(params->runtime_prefix, "/", *rt, NULL);
if (!p)
return -ENOMEM;
r = mkdir_p_label(p, context->runtime_directory_mode);
if (r < 0)
return r;
r = chmod_and_chown(p, context->runtime_directory_mode, uid, gid);
if (r < 0)
return r;
}
return 0;
}
static void append_socket_pair(int *array, unsigned *n, int pair[2]) { static void append_socket_pair(int *array, unsigned *n, int pair[2]) {
assert(array); assert(array);
assert(n); assert(n);
@ -2188,28 +2219,10 @@ static int exec_child(
} }
if (!strv_isempty(context->runtime_directory) && params->runtime_prefix) { if (!strv_isempty(context->runtime_directory) && params->runtime_prefix) {
char **rt; r = setup_runtime_directory(context, params, uid, gid);
if (r < 0) {
STRV_FOREACH(rt, context->runtime_directory) { *exit_status = EXIT_RUNTIME_DIRECTORY;
_cleanup_free_ char *p; return r;
p = strjoin(params->runtime_prefix, "/", *rt, NULL);
if (!p) {
*exit_status = EXIT_RUNTIME_DIRECTORY;
return -ENOMEM;
}
r = mkdir_p_label(p, context->runtime_directory_mode);
if (r < 0) {
*exit_status = EXIT_RUNTIME_DIRECTORY;
return r;
}
r = chmod_and_chown(p, context->runtime_directory_mode, uid, gid);
if (r < 0) {
*exit_status = EXIT_RUNTIME_DIRECTORY;
return r;
}
} }
} }