process_rename assumes hard links?

Corinna Vinschen vinschen at redhat.com
Thu Oct 11 00:39:48 EST 2012


On Oct 10 11:03, Gert Doering wrote:
> Hi,
> 
> On Wed, Oct 10, 2012 at 10:10:43AM +0200, Miguel Oliveira wrote:
> > Bottom line our filesystem does not support hard links and I think the problem is that process_rename assumes link(old path,newpath) will always return
> > one. Shouldn't this situation, i.e., link returning a symlink, be contemplated in the code? 
> 
> I think that a link() implementation that creates a symlink is fundamentally
> broken and needs to die.
> 
> Programs can reasonably expect that a link() call that returns success
> has created hard links, and it is *safe* to then call unlink(old path) -
> which is standard practice to atomically test-and-set lock files, for
> example.
> 
> If you return a symlink instead, you have now made an unsuspecting program
> destroy its lock file, and created a dangling symlink instead.
> 
> If link() cannot create a hardlink, it must return an error code
> (EOPNOTSUPP is what the FreeBSD manpage documents for this case).

... or EPERM on Linux and Cygwin.

> (Of course this is outside the scope for the question you asked, but I
> know that a filesystem with the semantics you have described will cause
> problems for *lots* of programs)

Indeed.


Corinna

-- 
Corinna Vinschen
Cygwin Project Co-Leader
Red Hat


More information about the openssh-unix-dev mailing list