mirror of
https://github.com/samba-team/samba.git
synced 2025-01-25 06:04:04 +03:00
CVE-2018-10919 security: Add more comments to the object-specific access checks
Reading the spec and then reading the code makes sense, but we could comment the code more so it makes sense on its own. BUG: https://bugzilla.samba.org/show_bug.cgi?id=13434 Signed-off-by: Tim Beale <timbeale@catalyst.net.nz> Reviewed-by: Andrew Bartlett <abartlet@samba.org> Reviewed-by: Gary Lockyer <gary@catalyst.net.nz>
This commit is contained in:
parent
2878c22070
commit
010d1f1810
@ -392,32 +392,46 @@ static NTSTATUS check_object_specific_access(struct security_ace *ace,
|
||||
|
||||
*grant_access = false;
|
||||
|
||||
/*
|
||||
* check only in case we have provided a tree,
|
||||
* the ACE has an object type and that type
|
||||
* is in the tree
|
||||
*/
|
||||
type = get_ace_object_type(ace);
|
||||
|
||||
/* if no tree was supplied, we can't do object-specific access checks */
|
||||
if (!tree) {
|
||||
return NT_STATUS_OK;
|
||||
}
|
||||
|
||||
/* Get the ObjectType GUID this ACE applies to */
|
||||
type = get_ace_object_type(ace);
|
||||
|
||||
/*
|
||||
* If the ACE doesn't have a type, then apply it to the whole tree, i.e.
|
||||
* treat 'OA' ACEs as 'A' and 'OD' as 'D'
|
||||
*/
|
||||
if (!type) {
|
||||
node = tree;
|
||||
} else {
|
||||
if (!(node = get_object_tree_by_GUID(tree, type))) {
|
||||
|
||||
/* skip it if the ACE's ObjectType GUID is not in the tree */
|
||||
node = get_object_tree_by_GUID(tree, type);
|
||||
if (!node) {
|
||||
return NT_STATUS_OK;
|
||||
}
|
||||
}
|
||||
|
||||
if (ace->type == SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT) {
|
||||
|
||||
/* apply the access rights to this node, and any children */
|
||||
object_tree_modify_access(node, ace->access_mask);
|
||||
|
||||
/*
|
||||
* Currently all nodes in the tree request the same access mask,
|
||||
* so we can use any node to check if processing this ACE now
|
||||
* means the requested access has been granted
|
||||
*/
|
||||
if (node->remaining_access == 0) {
|
||||
*grant_access = true;
|
||||
return NT_STATUS_OK;
|
||||
}
|
||||
} else {
|
||||
|
||||
/* this ACE denies access to the requested object/attribute */
|
||||
if (node->remaining_access & ace->access_mask){
|
||||
return NT_STATUS_ACCESS_DENIED;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user