aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libdiskfs/dir-lookup.c3
-rw-r--r--libnetfs/dir-lookup.c2
2 files changed, 3 insertions, 2 deletions
diff --git a/libdiskfs/dir-lookup.c b/libdiskfs/dir-lookup.c
index 8df81cfa..76b9cb54 100644
--- a/libdiskfs/dir-lookup.c
+++ b/libdiskfs/dir-lookup.c
@@ -56,6 +56,7 @@ diskfs_S_dir_lookup (struct protid *dircred,
int type;
struct protid *newpi = 0;
struct peropen *newpo = 0;
+ int orig_flags = flags;
if (!dircred)
return EOPNOTSUPP;
@@ -447,7 +448,7 @@ diskfs_S_dir_lookup (struct protid *dircred,
gotit:
type = np->dn_stat.st_mode & S_IFMT;
- if (mustbedir && type != S_IFDIR)
+ if ((mustbedir || orig_flags & O_DIRECTORY) && type != S_IFDIR)
{
err = ENOTDIR;
goto out;
diff --git a/libnetfs/dir-lookup.c b/libnetfs/dir-lookup.c
index d77feac8..23cc1fe1 100644
--- a/libnetfs/dir-lookup.c
+++ b/libnetfs/dir-lookup.c
@@ -410,7 +410,7 @@ netfs_S_dir_lookup (struct protid *dircred,
/* At this point, NP is the node to return. */
gotit:
- if (mustbedir)
+ if (mustbedir || (flags & O_DIRECTORY))
{
err = netfs_validate_stat (np, dircred->user);
if (err)