2007-05-10 09:40:12 +00:00
|
|
|
From: Andreas Gruenbacher <agruen@suse.de>
|
2007-05-12 19:07:40 +00:00
|
|
|
Subject: Set the LOOKUP_CONTINUE flag when checking parent permissions
|
2007-05-10 09:40:12 +00:00
|
|
|
|
|
|
|
This allows permission functions to tell between parent and leaf checks.
|
|
|
|
|
|
|
|
Signed-off-by: Andreas Gruenbacher <agruen@suse.de>
|
|
|
|
|
2007-05-12 18:28:28 +00:00
|
|
|
---
|
|
|
|
fs/namei.c | 6 ++++++
|
|
|
|
1 file changed, 6 insertions(+)
|
|
|
|
|
2007-05-09 13:34:01 +00:00
|
|
|
--- a/fs/namei.c
|
|
|
|
+++ b/fs/namei.c
|
2007-05-12 18:28:28 +00:00
|
|
|
@@ -1409,6 +1409,10 @@ static int may_delete(struct inode *dir,
|
2007-05-09 13:34:01 +00:00
|
|
|
BUG_ON(victim->d_parent->d_inode != dir);
|
|
|
|
audit_inode_child(victim->d_name.name, victim->d_inode, dir);
|
|
|
|
|
|
|
|
+#if 0
|
|
|
|
+ if (nd)
|
|
|
|
+ nd->flags |= LOOKUP_CONTINUE;
|
|
|
|
+#endif
|
|
|
|
error = permission(dir,MAY_WRITE | MAY_EXEC, NULL);
|
|
|
|
if (error)
|
|
|
|
return error;
|
2007-05-12 18:28:28 +00:00
|
|
|
@@ -1446,6 +1450,8 @@ static inline int may_create(struct inod
|
2007-05-09 13:34:01 +00:00
|
|
|
return -EEXIST;
|
|
|
|
if (IS_DEADDIR(dir))
|
|
|
|
return -ENOENT;
|
|
|
|
+ if (nd)
|
|
|
|
+ nd->flags |= LOOKUP_CONTINUE;
|
|
|
|
return permission(dir,MAY_WRITE | MAY_EXEC, nd);
|
|
|
|
}
|
|
|
|
|