patch to realpath(3) to make it DTRT(IMO) with variant symlinks

Joerg Sonnenberger joerg at britannica.bec.de
Fri Feb 6 14:43:45 PST 2004


On Thu, Feb 05, 2004 at 01:19:15AM -0800, Chris Pressey wrote:
> OK, something more substantial: I discovered that realpath(3) (and
> consequently realpath(1) too) do not act as one probably would expect
> when an element of the path is a variant symlink.
> 
> The attached patch is one way to correct realpath's behaviour.  It is
> quite probably not the best way, but it seems to work (it's been
> modestly tested.)  Other ways to address it might be:
> 
> - just don't make realpath resolve variant symlinks
> 
> I think that leaves the spirit (if not the letter) of realpath broken.
> Existing scripts expect realpath(1) to return a real genuine filename.
> 
> - make readlink(2) resolve variant symlinks instead

IMO this is the correct way.

> It's not uncommon for programs to 'abuse' the symlink target, never
> intending for it to point to a real file (e.g. malloc, cvsupd, the
> webserver 'fnord', ...) and while I'm not aware of any that rely on a
> ${}-like syntax in the symlink, it seems best to give them exactly what
> they're asking for: the contents of the symlink, verbatim, regardless
> of what it 'means'.

Those symlinks should be resolved by realpath(3), otherwise the
program is broken.

> - make varsymreplace a syscall
> 
> Too rich for my blood :)  Could be better for consistency though (e.g.
> my patch doesn't check vfs.varsym_enable; it probably should.)

I don't like that one too. If Matt doesn't cry out loud, I'll change
the kernel source to allow them to share the implementation.

Joerg

> -Chris





More information about the Submit mailing list