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.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2017-04-25 22:54:50 -04:00
parent 84e72b5ef4
commit d8c92e8bc7
1 changed files with 8 additions and 13 deletions

View File

@ -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)