summaryrefslogtreecommitdiff
path: root/usr/src/lib/libzfs
diff options
context:
space:
mode:
authorTom Caputi <tcaputi@datto.com>2019-10-24 22:11:24 +0000
committerDan McDonald <danmcd@joyent.com>2019-10-29 11:49:26 -0400
commit8675de3a4bb7d310dd672e8f2bf479154e07c678 (patch)
tree934e2f3b2305f61922f017319e1a990d1b4c3154 /usr/src/lib/libzfs
parent7ca0d613a17085b59a8b231daa9eddfa74fd83ee (diff)
downloadillumos-joyent-8675de3a4bb7d310dd672e8f2bf479154e07c678.tar.gz
11872 Fix incremental recursive encrypted receive
Portions contributed by: Jason King <jason.king@joyent.com> Reviewed by: loli10K <ezomori.nozomu@gmail.com> Reviewed by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed by: Igor Kozhukhov <igor@dilos.org> Reviewed by: Toomas Soome <tsoome@me.com> Reviewed by: Andy Fiddaman <omnios@citrus-it.co.uk> Approved by: Dan McDonald <danmcd@joyent.com>
Diffstat (limited to 'usr/src/lib/libzfs')
-rw-r--r--usr/src/lib/libzfs/common/libzfs_sendrecv.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/usr/src/lib/libzfs/common/libzfs_sendrecv.c b/usr/src/lib/libzfs/common/libzfs_sendrecv.c
index 13e1bafa5d..36683ac8e2 100644
--- a/usr/src/lib/libzfs/common/libzfs_sendrecv.c
+++ b/usr/src/lib/libzfs/common/libzfs_sendrecv.c
@@ -3481,11 +3481,21 @@ zfs_setup_cmdline_props(libzfs_handle_t *hdl, zfs_type_t type,
/* raw streams can't override encryption properties */
if ((zfs_prop_encryption_key_param(prop) ||
- prop == ZFS_PROP_ENCRYPTION) && (raw || !newfs)) {
+ prop == ZFS_PROP_ENCRYPTION) && raw) {
zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
"encryption property '%s' cannot "
- "be set or excluded for raw or incremental "
- "streams."), name);
+ "be set or excluded for raw streams."), name);
+ ret = zfs_error(hdl, EZFS_BADPROP, errbuf);
+ goto error;
+ }
+
+ /* incremental streams can only exclude encryption properties */
+ if ((zfs_prop_encryption_key_param(prop) ||
+ prop == ZFS_PROP_ENCRYPTION) && !newfs &&
+ nvpair_type(nvp) != DATA_TYPE_BOOLEAN) {
+ zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
+ "encryption property '%s' cannot "
+ "be set for incremental streams."), name);
ret = zfs_error(hdl, EZFS_BADPROP, errbuf);
goto error;
}
@@ -3503,10 +3513,12 @@ zfs_setup_cmdline_props(libzfs_handle_t *hdl, zfs_type_t type,
*/
if (nvlist_exists(origprops, name)) {
nvlist_t *attrs;
+ char *source = NULL;
attrs = fnvlist_lookup_nvlist(origprops, name);
- if (strcmp(fnvlist_lookup_string(attrs,
- ZPROP_SOURCE), ZPROP_SOURCE_VAL_RECVD) != 0)
+ if (nvlist_lookup_string(attrs,
+ ZPROP_SOURCE, &source) == 0 &&
+ strcmp(source, ZPROP_SOURCE_VAL_RECVD) != 0)
continue;
}
/*