From c1b1492a94b43ca636eb383c3b058feff27ff7b1 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Fri, 3 Mar 2023 22:52:06 +0900 Subject: [PATCH] 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. --- src/basic/mkdir.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/basic/mkdir.c b/src/basic/mkdir.c index 7ad19ee33b..2257a1452f 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;