Tests for extended attributes on ext2/ext3 file systems. The initial size checks and the file size checks are ext2/ext3 specific. The other setfattr/getfattr operations are designed to cover all special cases in the ext27ext3 kernel patches, but they should work on other filesystems as well. Execute this test using the `run' script in this directory: run attr.text Try various valid and invalid names $ 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 -n user.n -v value f $ rm f Size checks, for an ext2/ext3 file system with a block size of 4K $ touch f $ setfattr -n user.name -v 4040+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ f $ setfattr -n user.name -v 4041++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ f > setfattr: f: No space left on device $ 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 > $ getfattr -d -e text f > # file: f > user.name="º¾" > user.name2="Þ­¾ï" > user.name3="ÞúÎ" > $ 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 $ ls -s f g h > 4 f > 4 g > 4 h $ setfattr -n user.name -v value f $ ls -s f g h > 4 f > 4 g > 4 h $ getfattr -d f g h > # file: f > user.name="value" > user.novalue > > # file: g > user.novalue > > # file: h > user.novalue > $ setfattr -n user.name -v value g $ ls -s f g h > 4 f > 4 g > 4 h $ setfattr -x user.novalue h $ ls -s f g h > 4 f > 4 g > 0 h $ getfattr -d f g h > # file: f > user.name="value" > user.novalue > > # file: g > user.name="value" > user.novalue > $ setfattr -n user.name -v other-value g $ setfattr -n user.name -v value g $ setfattr -x user.name f g $ setfattr -x user.novalue f g $ ls -s f g h > 0 f > 0 g > 0 h $ 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 > # file: f > user.filename="l" > > # file: l > user.filename="l" > $ rm f Tests for file name that contain special characters $ touch "f " $ setfattr -n user.name -v value "f " $ getfattr -d "f " > # file: f\040 > 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\\007" -v value f $ getfattr f > # file: f > user.sp\040ace > user.special\007 > $ getfattr -d f > # file: f > user.sp\040ace="value" > user.special\007="value" > $ setfattr -x "user.sp ace" f $ setfattr -n "user.sp ace" -v value f $ setfattr -x "user.sp\\040ace" f $ setfattr -x "user.special\\007" f $ rm f Some POSIX ACL tests... $ touch f