chmod -h 000x against symlink has bizarre results on ZFS
Trent Nelson
trent at snakebite.org
Fri Aug 24 01:15:32 UTC 2012
Hi folks,
I recently set up a FreeBSD build slave for the Python project,
and noticed some symlink tests were failing in a very strange way
(http://bugs.python.org/issue15748).
When chmod -h 000x is done against a file/link of length less than
24, the target seems to get padded out to 24 with 0s. If it's
longer than 24, it'll get truncated. 'x' can be 7, 6, 5 or 4 and
the behaviour is the same.
Here's the output from the attached test_readlink.sh, also available
at http://bugs.python.org/file26979/test_readlink.sh:
% ./test_readlink.sh
****** TEST 1: link/target length less than 24 ******
before chmod -h 0007:
-rw-r----- /tmp/lt24
lrwxr-x--- /tmp/lt24.lnk->/tmp/lt24
python os.readlink(/tmp/lt24.lnk):
'/tmp/lt24'
after chmod -h 0007:
-rw-r----- /tmp/lt24
l------rwx /tmp/lt24.lnk->/tmp/lt24
python os.readlink(/tmp/lt24.lnk):
'/tmp/lt24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
target is padded out with NULLs to 24
****** TEST 2: link/target length longer than 24 ******
before chmod -h 0007:
-rw-r----- /tmp/definitelywaylongerthantwentyfour
lrwxr-x---
/tmp/definitelywaylongerthantwentyfour.lnk->/tmp/definitelywaylongerthantwentyfour
python os.readlink(/tmp/definitelywaylongerthantwentyfour.lnk):
'/tmp/definitelywaylongerthantwentyfour'
after chmod -h 0007:
-rw-r----- /tmp/definitelywaylongerthantwentyfour
l------rwx
/tmp/definitelywaylongerthantwentyfour.lnk->/tmp/definitelywaylonger
python os.readlink(/tmp/definitelywaylongerthantwentyfour.lnk):
'/tmp/definitelywaylonger'
^^^^^^^^^^^^^^^^^^^^^^^^
target gets truncated to 24
****** Other modes... ******
after chmod -h 0006:
l------rw-
/tmp/definitelywaylongerthantwentyfour.lnk->/tmp/definitelywaylonger
after chmod -h 0005:
l------r-x
/tmp/definitelywaylongerthantwentyfour.lnk->/tmp/definitelywaylonger
after chmod -h 0004:
l------r--
/tmp/definitelywaylongerthantwentyfour.lnk->/tmp/definitelywaylonger
after chmod -h 0000:
l---------
/tmp/definitelywaylongerthantwentyfour.lnk->/tmp/definitelywaylongerthantwentyfour
This only happens on ZFS. I'm on v28, don't have any v15s lying
around.
I'm perplexed. Can others reproduce it?
Regards,
Trent.
More information about the freebsd-fs
mailing list