etc/systemd/zfs-mount-generator: output tweaks

git-diff--w-dirty, but:
  * zfs-load-key-$DSET.service -> zfs-load-key@$DSET.service
  * flattened set -eu into other /bin/sh flags
  * simpler (for 1 2 3 vs while [ counter ]; counter+=1) prompt loop
  * exec $ZFS where applicable

Reviewed-by: Antonio Russo <aerusso@aerusso.net>
Reviewed-by: Richard Laager <rlaager@wiktel.com>
Reviewed-by: InsanePrawn <insane.prawny@gmail.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz>
Issue #11915
Closes #11917
This commit is contained in:
наб 2021-04-19 21:28:27 +02:00 committed by Brian Behlendorf
parent 5a1fb060fd
commit 5611bdc8f0

View File

@ -281,7 +281,7 @@ line_worker(char *line, const char *cachefile)
if (strcmp(p_encroot, "-") != 0) {
char *keyloadunit =
systemd_escape(p_encroot, "zfs-load-key-", ".service");
systemd_escape(p_encroot, "zfs-load-key@", ".service");
if (strcmp(dataset, p_encroot) == 0) {
const char *keymountdep = NULL;
@ -360,33 +360,27 @@ line_worker(char *line, const char *cachefile)
"# dataset is a parent of the root filesystem.\n"
"StandardOutput=null\n"
"StandardError=null\n"
"ExecStart=/bin/sh -c '"
"set -eu;"
"keystatus=\"$$(" ZFS " get -H -o value keystatus \"%s\")\";"
"[ \"$$keystatus\" = \"unavailable\" ] || exit 0;",
"ExecStart=/bin/sh -euc '"
"[ \"$$(" ZFS " get -H -o value keystatus \"%s\")\" = \"unavailable\" ] || exit 0;",
dataset);
if (is_prompt)
fprintf(keyloadunit_f,
"count=0;"
"while [ $$count -lt 3 ]; do "
"for i in 1 2 3; do "
"systemd-ask-password --id=\"zfs:%s\" \"Enter passphrase for %s:\" |"
"" ZFS " load-key \"%s\" && exit 0;"
"count=$$((count + 1));"
"done;"
"exit 1",
dataset, dataset, dataset);
else
fprintf(keyloadunit_f,
"" ZFS " load-key \"%s\"",
"exec " ZFS " load-key \"%s\"",
dataset);
fprintf(keyloadunit_f,
"'\n"
"ExecStop=/bin/sh -c '"
"set -eu;"
"keystatus=\"$$(" ZFS " get -H -o value keystatus \"%s\")\";"
"[ \"$$keystatus\" = \"available\" ] || exit 0;"
"" ZFS " unload-key \"%s\""
"ExecStop=/bin/sh -euc '"
"[ \"$$(" ZFS " get -H -o value keystatus \"%s\")\" = \"available\" ] || exit 0;"
"exec " ZFS " unload-key \"%s\""
"'\n",
dataset, dataset);
/* END CSTYLED */