1#!/bin/ksh 2# 3# This file and its contents are supplied under the terms of the 4# Common Development and Distribution License ("CDDL"), version 1.0. 5# You may only use this file in accordance with the terms of version 6# 1.0 of the CDDL. 7# 8# A full copy of the text of the CDDL should have accompanied this 9# source. A copy of the CDDL is also available via the Internet at 10# http://www.illumos.org/license/CDDL. 11# 12 13# 14# Copyright 2020 Joyent, Inc. 15# Copyright 2023 Bill Sommerfeld <sommerfeld@alum.mit.edu> 16# 17 18# 19# Clearly, grossly incomplete. 20# 21 22export LC_ALL=C.UTF-8 23 24set -o pipefail 25unalias -a 26 27find_prog=/usr/bin/find 28find_prog_xpg4=/usr/xpg4/bin/find 29find_exit=0 30 31# make sure we don't end in 1 or 2, which breaks the tests 32find_dir=/tmp/findtest.$$.dir 33 34mkdir $find_dir 35 36testfind() 37{ 38 exp=$1 39 shift 40 cmd="$@" 41 42 echo "TEST: $cmd" 43 44 out=$(eval $cmd | tr '\n' ',') 45 46 [[ "$exp" == "$out" ]] || { 47 echo "TEST FAILED: $cmd" >&2 48 echo "expected: $exp" >&2 49 echo "got: $out" >&2 50 find_exit=1 51 } 52} 53 54mkdir -p $find_dir/1 55mkdir -p $find_dir/.2 56touch $find_dir/.2/1 57touch $find_dir/.2/c 58 59testfind "$find_dir/1,$find_dir/.2/1," \ 60 $find_prog $find_dir -name \"1\" 61testfind "$find_dir/1,$find_dir/.2/1," \ 62 $find_prog $find_dir -path \"*1\" 63 64cd $find_dir 65 66testfind "" $find_prog . -name \"*2\" 67testfind "./.2," $find_prog_xpg4 . -name \"*2\" 68testfind "./.2," $find_prog . -name \".*2\" 69testfind "./.2," $find_prog_xpg4 . -name \".*2\" 70testfind "./1,./.2/1," $find_prog . -path \"*1\" 71testfind "./.2," $find_prog . -path \"*2\" 72testfind "./.2,./.2/1,./.2/c," $find_prog . -path \"*2*\" 73 74cd - 75rm -rf $find_dir 76 77# Regression test for bug 15353: 78# 79# For the purposes of this test we need a user and group with the same 80# numeric id. 81# 82# We also check that /var/tmp has ZFS/CIFS/NFS4-equivalent acls. 83# 84# (A complete test would also exercise ufs's acls) 85# 86testuser=daemon 87testgroup=other 88 89testuid=$(getent passwd ${testuser} | cut -d: -f 3) 90testgid=$(getent group ${testgroup} | cut -d: -f 3) 91 92[[ "$testuid" == "$testgid" ]] || { 93 echo "TEST FAILED: $cmd" >&2 94 echo "expected ${testuser}'s uid $testuid" \ 95 "to be equal to ${testgroup}'s gid $testgid" >&2 96 find_exit=1 97} 98 99find_dir=/var/tmp/findtest.$$.dir 100mkdir -p $find_dir 101 102# ACL_ENABLED yields 0 for no acls, 1 for old acls, 2 for NFS acls. 103 104_ACL_ACE_ENABLED=2 105_ACL_ACLENT_ENABLED=1 106 107[[ $(getconf ACL_ENABLED $find_dir) == ${_ACL_ACE_ENABLED} ]] || { 108 echo "TEST SKIPPED: ACE acls not available in $find_dir" 109 find_exit=4 # UNSUPPORTED 110 exit $find_exit 111} 112 113mkdir -p $find_dir/a 114mkdir -p $find_dir/b 115chmod A+group:${testgroup}:read_set:allow $find_dir/a 116chmod A+user:${testuser}:read_set:allow $find_dir/b 117 118cd $find_dir 119testfind "./a", $find_prog . -groupacl ${testgroup} 120testfind "./b", $find_prog . -useracl ${testuser} 121 122cd - 123rm -rf $find_dir 124 125exit $find_exit 126