From f1d93b84bcc7c722a03928587023b144d4cc5e48 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Fri, 26 Aug 2022 07:50:32 +0900 Subject: [PATCH] mkdir: chase_symlinks_and_stat() does not return 0 This reverts commits e22916e61d1fdb7b46918b605ebf783d9017f9d8 and 1e146d738232acbe7f72903e9c5e4d1166ea67f5. --- src/basic/mkdir.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/basic/mkdir.c b/src/basic/mkdir.c index cd966cba942..c8ff342d0f7 100644 --- a/src/basic/mkdir.c +++ b/src/basic/mkdir.c @@ -19,7 +19,8 @@ int mkdir_safe_internal( const char *path, mode_t mode, - uid_t uid, gid_t gid, + uid_t uid, + gid_t gid, MkdirFlags flags, mkdirat_func_t _mkdirat) { @@ -42,13 +43,16 @@ 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, 0, &p, &st, NULL); + r = chase_symlinks(path, NULL, CHASE_NONEXISTENT, &p, NULL); if (r < 0) return r; if (r == 0) return mkdir_safe_internal(p, mode, uid, gid, flags & ~MKDIR_FOLLOW_SYMLINK, _mkdirat); + + if (lstat(p, &st) < 0) + return -errno; } if (flags & MKDIR_IGNORE_EXISTING) -- 2.47.3