96 lines
4.0 KiB
Diff
96 lines
4.0 KiB
Diff
From 052e695f3ce6c511ba2415051b615c92d630c165 Mon Sep 17 00:00:00 2001
|
|
From: Lennart Poettering <lennart@poettering.net>
|
|
Date: Fri, 23 May 2025 06:45:40 +0200
|
|
Subject: [PATCH] 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)
|
|
|
|
Related: RHEL-152080
|
|
---
|
|
src/basic/cgroup-util.c | 2 +-
|
|
src/basic/fs-util.c | 2 +-
|
|
src/basic/mkdir.c | 2 +-
|
|
src/basic/path-util.c | 4 ++--
|
|
src/basic/path-util.h | 4 ++--
|
|
5 files changed, 7 insertions(+), 7 deletions(-)
|
|
|
|
diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c
|
|
index b8a17badea..925b753c39 100644
|
|
--- a/src/basic/cgroup-util.c
|
|
+++ b/src/basic/cgroup-util.c
|
|
@@ -1030,7 +1030,7 @@ int cg_shift_path(const char *cgroup, const char *root, const char **ret_shifted
|
|
root = rt;
|
|
}
|
|
|
|
- *ret_shifted = path_startswith_full(cgroup, root, PATH_STARTSWITH_RETURN_LEADING_SLASH) ?: cgroup;
|
|
+ *ret_shifted = path_startswith_full(cgroup, root, PATH_STARTSWITH_RETURN_LEADING_SLASH|PATH_STARTSWITH_REFUSE_DOT_DOT) ?: cgroup;
|
|
return 0;
|
|
}
|
|
|
|
diff --git a/src/basic/fs-util.c b/src/basic/fs-util.c
|
|
index 21a670c9e8..69e76653ab 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 6fc2a79944..f1e5f2dc8d 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 a4709e1b7d..fda6066bc6 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 d1e9f4b785..429d7ac507 100644
|
|
--- a/src/basic/path-util.h
|
|
+++ b/src/basic/path-util.h
|
|
@@ -54,13 +54,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_;
|