diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2019-08-30 14:10:42 +0200 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2019-08-30 14:10:42 +0200 |
commit | 890befcf47b19c9aff4d9d92ab3a1231b29770ab (patch) | |
tree | 11a9d34b544e2c9d9a4402fd6488ac4d6e82ff1d | |
parent | 29a45fe5aa689fa672b7791521584791b84a28b7 (diff) | |
download | systemd-890befcf47b19c9aff4d9d92ab3a1231b29770ab.tar.gz |
shared/unit-files: only put valid unit paths and dropin dirs in the cachehidden-units-are-good-units
-rw-r--r-- | src/basic/strv.h | 12 | ||||
-rw-r--r-- | src/shared/unit-file.c | 11 |
2 files changed, 22 insertions, 1 deletions
diff --git a/src/basic/strv.h b/src/basic/strv.h index e80964acd1..fbfa96a566 100644 --- a/src/basic/strv.h +++ b/src/basic/strv.h @@ -157,6 +157,18 @@ void strv_print(char **l); _found; \ }) +#define ENDSWITH_SET(p, ...) \ + ({ \ + const char *_p = (p); \ + char *_found = NULL, **_i; \ + STRV_FOREACH(_i, STRV_MAKE(__VA_ARGS__)) { \ + _found = endswith(_p, *_i); \ + if (_found) \ + break; \ + } \ + _found; \ + }) + #define FOREACH_STRING(x, y, ...) \ for (char **_l = STRV_MAKE(({ x = y; }), ##__VA_ARGS__); \ x; \ diff --git a/src/shared/unit-file.c b/src/shared/unit-file.c index b9b5268d0a..4a5f23e6c1 100644 --- a/src/shared/unit-file.c +++ b/src/shared/unit-file.c @@ -246,6 +246,15 @@ int unit_file_build_name_map( char *filename; _cleanup_free_ char *_filename_free = NULL, *simplified = NULL; const char *suffix, *dst = NULL; + bool valid_unit_name; + + valid_unit_name = unit_name_is_valid(de->d_name, UNIT_NAME_ANY); + + /* We only care about valid units and dirs with certain suffixes, let's ignore the + * rest. */ + if (!valid_unit_name && + !ENDSWITH_SET(de->d_name, ".wants", ".requires", ".d")) + continue; filename = path_join(*dir, de->d_name); if (!filename) @@ -260,7 +269,7 @@ int unit_file_build_name_map( } else _filename_free = filename; /* Make sure we free the filename. */ - if (!unit_name_is_valid(de->d_name, UNIT_NAME_ANY)) + if (!valid_unit_name) continue; assert_se(suffix = strrchr(de->d_name, '.')); |