pulse: check that we have access to change metadata

This commit is contained in:
Wim Taymans 2020-07-30 16:23:13 +02:00
parent 8db9a2741b
commit f5e78196c4
2 changed files with 14 additions and 8 deletions

View file

@ -1623,6 +1623,9 @@ static void do_default_node(pa_operation *o, void *userdata)
g = pa_context_find_global_by_name(c, d->mask, d->name); g = pa_context_find_global_by_name(c, d->mask, d->name);
if (g == NULL) { if (g == NULL) {
error = PA_ERR_NOENTITY; error = PA_ERR_NOENTITY;
} else if (!SPA_FLAG_IS_SET(g->permissions, PW_PERM_R) ||
(c->metadata && !SPA_FLAG_IS_SET(c->metadata->permissions, PW_PERM_W|PW_PERM_X))) {
error = PA_ERR_ACCESS;
} else if (c->metadata) { } else if (c->metadata) {
char buf[16]; char buf[16];
snprintf(buf, sizeof(buf), "%d", g->id); snprintf(buf, sizeof(buf), "%d", g->id);

View file

@ -2056,7 +2056,7 @@ static void do_target_node(pa_operation *o, void *userdata)
{ {
struct target_node *d = userdata; struct target_node *d = userdata;
pa_context *c = o->context; pa_context *c = o->context;
struct global *g; struct global *g, *t;
int error = 0; int error = 0;
pw_log_debug("%p", c); pw_log_debug("%p", c);
@ -2068,19 +2068,22 @@ static void do_target_node(pa_operation *o, void *userdata)
} }
if (d->target_name) { if (d->target_name) {
g = pa_context_find_global_by_name(c, d->target_mask, d->target_name); t = pa_context_find_global_by_name(c, d->target_mask, d->target_name);
} else { } else {
if ((g = pa_context_find_global(c, d->target_idx)) == NULL || if ((t = pa_context_find_global(c, d->target_idx)) == NULL ||
!(g->mask & d->target_mask)) !(t->mask & d->target_mask))
g = NULL; t = NULL;
} }
if (g == NULL) { if (t == NULL) {
error = PA_ERR_NOENTITY; error = PA_ERR_NOENTITY;
} else if (!SPA_FLAG_IS_SET(g->permissions, PW_PERM_R) ||
(c->metadata && !SPA_FLAG_IS_SET(c->metadata->permissions, PW_PERM_W|PW_PERM_X))) {
error = PA_ERR_ACCESS;
} else if (c->metadata) { } else if (c->metadata) {
char buf[16]; char buf[16];
snprintf(buf, sizeof(buf), "%d", g->id); snprintf(buf, sizeof(buf), "%d", t->id);
pw_metadata_set_property(c->metadata->proxy, pw_metadata_set_property(c->metadata->proxy,
d->idx, d->key, SPA_TYPE_INFO_BASE "Id", buf); g->id, d->key, SPA_TYPE_INFO_BASE "Id", buf);
} else { } else {
error = PA_ERR_NOTIMPLEMENTED; error = PA_ERR_NOTIMPLEMENTED;
} }