mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-31 22:25:38 -04:00
permission: add some helpers
Add PW_PERM_ALL as a shortcut for all permissions Add PW_PERMISSION_FORMAT and PW_PERMISSION_ARGS to nicely format permissions.
This commit is contained in:
parent
f5e78196c4
commit
91d4806611
23 changed files with 58 additions and 61 deletions
|
|
@ -221,7 +221,7 @@ set_global_permissions(void *data, struct sm_object *object)
|
|||
|
||||
if (set_permission) {
|
||||
permissions[n_permissions++] =
|
||||
PW_PERMISSION_INIT(object->id, allowed ? PW_PERM_RWX : 0);
|
||||
PW_PERMISSION_INIT(object->id, allowed ? PW_PERM_ALL : 0);
|
||||
pw_log_info(NAME" %p: object %d allowed:%d", impl, object->id, allowed);
|
||||
pw_client_update_permissions(client->obj->obj.proxy,
|
||||
n_permissions, permissions);
|
||||
|
|
|
|||
|
|
@ -210,7 +210,7 @@ granted:
|
|||
pw_log_info(NAME" %p: client %p '%s' access granted", impl, client, access);
|
||||
items[0] = SPA_DICT_ITEM_INIT(PW_KEY_ACCESS, access);
|
||||
pw_impl_client_update_properties(client, &SPA_DICT_INIT(items, 1));
|
||||
permissions[0] = PW_PERMISSION_INIT(PW_ID_ANY, PW_PERM_RWX);
|
||||
permissions[0] = PW_PERMISSION_INIT(PW_ID_ANY, PW_PERM_ALL);
|
||||
pw_impl_client_update_permissions(client, 1, permissions);
|
||||
return;
|
||||
|
||||
|
|
|
|||
|
|
@ -116,7 +116,7 @@ static void node_initialized(void *data)
|
|||
global = pw_impl_node_get_global(nd->adapter);
|
||||
|
||||
res = pw_global_bind(global, client,
|
||||
PW_PERM_RWX, PW_VERSION_NODE, nd->new_id);
|
||||
PW_PERM_ALL, PW_VERSION_NODE, nd->new_id);
|
||||
if (res < 0)
|
||||
goto error_bind;
|
||||
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ static void *create_object(void *_data,
|
|||
struct pw_impl_client *client = pw_resource_get_client(resource);
|
||||
int res;
|
||||
|
||||
device_resource = pw_resource_new(client, new_id, PW_PERM_RWX, type, version, 0);
|
||||
device_resource = pw_resource_new(client, new_id, PW_PERM_ALL, type, version, 0);
|
||||
if (device_resource == NULL) {
|
||||
res = -errno;
|
||||
goto error_resource;
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ static void *create_object(void *_data,
|
|||
struct pw_impl_client *client = pw_resource_get_client(resource);
|
||||
int res;
|
||||
|
||||
node_resource = pw_resource_new(client, new_id, PW_PERM_RWX, type, version, 0);
|
||||
node_resource = pw_resource_new(client, new_id, PW_PERM_ALL, type, version, 0);
|
||||
if (node_resource == NULL) {
|
||||
res = -errno;
|
||||
goto error_resource;
|
||||
|
|
|
|||
|
|
@ -1280,7 +1280,7 @@ void pw_impl_client_node_registered(struct pw_impl_client_node *this, struct pw_
|
|||
sizeof(struct pw_node_activation));
|
||||
|
||||
if (impl->bind_node_id) {
|
||||
pw_global_bind(global, client, PW_PERM_RWX,
|
||||
pw_global_bind(global, client, PW_PERM_ALL,
|
||||
impl->bind_node_version, impl->bind_node_id);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@ static void link_initialized(void *data)
|
|||
ld->global = pw_impl_link_get_global(ld->link);
|
||||
pw_global_add_listener(ld->global, &ld->global_listener, &global_events, ld);
|
||||
|
||||
res = pw_global_bind(ld->global, client, PW_PERM_RWX, PW_VERSION_LINK, ld->new_id);
|
||||
res = pw_global_bind(ld->global, client, PW_PERM_ALL, PW_VERSION_LINK, ld->new_id);
|
||||
if (res < 0)
|
||||
goto error_bind;
|
||||
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ static void *create_object(void *_data,
|
|||
struct pw_impl_client *client = pw_resource_get_client(resource);
|
||||
int res;
|
||||
|
||||
metadata_resource = pw_resource_new(client, new_id, PW_PERM_RWX, type, version, 0);
|
||||
metadata_resource = pw_resource_new(client, new_id, PW_PERM_ALL, type, version, 0);
|
||||
if (metadata_resource == NULL) {
|
||||
res = -errno;
|
||||
goto error_resource;
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ context_check_access(void *data, struct pw_impl_client *client)
|
|||
|
||||
/* portal makes this connection and will change the permissions before
|
||||
* handing this connection to the client */
|
||||
permissions[0] = PW_PERMISSION_INIT(PW_ID_ANY, PW_PERM_RWX);
|
||||
permissions[0] = PW_PERMISSION_INIT(PW_ID_ANY, PW_PERM_ALL);
|
||||
pw_impl_client_update_permissions(client, 1, permissions);
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -330,7 +330,7 @@ static void on_start(void *data, uint32_t version)
|
|||
pw_resource_remove(client->core_resource);
|
||||
|
||||
if (pw_global_bind(pw_impl_core_get_global(client->core), client,
|
||||
PW_PERM_RWX, version, 0) < 0)
|
||||
PW_PERM_ALL, version, 0) < 0)
|
||||
return;
|
||||
|
||||
if (version == 0)
|
||||
|
|
@ -846,7 +846,7 @@ static int pw_protocol_native_connect_internal(struct pw_protocol_client *client
|
|||
pw_log_error("server %p: failed to create client: %m", s);
|
||||
goto error_close;
|
||||
}
|
||||
permissions[0] = PW_PERMISSION_INIT(PW_ID_ANY, PW_PERM_RWX);
|
||||
permissions[0] = PW_PERMISSION_INIT(PW_ID_ANY, PW_PERM_ALL);
|
||||
pw_impl_client_update_permissions(c->client, 1, permissions);
|
||||
|
||||
res = pw_protocol_client_connect_fd(client, sv[1], true);
|
||||
|
|
|
|||
|
|
@ -189,7 +189,7 @@ static void *create_object(void *data,
|
|||
pw_properties_setf(properties, PW_KEY_FACTORY_ID, "%d",
|
||||
pw_impl_factory_get_info(factory)->id);
|
||||
|
||||
this->resource = pw_resource_new(owner, new_id, PW_PERM_RWX, type, version, 0);
|
||||
this->resource = pw_resource_new(owner, new_id, PW_PERM_ALL, type, version, 0);
|
||||
if (this->resource == NULL)
|
||||
goto no_mem;
|
||||
|
||||
|
|
|
|||
|
|
@ -188,7 +188,7 @@ static void *create_object(void *data,
|
|||
pw_properties_setf(properties, PW_KEY_FACTORY_ID, "%d",
|
||||
pw_impl_factory_get_info(factory)->id);
|
||||
|
||||
this->resource = pw_resource_new(owner, new_id, PW_PERM_RWX, type, version, 0);
|
||||
this->resource = pw_resource_new(owner, new_id, PW_PERM_ALL, type, version, 0);
|
||||
if (this->resource == NULL)
|
||||
goto no_mem;
|
||||
|
||||
|
|
|
|||
|
|
@ -439,7 +439,7 @@ static void *create_object(void *data,
|
|||
void *result;
|
||||
int res;
|
||||
|
||||
impl_resource = pw_resource_new(client, new_id, PW_PERM_RWX, type, version, 0);
|
||||
impl_resource = pw_resource_new(client, new_id, PW_PERM_ALL, type, version, 0);
|
||||
if (impl_resource == NULL) {
|
||||
res = -errno;
|
||||
goto error_resource;
|
||||
|
|
|
|||
|
|
@ -430,7 +430,7 @@ static void *create_object(void *data,
|
|||
void *result;
|
||||
int res;
|
||||
|
||||
impl_resource = pw_resource_new(client, new_id, PW_PERM_RWX, type, version, 0);
|
||||
impl_resource = pw_resource_new(client, new_id, PW_PERM_ALL, type, version, 0);
|
||||
if (impl_resource == NULL) {
|
||||
res = -errno;
|
||||
goto error_resource;
|
||||
|
|
|
|||
|
|
@ -439,7 +439,7 @@ static void *create_object(void *data,
|
|||
void *result;
|
||||
int res;
|
||||
|
||||
impl_resource = pw_resource_new(client, new_id, PW_PERM_RWX, type, version, 0);
|
||||
impl_resource = pw_resource_new(client, new_id, PW_PERM_ALL, type, version, 0);
|
||||
if (impl_resource == NULL) {
|
||||
res = -errno;
|
||||
goto error_resource;
|
||||
|
|
|
|||
|
|
@ -430,7 +430,7 @@ static void *create_object(void *data,
|
|||
void *result;
|
||||
int res;
|
||||
|
||||
impl_resource = pw_resource_new(client, new_id, PW_PERM_RWX, type, version, 0);
|
||||
impl_resource = pw_resource_new(client, new_id, PW_PERM_ALL, type, version, 0);
|
||||
if (impl_resource == NULL) {
|
||||
res = -errno;
|
||||
goto error_resource;
|
||||
|
|
|
|||
|
|
@ -144,7 +144,7 @@ static void *create_object(void *_data,
|
|||
|
||||
res = pw_global_bind(pw_impl_device_get_global(device),
|
||||
client,
|
||||
PW_PERM_RWX, version,
|
||||
PW_PERM_ALL, version,
|
||||
new_id);
|
||||
if (res < 0)
|
||||
goto error_bind;
|
||||
|
|
|
|||
|
|
@ -144,9 +144,7 @@ static void *create_object(void *_data,
|
|||
struct pw_resource *bound_resource;
|
||||
|
||||
res = pw_global_bind(pw_impl_node_get_global(node),
|
||||
client,
|
||||
PW_PERM_RWX,
|
||||
version, new_id);
|
||||
client, PW_PERM_ALL, version, new_id);
|
||||
if (res < 0)
|
||||
goto error_bind;
|
||||
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ SPA_EXPORT
|
|||
uint32_t pw_global_get_permissions(struct pw_global *global, struct pw_impl_client *client)
|
||||
{
|
||||
if (client->permission_func == NULL)
|
||||
return PW_PERM_RWX;
|
||||
return PW_PERM_ALL;
|
||||
|
||||
return client->permission_func(global, client, client->permission_data);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -169,7 +169,7 @@ static int core_hello(void *object, uint32_t version)
|
|||
|
||||
if (version >= 3) {
|
||||
if ((res = pw_global_bind(client->global, client,
|
||||
PW_PERM_RWX, PW_VERSION_CLIENT, 1)) < 0)
|
||||
PW_PERM_ALL, PW_VERSION_CLIENT, 1)) < 0)
|
||||
return res;
|
||||
}
|
||||
return 0;
|
||||
|
|
@ -226,7 +226,7 @@ static struct pw_registry * core_get_registry(void *object, uint32_t version, si
|
|||
|
||||
registry_resource = pw_resource_new(client,
|
||||
new_id,
|
||||
PW_PERM_RWX,
|
||||
PW_PERM_ALL,
|
||||
PW_TYPE_INTERFACE_Registry,
|
||||
version,
|
||||
sizeof(*data));
|
||||
|
|
|
|||
|
|
@ -45,12 +45,14 @@ extern "C" {
|
|||
#define PW_PERM_W 0200 /**< methods can be called that modify the object */
|
||||
#define PW_PERM_X 0100 /**< methods can be called on the object. The W flag must be
|
||||
* present in order to call methods that modify the object. */
|
||||
|
||||
#define PW_PERM_RWX (PW_PERM_R|PW_PERM_W|PW_PERM_X)
|
||||
|
||||
#define PW_PERM_IS_R(p) (((p)&PW_PERM_R) == PW_PERM_R)
|
||||
#define PW_PERM_IS_W(p) (((p)&PW_PERM_W) == PW_PERM_W)
|
||||
#define PW_PERM_IS_X(p) (((p)&PW_PERM_X) == PW_PERM_X)
|
||||
|
||||
#define PW_PERM_ALL PW_PERM_RWX
|
||||
#define PW_PERM_INVALID (uint32_t)(0xffffffff)
|
||||
|
||||
struct pw_permission {
|
||||
|
|
@ -60,6 +62,12 @@ struct pw_permission {
|
|||
|
||||
#define PW_PERMISSION_INIT(id,p) (struct pw_permission){ (id), (p) }
|
||||
|
||||
#define PW_PERMISSION_FORMAT "%c%c%c"
|
||||
#define PW_PERMISSION_ARGS(permission) \
|
||||
(permission) & PW_PERM_R ? 'r' : '-', \
|
||||
(permission) & PW_PERM_W ? 'w' : '-', \
|
||||
(permission) & PW_PERM_X ? 'x' : '-'
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -574,9 +574,8 @@ static void info_global(struct proxy_data *pd)
|
|||
return;
|
||||
|
||||
fprintf(stdout, "\tid: %d\n", global->id);
|
||||
fprintf(stdout, "\tpermissions: %c%c%c\n", global->permissions & PW_PERM_R ? 'r' : '-',
|
||||
global->permissions & PW_PERM_W ? 'w' : '-',
|
||||
global->permissions & PW_PERM_X ? 'x' : '-');
|
||||
fprintf(stdout, "\tpermissions: "PW_PERMISSION_FORMAT"\n",
|
||||
PW_PERMISSION_ARGS(global->permissions));
|
||||
fprintf(stdout, "\ttype: %s/%d\n", global->type, global->version);
|
||||
}
|
||||
|
||||
|
|
@ -893,9 +892,8 @@ static void client_event_permissions(void *object, uint32_t index,
|
|||
fprintf(stdout, " default:");
|
||||
else
|
||||
fprintf(stdout, " %u:", permissions[i].id);
|
||||
fprintf(stdout, " %c%c%c\n", permissions[i].permissions & PW_PERM_R ? 'r' : '-',
|
||||
permissions[i].permissions & PW_PERM_W ? 'w' : '-',
|
||||
permissions[i].permissions & PW_PERM_X ? 'x' : '-');
|
||||
fprintf(stdout, " "PW_PERMISSION_FORMAT"\n",
|
||||
PW_PERMISSION_ARGS(permissions[i].permissions));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1525,8 +1523,8 @@ static bool do_permissions(struct data *data, const char *cmd, char *args, char
|
|||
{
|
||||
struct remote_data *rd = data->current;
|
||||
char *a[3];
|
||||
int n;
|
||||
uint32_t id;
|
||||
int n;
|
||||
uint32_t id, p;
|
||||
struct global *global;
|
||||
struct pw_permission permissions[1];
|
||||
|
||||
|
|
@ -1551,8 +1549,11 @@ static bool do_permissions(struct data *data, const char *cmd, char *args, char
|
|||
return false;
|
||||
}
|
||||
|
||||
permissions[0] = PW_PERMISSION_INIT(atoi(a[1]), atoi(a[2]));
|
||||
p = strtol(a[2], NULL, 0);
|
||||
fprintf(stderr, "setting permissions: "PW_PERMISSION_FORMAT"\n",
|
||||
PW_PERMISSION_ARGS(p));
|
||||
|
||||
permissions[0] = PW_PERMISSION_INIT(atoi(a[1]), p);
|
||||
pw_client_update_permissions((struct pw_client*)global->proxy,
|
||||
1, permissions);
|
||||
|
||||
|
|
@ -1956,10 +1957,8 @@ dump_global_common(struct data *data, struct global *global,
|
|||
if (!(flags & is_short)) {
|
||||
ind = INDENT(level + 1);
|
||||
fprintf(stdout, "%sid: %"PRIu32"\n", ind, global->id);
|
||||
fprintf(stdout, "%spermissions: %c%c%c\n", ind,
|
||||
global->permissions & PW_PERM_R ? 'r' : '-',
|
||||
global->permissions & PW_PERM_W ? 'w' : '-',
|
||||
global->permissions & PW_PERM_X ? 'x' : '-');
|
||||
fprintf(stdout, "%spermissions: "PW_PERMISSION_FORMAT"\n", ind,
|
||||
PW_PERMISSION_ARGS(global->permissions));
|
||||
fprintf(stdout, "%stype: %s/%d\n", ind,
|
||||
global->type, global->version);
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -221,9 +221,8 @@ static void module_event_info(void *object, const struct pw_module_info *info)
|
|||
info = data->info = pw_module_info_update(data->info, info);
|
||||
|
||||
printf("\tid: %d\n", data->id);
|
||||
printf("\tpermissions: %c%c%c\n", data->permissions & PW_PERM_R ? 'r' : '-',
|
||||
data->permissions & PW_PERM_W ? 'w' : '-',
|
||||
data->permissions & PW_PERM_X ? 'x' : '-');
|
||||
printf("\tpermissions: "PW_PERMISSION_FORMAT"\n",
|
||||
PW_PERMISSION_ARGS(data->permissions));
|
||||
printf("\ttype: %s (version %d)\n", data->type, data->version);
|
||||
printf("\tname: \"%s\"\n", info->name);
|
||||
printf("\tfilename: \"%s\"\n", info->filename);
|
||||
|
|
@ -255,9 +254,8 @@ static void print_node(struct proxy_data *data)
|
|||
}
|
||||
|
||||
printf("\tid: %d\n", data->id);
|
||||
printf("\tpermissions: %c%c%c\n", data->permissions & PW_PERM_R ? 'r' : '-',
|
||||
data->permissions & PW_PERM_W ? 'w' : '-',
|
||||
data->permissions & PW_PERM_X ? 'x' : '-');
|
||||
printf("\tpermissions: "PW_PERMISSION_FORMAT"\n",
|
||||
PW_PERMISSION_ARGS(data->permissions));
|
||||
printf("\ttype: %s (version %d)\n", data->type, data->version);
|
||||
if (print_all) {
|
||||
print_params(data, MARK_CHANGE(PW_NODE_CHANGE_MASK_PARAMS));
|
||||
|
|
@ -323,9 +321,8 @@ static void print_port(struct proxy_data *data)
|
|||
}
|
||||
|
||||
printf("\tid: %d\n", data->id);
|
||||
printf("\tpermissions: %c%c%c\n", data->permissions & PW_PERM_R ? 'r' : '-',
|
||||
data->permissions & PW_PERM_W ? 'w' : '-',
|
||||
data->permissions & PW_PERM_X ? 'x' : '-');
|
||||
printf("\tpermissions: "PW_PERMISSION_FORMAT"\n",
|
||||
PW_PERMISSION_ARGS(data->permissions));
|
||||
printf("\ttype: %s (version %d)\n", data->type, data->version);
|
||||
|
||||
printf("\tdirection: \"%s\"\n", pw_direction_as_string(info->direction));
|
||||
|
|
@ -384,9 +381,8 @@ static void factory_event_info(void *object, const struct pw_factory_info *info)
|
|||
info = data->info = pw_factory_info_update(data->info, info);
|
||||
|
||||
printf("\tid: %d\n", data->id);
|
||||
printf("\tpermissions: %c%c%c\n", data->permissions & PW_PERM_R ? 'r' : '-',
|
||||
data->permissions & PW_PERM_W ? 'w' : '-',
|
||||
data->permissions & PW_PERM_X ? 'x' : '-');
|
||||
printf("\tpermissions: "PW_PERMISSION_FORMAT"\n",
|
||||
PW_PERMISSION_ARGS(data->permissions));
|
||||
printf("\ttype: %s (version %d)\n", data->type, data->version);
|
||||
|
||||
printf("\tname: \"%s\"\n", info->name);
|
||||
|
|
@ -419,9 +415,8 @@ static void client_event_info(void *object, const struct pw_client_info *info)
|
|||
info = data->info = pw_client_info_update(data->info, info);
|
||||
|
||||
printf("\tid: %d\n", data->id);
|
||||
printf("\tpermissions: %c%c%c\n", data->permissions & PW_PERM_R ? 'r' : '-',
|
||||
data->permissions & PW_PERM_W ? 'w' : '-',
|
||||
data->permissions & PW_PERM_X ? 'x' : '-');
|
||||
printf("\tpermissions: "PW_PERMISSION_FORMAT"\n",
|
||||
PW_PERMISSION_ARGS(data->permissions));
|
||||
printf("\ttype: %s (version %d)\n", data->type, data->version);
|
||||
|
||||
if (print_all) {
|
||||
|
|
@ -452,9 +447,8 @@ static void link_event_info(void *object, const struct pw_link_info *info)
|
|||
info = data->info = pw_link_info_update(data->info, info);
|
||||
|
||||
printf("\tid: %d\n", data->id);
|
||||
printf("\tpermissions: %c%c%c\n", data->permissions & PW_PERM_R ? 'r' : '-',
|
||||
data->permissions & PW_PERM_W ? 'w' : '-',
|
||||
data->permissions & PW_PERM_X ? 'x' : '-');
|
||||
printf("\tpermissions: "PW_PERMISSION_FORMAT"\n",
|
||||
PW_PERMISSION_ARGS(data->permissions));
|
||||
printf("\ttype: %s (version %d)\n", data->type, data->version);
|
||||
|
||||
printf("\toutput-node-id: %u\n", info->output_node_id);
|
||||
|
|
@ -499,9 +493,8 @@ static void print_device(struct proxy_data *data)
|
|||
}
|
||||
|
||||
printf("\tid: %d\n", data->id);
|
||||
printf("\tpermissions: %c%c%c\n", data->permissions & PW_PERM_R ? 'r' : '-',
|
||||
data->permissions & PW_PERM_W ? 'w' : '-',
|
||||
data->permissions & PW_PERM_X ? 'x' : '-');
|
||||
printf("\tpermissions: "PW_PERMISSION_FORMAT"\n",
|
||||
PW_PERMISSION_ARGS(data->permissions));
|
||||
printf("\ttype: %s (version %d)\n", data->type, data->version);
|
||||
|
||||
if (print_all) {
|
||||
|
|
@ -617,9 +610,8 @@ static void registry_event_global(void *data, uint32_t id,
|
|||
} else {
|
||||
printf("added:\n");
|
||||
printf("\tid: %u\n", id);
|
||||
printf("\tpermissions: %c%c%c\n", permissions & PW_PERM_R ? 'r' : '-',
|
||||
permissions & PW_PERM_W ? 'w' : '-',
|
||||
permissions & PW_PERM_X ? 'x' : '-');
|
||||
printf("\tpermissions: "PW_PERMISSION_FORMAT"\n",
|
||||
PW_PERMISSION_ARGS(permissions));
|
||||
printf("\ttype: %s (version %d)\n", type, version);
|
||||
print_properties(props, ' ');
|
||||
return;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue