From: Yu Watanabe Date: Thu, 25 Aug 2022 22:50:32 +0000 (+0900) Subject: mkdir: chase_symlinks_and_stat() does not return 0 X-Git-Tag: v252-rc1~141^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f1d93b84bcc7c722a03928587023b144d4cc5e48;p=thirdparty%2Fsystemd.git mkdir: chase_symlinks_and_stat() does not return 0 This reverts commits e22916e61d1fdb7b46918b605ebf783d9017f9d8 and 1e146d738232acbe7f72903e9c5e4d1166ea67f5. --- 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)