From: Yu Watanabe Date: Wed, 2 Feb 2022 05:20:48 +0000 (+0900) Subject: mkdir: allow to create directory whose path contains symlink X-Git-Tag: v251-rc1~376^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5117059ee9f84ed2fd37801ec0b90473db475422;p=thirdparty%2Fsystemd.git 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. --- diff --git a/src/basic/mkdir.c b/src/basic/mkdir.c index 71ed24c5896..51a0d74e875 100644 --- a/src/basic/mkdir.c +++ b/src/basic/mkdir.c @@ -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;