summaryrefslogtreecommitdiffstats
path: root/meta/recipes-core/systemd/systemd/0001-mkdir-allow-to-create-directory-whose-path-contains-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-core/systemd/systemd/0001-mkdir-allow-to-create-directory-whose-path-contains-.patch')
-rw-r--r--meta/recipes-core/systemd/systemd/0001-mkdir-allow-to-create-directory-whose-path-contains-.patch130
1 files changed, 0 insertions, 130 deletions
diff --git a/meta/recipes-core/systemd/systemd/0001-mkdir-allow-to-create-directory-whose-path-contains-.patch b/meta/recipes-core/systemd/systemd/0001-mkdir-allow-to-create-directory-whose-path-contains-.patch
deleted file mode 100644
index 003db430b7..0000000000
--- a/meta/recipes-core/systemd/systemd/0001-mkdir-allow-to-create-directory-whose-path-contains-.patch
+++ /dev/null
@@ -1,130 +0,0 @@
-From b060c53503339c45808efeb4294a03105a2999a5 Mon Sep 17 00:00:00 2001
-From: Yu Watanabe <watanabe.yu+github@gmail.com>
-Date: Wed, 2 Feb 2022 14:05:45 +0900
-Subject: [PATCH] mkdir: allow to create directory whose path contains symlink
-Cc: pavel@zhukoff.net
-
-Upstream-Status: Backport
-Upstream-Url: https://github.com/systemd/systemd/pull/22359
-
-Signed-off-by: Pavel Zhukov <pavel.zhukov@huawei.com>
-
-
-core/mount: fail early if directory cannot be created
-
-Prompted by #22334.
-
-mkdir: CHASE_NONEXISTENT cannot used in chase_symlinks_and_stat()
-
-mkdir: allow to create directory whose path contains symlink
-
-Fixes a regression caused by 3008a6f21c1c42efe852d69798a2fdd63fe657ec.
-
-Before the commit, when `mkdir_parents_internal()` is called from `mkdir_p()`,
-it uses `_mkdir()` as `flag` is zero. But after the commit, `mkdir_safe_internal()`
-is always used. Hence, if the path contains a symlink, it fails with -ENOTDIR.
-
-To fix the issue, this makes `mkdir_p()` calls `mkdir_parents_internal()` with
-MKDIR_FOLLOW_SYMLINK flag.
-
-Fixes #22334.
-
-test: add a test for mkdir_p()
----
- src/basic/mkdir.c | 4 ++--
- src/core/mount.c | 4 +++-
- src/test/meson.build | 2 ++
- src/test/test-mkdir.c | 30 ++++++++++++++++++++++++++++++
- 4 files changed, 37 insertions(+), 3 deletions(-)
- create mode 100644 src/test/test-mkdir.c
-
-diff --git a/src/basic/mkdir.c b/src/basic/mkdir.c
-index 6e2b94d024..51a0d74e87 100644
---- a/src/basic/mkdir.c
-+++ b/src/basic/mkdir.c
-@@ -42,7 +42,7 @@ int mkdir_safe_internal(
- if ((flags & MKDIR_FOLLOW_SYMLINK) && S_ISLNK(st.st_mode)) {
- _cleanup_free_ char *p = NULL;
-
-- r = chase_symlinks_and_stat(path, NULL, CHASE_NONEXISTENT, &p, &st, NULL);
-+ r = chase_symlinks_and_stat(path, NULL, 0, &p, &st, NULL);
- if (r < 0)
- return r;
- if (r == 0)
-@@ -162,7 +162,7 @@ int mkdir_p_internal(const char *prefix, const char *path, mode_t mode, uid_t ui
-
- assert(_mkdirat != mkdirat);
-
-- r = mkdir_parents_internal(prefix, path, mode, uid, gid, flags, _mkdirat);
-+ r = mkdir_parents_internal(prefix, path, mode, uid, gid, flags | MKDIR_FOLLOW_SYMLINK, _mkdirat);
- if (r < 0)
- return r;
-
-diff --git a/src/core/mount.c b/src/core/mount.c
-index 0170406351..c650b5abe2 100644
---- a/src/core/mount.c
-+++ b/src/core/mount.c
-@@ -1027,8 +1027,10 @@ static void mount_enter_mounting(Mount *m) {
- r = mkdir_p_label(p->what, m->directory_mode);
- /* mkdir_p_label() can return -EEXIST if the target path exists and is not a directory - which is
- * totally OK, in case the user wants us to overmount a non-directory inode. */
-- if (r < 0 && r != -EEXIST)
-+ if (r < 0 && r != -EEXIST) {
- log_unit_error_errno(UNIT(m), r, "Failed to make bind mount source '%s': %m", p->what);
-+ goto fail;
-+ }
- }
-
- if (p) {
-diff --git a/src/test/meson.build b/src/test/meson.build
-index 9a1c481f22..7aa1d9c6ea 100644
---- a/src/test/meson.build
-+++ b/src/test/meson.build
-@@ -193,6 +193,8 @@ tests += [
-
- [['src/test/test-macro.c']],
-
-+ [['src/test/test-mkdir.c']],
-+
- [['src/test/test-json.c']],
-
- [['src/test/test-modhex.c']],
-diff --git a/src/test/test-mkdir.c b/src/test/test-mkdir.c
-new file mode 100644
-index 0000000000..c715d5f096
---- /dev/null
-+++ b/src/test/test-mkdir.c
-@@ -0,0 +1,30 @@
-+/* SPDX-License-Identifier: LGPL-2.1-or-later */
-+
-+#include <unistd.h>
-+
-+#include "mkdir.h"
-+#include "path-util.h"
-+#include "rm-rf.h"
-+#include "tests.h"
-+#include "tmpfile-util.h"
-+
-+TEST(mkdir_p) {
-+ _cleanup_(rm_rf_physical_and_freep) char *tmp = NULL;
-+ _cleanup_free_ char *p = NULL;
-+
-+ assert_se(mkdtemp_malloc("/tmp/test-mkdir-XXXXXX", &tmp) >= 0);
-+
-+ assert_se(p = path_join(tmp, "run"));
-+ assert_se(mkdir_p(p, 0755) >= 0);
-+
-+ p = mfree(p);
-+ assert_se(p = path_join(tmp, "var/run"));
-+ assert_se(mkdir_parents(p, 0755) >= 0);
-+ assert_se(symlink("../run", p) >= 0);
-+
-+ p = mfree(p);
-+ assert_se(p = path_join(tmp, "var/run/hoge/foo/baz"));
-+ assert_se(mkdir_p(p, 0755) >= 0);
-+}
-+
-+DEFINE_TEST_MAIN(LOG_DEBUG);
---
-2.34.1
-