]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
e2scrub: fix systemd escaping again
authorDarrick J. Wong <darrick.wong@oracle.com>
Mon, 5 Nov 2018 17:59:46 +0000 (09:59 -0800)
committerTheodore Ts'o <tytso@mit.edu>
Thu, 15 Nov 2018 19:20:35 +0000 (14:20 -0500)
Apparently newer versions of systemd than the one on this author's
laptop <cough> now complain about lack of (path) escaping in unit
instance variable contents:

 # e2scrub_all
 Scrubbing /home...
 Invalid unit name "e2scrub@/home" was escaped as "e2scrub@-home"
 (maybe you should use systemd-escape?)
 Starting Online ext4 Metadata Check for /home...

So change the escape_path_for_systemd function to escape paths
unconditionally to make the warning go away.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
scrub/e2scrub_all.in

index 9581dc2c4d0491a4f6fb6b79749b0608eccc0e18..23d122d258dbe5c3a36a86517b4f1462b67d3560 100644 (file)
@@ -101,13 +101,18 @@ ls_scrub_targets() {
 # systemd doesn't know to do path escaping on the instance variable we pass
 # to the e2scrub service, which breaks things if there is a dash in the path
 # name.  Therefore, do the path escaping ourselves if needed.
+#
+# systemd path escaping also drops the initial slash so we add that back in so
+# that log messages from the service units preserve the full path and users can
+# look up log messages using full paths.  However, for "/" the escaping rules
+# do /not/ drop the initial slash, so we have to special-case that here.
 escape_path_for_systemd() {
        local path="$1"
 
-       if echo "${path}" | grep -q -- "-"; then
+       if [ "${path}" != "/" ]; then
                echo "-$(systemd-escape --path "${path}")"
        else
-               echo "${path}"
+               echo "-"
        fi
 }