summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkpande <[email protected]>2018-11-11 21:23:11 -0500
committerBrian Behlendorf <[email protected]>2018-11-11 18:23:11 -0800
commiteb1a0b617448a8cb5d83a0f63102a7b24dc15e70 (patch)
treea84970cea4e0bbf9210d0e5b66c8ef8f756455ce
parentc8fd652ce7abe85c5238356248d1918ea9ff5ff8 (diff)
Allow spaces in pool names for cmdline argument
PR #8114 quoted the ${ENCRYPTIONROOT} parameter to ensure we don't lose spaces when unlocking root filesystem in the off chance that it has a space in its name. Unfortunately, dracut and initramfs-tools do not actually get the quotes from the cmdline. If we use root=ZFS="root pool/filesystem name" the script still only sees root=ZFS=root and no quotation marks. Because + is a reserved character in ZFS, it's used as a placeholder for spaces in the kernel cmdline. In this way, root=ZFS=root+pool/filesystem+name will properly expand by replacing the character with sed (POSIX compliant method). Reviewed-by: Brian Behlendorf <[email protected]> Reviewed-by: bunder2015 <[email protected]> Signed-off-by: Kash Pande <[email protected]> Issue #8114 Closes #8117
-rwxr-xr-xcontrib/dracut/90zfs/parse-zfs.sh.in3
1 files changed, 3 insertions, 0 deletions
diff --git a/contrib/dracut/90zfs/parse-zfs.sh.in b/contrib/dracut/90zfs/parse-zfs.sh.in
index 9cf46d754..2a532c75b 100755
--- a/contrib/dracut/90zfs/parse-zfs.sh.in
+++ b/contrib/dracut/90zfs/parse-zfs.sh.in
@@ -39,11 +39,14 @@ case "${root}" in
# root=zfs:rpool/ROOT
# root=zfs:FILESYSTEM=rpool/ROOT
# root=FILESYSTEM=rpool/ROOT
+ # root=ZFS=pool+with+space/ROOT+WITH+SPACE (translates to root=ZFS=pool with space/ROOT WITH SPACE)
# Strip down to just the pool/fs
root="${root#zfs:}"
root="${root#FILESYSTEM=}"
root="zfs:${root#ZFS=}"
+ # switch + with spaces because kernel cmdline does not allow us to quote parameters
+ root=$(printf '%s\n' "$root" | sed "s/+/ /g")
rootok=1
wait_for_zfs=1