Tests for extended attributes on file systems. Execute this test using the `run' script in this directory: run attr.text Try various valid and invalid names $ mkdir d $ cd d $ touch f $ setfattr -n user -v value f > setfattr: f: Operation not supported $ setfattr -n user. -v value f > setfattr: f: Invalid argument $ setfattr -n user.name f $ getfattr -d f > # file: f > user.name > $ setfattr -x user.name f $ sh -c 'getfattr -n user.name f && echo zero exit code' > f: user.name: No such attribute $ setfattr -n user.n -v value f $ rm f Editing values $ touch f $ setfattr -n user.vvvvvvvvvvvv -v vvvvvvvvvvvv f $ setfattr -n user.wwwwwwww -v wwwwwwww f $ setfattr -n user.xxxx -v xxxx f $ getfattr -d f > # file: f > user.vvvvvvvvvvvv="vvvvvvvvvvvv" > user.wwwwwwww="wwwwwwww" > user.xxxx="xxxx" > $ setfattr -n user.wwwwwwww -v wwww f $ getfattr -d f > # file: f > user.vvvvvvvvvvvv="vvvvvvvvvvvv" > user.wwwwwwww="wwww" > user.xxxx="xxxx" > $ setfattr -n user.xxxx -v xxxxxxxx f $ getfattr -d f > # file: f > user.vvvvvvvvvvvv="vvvvvvvvvvvv" > user.wwwwwwww="wwww" > user.xxxx="xxxxxxxx" > $ rm f Value encodings $ touch f $ setfattr -n user.name -v 0xbabe f $ setfattr -n user.name2 -v 0s3q2+7w== f $ setfattr -n user.name3 -v 0xdeface f $ getfattr -d -e hex f > # file: f > user.name=0xbabe > user.name2=0xdeadbeef > user.name3=0xdeface > $ getfattr -d -e base64 f > # file: f > user.name=0sur4= > user.name2=0s3q2+7w== > user.name3=0s3vrO > $ rm f Everything with one file $ touch f $ setfattr -n user.novalue f $ setfattr -n user.somename -v somevalue f $ setfattr -n user.somename -v somevalue f $ setfattr -n user.longername -v longervalue f $ setfattr -n user.short -v value f $ setfattr -n user.novalue-yet f $ ls -s f > 4 f $ getfattr -d f > # file: f > user.longername="longervalue" > user.novalue > user.novalue-yet > user.short="value" > user.somename="somevalue" > $ setfattr -n user.novalue-yet -v avalue-now f $ getfattr -d f > # file: f > user.longername="longervalue" > user.novalue > user.novalue-yet="avalue-now" > user.short="value" > user.somename="somevalue" > $ setfattr -x user.noname f > setfattr: f: No such attribute $ setfattr -x user.somename f $ setfattr -x user.short f $ getfattr -d f > # file: f > user.longername="longervalue" > user.novalue > user.novalue-yet="avalue-now" > $ setfattr -x user.longername f $ setfattr -x user.novalue f $ setfattr -x user.novalue-yet f $ getfattr -d f $ ls -s f > 0 f $ rm f Test extended attribute block sharing $ touch f g h $ setfattr -n user.novalue f g h $ getfattr f g h | ../sort-getfattr-output > # file: f > user.novalue > > # file: g > user.novalue > > # file: h > user.novalue > $ setfattr -n user.name -v value f $ getfattr f g h | ../sort-getfattr-output > # file: f > user.name > user.novalue > > # file: g > user.novalue > > # file: h > user.novalue > $ getfattr -d f g h | ../sort-getfattr-output > # file: f > user.name="value" > user.novalue > > # file: g > user.novalue > > # file: h > user.novalue > $ setfattr -n user.name -v value g $ getfattr f g h | ../sort-getfattr-output > # file: f > user.name > user.novalue > > # file: g > user.name > user.novalue > > # file: h > user.novalue > $ setfattr -x user.novalue h $ getfattr f g h | ../sort-getfattr-output > # file: f > user.name > user.novalue > > # file: g > user.name > user.novalue > $ rm f g h Attributes of symlinks vs. the files pointed to $ touch f $ ln -s f l $ setfattr -n user.filename -v f l $ setfattr -n user.filename -v l l $ setfattr -h -n user.filename -v l l > setfattr: l: Operation not permitted $ getfattr -d f l | ../sort-getfattr-output > # file: f > user.filename="l" > > # file: l > user.filename="l" > $ rm f Attributes of symlinks vs. the files pointed to in a directory $ mkdir src $ touch src/target $ setfattr -n user.color -v blue src/target $ ln -s src symlink $ getfattr -n user.color -h symlink 2>/dev/null Tests for file name that contain special characters $ touch "f " $ setfattr -n user.name -v value "f " $ getfattr -d "f " > # file: f > user.name="value" > $ rm "f " Tests for attribute names that contains special characters $ touch f $ setfattr -n "user.sp ace" -v value f $ setfattr -n "user.special " -v value f $ getfattr f > # file: f > user.sp ace > user.special > $ getfattr -d f > # file: f > user.sp ace="value" > user.special ="value" > $ setfattr -x "user.sp ace" f $ setfattr -n "user.sp ace" -v value f $ setfattr -x "user.sp ace" f $ setfattr -x "user.special " f $ rm f $ cd .. $ rm -rf d Tests for proper path recursion reported by Tony Ernst bnc#457660 $ mkdir -p 1/2/3 $ setfattr -n "user.9" 1 $ setfattr -n "user.a" 1 $ setfattr -n "user.9" 1/2 $ setfattr -n "user.a" 1/2 $ setfattr -n "user.9" 1/2/3 $ setfattr -n "user.a" 1/2/3 $ getfattr -h -L -R -m '.' -e hex 1 | grep -v selinux | ./sort-getfattr-output > # file: 1 > user.9 > user.a > > # file: 1/2 > user.9 > user.a > > # file: 1/2/3 > user.9 > user.a > $ getfattr -h -P -R -m '.' -e hex 1/2 | grep -v selinux | ./sort-getfattr-output > # file: 1/2 > user.9 > user.a > > # file: 1/2/3 > user.9 > user.a > $ rm -R 1 Test for proper recursion of directory structures with -L -P -R $ mkdir -p 1/sub $ mkdir 1/link $ touch 1/link/link-file $ touch 1/sub/sub-file $ ln -s `pwd`/1/link 1/sub/link $ setfattr -n "user.a" 1 $ setfattr -n "user.a" 1/link/link-file $ setfattr -n "user.a" 1/link $ setfattr -n "user.a" 1/sub/sub-file $ setfattr -n "user.a" 1/sub $ getfattr -P -R 1 | ./sort-getfattr-output > # file: 1 > user.a > > # file: 1/link > user.a > > # file: 1/link/link-file > user.a > > # file: 1/sub > user.a > > # file: 1/sub/link > user.a > > # file: 1/sub/sub-file > user.a > $ getfattr -R -P 1/sub | ./sort-getfattr-output > # file: 1/sub > user.a > > # file: 1/sub/link > user.a > > # file: 1/sub/sub-file > user.a > $ getfattr -L -R 1 | ./sort-getfattr-output > # file: 1 > user.a > > # file: 1/link > user.a > > # file: 1/link/link-file > user.a > > # file: 1/sub > user.a > > # file: 1/sub/link > user.a > > # file: 1/sub/link/link-file > user.a > > # file: 1/sub/sub-file > user.a > $ getfattr -R 1/sub/link | ./sort-getfattr-output > # file: 1/sub/link > user.a > > # file: 1/sub/link/link-file > user.a > $ getfattr -L -R 1/sub/link | ./sort-getfattr-output > # file: 1/sub/link > user.a > > # file: 1/sub/link/link-file > user.a > $ rm -R 1