global: combine all permissions of the object tree

To get the permissions of an object, combine the permissions
of the object and all the parent nodes up to the root.

This is necessary to enforce that a client can never see and
object id (in this case the parent id) it is not allowed to see.
This commit is contained in:
Wim Taymans 2019-05-13 15:46:32 +02:00
parent d7acbb222e
commit 83bc033837

View file

@ -38,9 +38,15 @@ uint32_t pw_global_get_permissions(struct pw_global *global, struct pw_client *c
{
uint32_t perms = PW_PERM_RWX;
if (client->permission_func != NULL)
perms &= client->permission_func(global, client, client->permission_data);
if (client->permission_func == NULL)
return perms;
perms = client->permission_func(global, client, client->permission_data);
while (global != global->parent) {
global = global->parent;
perms &= client->permission_func(global, client, client->permission_data);
}
return perms;
}