]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
mkdir: fix error code on failure
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 3 Mar 2023 13:52:06 +0000 (22:52 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 3 Mar 2023 13:52:09 +0000 (22:52 +0900)
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

index 7ad19ee33b7f9147ae0d2903259c33707fb5846a..2257a1452f82f56fe5be02d1b60b684a14df9d29 100644 (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;