From: Yu Watanabe Date: Fri, 3 Mar 2023 13:52:06 +0000 (+0900) Subject: mkdir: fix error code on failure X-Git-Tag: v254-rc1~1089^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c1b1492a94b43ca636eb383c3b058feff27ff7b1;p=thirdparty%2Fsystemd.git mkdir: fix error code on failure Before: ==== $ systemctl edit network.target Failed to create directories for "/etc/systemd/system/network.target.d/override.conf": No such file or directory ==== After: ==== $ systemctl edit network.target Failed to create directories for "/etc/systemd/system/network.target.d/override.conf": Permission denied ==== Fixes #26652. --- diff --git a/src/basic/mkdir.c b/src/basic/mkdir.c index 7ad19ee33b7..2257a1452f8 100644 --- a/src/basic/mkdir.c +++ b/src/basic/mkdir.c @@ -32,11 +32,14 @@ int mkdirat_safe_internal( assert(mode != MODE_INVALID); assert(_mkdirat && _mkdirat != mkdirat); - if (_mkdirat(dir_fd, path, mode) >= 0) { + r = _mkdirat(dir_fd, path, mode); + if (r >= 0) { r = chmod_and_chown_at(dir_fd, path, mode, uid, gid); if (r < 0) return r; } + if (r != -EEXIST) + return r; if (fstatat(dir_fd, path, &st, AT_SYMLINK_NOFOLLOW) < 0) return -errno;