#! /bin/bash
# FS QA Test No. 103
#
# Exercise the XFS nosymlinks inode flag
#
#-----------------------------------------------------------------------
# Copyright (c) 2000-2005 Silicon Graphics, Inc.  All Rights Reserved.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it would be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write the Free Software Foundation,
# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
#
#-----------------------------------------------------------------------
#
# creator
owner=nathans@sgi.com

seq=`basename $0`
echo "QA output created by $seq"

here=`pwd`
tmp=/tmp/$$
status=1	# failure is the default!
trap "rm -f $tmp.*; exit \$status" 0 1 2 3 15

# get standard environment, filters and checks
. ./common.rc
. ./common.filter

_create_scratch()
{
	echo "*** mkfs"
	if ! _scratch_mkfs_xfs >$tmp.out 2>&1
	then
		cat $tmp.out
		echo "failed to mkfs $SCRATCH_DEV"
		exit 1
	fi

	echo "*** mount"
	if ! _scratch_mount 2>/dev/null
	then
		echo "failed to mount $SCRATCH_DEV"
		exit 1
	fi
}

_filter_ln()
{
    sed -e "s,SCRATCH_MNT/nosymlink/target - Operation not permitted,ln: creating symbolic link \`SCRATCH_MNT/nosymlink/target\' to \`SCRATCH_MNT/nosymlink/source\': Operation not permitted,g" \
        -e "/SCRATCH_MNT.*to.*SCRATCH_MNT/! s,: Operation not permitted, to \`SCRATCH_MNT/nosymlink/source\': Operation not permitted,g"
}

_filter_noymlinks_flag()
{
	_test_inode_flag nosymlinks $SCRATCH_MNT/nosymlink
	if [ $? -eq 0 ]; then
		echo "--n-- SCRATCH_MNT/nosymlink"
	else
		echo "----- SCRATCH_MNT/nosymlink"
	fi
}

# real QA test starts here
_supported_os Linux IRIX
_supported_fs xfs
_require_command $XFS_IO_PROG xfs_io
_require_scratch

_create_scratch


echo "*** testing nosymlinks directories"
mkdir $SCRATCH_MNT/nosymlink
echo "*** setting nosymlinks bit"
$XFS_IO_PROG -r -c 'chattr +n' $SCRATCH_MNT/nosymlink
_filter_noymlinks_flag

touch $SCRATCH_MNT/nosymlink/source
ln -s $SCRATCH_MNT/nosymlink/source $SCRATCH_MNT/nosymlink/target 2>&1 \
	| _filter_scratch | _filter_ln
ln $SCRATCH_MNT/nosymlink/source $SCRATCH_MNT/nosymlink/hardlinksareok

echo "*** 1st listing..."
find $SCRATCH_MNT | _filter_scratch

echo "*** clearing nosymlinks bit"
$XFS_IO_PROG -r -c 'chattr -n' $SCRATCH_MNT/nosymlink
_filter_noymlinks_flag

ln -s $SCRATCH_MNT/nosymlink/source $SCRATCH_MNT/nosymlink/target
ln $SCRATCH_MNT/nosymlink/source $SCRATCH_MNT/nosymlink/hardlinksareok2

echo "*** 2nd listing..."
find $SCRATCH_MNT | _filter_scratch

echo "*** finished testing nosymlinks directories"

status=0
exit
