From d8c92e8bc7351f553936b5235e1922c18ebd817a Mon Sep 17 00:00:00 2001 From: Zbigniew Jędrzejewski-Szmek Date: Tue, 25 Apr 2017 22:54:50 -0400 Subject: execute: filter out "." for ".." in EnvironmentFile= globs too This doesn't really matter much, only in case somebody would use something strange like EnvironmentFile=/etc/something/.* Make sure that "." and ".." is not returned by that glob. This makes all our globbing patterns behave the same. --- src/core/execute.c | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/src/core/execute.c b/src/core/execute.c index 2056e2273c..9c1aa4cf98 100644 --- a/src/core/execute.c +++ b/src/core/execute.c @@ -3231,11 +3231,10 @@ int exec_context_load_environment(Unit *unit, const ExecContext *c, char ***l) { STRV_FOREACH(i, c->environment_files) { char *fn; - int k; + int k, n; bool ignore = false; char **p; _cleanup_globfree_ glob_t pglob = {}; - int count, n; fn = *i; @@ -3253,23 +3252,19 @@ int exec_context_load_environment(Unit *unit, const ExecContext *c, char ***l) { } /* Filename supports globbing, take all matching files */ - errno = 0; - if (glob(fn, 0, NULL, &pglob) != 0) { + k = safe_glob(fn, 0, &pglob); + if (k < 0) { if (ignore) continue; strv_free(r); - return errno > 0 ? -errno : -EINVAL; + return k; } - count = pglob.gl_pathc; - if (count == 0) { - if (ignore) - continue; - strv_free(r); - return -EINVAL; - } - for (n = 0; n < count; n++) { + /* When we don't match anything, -ENOENT should be returned */ + assert(pglob.gl_pathc > 0); + + for (n = 0; n < pglob.gl_pathc; n++) { k = load_env_file(NULL, pglob.gl_pathv[n], NULL, &p); if (k < 0) { if (ignore) -- cgit v1.2.3-54-g00ecf