Message159990
| Author |
neologix |
| Recipients |
amcnabb, hynek, neologix, r.david.murray |
| Date |
2012年05月05日.13:27:29 |
| SpamBayes Score |
-1.0 |
| Marked as misclassified |
Yes |
| Message-id |
<CAH_1eM2jJ1owd99p7SSaOK+e82sw6PQVdObbP6kNE9C8iVc4pA@mail.gmail.com> |
| In-reply-to |
<1336217844.67.0.859101600566.issue14702@psf.upfronthosting.co.za> |
| Content |
> Charles, I don't think you can blame autofs here. The problem at hand is that makedirs() never checks whether the directory exists (that would trigger the mount too I presume).
Yes, it does. Have a look at line 148:
"""
if head and tail and not path.exists(head):
"""
> Instead, it tries a mkdir and looks if it gets an EEXIST.
Actually, EEXIST is just caught to cope with race conditions (i.e. the
directory got created in between, TOCTTOU race).
> If you try that approach in this case where /net is non-writable and /net/prodigy appears only on demand, it fails with an EPERM instead.
Actually, no.
makedirs() does a recursive depth-first traversal:
makedirs('/net/prodigy/foo') will actually do something like:
"""
stat('/net/prodigy/foo') == ENOENT
stat('/net/prodigy') == ENONENT
mkdir('/net/prodigy') == EPERM
"""
The NFS mount should appear upon the first - or second - stat() call,
before mkdir().
But I'd like to be sure about that, that's why I think an strace()
output would be useful ;-) |
|