Zbigniew Jędrzejewski-Szmek 436654
From 413b9df4a84291dfeb28133f4b30790b7ad9f903 Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek 436654
From: Andrei Borzenkov <arvidjaar@gmail.com>
Zbigniew Jędrzejewski-Szmek 436654
Date: Wed, 3 Jun 2015 20:50:59 +0300
Zbigniew Jędrzejewski-Szmek 436654
Subject: [PATCH] fstab-generator: cescape device name in root-fsck service
Zbigniew Jędrzejewski-Szmek 436654
Zbigniew Jędrzejewski-Szmek 436654
We unescape ExecStart line when parsing it, so escape device name
Zbigniew Jędrzejewski-Szmek 436654
before adding it to unit file.
Zbigniew Jędrzejewski-Szmek 436654
Zbigniew Jędrzejewski-Szmek 436654
fixes #50
Zbigniew Jędrzejewski-Szmek 436654
Zbigniew Jędrzejewski-Szmek 436654
(cherry picked from commit fa05e97257fc54b05e4c272dfc19cea46511b823)
Zbigniew Jędrzejewski-Szmek 436654
---
Zbigniew Jędrzejewski-Szmek 436654
 src/shared/generator.c | 10 ++++++++--
Zbigniew Jędrzejewski-Szmek 436654
 1 file changed, 8 insertions(+), 2 deletions(-)
Zbigniew Jędrzejewski-Szmek 436654
Zbigniew Jędrzejewski-Szmek 436654
diff --git a/src/shared/generator.c b/src/shared/generator.c
Zbigniew Jędrzejewski-Szmek 436654
index 807569a1b8..e58bbea77c 100644
Zbigniew Jędrzejewski-Szmek 436654
--- a/src/shared/generator.c
Zbigniew Jędrzejewski-Szmek 436654
+++ b/src/shared/generator.c
Zbigniew Jędrzejewski-Szmek 436654
@@ -34,9 +34,14 @@
Zbigniew Jędrzejewski-Szmek 436654
 static int write_fsck_sysroot_service(const char *dir, const char *what) {
Zbigniew Jędrzejewski-Szmek 436654
         const char *unit;
Zbigniew Jędrzejewski-Szmek 436654
         _cleanup_free_ char *device = NULL;
Zbigniew Jędrzejewski-Szmek 436654
+        _cleanup_free_ char *escaped;
Zbigniew Jędrzejewski-Szmek 436654
         _cleanup_fclose_ FILE *f = NULL;
Zbigniew Jędrzejewski-Szmek 436654
         int r;
Zbigniew Jędrzejewski-Szmek 436654
 
Zbigniew Jędrzejewski-Szmek 436654
+        escaped = cescape(what);
Zbigniew Jędrzejewski-Szmek 436654
+        if (!escaped)
Zbigniew Jędrzejewski-Szmek 436654
+                return log_oom();
Zbigniew Jędrzejewski-Szmek 436654
+
Zbigniew Jędrzejewski-Szmek 436654
         unit = strjoina(dir, "/systemd-fsck-root.service");
Zbigniew Jędrzejewski-Szmek 436654
         log_debug("Creating %s", unit);
Zbigniew Jędrzejewski-Szmek 436654
 
Zbigniew Jędrzejewski-Szmek 436654
@@ -61,11 +66,12 @@ static int write_fsck_sysroot_service(const char *dir, const char *what) {
Zbigniew Jędrzejewski-Szmek 436654
                 "[Service]\n"
Zbigniew Jędrzejewski-Szmek 436654
                 "Type=oneshot\n"
Zbigniew Jędrzejewski-Szmek 436654
                 "RemainAfterExit=yes\n"
Zbigniew Jędrzejewski-Szmek 436654
-                "ExecStart=" SYSTEMD_FSCK_PATH " %2$s\n"
Zbigniew Jędrzejewski-Szmek 436654
+                "ExecStart=" SYSTEMD_FSCK_PATH " %4$s\n"
Zbigniew Jędrzejewski-Szmek 436654
                 "TimeoutSec=0\n",
Zbigniew Jędrzejewski-Szmek 436654
                 program_invocation_short_name,
Zbigniew Jędrzejewski-Szmek 436654
                 what,
Zbigniew Jędrzejewski-Szmek 436654
-                device);
Zbigniew Jędrzejewski-Szmek 436654
+                device,
Zbigniew Jędrzejewski-Szmek 436654
+                escaped);
Zbigniew Jędrzejewski-Szmek 436654
 
Zbigniew Jędrzejewski-Szmek 436654
         r = fflush_and_check(f);
Zbigniew Jędrzejewski-Szmek 436654
         if (r < 0)