]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
portabled: create temp file for unit, not directory
authorLuca Boccassi <luca.boccassi@microsoft.com>
Tue, 23 Jun 2020 14:56:33 +0000 (15:56 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 25 Jun 2020 16:40:19 +0000 (18:40 +0200)
open_tmpfile_linkable is used to create a temporary file in the same
directory as the target, but portabled uses the name of the parent
directory instead of the file it intends to create.
In other words, it creats a tmp for /etc/systemd/system.attached instead
of /etc/systemd/system.attached/foo.service.
It still works because it's later moved in the right place.
But as a side effect, it tries the create the file in the parent directory
which is /etc/systemd, and it case of read-only filesystems it fails.

src/portable/portable.c

index 3dc6d9e4220b3844290c36019c9170e58acc7fd1..c7c11a48f2419e6b428f3f573d8d1f8bb30feb18 100644 (file)
@@ -877,7 +877,7 @@ static int attach_unit_file(
                 _cleanup_(unlink_and_freep) char *tmp = NULL;
                 _cleanup_close_ int fd = -1;
 
-                fd = open_tmpfile_linkable(where, O_WRONLY|O_CLOEXEC, &tmp);
+                fd = open_tmpfile_linkable(path, O_WRONLY|O_CLOEXEC, &tmp);
                 if (fd < 0)
                         return log_debug_errno(fd, "Failed to create unit file '%s': %m", path);