00.t revision 166065
1166065Spjd#!/bin/sh 2166065Spjd# $FreeBSD: head/tools/regression/fstest/tests/chmod/00.t 166065 2007-01-17 01:42:12Z pjd $ 3166065Spjd 4166065Spjddesc="chmod changes permission" 5166065Spjd 6166065Spjddir=`dirname $0` 7166065Spjd. ${dir}/../misc.sh 8166065Spjd 9166065Spjdif supported lchmod; then 10166065Spjd echo "1..77" 11166065Spjdelse 12166065Spjd echo "1..58" 13166065Spjdfi 14166065Spjd 15166065Spjdn0=`namegen` 16166065Spjdn1=`namegen` 17166065Spjdn2=`namegen` 18166065Spjd 19166065Spjdexpect 0 mkdir ${n2} 0755 20166065Spjdcdir=`pwd` 21166065Spjdcd ${n2} 22166065Spjd 23166065Spjdexpect 0 create ${n0} 0644 24166065Spjdexpect 0644 stat ${n0} mode 25166065Spjdexpect 0 chmod ${n0} 0111 26166065Spjdexpect 0111 stat ${n0} mode 27166065Spjdexpect 0 unlink ${n0} 28166065Spjd 29166065Spjdexpect 0 mkdir ${n0} 0755 30166065Spjdexpect 0755 stat ${n0} mode 31166065Spjdexpect 0 chmod ${n0} 0753 32166065Spjdexpect 0753 stat ${n0} mode 33166065Spjdexpect 0 rmdir ${n0} 34166065Spjd 35166065Spjdexpect 0 mkfifo ${n0} 0644 36166065Spjdexpect 0644 stat ${n0} mode 37166065Spjdexpect 0 chmod ${n0} 0310 38166065Spjdexpect 0310 stat ${n0} mode 39166065Spjdexpect 0 unlink ${n0} 40166065Spjd 41166065Spjdexpect 0 create ${n0} 0644 42166065Spjdexpect 0 symlink ${n0} ${n1} 43166065Spjdexpect 0644 stat ${n1} mode 44166065Spjdexpect 0 chmod ${n1} 0321 45166065Spjdexpect 0321 stat ${n1} mode 46166065Spjdexpect 0321 lstat ${n0} mode 47166065Spjdexpect 0 unlink ${n0} 48166065Spjdexpect 0 unlink ${n1} 49166065Spjd 50166065Spjdif supported lchmod; then 51166065Spjd expect 0 create ${n0} 0644 52166065Spjd expect 0 symlink ${n0} ${n1} 53166065Spjd expect 0644 stat ${n1} mode 54166065Spjd expect 0 lchmod ${n1} 0321 55166065Spjd expect 0321 lstat ${n1} mode 56166065Spjd expect 0 lchmod ${n1} 0531 57166065Spjd expect 0531 lstat ${n1} mode 58166065Spjd expect 0644 stat ${n0} mode 59166065Spjd expect 0644 stat ${n1} mode 60166065Spjd expect 0 unlink ${n0} 61166065Spjd expect 0 unlink ${n1} 62166065Spjdfi 63166065Spjd 64166065Spjd# successful chmod(2) updates ctime. 65166065Spjdexpect 0 create ${n0} 0644 66166065Spjdctime1=`${fstest} stat ${n0} ctime` 67166065Spjdsleep 1 68166065Spjdexpect 0 chmod ${n0} 0111 69166065Spjdctime2=`${fstest} stat ${n0} ctime` 70166065Spjdtest_check $ctime1 -lt $ctime2 71166065Spjdexpect 0 unlink ${n0} 72166065Spjd 73166065Spjdexpect 0 mkdir ${n0} 0755 74166065Spjdctime1=`${fstest} stat ${n0} ctime` 75166065Spjdsleep 1 76166065Spjdexpect 0 chmod ${n0} 0753 77166065Spjdctime2=`${fstest} stat ${n0} ctime` 78166065Spjdtest_check $ctime1 -lt $ctime2 79166065Spjdexpect 0 rmdir ${n0} 80166065Spjd 81166065Spjdexpect 0 mkfifo ${n0} 0644 82166065Spjdctime1=`${fstest} stat ${n0} ctime` 83166065Spjdsleep 1 84166065Spjdexpect 0 chmod ${n0} 0310 85166065Spjdctime2=`${fstest} stat ${n0} ctime` 86166065Spjdtest_check $ctime1 -lt $ctime2 87166065Spjdexpect 0 unlink ${n0} 88166065Spjd 89166065Spjdif supported lchmod; then 90166065Spjd expect 0 symlink ${n1} ${n0} 91166065Spjd ctime1=`${fstest} lstat ${n0} ctime` 92166065Spjd sleep 1 93166065Spjd expect 0 lchmod ${n0} 0321 94166065Spjd ctime2=`${fstest} lstat ${n0} ctime` 95166065Spjd test_check $ctime1 -lt $ctime2 96166065Spjd expect 0 unlink ${n0} 97166065Spjdfi 98166065Spjd 99166065Spjd# unsuccessful chmod(2) does not update ctime. 100166065Spjdexpect 0 create ${n0} 0644 101166065Spjdctime1=`${fstest} stat ${n0} ctime` 102166065Spjdsleep 1 103166065Spjdexpect EPERM -u 65534 chmod ${n0} 0111 104166065Spjdctime2=`${fstest} stat ${n0} ctime` 105166065Spjdtest_check $ctime1 -eq $ctime2 106166065Spjdexpect 0 unlink ${n0} 107166065Spjd 108166065Spjdexpect 0 mkdir ${n0} 0755 109166065Spjdctime1=`${fstest} stat ${n0} ctime` 110166065Spjdsleep 1 111166065Spjdexpect EPERM -u 65534 chmod ${n0} 0753 112166065Spjdctime2=`${fstest} stat ${n0} ctime` 113166065Spjdtest_check $ctime1 -eq $ctime2 114166065Spjdexpect 0 rmdir ${n0} 115166065Spjd 116166065Spjdexpect 0 mkfifo ${n0} 0644 117166065Spjdctime1=`${fstest} stat ${n0} ctime` 118166065Spjdsleep 1 119166065Spjdexpect EPERM -u 65534 chmod ${n0} 0310 120166065Spjdctime2=`${fstest} stat ${n0} ctime` 121166065Spjdtest_check $ctime1 -eq $ctime2 122166065Spjdexpect 0 unlink ${n0} 123166065Spjd 124166065Spjdif supported lchmod; then 125166065Spjd expect 0 symlink ${n1} ${n0} 126166065Spjd ctime1=`${fstest} lstat ${n0} ctime` 127166065Spjd sleep 1 128166065Spjd expect EPERM -u 65534 lchmod ${n0} 0321 129166065Spjd ctime2=`${fstest} lstat ${n0} ctime` 130166065Spjd test_check $ctime1 -eq $ctime2 131166065Spjd expect 0 unlink ${n0} 132166065Spjdfi 133166065Spjd 134166065Spjd# POSIX: If the calling process does not have appropriate privileges, and if 135166065Spjd# the group ID of the file does not match the effective group ID or one of the 136166065Spjd# supplementary group IDs and if the file is a regular file, bit S_ISGID 137166065Spjd# (set-group-ID on execution) in the file's mode shall be cleared upon 138166065Spjd# successful return from chmod(). 139166065Spjd 140166065Spjdexpect 0 create ${n0} 0755 141166065Spjdexpect 0 chown ${n0} 65535 65535 142166065Spjdexpect 0 -u 65535 -g 65535 chmod ${n0} 02755 143166065Spjdexpect 02755 stat ${n0} mode 144166065Spjdexpect 0 -u 65535 -g 65535 chmod ${n0} 0755 145166065Spjdexpect 0755 stat ${n0} mode 146166065Spjd 147166065Spjd# Unfortunately FreeBSD doesn't clear set-gid bit, but returns EPERM instead. 148166065Spjdcase "${os}:${fs}" in 149166065SpjdFreeBSD:UFS) 150166065Spjd expect EPERM -u 65535 -g 65534 chmod ${n0} 02755 151166065Spjd expect 0755 stat ${n0} mode 152166065Spjd ;; 153166065Spjd*) 154166065Spjd expect 0 -u 65535 -g 65534 chmod ${n0} 02755 155166065Spjd expect 0755 stat ${n0} mode 156166065Spjd ;; 157166065Spjdesac 158166065Spjdexpect 0 unlink ${n0} 159166065Spjd 160166065Spjdcd ${cdir} 161166065Spjdexpect 0 rmdir ${n2} 162