1#!/bin/sh 2# $FreeBSD: src/tools/regression/fstest/tests/chmod/00.t,v 1.2 2007/01/25 20:48:14 pjd Exp $ 3 4desc="chmod changes permission" 5 6n0=`namegen` 7n1=`namegen` 8n2=`namegen` 9 10expect 0 mkdir ${n2} 0755 11cdir=`pwd` 12cd ${n2} 13 14expect 0 create ${n0} 0644 15expect 0644 stat ${n0} mode 16expect 0 chmod ${n0} 0111 17expect 0111 stat ${n0} mode 18expect 0 unlink ${n0} 19 20expect 0 mkdir ${n0} 0755 21expect 0755 stat ${n0} mode 22expect 0 chmod ${n0} 0753 23expect 0753 stat ${n0} mode 24expect 0 rmdir ${n0} 25 26expect 0 mkfifo ${n0} 0644 27expect 0644 stat ${n0} mode 28expect 0 chmod ${n0} 0310 29expect 0310 stat ${n0} mode 30expect 0 unlink ${n0} 31 32expect 0 create ${n0} 0644 33expect 0 symlink ${n0} ${n1} 34expect 0644 stat ${n1} mode 35expect 0 chmod ${n1} 0321 36expect 0321 stat ${n1} mode 37expect 0321 lstat ${n0} mode 38expect 0 unlink ${n0} 39expect 0 unlink ${n1} 40 41# successful chmod(2) updates ctime. 42expect 0 create ${n0} 0644 43ctime1=`${FSTEST} stat ${n0} ctime` 44sleep 1 45expect 0 chmod ${n0} 0111 46ctime2=`${FSTEST} stat ${n0} ctime` 47test_check $ctime1 -lt $ctime2 48expect 0 unlink ${n0} 49 50expect 0 mkdir ${n0} 0755 51ctime1=`${FSTEST} stat ${n0} ctime` 52sleep 1 53expect 0 chmod ${n0} 0753 54ctime2=`${FSTEST} stat ${n0} ctime` 55test_check $ctime1 -lt $ctime2 56expect 0 rmdir ${n0} 57 58expect 0 mkfifo ${n0} 0644 59ctime1=`${FSTEST} stat ${n0} ctime` 60sleep 1 61expect 0 chmod ${n0} 0310 62ctime2=`${FSTEST} stat ${n0} ctime` 63test_check $ctime1 -lt $ctime2 64expect 0 unlink ${n0} 65 66# unsuccessful chmod(2) does not update ctime. 67expect 0 create ${n0} 0644 68ctime1=`${FSTEST} stat ${n0} ctime` 69sleep 1 70expect EPERM -u 65534 chmod ${n0} 0111 71ctime2=`${FSTEST} stat ${n0} ctime` 72test_check $ctime1 -eq $ctime2 73expect 0 unlink ${n0} 74 75expect 0 mkdir ${n0} 0755 76ctime1=`${FSTEST} stat ${n0} ctime` 77sleep 1 78expect EPERM -u 65534 chmod ${n0} 0753 79ctime2=`${FSTEST} stat ${n0} ctime` 80test_check $ctime1 -eq $ctime2 81expect 0 rmdir ${n0} 82 83expect 0 mkfifo ${n0} 0644 84ctime1=`${FSTEST} stat ${n0} ctime` 85sleep 1 86expect EPERM -u 65534 chmod ${n0} 0310 87ctime2=`${FSTEST} stat ${n0} ctime` 88test_check $ctime1 -eq $ctime2 89expect 0 unlink ${n0} 90 91# POSIX: If the calling process does not have appropriate privileges, and if 92# the group ID of the file does not match the effective group ID or one of the 93# supplementary group IDs and if the file is a regular file, bit S_ISGID 94# (set-group-ID on execution) in the file's mode shall be cleared upon 95# successful return from chmod(). 96 97expect 0 create ${n0} 0755 98expect 0 chown ${n0} 65535 65535 99expect 0 -u 65535 -g 65535 chmod ${n0} 02755 100expect 02755 stat ${n0} mode 101expect 0 -u 65535 -g 65535 chmod ${n0} 0755 102expect 0755 stat ${n0} mode 103 104# XXX 105# Unfortunately FreeBSD doesn't clear set-gid bit, but returns EPERM instead. 106#case "${os}" in 107#FreeBSD) 108 expect EPERM -u 65535 -g 65534 chmod ${n0} 02755 109 expect 0755 stat ${n0} mode 110# ;; 111#*) 112# expect 0 -u 65535 -g 65534 chmod ${n0} 02755 113# expect 0755 stat ${n0} mode 114# ;; 115#esac 116expect 0 unlink ${n0} 117 118cd ${cdir} 119expect 0 rmdir ${n2} 120