140a8ac8fSEnji Cooper#!/bin/sh 2*3416500aSEnji Cooper# vim: filetype=sh noexpandtab ts=8 sw=8 340a8ac8fSEnji Cooper# $FreeBSD: head/tools/regression/pjdfstest/tests/chflags/00.t 211352 2010-08-15 21:24:17Z pjd $ 440a8ac8fSEnji Cooper 540a8ac8fSEnji Cooperdesc="chflags changes flags" 640a8ac8fSEnji Cooper 740a8ac8fSEnji Cooperdir=`dirname $0` 840a8ac8fSEnji Cooper. ${dir}/../misc.sh 940a8ac8fSEnji Cooper 1040a8ac8fSEnji Cooperrequire chflags 1140a8ac8fSEnji Cooper 1240a8ac8fSEnji Coopercase "${os}:${fs}" in 1340a8ac8fSEnji CooperFreeBSD:UFS) 1440a8ac8fSEnji Cooper allflags="UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_NOUNLINK,UF_OPAQUE,SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND,SF_NOUNLINK" 1540a8ac8fSEnji Cooper userflags="UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_NOUNLINK,UF_OPAQUE" 1640a8ac8fSEnji Cooper systemflags="SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND,SF_NOUNLINK" 1740a8ac8fSEnji Cooper 1840a8ac8fSEnji Cooper echo "1..742" 1940a8ac8fSEnji Cooper ;; 2040a8ac8fSEnji CooperFreeBSD:ZFS) 2140a8ac8fSEnji Cooper allflags="UF_NODUMP,SF_IMMUTABLE,SF_APPEND,SF_NOUNLINK" 2240a8ac8fSEnji Cooper userflags="UF_NODUMP" 2340a8ac8fSEnji Cooper systemflags="SF_IMMUTABLE,SF_APPEND,SF_NOUNLINK" 2440a8ac8fSEnji Cooper 2540a8ac8fSEnji Cooper echo "1..482" 2640a8ac8fSEnji Cooper ;; 2740a8ac8fSEnji Cooper*) 2840a8ac8fSEnji Cooper quick_exit 2940a8ac8fSEnji Cooper ;; 3040a8ac8fSEnji Cooperesac 3140a8ac8fSEnji Cooper 3240a8ac8fSEnji Coopern0=`namegen` 3340a8ac8fSEnji Coopern1=`namegen` 3440a8ac8fSEnji Coopern2=`namegen` 3540a8ac8fSEnji Cooper 3640a8ac8fSEnji Cooperexpect 0 mkdir ${n2} 0755 3740a8ac8fSEnji Coopercdir=`pwd` 3840a8ac8fSEnji Coopercd ${n2} 3940a8ac8fSEnji Cooper 4040a8ac8fSEnji Cooperfor type in regular dir fifo block char socket; do 4140a8ac8fSEnji Cooper create_file ${type} ${n0} 4240a8ac8fSEnji Cooper expect none stat ${n0} flags 4340a8ac8fSEnji Cooper expect 0 chflags ${n0} ${allflags} 4440a8ac8fSEnji Cooper expect ${allflags} stat ${n0} flags 4540a8ac8fSEnji Cooper expect 0 chflags ${n0} ${userflags} 4640a8ac8fSEnji Cooper expect ${userflags} stat ${n0} flags 4740a8ac8fSEnji Cooper expect 0 chflags ${n0} ${systemflags} 4840a8ac8fSEnji Cooper expect ${systemflags} stat ${n0} flags 4940a8ac8fSEnji Cooper expect 0 chflags ${n0} none 5040a8ac8fSEnji Cooper expect none stat ${n0} flags 5140a8ac8fSEnji Cooper if [ "${type}" = "dir" ]; then 5240a8ac8fSEnji Cooper expect 0 rmdir ${n0} 5340a8ac8fSEnji Cooper else 5440a8ac8fSEnji Cooper expect 0 unlink ${n0} 5540a8ac8fSEnji Cooper fi 5640a8ac8fSEnji Cooper 5740a8ac8fSEnji Cooper create_file ${type} ${n0} 5840a8ac8fSEnji Cooper expect none stat ${n0} flags 5940a8ac8fSEnji Cooper expect 0 lchflags ${n0} ${allflags} 6040a8ac8fSEnji Cooper expect ${allflags} stat ${n0} flags 6140a8ac8fSEnji Cooper expect 0 lchflags ${n0} ${userflags} 6240a8ac8fSEnji Cooper expect ${userflags} stat ${n0} flags 6340a8ac8fSEnji Cooper expect 0 lchflags ${n0} ${systemflags} 6440a8ac8fSEnji Cooper expect ${systemflags} stat ${n0} flags 6540a8ac8fSEnji Cooper expect 0 lchflags ${n0} none 6640a8ac8fSEnji Cooper expect none stat ${n0} flags 6740a8ac8fSEnji Cooper if [ "${type}" = "dir" ]; then 6840a8ac8fSEnji Cooper expect 0 rmdir ${n0} 6940a8ac8fSEnji Cooper else 7040a8ac8fSEnji Cooper expect 0 unlink ${n0} 7140a8ac8fSEnji Cooper fi 7240a8ac8fSEnji Cooperdone 7340a8ac8fSEnji Cooper 7440a8ac8fSEnji Cooperexpect 0 create ${n0} 0644 7540a8ac8fSEnji Cooperexpect 0 symlink ${n0} ${n1} 7640a8ac8fSEnji Cooperexpect none stat ${n1} flags 7740a8ac8fSEnji Cooperexpect none lstat ${n1} flags 7840a8ac8fSEnji Cooperexpect 0 chflags ${n1} ${allflags} 7940a8ac8fSEnji Cooperexpect ${allflags} stat ${n1} flags 8040a8ac8fSEnji Cooperexpect none lstat ${n1} flags 8140a8ac8fSEnji Cooperexpect 0 chflags ${n1} ${userflags} 8240a8ac8fSEnji Cooperexpect ${userflags} stat ${n1} flags 8340a8ac8fSEnji Cooperexpect none lstat ${n1} flags 8440a8ac8fSEnji Cooperexpect 0 chflags ${n1} ${systemflags} 8540a8ac8fSEnji Cooperexpect ${systemflags} stat ${n1} flags 8640a8ac8fSEnji Cooperexpect none lstat ${n1} flags 8740a8ac8fSEnji Cooperexpect 0 chflags ${n1} none 8840a8ac8fSEnji Cooperexpect none stat ${n1} flags 8940a8ac8fSEnji Cooperexpect none lstat ${n1} flags 9040a8ac8fSEnji Cooperexpect 0 unlink ${n1} 9140a8ac8fSEnji Cooperexpect 0 unlink ${n0} 9240a8ac8fSEnji Cooper 9340a8ac8fSEnji Cooperexpect 0 create ${n0} 0644 9440a8ac8fSEnji Cooperexpect 0 symlink ${n0} ${n1} 9540a8ac8fSEnji Cooperexpect none stat ${n1} flags 9640a8ac8fSEnji Cooperexpect none lstat ${n1} flags 9740a8ac8fSEnji Cooperexpect 0 lchflags ${n1} ${allflags} 9840a8ac8fSEnji Cooperexpect ${allflags} lstat ${n1} flags 9940a8ac8fSEnji Cooperexpect none stat ${n1} flags 10040a8ac8fSEnji Cooperexpect 0 lchflags ${n1} ${userflags} 10140a8ac8fSEnji Cooperexpect ${userflags} lstat ${n1} flags 10240a8ac8fSEnji Cooperexpect none stat ${n1} flags 10340a8ac8fSEnji Cooperexpect 0 lchflags ${n1} ${systemflags} 10440a8ac8fSEnji Cooperexpect ${systemflags} lstat ${n1} flags 10540a8ac8fSEnji Cooperexpect none stat ${n1} flags 10640a8ac8fSEnji Cooperexpect 0 lchflags ${n1} none 10740a8ac8fSEnji Cooperexpect none lstat ${n1} flags 10840a8ac8fSEnji Cooperexpect none stat ${n1} flags 10940a8ac8fSEnji Cooperexpect 0 unlink ${n1} 11040a8ac8fSEnji Cooperexpect 0 unlink ${n0} 11140a8ac8fSEnji Cooper 11240a8ac8fSEnji Cooper# successful chflags(2) updates ctime. 11340a8ac8fSEnji Cooperfor type in regular dir fifo block char socket symlink; do 11440a8ac8fSEnji Cooper if [ "${type}" != "symlink" ]; then 11540a8ac8fSEnji Cooper create_file ${type} ${n0} 11640a8ac8fSEnji Cooper for flag in `echo ${allflags},none | tr ',' ' '`; do 11740a8ac8fSEnji Cooper ctime1=`${fstest} stat ${n0} ctime` 11840a8ac8fSEnji Cooper sleep 1 11940a8ac8fSEnji Cooper expect 0 chflags ${n0} ${flag} 12040a8ac8fSEnji Cooper ctime2=`${fstest} stat ${n0} ctime` 12140a8ac8fSEnji Cooper test_check $ctime1 -lt $ctime2 12240a8ac8fSEnji Cooper done 12340a8ac8fSEnji Cooper if [ "${type}" = "dir" ]; then 12440a8ac8fSEnji Cooper expect 0 rmdir ${n0} 12540a8ac8fSEnji Cooper else 12640a8ac8fSEnji Cooper expect 0 unlink ${n0} 12740a8ac8fSEnji Cooper fi 12840a8ac8fSEnji Cooper fi 12940a8ac8fSEnji Cooper 13040a8ac8fSEnji Cooper create_file ${type} ${n0} 13140a8ac8fSEnji Cooper for flag in `echo ${allflags},none | tr ',' ' '`; do 13240a8ac8fSEnji Cooper ctime1=`${fstest} lstat ${n0} ctime` 13340a8ac8fSEnji Cooper sleep 1 13440a8ac8fSEnji Cooper expect 0 lchflags ${n0} ${flag} 13540a8ac8fSEnji Cooper ctime2=`${fstest} lstat ${n0} ctime` 13640a8ac8fSEnji Cooper test_check $ctime1 -lt $ctime2 13740a8ac8fSEnji Cooper done 13840a8ac8fSEnji Cooper if [ "${type}" = "dir" ]; then 13940a8ac8fSEnji Cooper expect 0 rmdir ${n0} 14040a8ac8fSEnji Cooper else 14140a8ac8fSEnji Cooper expect 0 unlink ${n0} 14240a8ac8fSEnji Cooper fi 14340a8ac8fSEnji Cooperdone 14440a8ac8fSEnji Cooper 14540a8ac8fSEnji Cooper# unsuccessful chflags(2) does not update ctime. 14640a8ac8fSEnji Cooperfor type in regular dir fifo block char socket symlink; do 14740a8ac8fSEnji Cooper if [ "${type}" != "symlink" ]; then 14840a8ac8fSEnji Cooper create_file ${type} ${n0} 14940a8ac8fSEnji Cooper for flag in `echo ${allflags},none | tr ',' ' '`; do 15040a8ac8fSEnji Cooper ctime1=`${fstest} stat ${n0} ctime` 15140a8ac8fSEnji Cooper sleep 1 15240a8ac8fSEnji Cooper expect EPERM -u 65534 chflags ${n0} ${flag} 15340a8ac8fSEnji Cooper ctime2=`${fstest} stat ${n0} ctime` 15440a8ac8fSEnji Cooper test_check $ctime1 -eq $ctime2 15540a8ac8fSEnji Cooper done 15640a8ac8fSEnji Cooper if [ "${type}" = "dir" ]; then 15740a8ac8fSEnji Cooper expect 0 rmdir ${n0} 15840a8ac8fSEnji Cooper else 15940a8ac8fSEnji Cooper expect 0 unlink ${n0} 16040a8ac8fSEnji Cooper fi 16140a8ac8fSEnji Cooper fi 16240a8ac8fSEnji Cooper 16340a8ac8fSEnji Cooper create_file ${type} ${n0} 16440a8ac8fSEnji Cooper for flag in `echo ${allflags},none | tr ',' ' '`; do 16540a8ac8fSEnji Cooper ctime1=`${fstest} lstat ${n0} ctime` 16640a8ac8fSEnji Cooper sleep 1 16740a8ac8fSEnji Cooper expect EPERM -u 65534 lchflags ${n0} ${flag} 16840a8ac8fSEnji Cooper ctime2=`${fstest} lstat ${n0} ctime` 16940a8ac8fSEnji Cooper test_check $ctime1 -eq $ctime2 17040a8ac8fSEnji Cooper done 17140a8ac8fSEnji Cooper if [ "${type}" = "dir" ]; then 17240a8ac8fSEnji Cooper expect 0 rmdir ${n0} 17340a8ac8fSEnji Cooper else 17440a8ac8fSEnji Cooper expect 0 unlink ${n0} 17540a8ac8fSEnji Cooper fi 17640a8ac8fSEnji Cooperdone 17740a8ac8fSEnji Cooper 17840a8ac8fSEnji Coopercd ${cdir} 17940a8ac8fSEnji Cooperexpect 0 rmdir ${n2} 180