From: Lennart Poettering Date: Fri, 23 May 2025 04:45:40 +0000 (+0200) Subject: path-util: invert PATH_STARTSWITH_ACCEPT_DOT_DOT flag X-Git-Tag: v257.11~8 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7ac3220213690e8a8d6d2a6e81e43bd1dce01d69;p=thirdparty%2Fsystemd.git path-util: invert PATH_STARTSWITH_ACCEPT_DOT_DOT flag As requested: https://github.com/systemd/systemd/pull/37572#pullrequestreview-2861928094 (cherry picked from commit ceed11e465f1c8efff1931412a85924d9de7c08d) --- diff --git a/src/basic/fs-util.c b/src/basic/fs-util.c index a1ae0f7cca2..2864853150f 100644 --- a/src/basic/fs-util.c +++ b/src/basic/fs-util.c @@ -66,7 +66,7 @@ int rmdir_parents(const char *path, const char *stop) { assert(*slash == '/'); *slash = '\0'; - if (path_startswith_full(stop, p, /* flags= */ 0)) + if (path_startswith_full(stop, p, PATH_STARTSWITH_REFUSE_DOT_DOT)) return 0; if (rmdir(p) < 0 && errno != ENOENT) diff --git a/src/basic/mkdir.c b/src/basic/mkdir.c index 6fc2a79944b..f1e5f2dc8df 100644 --- a/src/basic/mkdir.c +++ b/src/basic/mkdir.c @@ -149,7 +149,7 @@ int mkdir_parents_internal(const char *prefix, const char *path, mode_t mode, ui assert(_mkdirat != mkdirat); if (prefix) { - p = path_startswith_full(path, prefix, /* flags= */ 0); + p = path_startswith_full(path, prefix, PATH_STARTSWITH_REFUSE_DOT_DOT); if (!p) return -EINVAL; diff --git a/src/basic/path-util.c b/src/basic/path-util.c index 24f3cbcc18f..89df67c2a25 100644 --- a/src/basic/path-util.c +++ b/src/basic/path-util.c @@ -428,11 +428,11 @@ char* path_startswith_full(const char *original_path, const char *prefix, PathSt const char *p, *q; int m, n; - m = path_find_first_component(&path, FLAGS_SET(flags, PATH_STARTSWITH_ACCEPT_DOT_DOT), &p); + m = path_find_first_component(&path, !FLAGS_SET(flags, PATH_STARTSWITH_REFUSE_DOT_DOT), &p); if (m < 0) return NULL; - n = path_find_first_component(&prefix, FLAGS_SET(flags, PATH_STARTSWITH_ACCEPT_DOT_DOT), &q); + n = path_find_first_component(&prefix, !FLAGS_SET(flags, PATH_STARTSWITH_REFUSE_DOT_DOT), &q); if (n < 0) return NULL; diff --git a/src/basic/path-util.h b/src/basic/path-util.h index 8a82e1af76e..91b2c997bf6 100644 --- a/src/basic/path-util.h +++ b/src/basic/path-util.h @@ -55,13 +55,13 @@ int path_make_relative(const char *from, const char *to, char **ret); int path_make_relative_parent(const char *from_child, const char *to, char **ret); typedef enum PathStartWithFlags { - PATH_STARTSWITH_ACCEPT_DOT_DOT = 1U << 0, + PATH_STARTSWITH_REFUSE_DOT_DOT = 1U << 0, PATH_STARTSWITH_RETURN_LEADING_SLASH = 1U << 1, } PathStartWithFlags; char* path_startswith_full(const char *path, const char *prefix, PathStartWithFlags flags) _pure_; static inline char* path_startswith(const char *path, const char *prefix) { - return path_startswith_full(path, prefix, PATH_STARTSWITH_ACCEPT_DOT_DOT); + return path_startswith_full(path, prefix, 0); } int path_compare(const char *a, const char *b) _pure_;