f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# CDDL HEADER START
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# The contents of this file are subject to the terms of the
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# Common Development and Distribution License (the "License").
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# You may not use this file except in compliance with the License.
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# or http://www.opensolaris.org/os/licensing.
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# See the License for the specific language governing permissions
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# and limitations under the License.
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# When distributing Covered Code, include this CDDL HEADER in each
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# If applicable, add the following below this CDDL HEADER, with the
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# fields enclosed by brackets "[]" replaced with your own identifying
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# information: Portions Copyright [yyyy] [name of copyright owner]
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# CDDL HEADER END
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# Copyright 2008 Sun Microsystems, Inc. All rights reserved.
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# Use is subject to license terms.
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy# Copyright (c) 2013, 2016 by Delphix. All rights reserved.
751609474e831927e5706b37cb08160df31dcd4dYuri Pankov# Copyright 2016 Nexenta Systems, Inc.
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy. $STF_SUITE/include/libtest.shlib
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy. $STF_SUITE/tests/functional/delegate/delegate.cfg
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# Cleanup exist user/group.
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction cleanup_user_group
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset i
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy for i in $STAFF1 $STAFF2 $OTHER1 $OTHER2 ; do
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy del_user $i
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy done
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy for i in $STAFF_GROUP $OTHER_GROUP ; do
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy del_group $i
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy done
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# Restore test file system to the original status.
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction restore_root_datasets
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $ROOT_TESTFS ; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs destroy -Rf $ROOT_TESTFS
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs create $ROOT_TESTFS
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if is_global_zone ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $ROOT_TESTVOL ; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs destroy -Rf $ROOT_TESTVOL
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs create -V $VOLSIZE $ROOT_TESTVOL
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# Verify the specified user have permission on the dataset
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# $1 dataset
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# $2 permissions which are separated by comma(,)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# $3-n users
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_perm
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset dtst=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset permissions=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy shift 2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ -z $@ || -z $permissions || -z $dtst ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset type=$(get_prop type $dtst)
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy permissions=$(echo $permissions | tr -s "," " ")
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy for user in $@; do
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy for perm in $permissions; do
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset -i ret=1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $type == "filesystem" ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy check_fs_perm $user $perm $dtst
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy elif [[ $type == "volume" ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy check_vol_perm $user $perm $dtst
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ((ret != 0)) ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy log_note "Fail: $user should have $perm " \
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy "on $dtst"
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy done
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy done
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# Verify the specified user have no permission on the dataset
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# $1 dataset
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# $2 permissions which are separated by comma(,)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# $3-n users
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_noperm
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset dtst=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset permissions=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy shift 2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ -z $@ || -z $permissions || -z $dtst ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset type=$(get_prop type $dtst)
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy permissions=$(echo $permissions | tr -s "," " ")
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy for user in $@; do
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy for perm in $permissions; do
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset -i ret=1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $type == "filesystem" ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy check_fs_perm $user $perm $dtst
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy elif [[ $type == "volume" ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy check_vol_perm $user $perm $dtst
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ((ret == 0)) ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy log_note "Fail: $user should not have $perm " \
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy "on $dtst"
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy done
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy done
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction common_perm
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset dtst=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset -i ret=1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy case $perm in
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy send)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_send $user $perm $dtst
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy allow)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_allow $user $perm $dtst
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy userprop)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_userprop $user $perm $dtst
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy compression|checksum|readonly)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_ccr $user $perm $dtst
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy copies)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_copies $user $perm $dtst
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy reservation)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_reservation $user $perm $dtst
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy *)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy esac
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return $ret
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction check_fs_perm
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset fs=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset -i ret=1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy case $perm in
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy create)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_fs_create $user $perm $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy destroy)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_fs_destroy $user $perm $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy snapshot)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_fs_snapshot $user $perm $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy rollback)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_fs_rollback $user $perm $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy clone)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_fs_clone $user $perm $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy rename)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_fs_rename $user $perm $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy mount)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_fs_mount $user $perm $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy share)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_fs_share $user $perm $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy mountpoint)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_fs_mountpoint $user $perm $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy promote)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_fs_promote $user $perm $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy canmount)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_fs_canmount $user $perm $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy recordsize)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_fs_recordsize $user $perm $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy quota)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_fs_quota $user $perm $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy aclmode)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_fs_aclmode $user $perm $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy aclinherit)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_fs_aclinherit $user $perm $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy snapdir)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_fs_snapdir $user $perm $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy atime|exec|devices|setuid|xattr)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_fs_aedsx $user $perm $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy zoned)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_fs_zoned $user $perm $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy sharenfs)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_fs_sharenfs $user $perm $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy receive)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_fs_receive $user $perm $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy *)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy common_perm $user $perm $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy esac
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return $ret
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction check_vol_perm
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset vol=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset -i ret=1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy case $perm in
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy destroy)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_vol_destroy $user $perm $vol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy snapshot)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_vol_snapshot $user $perm $vol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy rollback)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_vol_rollback $user $perm $vol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy clone)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_vol_clone $user $perm $vol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy rename)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_vol_rename $user $perm $vol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy promote)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_vol_promote $user $perm $vol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy volsize)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_vol_volsize $user $perm $vol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy *)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy common_perm $user $perm $vol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ;;
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy esac
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return $ret
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction setup_unallow_testenv
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy log_must restore_root_datasets
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs create $SUBFS
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy for dtst in $DATASETS ; do
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow -l $STAFF1 $LOCAL_SET $dtst
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow -d $STAFF2 $DESC_SET $dtst
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $OTHER1 $LOCAL_DESC_SET $dtst
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $OTHER2 $LOCAL_DESC_SET $dtst
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy log_must verify_perm $dtst $LOCAL_SET $STAFF1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy log_must verify_perm $dtst $LOCAL_DESC_SET $OTHER1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy log_must verify_perm $dtst $LOCAL_DESC_SET $OTHER2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $dtst == $ROOT_TESTFS ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy log_must verify_perm $SUBFS $DESC_SET $STAFF2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy log_must verify_perm $SUBFS $LOCAL_DESC_SET $OTHER1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy log_must verify_perm $SUBFS $LOCAL_DESC_SET $OTHER2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy done
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# Verify permission send for specified user on the dataset
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# $1 user
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# $2 permission
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# $3 dataset
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_send
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset dtst=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset oldval
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy typeset stamp=${perm}.${user}.$(date +'%F-%H%M%S')
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset snap=$dtst@snap.$stamp
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset -i ret=1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs snapshot $snap
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset bak_user=/tmp/bak.$user.$stamp
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset bak_root=/tmp/bak.root.$stamp
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user eval "zfs send $snap > $bak_user"
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must eval "zfs send $snap > $bak_root"
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $(checksum $bak_user) == $(checksum $bak_root) ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy rm -rf $bak_user > /dev/null
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy rm -rf $bak_root > /dev/null
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return $ret
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_fs_receive
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset fs=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset dtst
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy typeset stamp=${perm}.${user}.$(date +'%F-%H%M%S')
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset newfs=$fs/newfs.$stamp
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset newvol=$fs/newvol.$stamp
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset bak_user=/tmp/bak.$user.$stamp
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset bak_root=/tmp/bak.root.$stamp
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs create $newfs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset datasets="$newfs"
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if is_global_zone ; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs create -V $VOLSIZE $newvol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy datasets="$newfs $newvol"
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy for dtst in $datasets ; do
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset dtstsnap=$dtst@snap.$stamp
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs snapshot $dtstsnap
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must eval "zfs send $dtstsnap > $bak_root"
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs destroy -rf $dtst
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user eval "zfs receive $dtst < $bak_root"
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $dtstsnap ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user create $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user eval "zfs receive $dtst < $bak_root"
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user create $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $dtstsnap ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user eval "zfs receive $dtst < $bak_root"
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $dtstsnap ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount,create $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user eval "zfs receive $dtst < $bak_root"
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount,create $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ! datasetexists $dtstsnap ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # check the data integrity
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must eval "zfs send $dtstsnap > $bak_user"
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs destroy -rf $dtst
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must eval "zfs receive $dtst < $bak_root"
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must eval "zfs send $dtstsnap > $bak_root"
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs destroy -rf $dtst
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $(checksum $bak_user) != $(checksum $bak_root) ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy rm -rf $bak_user > /dev/null
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy rm -rf $bak_root > /dev/null
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy done
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_userprop
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset dtst=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy typeset stamp=${perm}.${user}.$(date +'%F-%H%M%S')
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs set "$user:ts=$stamp" $dtst
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $stamp != $(get_prop "$user:ts" $dtst) ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_ccr
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset dtst=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset oldval
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy set -A modes "on" "off"
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy oldval=$(get_prop $perm $dtst)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $oldval == "on" ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy n=1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy elif [[ $oldval == "off" ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy n=0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_note "$user zfs set $perm=${modes[$n]} $dtst"
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs set $perm=${modes[$n]} $dtst
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ ${modes[$n]} != $(get_prop $perm $dtst) ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_copies
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset dtst=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset oldval
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy set -A modes 1 2 3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy oldval=$(get_prop $perm $dtst)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $oldval -eq 1 ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy n=1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy elif [[ $oldval -eq 2 ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy n=2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy elif [[ $oldval -eq 3 ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy n=0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_note "$user zfs set $perm=${modes[$n]} $dtst"
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs set $perm=${modes[$n]} $dtst
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ ${modes[$n]} != $(get_prop $perm $dtst) ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_reservation
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset dtst=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset value32m=$(( 1024 * 1024 * 32 ))
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset oldval=$(get_prop reservation $dtst)
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs set reservation=$value32m $dtst
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $value32m != $(get_prop reservation $dtst) ]]; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs set reservation=$oldval $dtst
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs set reservation=$oldval $dtst
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_fs_create
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset fs=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy typeset stamp=${perm}.${user}.$(date +'%F-%H%M%S')
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset newfs=$fs/nfs.$stamp
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset newvol=$fs/nvol.$stamp
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs create $newfs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $newfs ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs create $newfs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ! datasetexists $newfs ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs destroy $newfs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if is_global_zone ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # mount permission is required for sparse volume
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs create -V 150m -s $newvol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $newvol ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs create -V 150m -s $newvol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ! datasetexists $newvol ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs destroy $newvol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # mount and reserveration permission are
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # required for normal volume
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs create -V 150m $newvol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $newvol ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs create -V 150m $newvol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $newvol ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user reservation $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs create -V 150m $newvol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user reservation $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $newvol ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user refreservation $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs create -V 150m $newvol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user refreservation $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $newvol ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user reservation $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user refreservation $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs create -V 150m $newvol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user reservation $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user refreservation $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ! datasetexists $newvol ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs destroy $newvol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_fs_destroy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset fs=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ! ismounted $fs ; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs destroy $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $fs ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ismounted $fs ; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs destroy $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ! datasetexists $fs ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # mount permission is required
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs destroy $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $fs ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# Verify that given the correct delegation, a regular user can:
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# Take a snapshot of an unmounted dataset
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# Take a snapshot of an mounted dataset
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# Create a snapshot by making a directory in the .zfs/snapshot directory
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_fs_snapshot
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset fs=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy typeset stamp=${perm}.${user}.$(date +'%F-%H%M%S')
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset snap=$fs@snap.$stamp
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset mntpt=$(get_prop mountpoint $fs)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ "yes" == $(get_prop mounted $fs) ]]; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs umount $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs snapshot $snap
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ! datasetexists $snap ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs destroy $snap
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ "no" == $(get_prop mounted $fs) ]]; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs mount $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs snapshot $snap
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ! datasetexists $snap ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs destroy $snap
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset snapdir=${mntpt}/.zfs/snapshot/snap.$stamp
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user mkdir $snapdir
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ! datasetexists $snap ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs destroy $snap
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_fs_rollback
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset fs=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset oldval
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy typeset stamp=${perm}.${user}.$(date +'%F-%H%M%S')
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset snap=$fs@snap.$stamp
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset mntpt=$(get_prop mountpoint $fs)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy oldval=$(datasetcksum $fs)
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs snapshot $snap
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ! ismounted $fs; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs mount $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must touch $mntpt/testfile.$stamp
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs rollback -R $snap
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if is_global_zone ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $oldval != $(datasetcksum $fs) ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy else
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # datasetcksum can not be used in local zone
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ -e $mntpt/testfile.$stamp ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_fs_clone
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset fs=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy typeset stamp=${perm}.${user}.$(date +'%F-%H%M%S')
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset basefs=${fs%/*}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset snap=$fs@snap.$stamp
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset clone=$basefs/cfs.$stamp
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs snapshot $snap
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs clone $snap $clone
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $clone ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user create $basefs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs clone $snap $clone
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user create $basefs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $clone ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $basefs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs clone $snap $clone
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $basefs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $clone ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $basefs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user create $basefs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs clone $snap $clone
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user create $basefs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $basefs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ! datasetexists $clone ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs destroy -R $snap
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_fs_rename
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset fs=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy typeset stamp=${perm}.${user}.$(date +'%F-%H%M%S')
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset basefs=${fs%/*}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset snap=$fs@snap.$stamp
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset renamefs=$basefs/nfs.$stamp
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ! ismounted $fs; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs mount $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # case 1
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs rename $fs $renamefs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $renamefs ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # case 2
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user create $basefs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs rename $fs $renamefs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user create $basefs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $renamefs ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # case 3
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $basefs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs rename $fs $renamefs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $basefs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $renamefs ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # case 4
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs rename $fs $renamefs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $renamefs ; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $renamefs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # case 5
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user create $basefs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs rename $fs $renamefs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user create $basefs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $renamefs ; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $renamefs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # case 6
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $basefs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs rename $fs $renamefs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $basefs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $renamefs ; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $renamefs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # case 7
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user create $basefs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $basefs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs rename $fs $renamefs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $basefs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user create $basefs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ! datasetexists $renamefs ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs rename $renamefs $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_fs_mount
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset fs=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy typeset stamp=${perm}.${user}.$(date +'%F-%H%M%S')
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset mntpt=$(get_prop mountpoint $fs)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset newmntpt=/tmp/mnt.$stamp
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ismounted $fs ; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs unmount $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ismounted $fs ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ! ismounted $fs ; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs set mountpoint=$newmntpt $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must rm -rf $newmntpt
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must mkdir $newmntpt
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs mount $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ismounted $fs ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # mountpoint's owner must be the user
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must chown $user $newmntpt
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs mount $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ! ismounted $fs ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs umount $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must rm -rf $newmntpt
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs set mountpoint=$mntpt $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_fs_share
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset fs=$3
751609474e831927e5706b37cb08160df31dcd4dYuri Pankov typeset -i ret=0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy svcadm enable -rs nfs/server
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy typeset stat=$(svcs -H -o STA nfs/server:default)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $stat != "ON" ]]; then
751609474e831927e5706b37cb08160df31dcd4dYuri Pankov log_fail "Could not enable nfs/server"
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs set sharenfs=on $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy zfs unshare $fs
751609474e831927e5706b37cb08160df31dcd4dYuri Pankov
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs share $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ! is_shared $fs; then
751609474e831927e5706b37cb08160df31dcd4dYuri Pankov ret=1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy zfs unshare $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs set sharenfs=off $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
751609474e831927e5706b37cb08160df31dcd4dYuri Pankov return $ret
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_fs_mountpoint
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset fs=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy typeset stamp=${perm}.${user}.$(date +'%F-%H%M%S')
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset mntpt=$(get_prop mountpoint $fs)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset newmntpt=/tmp/mnt.$stamp
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ! ismounted $fs ; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs set mountpoint=$newmntpt $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $newmntpt != \
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy $(get_prop mountpoint $fs) ]] ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs set mountpoint=$mntpt $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ismounted $fs ; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs set mountpoint=$newmntpt $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $mntpt != $(get_prop mountpoint $fs) ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # require mount permission when fs is mounted
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs set mountpoint=$newmntpt $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $newmntpt != \
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy $(get_prop mountpoint $fs) ]] ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs set mountpoint=$mntpt $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_fs_promote
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset fs=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy typeset stamp=${perm}.${user}.$(date +'%F-%H%M%S')
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset basefs=${fs%/*}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset snap=$fs@snap.$stamp
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset clone=$basefs/cfs.$stamp
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs snapshot $snap
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs clone $snap $clone
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs promote $clone
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset fs_orig=$(get_prop origin $fs)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset clone_orig=$(get_prop origin $clone)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs promote $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # promote should fail if original fs does not have
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # promote permission
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $fs_orig != $(get_prop origin $fs) || \
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy $clone_orig != $(get_prop origin $clone) ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user promote $clone
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs promote $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user promote $clone
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $fs_orig != $(get_prop origin $fs) || \
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy $clone_orig != $(get_prop origin $clone) ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs promote $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $fs_orig != $(get_prop origin $fs) || \
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy $clone_orig != $(get_prop origin $clone) ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user promote $clone
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs promote $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user promote $clone
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $snap != $(get_prop origin $clone) || \
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy $clone_orig != $(get_prop origin $fs) ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_fs_canmount
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset fs=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset oldval
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy typeset stamp=${perm}.${user}.$(date +'%F-%H%M%S')
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ! ismounted $fs ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy set -A modes "on" "off"
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy oldval=$(get_prop $perm $fs)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $oldval == "on" ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy n=1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy elif [[ $oldval == "off" ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy n=0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_note "$user zfs set $perm=${modes[$n]} $fs"
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs set $perm=${modes[$n]} $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ ${modes[$n]} != $(get_prop $perm $fs) ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # fs is mounted
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ismounted $fs ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # property value does not change if
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # no mount permission
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy set -A modes "on" "off"
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy oldval=$(get_prop $perm $fs)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $oldval == "on" ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy n=1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy elif [[ $oldval == "off" ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy n=0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_note "$user zfs set $perm=${modes[$n]} $fs"
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs set $perm=${modes[$n]} $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ ${modes[$n]} != $(get_prop $perm $fs) ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_fs_recordsize
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset fs=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset value8k=$(( 1024 * 8 ))
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs set recordsize=$value8k $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $value8k != $(get_prop recordsize $fs) ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_fs_quota
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset fs=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset value32m=$(( 1024 * 1024 * 32 ))
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs set quota=$value32m $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $value32m != $(get_prop quota $fs) ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_fs_aclmode
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset fs=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset oldval
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy set -A modes "discard" "groupmask" "passthrough"
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy oldval=$(get_prop $perm $fs)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $oldval == "discard" ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy n=1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy elif [[ $oldval == "groupmask" ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy n=2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy elif [[ $oldval == "passthrough" ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy n=0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_note "$user zfs set aclmode=${modes[$n]} $fs"
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs set aclmode=${modes[$n]} $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ ${modes[$n]} != $(get_prop aclmode $fs) ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_fs_aclinherit
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset fs=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy #
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # PSARC/2008/231 change the default value of aclinherit to "restricted"
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # but still keep the old interface of "secure"
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy #
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset oldval
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy set -A modes "discard" "noallow" "secure" "passthrough"
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy oldval=$(get_prop $perm $fs)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $oldval == "discard" ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy n=1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy elif [[ $oldval == "noallow" ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy n=2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy elif [[ $oldval == "secure" || $oldval == "restricted" ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy n=3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy elif [[ $oldval == "passthrough" ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy n=0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_note "$user zfs set aclinherit=${modes[$n]} $fs"
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs set aclinherit=${modes[$n]} $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset newval=$(get_prop aclinherit $fs)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ ${modes[$n]} == "secure" && $newval == "restricted" ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy elif [[ ${modes[$n]} != $(get_prop aclinherit $fs) ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_fs_snapdir
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset fs=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset oldval
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy set -A modes "visible" "hidden"
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy oldval=$(get_prop $perm $fs)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $oldval == "visible" ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy n=1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy elif [[ $oldval == "hidden" ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy n=0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_note "$user zfs set snapdir=${modes[$n]} $fs"
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs set snapdir=${modes[$n]} $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ ${modes[$n]} != $(get_prop snapdir $fs) ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_fs_aedsx
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset fs=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset oldval
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy set -A modes "on" "off"
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy oldval=$(get_prop $perm $fs)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $oldval == "on" ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy n=1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy elif [[ $oldval == "off" ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy n=0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_note "$user zfs set $perm=${modes[$n]} $fs"
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs set $perm=${modes[$n]} $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ ${modes[$n]} != $(get_prop $perm $fs) ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_fs_zoned
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset fs=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset oldval
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy set -A modes "on" "off"
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy oldval=$(get_prop $perm $fs)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $oldval == "on" ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy n=1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy elif [[ $oldval == "off" ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy n=0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_note "$user zfs set $perm=${modes[$n]} $fs"
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if is_global_zone ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ! ismounted $fs ; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs set \
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy $perm=${modes[$n]} $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ ${modes[$n]} != \
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy $(get_prop $perm $fs) ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $n -eq 0 ]]; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_mustnot zfs mount $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy else
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs mount $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ismounted $fs; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # n always is 1 in this case
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs set \
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy $perm=${modes[$n]} $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $oldval != \
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy $(get_prop $perm $fs) ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # mount permission is needed
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # to make zoned=on
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs set \
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy $perm=${modes[$n]} $fs
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ ${modes[$n]} != \
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy $(get_prop $perm $fs) ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ! is_global_zone; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs set $perm=${modes[$n]} $fs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $oldval != $(get_prop $perm $fs) ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_fs_sharenfs
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset fs=$3
751609474e831927e5706b37cb08160df31dcd4dYuri Pankov typeset nmode omode
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
751609474e831927e5706b37cb08160df31dcd4dYuri Pankov omode=$(get_prop $perm $fs)
751609474e831927e5706b37cb08160df31dcd4dYuri Pankov if [[ $omode == "off" ]]; then
751609474e831927e5706b37cb08160df31dcd4dYuri Pankov nmode="on"
751609474e831927e5706b37cb08160df31dcd4dYuri Pankov else
751609474e831927e5706b37cb08160df31dcd4dYuri Pankov nmode="off"
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_note "$user zfs set $perm=$nmode $fs"
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs set $perm=$nmode $fs
751609474e831927e5706b37cb08160df31dcd4dYuri Pankov if [[ $(get_prop $perm $fs) != $nmode ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_note "$user zfs set $perm=$omode $fs"
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs set $perm=$omode $fs
751609474e831927e5706b37cb08160df31dcd4dYuri Pankov if [[ $(get_prop $perm $fs) != $omode ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_vol_destroy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset vol=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs destroy $vol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ! datasetexists $vol ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # mount permission is required
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $vol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs destroy $vol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $vol ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_vol_snapshot
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset vol=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy typeset stamp=${perm}.${user}.$(date +'%F-%H%M%S')
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset basevol=${vol%/*}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset snap=$vol@snap.$stamp
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs snapshot $snap
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $snap ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $vol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs snapshot $snap
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $vol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ! datasetexists $snap ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_vol_rollback
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset vol=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy typeset stamp=${perm}.${user}.$(date +'%F-%H%M%S')
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset basevol=${vol%/*}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset snap=$vol@snap.$stamp
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset oldval
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs snapshot $snap
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy oldval=$(datasetcksum $vol)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must dd if=/dev/random of=/dev/zvol/rdsk/$vol \
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy bs=512 count=1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs rollback -R $snap
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy sleep 10
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $oldval == $(datasetcksum $vol) ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # rollback on volume has to be with mount permission
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $vol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs rollback -R $snap
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy sleep 10
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $vol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $oldval != $(datasetcksum $vol) ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_vol_clone
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset vol=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy typeset stamp=${perm}.${user}.$(date +'%F-%H%M%S')
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset basevol=${vol%/*}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset snap=$vol@snap.$stamp
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset clone=$basevol/cvol.$stamp
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs snapshot $snap
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs clone $snap $clone
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $clone ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user create $basevol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs clone $snap $clone
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user create $basevol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $clone ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $basevol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs clone $snap $clone
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $basevol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $clone ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # require create permission on parent and
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # mount permission on itself as well
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $basevol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user create $basevol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs clone $snap $clone
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user create $basevol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $basevol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ! datasetexists $clone ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_vol_rename
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset vol=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy typeset stamp=${perm}.${user}.$(date +'%F-%H%M%S')
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset basevol=${vol%/*}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset snap=$vol@snap.$stamp
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset clone=$basevol/cvol.$stamp
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset renamevol=$basevol/nvol.$stamp
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs rename $vol $renamevol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $renamevol ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user create $basevol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs rename $vol $renamevol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user create $basevol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $renamevol ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $basevol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs rename $vol $renamevol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $basevol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if datasetexists $renamevol ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # require both create permission on parent and
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # mount permission on parent as well
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $basevol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user create $basevol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs rename $vol $renamevol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $basevol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user create $basevol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ! datasetexists $renamevol ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs rename $renamevol $vol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_vol_promote
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset vol=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy typeset stamp=${perm}.${user}.$(date +'%F-%H%M%S')
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset basevol=${vol%/*}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset snap=$vol@snap.$stamp
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset clone=$basevol/cvol.$stamp
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs snapshot $snap
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs clone $snap $clone
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs promote $clone
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset vol_orig=$(get_prop origin $vol)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset clone_orig=$(get_prop origin $clone)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # promote should fail if $vol and $clone
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # miss either mount or promote permission
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # case 1
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs promote $vol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $vol_orig != $(get_prop origin $vol) || \
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy $clone_orig != $(get_prop origin $clone) ]];
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # promote should fail if $vol and $clone
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # miss either mount or promote permission
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # case 2
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user promote $clone
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs promote $vol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user promote $clone
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $vol_orig != $(get_prop origin $vol) || \
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy $clone_orig != $(get_prop origin $clone) ]];
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # promote should fail if $vol and $clone
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # miss either mount or promote permission
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # case 3
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $vol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs promote $vol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $vol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $vol_orig != $(get_prop origin $vol) || \
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy $clone_orig != $(get_prop origin $clone) ]];
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # promote should fail if $vol and $clone
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # miss either mount or promote permission
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # case 4
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $clone
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs promote $vol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $clone
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $vol_orig != $(get_prop origin $vol) || \
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy $clone_orig != $(get_prop origin $clone) ]];
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # promote should fail if $vol and $clone
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # miss either mount or promote permission
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # case 5
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user promote $clone
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $vol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs promote $vol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user promote $clone
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $vol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $vol_orig != $(get_prop origin $vol) || \
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy $clone_orig != $(get_prop origin $clone) ]];
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # promote should fail if $vol and $clone
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # miss either mount or promote permission
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # case 6
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user promote $clone
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $clone
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs promote $vol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user promote $clone
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $vol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $vol_orig != $(get_prop origin $vol) || \
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy $clone_orig != $(get_prop origin $clone) ]];
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # promote should fail if $vol and $clone
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # miss either mount or promote permission
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # case 7
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $vol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $clone
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs promote $vol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $vol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $clone
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $vol_orig != $(get_prop origin $vol) || \
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy $clone_orig != $(get_prop origin $clone) ]];
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # promote only succeeds when $vol and $clone
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # have both mount and promote permission
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # case 8
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user promote $clone
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $vol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user mount $clone
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs promote $vol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user promote $clone
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $vol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user mount $clone
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $snap != $(get_prop origin $clone) || \
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy $clone_orig != $(get_prop origin $vol) ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_vol_volsize
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset vol=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset oldval
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy oldval=$(get_prop volsize $vol)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy (( newval = oldval * 2 ))
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy reserv_size=$(get_prop refreservation $vol)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ "0" == $reserv_size ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # sparse volume
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs set volsize=$newval $vol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $oldval == $(get_prop volsize $vol) ]];
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy else
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # normal volume, reservation permission
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy # is required
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs set volsize=$newval $vol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $newval == $(get_prop volsize $vol) ]];
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user reservation $vol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user refreservation $vol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs set volsize=$newval $vol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user reservation $vol
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user refreservation $vol
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $oldval == $(get_prop volsize $vol) ]];
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction verify_allow
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset user=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset perm=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset dtst=$3
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset -i ret
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs allow $user allow $dtst
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $ret -eq 0 ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs allow $user copies $dtst
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy user_run $user zfs allow $user copies $dtst
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy ret=$?
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs unallow $user copies $dtst
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if [[ $ret -eq 1 ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}