path-util: invert PATH_STARTSWITH_ACCEPT_DOT_DOT flag
As requested: https://github.com/systemd/systemd/pull/37572#pullrequestreview-2861928094
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -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)
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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_;
|
||||
|
||||
+1
-1
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user