1*08ae7ca2SJerry Jelinek#!/bin/ksh -p 2*08ae7ca2SJerry Jelinek# 3*08ae7ca2SJerry Jelinek# CDDL HEADER START 4*08ae7ca2SJerry Jelinek# 5*08ae7ca2SJerry Jelinek# This file and its contents are supplied under the terms of the 6*08ae7ca2SJerry Jelinek# Common Development and Distribution License ("CDDL"), version 1.0. 7*08ae7ca2SJerry Jelinek# You may only use this file in accordance with the terms of version 8*08ae7ca2SJerry Jelinek# 1.0 of the CDDL. 9*08ae7ca2SJerry Jelinek# 10*08ae7ca2SJerry Jelinek# A full copy of the text of the CDDL should have accompanied this 11*08ae7ca2SJerry Jelinek# source. A copy of the CDDL is also available via the Internet at 12*08ae7ca2SJerry Jelinek# http://www.illumos.org/license/CDDL. 13*08ae7ca2SJerry Jelinek# 14*08ae7ca2SJerry Jelinek# CDDL HEADER END 15*08ae7ca2SJerry Jelinek# 16*08ae7ca2SJerry Jelinek 17*08ae7ca2SJerry Jelinek# 18*08ae7ca2SJerry Jelinek# Copyright 2019 Joyent, Inc. 19*08ae7ca2SJerry Jelinek# 20*08ae7ca2SJerry Jelinek 21*08ae7ca2SJerry Jelinek. $STF_SUITE/tests/functional/rsend/rsend.kshlib 22*08ae7ca2SJerry Jelinek 23*08ae7ca2SJerry Jelinek# 24*08ae7ca2SJerry Jelinek# DESCRIPTION: 25*08ae7ca2SJerry Jelinek# Verify that the parent dataset is passed to the kernel's zfs_secpolicy_recv 26*08ae7ca2SJerry Jelinek# function during a zfs receive. 27*08ae7ca2SJerry Jelinek# 28*08ae7ca2SJerry Jelinek# STRATEGY: 29*08ae7ca2SJerry Jelinek# 1. Create a hierarchy of datasets. 30*08ae7ca2SJerry Jelinek# 2. Take a snapshot of the final child dataset and send it to a file. 31*08ae7ca2SJerry Jelinek# 3. Use DTrace to run the zfs recv command and simultaneously monitor the 32*08ae7ca2SJerry Jelinek# zc_name member of the zfs_cmd_t structure that is validated in 33*08ae7ca2SJerry Jelinek# zfs_secpolicy_recv. 34*08ae7ca2SJerry Jelinek# 4. Verify that the zc_name member is the parent dataset, as expected. 35*08ae7ca2SJerry Jelinek# 36*08ae7ca2SJerry Jelinek 37*08ae7ca2SJerry Jelinekverify_runnable "both" 38*08ae7ca2SJerry Jelinek 39*08ae7ca2SJerry Jelinekfunction cleanup 40*08ae7ca2SJerry Jelinek{ 41*08ae7ca2SJerry Jelinek destroy_dataset $TESTPOOL/testfs2 "-r" 42*08ae7ca2SJerry Jelinek destroy_dataset $TESTPOOL/testfs1 "-r" 43*08ae7ca2SJerry Jelinek [[ -f $sendfile ]] && log_must rm $sendfile 44*08ae7ca2SJerry Jelinek} 45*08ae7ca2SJerry Jelineklog_onexit cleanup 46*08ae7ca2SJerry Jelinek 47*08ae7ca2SJerry Jelineklog_assert "Verify zfs_secpolicy_recv is passed the proper trimmed name" 48*08ae7ca2SJerry Jelinek 49*08ae7ca2SJerry Jelinektypeset sendfile=$TESTDIR/sendfile 50*08ae7ca2SJerry Jelinek 51*08ae7ca2SJerry Jelineklog_must zfs create $TESTPOOL/testfs1 52*08ae7ca2SJerry Jelineklog_must zfs create $TESTPOOL/testfs1/data 53*08ae7ca2SJerry Jelineklog_must zfs create $TESTPOOL/testfs1/data/foo 54*08ae7ca2SJerry Jelinek 55*08ae7ca2SJerry Jelineklog_must zfs create $TESTPOOL/testfs2 56*08ae7ca2SJerry Jelineklog_must zfs create $TESTPOOL/testfs2/data 57*08ae7ca2SJerry Jelinek 58*08ae7ca2SJerry Jelineklog_must mkfile 4k /$TESTPOOL/testfs1/data/foo/testfile0 59*08ae7ca2SJerry Jelinek 60*08ae7ca2SJerry Jelineklog_must zfs snap $TESTPOOL/testfs1/data/foo@1 61*08ae7ca2SJerry Jelinek 62*08ae7ca2SJerry Jelineklog_must eval "zfs send $TESTPOOL/testfs1/data/foo@1 > $sendfile" 63*08ae7ca2SJerry Jelinek 64*08ae7ca2SJerry Jelinekzc_name=$(/usr/sbin/dtrace -q -n \ 65*08ae7ca2SJerry Jelinek 'fbt::zfs_secpolicy_recv:entry {printf("%s", stringof(args[0]->zc_name));}' \ 66*08ae7ca2SJerry Jelinek -c "zfs receive $TESTPOOL/testfs2/data/foo" < $sendfile) 67*08ae7ca2SJerry Jelinek 68*08ae7ca2SJerry Jelinek[[ "$zc_name" == "$TESTPOOL/testfs2/data" ]] || \ 69*08ae7ca2SJerry Jelinek log_fail "zc_name mismatch: $zc_name != $TESTPOOL/testfs2/data" 70*08ae7ca2SJerry Jelinek 71*08ae7ca2SJerry Jelineklog_pass "zfs_secpolicy_recv is passed the proper trimmed name" 72