diff options
author | Wim Taymans <wtaymans@redhat.com> | 2020-07-30 16:26:29 +0200 |
---|---|---|
committer | Wim Taymans <wtaymans@redhat.com> | 2020-07-30 16:26:29 +0200 |
commit | 91d48066115dca31fe3a3a9ae740ab47ce4c926b (patch) | |
tree | 0dd91fa0847a538770abd6ed6002db45c683865b | |
parent | f5e78196c45f52b8e2acb404733c077e4a091b7d (diff) |
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.
23 files changed, 58 insertions, 61 deletions
diff --git a/src/examples/media-session/access-portal.c b/src/examples/media-session/access-portal.c index ee196e6b..02737976 100644 --- a/src/examples/media-session/access-portal.c +++ b/src/examples/media-session/access-portal.c @@ -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); diff --git a/src/modules/module-access.c b/src/modules/module-access.c index 302c96dc..7560a1ce 100644 --- a/src/modules/module-access.c +++ b/src/modules/module-access.c @@ -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; diff --git a/src/modules/module-adapter.c b/src/modules/module-adapter.c index 06202f59..34d6a899 100644 --- a/src/modules/module-adapter.c +++ b/src/modules/module-adapter.c @@ -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; diff --git a/src/modules/module-client-device.c b/src/modules/module-client-device.c index 1350216b..ec122949 100644 --- a/src/modules/module-client-device.c +++ b/src/modules/module-client-device.c @@ -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; diff --git a/src/modules/module-client-node.c b/src/modules/module-client-node.c index a5b5f9c1..471a1c81 100644 --- a/src/modules/module-client-node.c +++ b/src/modules/module-client-node.c @@ -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; diff --git a/src/modules/module-client-node/client-node.c b/src/modules/module-client-node/client-node.c index 9c17b6b8..3beedc75 100644 --- a/src/modules/module-client-node/client-node.c +++ b/src/modules/module-client-node/client-node.c @@ -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); } } diff --git a/src/modules/module-link-factory.c b/src/modules/module-link-factory.c index 8c23d862..2f1d73ab 100644 --- a/src/modules/module-link-factory.c +++ b/src/modules/module-link-factory.c @@ -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; diff --git a/src/modules/module-metadata.c b/src/modules/module-metadata.c index 38a32d82..0f3b719a 100644 --- a/src/modules/module-metadata.c +++ b/src/modules/module-metadata.c @@ -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; diff --git a/src/modules/module-portal.c b/src/modules/module-portal.c index e6eff22f..1629508d 100644 --- a/src/modules/module-portal.c +++ b/src/modules/module-portal.c @@ -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; } diff --git a/src/modules/module-protocol-native.c b/src/modules/module-protocol-native.c index f562ff49..854372a7 100644 --- a/src/modules/module-protocol-native.c +++ b/src/modules/module-protocol-native.c @@ -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); diff --git a/src/modules/module-session-manager/client-endpoint/client-endpoint.c b/src/modules/module-session-manager/client-endpoint/client-endpoint.c index c48fd641..c845cf05 100644 --- a/src/modules/module-session-manager/client-endpoint/client-endpoint.c +++ b/src/modules/module-session-manager/client-endpoint/client-endpoint.c @@ -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; diff --git a/src/modules/module-session-manager/client-session/client-session.c b/src/modules/module-session-manager/client-session/client-session.c index 3953962f..6490d4cc 100644 --- a/src/modules/module-session-manager/client-session/client-session.c +++ b/src/modules/module-session-manager/client-session/client-session.c @@ -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; diff --git a/src/modules/module-session-manager/endpoint-link.c b/src/modules/module-session-manager/endpoint-link.c index f751f716..bfebe081 100644 --- a/src/modules/module-session-manager/endpoint-link.c +++ b/src/modules/module-session-manager/endpoint-link.c @@ -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; diff --git a/src/modules/module-session-manager/endpoint-stream.c b/src/modules/module-session-manager/endpoint-stream.c index e0ed3a1c..8e8435d8 100644 --- a/src/modules/module-session-manager/endpoint-stream.c +++ b/src/modules/module-session-manager/endpoint-stream.c @@ -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; diff --git a/src/modules/module-session-manager/endpoint.c b/src/modules/module-session-manager/endpoint.c index 331f69b5..32b97bcb 100644 --- a/src/modules/module-session-manager/endpoint.c +++ b/src/modules/module-session-manager/endpoint.c @@ -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; diff --git a/src/modules/module-session-manager/session.c b/src/modules/module-session-manager/session.c index 65ad6e17..80907bec 100644 --- a/src/modules/module-session-manager/session.c +++ b/src/modules/module-session-manager/session.c @@ -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; diff --git a/src/modules/spa/module-device-factory.c b/src/modules/spa/module-device-factory.c index 9396e5a8..ad0b7c48 100644 --- a/src/modules/spa/module-device-factory.c +++ b/src/modules/spa/module-device-factory.c @@ -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; diff --git a/src/modules/spa/module-node-factory.c b/src/modules/spa/module-node-factory.c index 6cc58f1e..e93c3f1d 100644 --- a/src/modules/spa/module-node-factory.c +++ b/src/modules/spa/module-node-factory.c @@ -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; diff --git a/src/pipewire/global.c b/src/pipewire/global.c index eb4805cf..2247ce19 100644 --- a/src/pipewire/global.c +++ b/src/pipewire/global.c @@ -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); } diff --git a/src/pipewire/impl-core.c b/src/pipewire/impl-core.c index 103c2863..9d3a00e4 100644 --- a/src/pipewire/impl-core.c +++ b/src/pipewire/impl-core.c @@ -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)); diff --git a/src/pipewire/permission.h b/src/pipewire/permission.h index 58189a17..eaff24ef 100644 --- a/src/pipewire/permission.h +++ b/src/pipewire/permission.h @@ -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 diff --git a/src/tools/pw-cli.c b/src/tools/pw-cli.c index 7ecadb16..82bc72ea 100644 --- a/src/tools/pw-cli.c +++ b/src/tools/pw-cli.c @@ -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 { diff --git a/src/tools/pw-mon.c b/src/tools/pw-mon.c index a0839903..15a392c8 100644 --- a/src/tools/pw-mon.c +++ b/src/tools/pw-mon.c @@ -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; |