On Tue, Nov 26, 2019 at 10:20:37AM -0700, Bob Beck wrote:
> On Thu, Nov 21, 2019 at 3:53 AM Raimo Niskanen <[email protected]> 
> wrote:
> >
> > On OpenBSD 6.6 amd64 patch 006, i get peculiar results from readlink(1)
> > with arguments -f with a symlink to /
> >
> > $ readlink -f /
> > /
> >
> > $ ln -s / test; readlink -f test; rm test
> > readlink: test: Is a directory
> >
> > $ readlink -f /.
> > /
> >
> > $ ln -s /. test; readlink -f test; rm test
> > /
> >
> > I have tried with many arguments to readlink -f and the result seems to be
> > the same for a direct argument as for a symbolic link with the same
> > content.  Except for a symbolic link to exactly /
> >
> > Bug|Glitch|Feature?
> 
> It's a bug -> which I just fixed.
> 
> Details: So what happened is we used to have a non-posix realpath behavior
> that would return a realpath to a nonexistant file -> as such I was
> calling namei
> in the kernel with LOCKPARENT (unless it was / where you can't do this)
> 
> the problem I had was the symlink to '/' was still requesting LOCKPARENT with
> no "parent" to lock -> and failing with EISDIR as you noticed.
> 
> The fix is that we just no longer need this dance, and we don't need
> to LOCKPARENT
> or not... So it now works with what I committed yesterday

Superb!

> 
> 
> 
> 
> >
> > I also noticed that if readlink -f is told to traverse above / it this that
> > is ok.  Would that merit an error instead?
> >
> > $ readlink -f /var
> > /var
> > $ readlink -f /../var
> > /var
> > $ readlink -f /../../var
> > /var
> 
> This isn't a bug, it's how it's supposed to work.   ".." from / is
> actually still / .
> if you have a look at /usr/src/regress/sys/kern/realpath you'll see
> the regression
> tests explicitly test for this case working.

Ok.  Good to know.  I did not know where to look for the "truth".

> 
> 
> >
> > Best regards
> > --
> >
> > / Raimo Niskanen, Erlang/OTP, Ericsson AB
> >

-- 

/ Raimo Niskanen, Erlang/OTP, Ericsson AB

Reply via email to