From 9f2d41a65fb8671c5746a952c1917da8f2774bc8 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Wed, 4 Oct 2017 15:21:12 +0900 Subject: [PATCH 1/2] load-fragment: do not create empty array Originally added in 4589f5bb0a973e9a41be93de06c87072cea4dfb9. C.f. 8249bb728db6c2abaf12575d661b52571bdc1ab1 and #6746. --- src/core/load-fragment.c | 24 ++---------------------- 1 file changed, 2 insertions(+), 22 deletions(-) diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c index 2c3783a9f0..5dd1787098 100644 --- a/src/core/load-fragment.c +++ b/src/core/load-fragment.c @@ -284,19 +284,7 @@ int config_parse_unit_path_strv_printf( assert(u); if (isempty(rvalue)) { - char **empty; - - /* Empty assignment resets the list. As a special rule - * we actually fill in a real empty array here rather - * than NULL, since some code wants to know if - * something was set at all... */ - empty = new0(char*, 1); - if (!empty) - return log_oom(); - - strv_free(*x); - *x = empty; - + *x = strv_free(*x); return 0; } @@ -1968,15 +1956,7 @@ int config_parse_user_group_strv( assert(u); if (isempty(rvalue)) { - char **empty; - - empty = new0(char*, 1); - if (!empty) - return log_oom(); - - strv_free(*users); - *users = empty; - + *users = strv_free(*users); return 0; } From ac6e8be66ecf57d401fd60c927cf81d522c7a8b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Wed, 4 Oct 2017 11:33:30 +0200 Subject: [PATCH 2/2] core: use strv_isempty to check if supplementary_groups is empty With the previous commit, we know that it will be NULL if empty, but it's safe to always use strv_isempty() in case the code changes in the future. --- src/core/execute.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/core/execute.c b/src/core/execute.c index e1c2a57cc6..afb11c6fb6 100644 --- a/src/core/execute.c +++ b/src/core/execute.c @@ -895,7 +895,7 @@ static int get_supplementary_groups(const ExecContext *c, const char *user, keep_groups = true; } - if (!c->supplementary_groups) + if (strv_isempty(c->supplementary_groups)) return 0; /* @@ -969,7 +969,7 @@ static int enforce_groups(const ExecContext *context, gid_t gid, assert(context); /* Handle SupplementaryGroups= even if it is empty */ - if (context->supplementary_groups) { + if (!strv_isempty(context->supplementary_groups)) { r = maybe_setgroups(ngids, supplementary_gids); if (r < 0) return r; @@ -4052,7 +4052,7 @@ void exec_context_dump(ExecContext *c, FILE* f, const char *prefix) { fprintf(f, "%sDynamicUser: %s\n", prefix, yes_no(c->dynamic_user)); - if (strv_length(c->supplementary_groups) > 0) { + if (!strv_isempty(c->supplementary_groups)) { fprintf(f, "%sSupplementaryGroups:", prefix); strv_fprintf(f, c->supplementary_groups); fputs("\n", f);