From 4369576ac4206071c3d5b32c00c1fe101379868d Mon Sep 17 00:00:00 2001 From: Christoph Klaffl Date: Tue, 9 Jan 2024 20:40:33 +0100 Subject: [PATCH] escape property key and value pair in case of property preservation --- syncoid | 3 ++- tests/syncoid/9_preserve_properties/run.sh | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/syncoid b/syncoid index 5ed00f0..e1e03ec 100755 --- a/syncoid +++ b/syncoid @@ -493,7 +493,8 @@ sub syncdataset { foreach my $key (keys %properties) { my $value = $properties{$key}; if ($debug) { print "DEBUG: will set $key to $value ...\n"; } - $recvoptions .= " -o $key=$value"; + my $pair = escapeshellparam("$key=$value"); + $recvoptions .= " -o $pair"; } } elsif (defined $args{'preserve-recordsize'}) { my $type = getzfsvalue($sourcehost,$sourcefs,$sourceisroot,'type'); diff --git a/tests/syncoid/9_preserve_properties/run.sh b/tests/syncoid/9_preserve_properties/run.sh index 497ce9a..76d7a82 100755 --- a/tests/syncoid/9_preserve_properties/run.sh +++ b/tests/syncoid/9_preserve_properties/run.sh @@ -29,6 +29,7 @@ zfs create -V 100M -o volblocksize=16k -o primarycache=all "${POOL_NAME}"/src/zv zfs create -V 100M -o volblocksize=64k "${POOL_NAME}"/src/zvol64 zfs create -o recordsize=16k -o primarycache=none "${POOL_NAME}"/src/16 zfs create -o recordsize=32k -o acltype=posixacl "${POOL_NAME}"/src/32 +zfs set 'net.openoid:var-name'='with whitespace and !"§$%&/()= symbols' "${POOL_NAME}"/src/32 ../../../syncoid --preserve-properties --recursive --debug --compress=none "${POOL_NAME}"/src "${POOL_NAME}"/dst @@ -64,3 +65,7 @@ fi if [ "$(zfs get acltype -H -o value -t filesystem "${POOL_NAME}"/dst/32)" != "posix" ]; then exit 1 fi + +if [ "$(zfs get 'net.openoid:var-name' -H -o value -t filesystem "${POOL_NAME}"/dst/32)" != "with whitespace and !\"§$%&/()= symbols" ]; then + exit 1 +fi