d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# CDDL HEADER START
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# The contents of this file are subject to the terms of the
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Common Development and Distribution License (the "License").
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# You may not use this file except in compliance with the License.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# or http://www.opensolaris.org/os/licensing.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# See the License for the specific language governing permissions
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# and limitations under the License.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# When distributing Covered Code, include this CDDL HEADER in each
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# If applicable, add the following below this CDDL HEADER, with the
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# fields enclosed by brackets "[]" replaced with your own identifying
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# information: Portions Copyright [yyyy] [name of copyright owner]
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# CDDL HEADER END
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Use is subject to license terms.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy#
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy# Copyright (c) 2016 by Delphix. All rights reserved.
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy#
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy. $STF_SUITE/tests/functional/acl/acl.cfg
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy. $STF_SUITE/include/libtest.shlib
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Get the given file/directory access mode
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1 object -- file or directroy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction get_mode #<obj>
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset obj=$1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if (( ${#obj} == 0 )); then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return 1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy ls -ld $obj | awk '{print $1}'
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Get the given file/directory ACL
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1 object -- file or directroy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction get_acl #<obj>
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset obj=$1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if (( ${#obj} == 0 )); then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return 1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy ls -vd $obj | nawk '(NR != 1) {print $0}'
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Get the given file/directory ACL
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1 object -- file or directroy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction get_compact_acl #<obj>
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset obj=$1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if (( ${#obj} == 0 )); then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return 1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy ls -Vd $obj | nawk '(NR != 1) {print $0}'
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Check the given two files/directories have the same ACLs
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Return 0, if source object acl is equal to target object acl.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1 source object
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $2 target object
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction compare_acls #<src> <tgt>
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset src=$1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset tgt=$2
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy (( ${#src} == 0 || ${#tgt} == 0 )) && return 1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy [[ $src == $tgt ]] && return 0
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset tmpsrc=/tmp/compare_acls.src.$$
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset tmptgt=/tmp/compare_acls.tgt.$$
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy get_acl $src > $tmpsrc
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy get_acl $tgt > $tmptgt
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset -i ret=0
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy diff $tmpsrc $tmptgt > /dev/null 2>&1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy ret=$?
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy rm -f $tmpsrc $tmptgt
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if (( ret != 0 )); then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return $ret
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy get_compact_acl $src > $tmpsrc
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy get_compact_acl $tgt > $tmptgt
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy diff $tmpsrc $tmptgt > /dev/null 2>&1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy ret=$?
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy rm -f $tmpsrc $tmptgt
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return $ret
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Check that the given two objects have the same modes.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Return 0, if their modes are equal with each other. Otherwise, return 1.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1 source object
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $2 target object
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction compare_modes #<src> <tgt>
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset src=$1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset tgt=$2
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset -i i=0
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy set -A mode
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy (( ${#src} == 0 || ${#tgt} == 0 )) && return 1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy [[ $src == $tgt ]] && return 0
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset obj
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy for obj in $src $tgt
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy do
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy mode[i]=$(get_mode $obj)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy (( i = i + 1 ))
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy done
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy [[ ${mode[0]} != ${mode[1]} ]] && return 1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return 0
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Check that the given two objects have the same xattrs.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Return 0, if their xattrs are equal with each other. Otherwise, return 1.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1 source object
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $2 target object
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction compare_xattrs #<src> <tgt>
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset src=$1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset tgt=$2
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy (( ${#src} == 0 || ${#tgt} == 0 )) && return 1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy [[ $src == $tgt ]] && return 0
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset tmpsrc=/tmp/compare_xattrs.src.$$
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset tmptgt=/tmp/compare_xattrs.tgt.$$
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy get_xattr $src > $tmpsrc
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy get_xattr $tgt > $tmptgt
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset -i ret=0
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy diff $tmpsrc $tmptgt > /dev/null 2>&1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy ret=$?
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy rm -f $tmpsrc $tmptgt
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return $ret
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Check '+' is set for a given file/directory with 'ls [-l]' command
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1 object -- file or directory.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction plus_sign_check_l #<obj>
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset obj=$1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if (( ${#obj} == 0 )); then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return 1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy ls -ld $obj | awk '{print $1}' | grep "+\>" > /dev/null
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return $?
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Check '+' is set for a given file/directory with 'ls [-v]' command
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1 object -- file or directory.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction plus_sign_check_v #<obj>
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset obj=$1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if (( ${#obj} == 0 )); then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return 1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy ls -vd $obj | nawk '(NR == 1) {print $1}' | grep "+\>" > /dev/null
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return $?
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# A wrapper function of c program
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1 legal login name
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $2-n commands and options
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction chgusr_exec #<login_name> <commands> [...]
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy chg_usr_exec $@
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return $?
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Export the current user for the following usr_exec operating.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1 legal login name
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction set_cur_usr #<login_name>
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy export ZFS_ACL_CUR_USER=$1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Run commands by $ZFS_ACL_CUR_USER
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1-n commands and options
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction usr_exec #<commands> [...]
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy chg_usr_exec "$ZFS_ACL_CUR_USER" $@
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return $?
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Count how many ACEs for the speficied file or directory.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1 file or directroy name
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction count_ACE #<file or dir name>
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if [[ ! -e $1 ]]; then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_note "Need input file or directroy name."
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return 1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy ls -vd $1 | nawk 'BEGIN {count=0}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy (NR != 1)&&(/[0-9]:/) {count++}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy END {print count}'
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return 0
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Get specified number ACE content of specified file or directory.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1 file or directory name
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $2 specified number
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction get_ACE #<file or dir name> <specified number> <verbose|compact>
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if [[ ! -e $1 || $2 -ge $(count_ACE $1) ]]; then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return 1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset file=$1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset -i num=$2
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset format=${3:-verbose}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset -i next_num=-1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset tmpfile=/tmp/tmp_get_ACE.$$
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset line=""
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset args
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy case $format in
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy verbose) args="-vd"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy ;;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy compact) args="-Vd"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy ;;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy *) log_fail "Invalid parameter as ($format), " \
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy "only verbose|compact is supported."
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy ;;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy esac
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy ls $args $file > $tmpfile
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy (( $? != 0 )) && log_fail "FAIL: ls $args $file > $tmpfile"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy while read line; do
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy [[ -z $line ]] && continue
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if [[ $args == -vd ]]; then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if [[ $line == "$num":* ]]; then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy (( next_num = num + 1 ))
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if [[ $line == "$next_num":* ]]; then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy break
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if (( next_num != -1 )); then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy print -n $line
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy else
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if (( next_num == num )); then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy print -n $line
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy (( next_num += 1 ))
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy done < $tmpfile
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy rm -f $tmpfile
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy (( $? != 0 )) && log_fail "FAIL: rm -f $tmpfile"
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Cleanup exist user/group.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction cleanup_user_group
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy del_user $ZFS_ACL_ADMIN
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy del_user $ZFS_ACL_STAFF1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy del_user $ZFS_ACL_STAFF2
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy del_group $ZFS_ACL_STAFF_GROUP
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy del_user $ZFS_ACL_OTHER1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy del_user $ZFS_ACL_OTHER2
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy del_group $ZFS_ACL_OTHER_GROUP
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return 0
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Clean up testfile and test directory
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction cleanup
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if [[ -d $TESTDIR ]]; then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy cd $TESTDIR
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy rm -rf $TESTDIR/*
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# According to specified access or acl_spec, do relevant operating by using the
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# specified user.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1 specified user
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $2 node
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $3 acl_spec or access
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction rwx_node #user node acl_spec|access
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset user=$1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset node=$2
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset acl_spec=$3
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if [[ $user == "" || $node == "" || $acl_spec == "" ]]; then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_note "node or acl_spec are not defined."
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return 1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if [[ -d $node ]]; then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy case $acl_spec in
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy *:read_data:*|read_data)
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy chgusr_exec $user ls -l $node > /dev/null 2>&1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return $? ;;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy *:write_data:*|write_data)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if [[ -f ${node}/tmpfile ]]; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must rm -f ${node}/tmpfile
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy chgusr_exec $user touch ${node}/tmpfile > \
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy /dev/null 2>&1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return $? ;;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy *"execute:"*|execute)
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy chgusr_exec $user find $node > /dev/null 2>&1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return $? ;;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy esac
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy else
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy case $acl_spec in
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy *:read_data:*|read_data)
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy chgusr_exec $user cat $node > /dev/null 2>&1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return $? ;;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy *:write_data:*|write_data)
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy chgusr_exec $user dd if=/usr/bin/ls of=$node > \
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy /dev/null 2>&1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return $? ;;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy *"execute:"*|execute)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy ZFS_ACL_ERR_STR=$(chgusr_exec $user $node 2>&1)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return $? ;;
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy esac
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Get the given file/directory xattr
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1 object -- file or directroy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction get_xattr #<obj>
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset obj=$1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset xattr
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if (( ${#obj} == 0 )); then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return 1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy for xattr in `runat $obj ls | \
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy /usr/xpg4/bin/egrep -v -e SUNWattr_ro -e SUNWattr_rw` ; do
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy runat $obj sum $xattr
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy done
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Get the owner of a file/directory
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction get_owner #node
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset node=$1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset value
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if [[ -z $node ]]; then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_fail "node are not defined."
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if [[ -d $node ]]; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy value=$(ls -dl $node | awk '{print $3}')
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy elif [[ -e $node ]]; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy value=$(ls -l $node | awk '{print $3}')
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy echo $value
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Get the group of a file/directory
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction get_group #node
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset node=$1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset value
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if [[ -z $node ]]; then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_fail "node are not defined."
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if [[ -d $node ]]; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy value=$(ls -dl $node | awk '{print $4}')
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy elif [[ -e $node ]]; then
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy value=$(ls -l $node | awk '{print $4}')
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy echo $value
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Get the group name that a UID belongs to
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction get_user_group #uid
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset uid=$1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset value
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if [[ -z $uid ]]; then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_fail "UID not defined."
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy value=$(id $uid)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if [[ $? -eq 0 ]]; then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy value=${value##*\(}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy value=${value%%\)*}
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy echo $value
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy else
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy log_fail "Invalid UID (uid)."
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# Get the specified item of the specified string
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1: Item number, count from 0.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $2-n: strings
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction getitem
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset -i n=$1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy shift
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy (( n += 1 ))
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy eval echo \${$n}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# This function calculate the specified directory files checksum and write
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# to the specified array.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1 directory in which the files will be cksum.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $2 file array name which was used to store file cksum information.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $3 attribute array name which was used to store attribute information.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction cksum_files #<dir> <file_array_name> <attribute_array_name>
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset dir=$1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset farr_name=$2
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset aarr_name=$3
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy [[ ! -d $dir ]] && return
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset oldpwd=$PWD
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy cd $dir
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy typeset files=$(ls file*)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset -i i=0
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset -i n=0
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy while (( i < NUM_FILE )); do
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset f=$(getitem $i $files)
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy eval $farr_name[$i]=\$\(\cksum $f\)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset -i j=0
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy while (( j < NUM_ATTR )); do
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy eval $aarr_name[$n]=\$\(\runat \$f \cksum \
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy attribute.$j\)
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy (( j += 1 ))
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy (( n += 1 ))
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy done
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy (( i += 1 ))
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy done
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy cd $oldpwd
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# This function compare two cksum results array.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1 The array name which stored the cksum before operation.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $2 The array name which stored the cksum after operation.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction compare_cksum #<array1> <array2>
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset before=$1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset after=$2
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy eval typeset -i count=\${#$before[@]}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset -i i=0
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy while (( i < count )); do
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy eval typeset var1=\${$before[$i]}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy eval typeset var2=\${$after[$i]}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy if [[ $var1 != $var2 ]]; then
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return 1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy fi
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy (( i += 1 ))
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy done
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy return 0
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# This function calculate all the files cksum information in current directory
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# and output them to the specified file.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1 directory from which the files will be cksum.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $2 cksum output file
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction record_cksum #<outfile>
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset dir=$1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset outfile=$2
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy [[ ! -d ${outfile%/*} ]] && usr_exec mkdir -p ${outfile%/*}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy usr_exec cd $dir ; find . -depth -type f -exec cksum {} \\\; | \
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy sort > $outfile
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy usr_exec cd $dir ; find . -depth -type f -xattr -exec runat {} \
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy cksum attribute* \\\; | sort >> $outfile
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# The function create_files creates the directories and files that the script
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# will operate on to test extended attribute functionality.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy# $1 The base directory in which to create directories and files.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy#
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedyfunction create_files #<directory>
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy{
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset basedir=$1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy [[ ! -d $basedir ]] && usr_exec mkdir -m 777 $basedir
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy [[ ! -d $RES_DIR ]] && usr_exec mkdir -m 777 $RES_DIR
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy [[ ! -d $INI_DIR ]] && usr_exec mkdir -m 777 $INI_DIR
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy [[ ! -d $TST_DIR ]] && usr_exec mkdir -m 777 $TST_DIR
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy [[ ! -d $TMP_DIR ]] && usr_exec mkdir -m 777 $TMP_DIR
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy #
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy # Create the original file and its attribute files.
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy #
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy [[ ! -a $RES_DIR/file ]] && \
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy usr_exec file_write -o create -f $RES_DIR/file \
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy -b 1024 -d 0 -c 1
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy [[ ! -a $RES_DIR/attribute ]] && \
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy usr_exec cp $RES_DIR/file $RES_DIR/attribute
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset oldpwd=$PWD
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy cd $INI_DIR
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset -i i=0
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy while (( i < NUM_FILE )); do
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset dstfile=$INI_DIR/file.$$.$i
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy usr_exec cp $RES_DIR/file $dstfile
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy typeset -i j=0
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy while (( j < NUM_ATTR )); do
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy usr_exec runat $dstfile \
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy cp $RES_DIR/attribute ./attribute.$j
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy (( j += 1 ))
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy done
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy (( i += 1 ))
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy done
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy cd $oldpwd
d583b39bfb4e2571d3e41097c5c357ffe353ad45John Wren Kennedy}