summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Allen <[email protected]>2019-08-27 21:44:02 +0100
committerBrian Behlendorf <[email protected]>2019-08-27 13:44:02 -0700
commitf335b8ffe178276c7a98bdc87965a3dc9e2b59f5 (patch)
tree0181d98d8ca8dd5a822cdf254db1dcc7906ea4e3
parente7a2fa70c3b0d8c8cee2b484038bb5623c7c1ea9 (diff)
Fix Plymouth passphrase prompt in initramfs script
Entering the ZFS encryption passphrase under Plymouth wasn't working because in the ZFS initrd script, Plymouth was calling zfs via "--command", which wasn't passing through the filesystem argument to zfs load-key properly (it was passing through the single quotes around the filesystem name intended to handle spaces literally, which zfs load-key couldn't understand). Reviewed-by: Richard Laager <[email protected]> Reviewed-by: Garrett Fields <[email protected]> Signed-off-by: Richard Allen <[email protected]> Issue #9193 Closes #9202
-rw-r--r--contrib/initramfs/scripts/zfs.in16
1 files changed, 8 insertions, 8 deletions
diff --git a/contrib/initramfs/scripts/zfs.in b/contrib/initramfs/scripts/zfs.in
index 9d11e1926..9e90d76bb 100644
--- a/contrib/initramfs/scripts/zfs.in
+++ b/contrib/initramfs/scripts/zfs.in
@@ -411,29 +411,29 @@ decrypt_fs()
# Determine dataset that holds key for root dataset
ENCRYPTIONROOT=$(${ZFS} get -H -o value encryptionroot "${fs}")
- DECRYPT_CMD="${ZFS} load-key '${ENCRYPTIONROOT}'"
# If root dataset is encrypted...
if ! [ "${ENCRYPTIONROOT}" = "-" ]; then
-
+ TRY_COUNT=3
# Prompt with plymouth, if active
if [ -e /bin/plymouth ] && /bin/plymouth --ping 2>/dev/null; then
- plymouth ask-for-password --prompt "Encrypted ZFS password for ${ENCRYPTIONROOT}" \
- --number-of-tries="3" \
- --command="${DECRYPT_CMD}"
+ while [ $TRY_COUNT -gt 0 ]; do
+ plymouth ask-for-password --prompt "Encrypted ZFS password for ${ENCRYPTIONROOT}" | \
+ $ZFS load-key "${ENCRYPTIONROOT}" && break
+ TRY_COUNT=$((TRY_COUNT - 1))
+ done
# Prompt with systemd, if active
elif [ -e /run/systemd/system ]; then
- TRY_COUNT=3
while [ $TRY_COUNT -gt 0 ]; do
systemd-ask-password "Encrypted ZFS password for ${ENCRYPTIONROOT}" --no-tty | \
- ${DECRYPT_CMD} && break
+ $ZFS load-key "${ENCRYPTIONROOT}" && break
TRY_COUNT=$((TRY_COUNT - 1))
done
# Prompt with ZFS tty, otherwise
else
- eval "${DECRYPT_CMD}"
+ $ZFS load-key "${ENCRYPTIONROOT}"
fi
fi
fi