From e591c1a47c067cd2d14dca569cc9f0cce9072200 Mon Sep 17 00:00:00 2001 From: Andrei Borzenkov Date: Wed, 3 Jun 2015 20:50:59 +0300 Subject: [PATCH] fstab-generator: cescape device name in root-fsck service We unescape ExecStart line when parsing it, so escape device name before adding it to unit file. fixes #50 Cherry-picked from: fa05e97 Resolves: #1306126 --- src/shared/generator.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/shared/generator.c b/src/shared/generator.c index 3af84a325c..be8e24eb49 100644 --- a/src/shared/generator.c +++ b/src/shared/generator.c @@ -35,8 +35,13 @@ static int write_fsck_sysroot_service(const char *dir, const char *what) { const char *unit; _cleanup_free_ char *device = NULL; + _cleanup_free_ char *escaped; _cleanup_fclose_ FILE *f = NULL; + escaped = cescape(what); + if (!escaped) + return log_oom(); + unit = strjoina(dir, "/systemd-fsck-root.service"); log_debug("Creating %s", unit); @@ -61,11 +66,12 @@ static int write_fsck_sysroot_service(const char *dir, const char *what) { "[Service]\n" "Type=oneshot\n" "RemainAfterExit=yes\n" - "ExecStart=" SYSTEMD_FSCK_PATH " %2$s\n" + "ExecStart=" SYSTEMD_FSCK_PATH " %4$s\n" "TimeoutSec=0\n", program_invocation_short_name, what, - device); + device, + escaped); fflush(f); if (ferror(f))