mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2025-06-25 10:38:00 +03:00
zcp: get_prop: fix encryptionroot and encryption
It was reported that channel programs' zfs.get_prop doesn't work for dataset properties encryption and encryptionroot. They are handled in get_special_prop due to the need to call dsl_dataset_crypt_stats to load those dsl props. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Alexander Motin <mav@FreeBSD.org> Signed-off-by: Pavel Snajdr <snajpa@snajpa.net> Co-authored-by: Graham Christensen <graham@grahamc.com> Closes #17280
This commit is contained in:
parent
06fa8f3f69
commit
8487945034
@ -378,14 +378,17 @@ get_special_prop(lua_State *state, dsl_dataset_t *ds, const char *dsname,
|
||||
break;
|
||||
}
|
||||
|
||||
case ZFS_PROP_ENCRYPTION:
|
||||
case ZFS_PROP_KEYSTATUS:
|
||||
case ZFS_PROP_KEYFORMAT: {
|
||||
/* provide defaults in case no crypto obj exists */
|
||||
setpoint[0] = '\0';
|
||||
if (zfs_prop == ZFS_PROP_KEYSTATUS)
|
||||
numval = ZFS_KEYSTATUS_NONE;
|
||||
else
|
||||
if (zfs_prop == ZFS_PROP_ENCRYPTION)
|
||||
numval = ZIO_CRYPT_OFF;
|
||||
else if (zfs_prop == ZFS_PROP_KEYFORMAT)
|
||||
numval = ZFS_KEYFORMAT_NONE;
|
||||
else if (zfs_prop == ZFS_PROP_KEYSTATUS)
|
||||
numval = ZFS_KEYSTATUS_NONE;
|
||||
|
||||
nvlist_t *nvl, *propval;
|
||||
nvl = fnvlist_alloc();
|
||||
@ -404,6 +407,29 @@ get_special_prop(lua_State *state, dsl_dataset_t *ds, const char *dsname,
|
||||
break;
|
||||
}
|
||||
|
||||
case ZFS_PROP_ENCRYPTION_ROOT: {
|
||||
setpoint[0] = '\0';
|
||||
strval[0] = '\0';
|
||||
|
||||
nvlist_t *nvl, *propval;
|
||||
nvl = fnvlist_alloc();
|
||||
dsl_dataset_crypt_stats(ds, nvl);
|
||||
if (nvlist_lookup_nvlist(nvl, zfs_prop_to_name(zfs_prop),
|
||||
&propval) == 0) {
|
||||
const char *dsname;
|
||||
const char *source;
|
||||
|
||||
if (nvlist_lookup_string(propval, ZPROP_VALUE,
|
||||
&dsname) == 0)
|
||||
strlcpy(strval, dsname, ZAP_MAXVALUELEN);
|
||||
if (nvlist_lookup_string(propval, ZPROP_SOURCE,
|
||||
&source) == 0)
|
||||
strlcpy(setpoint, source, sizeof (setpoint));
|
||||
}
|
||||
nvlist_free(nvl);
|
||||
break;
|
||||
}
|
||||
|
||||
case ZFS_PROP_SNAPSHOTS_CHANGED:
|
||||
numval = dsl_dir_snap_cmtime(ds->ds_dir).tv_sec;
|
||||
break;
|
||||
|
@ -120,7 +120,7 @@ tests = ['case_all_values', 'norm_all_values', 'mixed_create_failure',
|
||||
tags = ['functional', 'casenorm']
|
||||
|
||||
[tests/functional/channel_program/lua_core]
|
||||
tests = ['tst.args_to_lua', 'tst.divide_by_zero', 'tst.exists',
|
||||
tests = ['tst.args_to_lua', 'tst.divide_by_zero', 'tst.exists', 'tst.encryption',
|
||||
'tst.integer_illegal', 'tst.integer_overflow', 'tst.language_functions_neg',
|
||||
'tst.language_functions_pos', 'tst.large_prog', 'tst.libraries',
|
||||
'tst.memory_limit', 'tst.nested_neg', 'tst.nested_pos', 'tst.nvlist_to_lua',
|
||||
|
@ -64,7 +64,7 @@ tests = ['case_all_values', 'norm_all_values', 'sensitive_none_lookup',
|
||||
tags = ['functional', 'casenorm']
|
||||
|
||||
[tests/functional/channel_program/lua_core]
|
||||
tests = ['tst.args_to_lua', 'tst.divide_by_zero', 'tst.exists',
|
||||
tests = ['tst.args_to_lua', 'tst.divide_by_zero', 'tst.exists', 'tst.encryption',
|
||||
'tst.integer_illegal', 'tst.integer_overflow', 'tst.language_functions_neg',
|
||||
'tst.language_functions_pos', 'tst.large_prog', 'tst.libraries',
|
||||
'tst.memory_limit', 'tst.nested_neg', 'tst.nested_pos', 'tst.nvlist_to_lua',
|
||||
|
@ -106,6 +106,7 @@ nobase_dist_datadir_zfs_tests_tests_DATA += \
|
||||
functional/channel_program/lua_core/tst.args_to_lua.zcp \
|
||||
functional/channel_program/lua_core/tst.divide_by_zero.err \
|
||||
functional/channel_program/lua_core/tst.divide_by_zero.zcp \
|
||||
functional/channel_program/lua_core/tst.encryption.zcp \
|
||||
functional/channel_program/lua_core/tst.exists.zcp \
|
||||
functional/channel_program/lua_core/tst.large_prog.out \
|
||||
functional/channel_program/lua_core/tst.large_prog.zcp \
|
||||
@ -544,6 +545,7 @@ nobase_dist_datadir_zfs_tests_tests_SCRIPTS += \
|
||||
functional/channel_program/lua_core/setup.ksh \
|
||||
functional/channel_program/lua_core/tst.args_to_lua.ksh \
|
||||
functional/channel_program/lua_core/tst.divide_by_zero.ksh \
|
||||
functional/channel_program/lua_core/tst.encryption.ksh \
|
||||
functional/channel_program/lua_core/tst.exists.ksh \
|
||||
functional/channel_program/lua_core/tst.integer_illegal.ksh \
|
||||
functional/channel_program/lua_core/tst.integer_overflow.ksh \
|
||||
|
43
tests/zfs-tests/tests/functional/channel_program/lua_core/tst.encryption.ksh
Executable file
43
tests/zfs-tests/tests/functional/channel_program/lua_core/tst.encryption.ksh
Executable file
@ -0,0 +1,43 @@
|
||||
#!/bin/ksh -p
|
||||
# SPDX-License-Identifier: CDDL-1.0
|
||||
#
|
||||
# This file and its contents are supplied under the terms of the
|
||||
# Common Development and Distribution License ("CDDL"), version 1.0.
|
||||
# You may only use this file in accordance with the terms of version
|
||||
# 1.0 of the CDDL.
|
||||
#
|
||||
# A full copy of the text of the CDDL should have accompanied this
|
||||
# source. A copy of the CDDL is also available via the Internet at
|
||||
# http://www.illumos.org/license/CDDL.
|
||||
#
|
||||
|
||||
#
|
||||
# Copyright (c) 2021 by Determinate Systems. All rights reserved.
|
||||
#
|
||||
|
||||
. $STF_SUITE/tests/functional/channel_program/channel_common.kshlib
|
||||
|
||||
#
|
||||
# DESCRIPTION:
|
||||
# zfs.exists should accurately report whether a dataset exists, and
|
||||
# report an error if a dataset is in another pool.
|
||||
|
||||
verify_runnable "global"
|
||||
|
||||
function cleanup
|
||||
{
|
||||
datasetexists $TESTPOOL/$TESTDATASET && \
|
||||
log_must zfs destroy -R $TESTPOOL/$TESTDATASET
|
||||
}
|
||||
log_onexit cleanup
|
||||
|
||||
TESTDATASET="channelprogramencryption"
|
||||
|
||||
passphrase="password"
|
||||
log_must eval "echo "$passphrase" | zfs create -o encryption=aes-256-ccm " \
|
||||
"-o keyformat=passphrase $TESTPOOL/$TESTDATASET"
|
||||
|
||||
log_must_program $TESTPOOL $ZCP_ROOT/lua_core/tst.encryption.zcp \
|
||||
$TESTPOOL/$TESTDATASET
|
||||
|
||||
log_pass "zfs.get_prop(dataset, ...) on \"encryption\" and \"encryptionroot\" gives correct results"
|
@ -0,0 +1,23 @@
|
||||
-- SPDX-License-Identifier: CDDL-1.0
|
||||
--
|
||||
-- This file and its contents are supplied under the terms of the
|
||||
-- Common Development and Distribution License ("CDDL"), version 1.0.
|
||||
-- You may only use this file in accordance with the terms of version
|
||||
-- 1.0 of the CDDL.
|
||||
--
|
||||
-- A full copy of the text of the CDDL should have accompanied this
|
||||
-- source. A copy of the CDDL is also available via the Internet at
|
||||
-- http://www.illumos.org/license/CDDL.
|
||||
--
|
||||
|
||||
--
|
||||
-- Copyright (c) 2021 by Determinate Systems. All rights reserved.
|
||||
--
|
||||
|
||||
-- ensure zfs.get_prop returns the correct values for "encryption"
|
||||
-- and "encryptionroot"
|
||||
|
||||
args = ...
|
||||
argv = args['argv']
|
||||
assert(zfs.get_prop(argv[1], "encryption") == "aes-256-ccm")
|
||||
assert(zfs.get_prop(argv[1], "encryptionroot") == argv[1])
|
@ -24,15 +24,16 @@
|
||||
|
||||
verify_runnable "global"
|
||||
|
||||
# create $TESTSNAP and $TESTCLONE
|
||||
create_snapshot
|
||||
create_clone
|
||||
|
||||
function cleanup
|
||||
{
|
||||
datasetexists $TESTPOOL/$TESTFS@$TESTSNAP && \
|
||||
destroy_dataset $TESTPOOL/$TESTFS@$TESTSNAP -R
|
||||
}
|
||||
log_onexit cleanup
|
||||
|
||||
# create $TESTSNAP and $TESTCLONE
|
||||
create_snapshot
|
||||
create_clone
|
||||
|
||||
log_must_program $TESTPOOL $ZCP_ROOT/lua_core/tst.exists.zcp \
|
||||
$TESTPOOL $TESTPOOL/$TESTFS $TESTPOOL/$TESTFS@$TESTSNAP \
|
||||
|
Loading…
Reference in New Issue
Block a user