Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 23 Aug 2012 21:15:17 -0400
From:      Trent Nelson <trent@snakebite.org>
To:        <freebsd-fs@freebsd.org>
Subject:   chmod -h 000x against symlink has bizarre results on ZFS
Message-ID:  <20120824011517.GJ42732@snakebite.org>

next in thread | raw e-mail | index | archive | help
--3V7upXqbjpZ4EhLz
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline

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.

--3V7upXqbjpZ4EhLz--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120824011517.GJ42732>