1#!/bin/sh 2# $FreeBSD: src/tools/regression/fstest/tests/chflags/00.t,v 1.1 2007/01/17 01:42:08 pjd Exp $ 3 4desc="chflags changes flags" 5 6n0=`namegen` 7n1=`namegen` 8n2=`namegen` 9 10expect 0 mkdir ${n2} 0755 11cdir=`pwd` 12cd ${n2} 13 14expect 0 create ${n0} 0644 15expect none stat ${n0} flags 16expect 0 chflags ${n0} UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE,SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND 17expect UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE,SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND stat ${n0} flags 18expect 0 chflags ${n0} UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE 19expect UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE stat ${n0} flags 20expect 0 chflags ${n0} SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND 21expect SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND stat ${n0} flags 22expect 0 chflags ${n0} none 23expect none stat ${n0} flags 24expect 0 unlink ${n0} 25 26expect 0 mkdir ${n0} 0644 27expect none stat ${n0} flags 28expect 0 chflags ${n0} UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE,SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND 29expect UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE,SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND stat ${n0} flags 30expect 0 chflags ${n0} UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE 31expect UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE stat ${n0} flags 32expect 0 chflags ${n0} SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND 33expect SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND stat ${n0} flags 34expect 0 chflags ${n0} none 35expect none stat ${n0} flags 36expect 0 rmdir ${n0} 37 38expect 0 mkfifo ${n0} 0644 39expect none stat ${n0} flags 40expect 0 chflags ${n0} UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE,SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND 41expect UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE,SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND stat ${n0} flags 42expect 0 chflags ${n0} UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE 43expect UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE stat ${n0} flags 44expect 0 chflags ${n0} SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND 45expect SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND stat ${n0} flags 46expect 0 chflags ${n0} none 47expect none stat ${n0} flags 48expect 0 unlink ${n0} 49 50expect 0 create ${n0} 0644 51expect 0 symlink ${n0} ${n1} 52expect none stat ${n1} flags 53expect none lstat ${n1} flags 54expect 0 chflags ${n1} UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE,SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND 55expect UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE,SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND stat ${n1} flags 56expect none lstat ${n1} flags 57expect 0 chflags ${n1} UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE 58expect UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE stat ${n1} flags 59expect none lstat ${n1} flags 60expect 0 chflags ${n1} SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND 61expect SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND stat ${n1} flags 62expect none lstat ${n1} flags 63expect 0 chflags ${n1} none 64expect none stat ${n1} flags 65expect none lstat ${n1} flags 66expect 0 unlink ${n1} 67expect 0 unlink ${n0} 68 69expect 0 create ${n0} 0644 70expect 0 symlink ${n0} ${n1} 71expect none stat ${n1} flags 72expect none lstat ${n1} flags 73expect 0 lchflags ${n1} UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE,SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND 74expect UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE,SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND lstat ${n1} flags 75expect none stat ${n1} flags 76expect 0 lchflags ${n1} UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE 77expect UF_NODUMP,UF_IMMUTABLE,UF_APPEND,UF_OPAQUE lstat ${n1} flags 78expect none stat ${n1} flags 79expect 0 lchflags ${n1} SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND 80expect SF_ARCHIVED,SF_IMMUTABLE,SF_APPEND lstat ${n1} flags 81expect none stat ${n1} flags 82expect 0 lchflags ${n1} none 83expect none lstat ${n1} flags 84expect none stat ${n1} flags 85expect 0 unlink ${n1} 86expect 0 unlink ${n0} 87 88# successful chflags(2) updates ctime. 89expect 0 create ${n0} 0644 90for flag in UF_NODUMP UF_IMMUTABLE UF_APPEND UF_OPAQUE SF_ARCHIVED SF_IMMUTABLE SF_APPEND none; do 91 ctime1=`${FSTEST} stat ${n0} ctime` 92 sleep 1 93 expect 0 chflags ${n0} ${flag} 94 ctime2=`${FSTEST} stat ${n0} ctime` 95 test_check $ctime1 -lt $ctime2 96done 97expect 0 unlink ${n0} 98 99expect 0 mkdir ${n0} 0755 100for flag in UF_NODUMP UF_IMMUTABLE UF_APPEND UF_OPAQUE SF_ARCHIVED SF_IMMUTABLE SF_APPEND none; do 101 ctime1=`${FSTEST} stat ${n0} ctime` 102 sleep 1 103 expect 0 chflags ${n0} ${flag} 104 ctime2=`${FSTEST} stat ${n0} ctime` 105 test_check $ctime1 -lt $ctime2 106done 107expect 0 rmdir ${n0} 108 109expect 0 mkfifo ${n0} 0644 110for flag in UF_NODUMP UF_IMMUTABLE UF_APPEND UF_OPAQUE SF_ARCHIVED SF_IMMUTABLE SF_APPEND none; do 111 ctime1=`${FSTEST} stat ${n0} ctime` 112 sleep 1 113 expect 0 chflags ${n0} ${flag} 114 ctime2=`${FSTEST} stat ${n0} ctime` 115 test_check $ctime1 -lt $ctime2 116done 117expect 0 unlink ${n0} 118 119expect 0 symlink ${n1} ${n0} 120for flag in UF_NODUMP UF_IMMUTABLE UF_APPEND UF_OPAQUE SF_ARCHIVED SF_IMMUTABLE SF_APPEND none; do 121 ctime1=`${FSTEST} lstat ${n0} ctime` 122 sleep 1 123 expect 0 lchflags ${n0} ${flag} 124 ctime2=`${FSTEST} lstat ${n0} ctime` 125 test_check $ctime1 -lt $ctime2 126done 127expect 0 unlink ${n0} 128 129# unsuccessful chflags(2) does not update ctime. 130expect 0 create ${n0} 0644 131for flag in UF_IMMUTABLE SF_IMMUTABLE none; do 132 ctime1=`${FSTEST} stat ${n0} ctime` 133 sleep 1 134 expect EPERM -u 65534 chflags ${n0} ${flag} 135 ctime2=`${FSTEST} stat ${n0} ctime` 136 test_check $ctime1 -eq $ctime2 137done 138expect 0 unlink ${n0} 139 140expect 0 mkdir ${n0} 0755 141for flag in UF_IMMUTABLE SF_IMMUTABLE none; do 142 ctime1=`${FSTEST} stat ${n0} ctime` 143 sleep 1 144 expect EPERM -u 65534 chflags ${n0} ${flag} 145 ctime2=`${FSTEST} stat ${n0} ctime` 146 test_check $ctime1 -eq $ctime2 147done 148expect 0 rmdir ${n0} 149 150expect 0 mkfifo ${n0} 0644 151for flag in UF_IMMUTABLE SF_IMMUTABLE none; do 152 ctime1=`${FSTEST} stat ${n0} ctime` 153 sleep 1 154 expect EPERM -u 65534 chflags ${n0} ${flag} 155 ctime2=`${FSTEST} stat ${n0} ctime` 156 test_check $ctime1 -eq $ctime2 157done 158expect 0 unlink ${n0} 159 160expect 0 symlink ${n1} ${n0} 161for flag in UF_IMMUTABLE SF_IMMUTABLE none; do 162 ctime1=`${FSTEST} lstat ${n0} ctime` 163 sleep 1 164 expect EPERM -u 65534 lchflags ${n0} ${flag} 165 ctime2=`${FSTEST} lstat ${n0} ctime` 166 test_check $ctime1 -eq $ctime2 167done 168expect 0 unlink ${n0} 169 170cd ${cdir} 171expect 0 rmdir ${n2} 172