mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-11-01 15:08:21 +00:00
vfs: access check on vfs_lookup
This commit is contained in:
@@ -523,6 +523,10 @@ int vfs_lookup(vnode_t **result, vnode_t *start, char *path, char *lastcomp, int
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
error = VOP_ACCESS(current, V_ACCESS_SEARCH, getcred());
|
||||||
|
if (error)
|
||||||
|
break;
|
||||||
|
|
||||||
error = VOP_LOOKUP(current, component, &next, getcred());
|
error = VOP_LOOKUP(current, component, &next, getcred());
|
||||||
if (error)
|
if (error)
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -38,6 +38,7 @@
|
|||||||
#define V_ATTR_MODE_SGID 02000
|
#define V_ATTR_MODE_SGID 02000
|
||||||
#define V_ATTR_MODE_SUID 04000
|
#define V_ATTR_MODE_SUID 04000
|
||||||
|
|
||||||
|
#define V_ACCESS_SEARCH 1
|
||||||
#define V_ACCESS_EXECUTE 1
|
#define V_ACCESS_EXECUTE 1
|
||||||
#define V_ACCESS_WRITE 2
|
#define V_ACCESS_WRITE 2
|
||||||
#define V_ACCESS_READ 4
|
#define V_ACCESS_READ 4
|
||||||
|
|||||||
@@ -46,7 +46,9 @@ static int filesystem(cred_t *cred, int actions, void *arg0, void *arg1, void *a
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (actions & AUTH_ACTIONS_FILESYSTEM_EXECUTE) {
|
if (actions & AUTH_ACTIONS_FILESYSTEM_EXECUTE) {
|
||||||
if ((attr.mode & (V_ATTR_MODE_USER_EXECUTE | V_ATTR_MODE_GROUP_EXECUTE | V_ATTR_MODE_OTHERS_EXECUTE)) && CRED_IS_ESU(cred))
|
if (vnode->type == V_TYPE_DIR && CRED_IS_ESU(cred))
|
||||||
|
weight += 1;
|
||||||
|
else if ((attr.mode & (V_ATTR_MODE_USER_EXECUTE | V_ATTR_MODE_GROUP_EXECUTE | V_ATTR_MODE_OTHERS_EXECUTE)) && CRED_IS_ESU(cred))
|
||||||
weight += 1;
|
weight += 1;
|
||||||
else if (attr.uid == cred->euid && (attr.mode & V_ATTR_MODE_USER_EXECUTE))
|
else if (attr.uid == cred->euid && (attr.mode & V_ATTR_MODE_USER_EXECUTE))
|
||||||
weight += 1;
|
weight += 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user