mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 10:37:35 +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:
committed by
Brian Behlendorf
parent
d187e3e1a7
commit
08caad8257
+29
-3
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user