1166065Spjd#!/bin/sh 2166065Spjd# $FreeBSD$ 3166065Spjd 4166065Spjddesc="chmod returns EFTYPE if the effective user ID is not the super-user, the mode includes the sticky bit (S_ISVTX), and path does not refer to a directory" 5166065Spjd 6166065Spjddir=`dirname $0` 7166065Spjd. ${dir}/../misc.sh 8166065Spjd 9211336Spjdif supported lchmod; then 10211336Spjd echo "1..173" 11211336Spjdelse 12211336Spjd echo "1..109" 13211336Spjdfi 14166065Spjd 15166065Spjdn0=`namegen` 16166065Spjdn1=`namegen` 17211336Spjdn2=`namegen` 18166065Spjd 19166065Spjdexpect 0 mkdir ${n0} 0755 20166065Spjdcdir=`pwd` 21166065Spjdcd ${n0} 22166065Spjd 23211336Spjdfor type in regular dir fifo block char socket symlink; do 24211336Spjd if [ "${type}" != "symlink" ]; then 25211336Spjd create_file ${type} ${n1} 26211336Spjd expect 0 chmod ${n1} 01621 27211336Spjd expect 01621 stat ${n1} mode 28211336Spjd expect 0 symlink ${n1} ${n2} 29211336Spjd expect 0 chmod ${n2} 01700 30211336Spjd expect 01700 stat ${n1} mode 31211336Spjd expect 0 unlink ${n2} 32211336Spjd if [ "${type}" = "dir" ]; then 33211336Spjd expect 0 rmdir ${n1} 34211336Spjd else 35211336Spjd expect 0 unlink ${n1} 36211336Spjd fi 37211336Spjd fi 38166065Spjd 39211336Spjd if supported lchmod; then 40211336Spjd create_file ${type} ${n1} 41211336Spjd expect 0 lchmod ${n1} 01621 42211336Spjd expect 01621 lstat ${n1} mode 43211336Spjd if [ "${type}" = "dir" ]; then 44211336Spjd expect 0 rmdir ${n1} 45211336Spjd else 46211336Spjd expect 0 unlink ${n1} 47211336Spjd fi 48211336Spjd fi 49211336Spjddone 50166065Spjd 51166065Spjdexpect 0 mkdir ${n1} 0755 52166065Spjdexpect 0 chown ${n1} 65534 65534 53166065Spjdexpect 0 -u 65534 -g 65534 chmod ${n1} 01755 54166065Spjdexpect 01755 stat ${n1} mode 55211336Spjdexpect 0 symlink ${n1} ${n2} 56211336Spjdexpect 0 chmod ${n2} 01700 57211336Spjdexpect 01700 stat ${n1} mode 58211336Spjdexpect 0 unlink ${n2} 59166065Spjdexpect 0 rmdir ${n1} 60166065Spjd 61211336Spjdfor type in regular fifo block char socket symlink; do 62211336Spjd if [ "${type}" != "symlink" ]; then 63211336Spjd create_file ${type} ${n1} 0640 65534 65534 64211336Spjd expect 0 symlink ${n1} ${n2} 65211336Spjd case "${os}" in 66211336Spjd FreeBSD) 67211336Spjd expect EFTYPE -u 65534 -g 65534 chmod ${n1} 01644 68211336Spjd expect 0640 stat ${n1} mode 69211336Spjd expect EFTYPE -u 65534 -g 65534 chmod ${n2} 01644 70211336Spjd expect 0640 stat ${n1} mode 71211336Spjd ;; 72211336Spjd SunOS) 73211336Spjd expect 0 -u 65534 -g 65534 chmod ${n1} 01644 74211336Spjd expect 0644 stat ${n1} mode 75211336Spjd expect 0 -u 65534 -g 65534 chmod ${n2} 01640 76211336Spjd expect 0640 stat ${n1} mode 77211336Spjd ;; 78211336Spjd Linux) 79211336Spjd expect 0 -u 65534 -g 65534 chmod ${n1} 01644 80211336Spjd expect 01644 stat ${n1} mode 81211336Spjd expect 0 -u 65534 -g 65534 chmod ${n2} 01640 82211336Spjd expect 01640 stat ${n1} mode 83211336Spjd ;; 84211336Spjd esac 85211336Spjd expect 0 unlink ${n2} 86211336Spjd if [ "${type}" = "dir" ]; then 87211336Spjd expect 0 rmdir ${n1} 88211336Spjd else 89211336Spjd expect 0 unlink ${n1} 90211336Spjd fi 91211336Spjd fi 92166065Spjd 93211336Spjd if supported lchmod; then 94211336Spjd create_file ${type} ${n1} 0640 65534 65534 95211336Spjd case "${os}" in 96211336Spjd FreeBSD) 97211336Spjd expect EFTYPE -u 65534 -g 65534 lchmod ${n1} 01644 98211336Spjd expect 0640 lstat ${n1} mode 99211336Spjd ;; 100211336Spjd SunOS) 101211336Spjd expect 0 -u 65534 -g 65534 lchmod ${n1} 01644 102211336Spjd expect 0644 lstat ${n1} mode 103211336Spjd ;; 104211336Spjd Linux) 105211336Spjd expect 0 -u 65534 -g 65534 lchmod ${n1} 01644 106211336Spjd expect 01644 lstat ${n1} mode 107211336Spjd ;; 108211336Spjd esac 109211336Spjd if [ "${type}" = "dir" ]; then 110211336Spjd expect 0 rmdir ${n1} 111211336Spjd else 112211336Spjd expect 0 unlink ${n1} 113211336Spjd fi 114211336Spjd fi 115211336Spjddone 116211336Spjd 117166065Spjdcd ${cdir} 118166065Spjdexpect 0 rmdir ${n0} 119