The last example is really worrysome! If you are trying to follow
UNIX conventions, "./bert" should refer to the same thing as "bert",
so it would refer to "/a/bert"! What does the library code actually
do? (I don't have it handy!)
Another question about this subject is resolution of "../" prefixes.
In the above example, what does "../foo" refer to? I'd hope "/foo".
Also, who is supposed to do the ".." resolution -- the client or the
server?
And what about "/../" in the middle of a path? Does
"/foo/bar/../bletch" always mean "/foo/bletch" (if "/foo/bar" were a
symbolic link to a directory, it won't on UNIX, meaning that a client
doing "../" stripping might wind up at a different place than a server
blindly following the path (which might be dangerous if there are more
"../" parts than allowed -- I don't know if servers allow this).
Finally, I believe there are (or were) some gateway servers on the net
that are confused about this themselves: when in /a/b and attempting
to generate a relative reference to c, they would end up referring to
/a/b/c instead of /a/c, or when attempting to refer one level up they
would point to /a/a instead of /a. (I seem to remember the CERN Emacs
Info gateway did this -- can't find where it is right now...)
--Guido van Rossum, CWI, Amsterdam <[email protected]>