summaryrefslogtreecommitdiff
path: root/trans
diff options
context:
space:
mode:
authorJustus Winter <4winter@informatik.uni-hamburg.de>2013-12-03 17:46:58 +0100
committerJustus Winter <4winter@informatik.uni-hamburg.de>2013-12-04 12:10:03 +0100
commitdf66588b0f6daf99573153cb384a676ced27f0b1 (patch)
tree1c48489d81c3497a425c38f8b4ae22a7d62fd77d /trans
parentc7030a9c0ac36cccb07ef562908b62c2ef9d8bb4 (diff)
trans: fix the creation of files in fakeroot
Previously, fakeroot failed to create files in certain circumstances, e. g. assuming /tmp is a tmpfs and /tmp/some_file does not exist: % cd /tmp && fakeroot-hurd /bin/sh -c ':>/tmp/some_file' /bin/sh: 1: cannot create /tmp/some_file: Is a directory Fix this by sanitizing the flags value not to contain O_WRITE if we're not at the last path component. * trans/fakeroot.c (netfs_S_dir_lookup): Strip O_WRITE from flags when looking up all but the last path component.
Diffstat (limited to 'trans')
-rw-r--r--trans/fakeroot.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/trans/fakeroot.c b/trans/fakeroot.c
index 679e4765..b6938dce 100644
--- a/trans/fakeroot.c
+++ b/trans/fakeroot.c
@@ -307,6 +307,10 @@ netfs_S_dir_lookup (struct protid *diruser,
/* We already know about this node. */
mach_port_deallocate (mach_task_self (), idport);
pthread_mutex_lock (&np->lock);
+ if (retry_name[0] != '\0')
+ /* This was not the last component, remove O_WRITE to
+ avoid opening directories with it. */
+ flags &= ~O_WRITE;
err = check_openmodes (np->nn, (flags & (O_RDWR|O_EXEC)), file);
if (!err)
netfs_nref (np);