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.
This commit is contained in:
Yu Watanabe
2023-03-03 22:52:09 +09:00
parent 16a9ad557d
commit c1b1492a94
+4 -1
View File
@@ -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;