]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
path-util: invert PATH_STARTSWITH_ACCEPT_DOT_DOT flag 37572/head
authorLennart Poettering <lennart@poettering.net>
Fri, 23 May 2025 04:45:40 +0000 (06:45 +0200)
committerLennart Poettering <lennart@poettering.net>
Fri, 23 May 2025 04:51:45 +0000 (06:51 +0200)
As requested: https://github.com/systemd/systemd/pull/37572#pullrequestreview-2861928094

src/basic/cgroup-util.c
src/basic/fs-util.c
src/basic/mkdir.c
src/basic/path-util.c
src/basic/path-util.h
src/core/cgroup.c

index b68cab68a092536f97cc4ef1165302631e691199..e11a6a3e49235f1dcdc6c3ef182f237044010437 100644 (file)
@@ -976,7 +976,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;
 }
 
index fd2312b543b6e66aa016fa37413019a71a65ed66..5b83c78b24df161916e0ffb056a3d5817b5e16f9 100644 (file)
@@ -67,7 +67,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)
index 9c04942bd136dc3f815f4482d41bfc09400a305b..fc2d36b33d5621f2c54242139dcd0a74e8b55f40 100644 (file)
@@ -151,7 +151,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;
 
index 5dd9b589f6a003e3b2d9aad0597ffc2a40e6d4ce..2fd568743aedf6eb6a4fcc5d9ed07d27ec000175 100644 (file)
@@ -456,11 +456,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;
 
index 172248577ee3fcd03de12c4cd46275c374ec3542..fabb0eac88c2ba1863cf73b57e3cf5b6371e0229 100644 (file)
@@ -45,13 +45,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_;
index e9dade8eb34ef6a0fdd2502c4d8eacd6819bd2f2..ed5d0f975dded9e294eb978a420b1037c8135bc9 100644 (file)
@@ -2811,7 +2811,7 @@ static int unit_prune_cgroup_via_bus(Unit *u) {
         const char *pp = path_startswith_full(
                         crt->cgroup_path,
                         u->manager->cgroup_root,
-                        PATH_STARTSWITH_RETURN_LEADING_SLASH);
+                        PATH_STARTSWITH_RETURN_LEADING_SLASH|PATH_STARTSWITH_REFUSE_DOT_DOT);
         if (!pp)
                 return -EINVAL;