mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	permission: add M permission
The M permission is needed to set metadata on an object.
This commit is contained in:
		
							parent
							
								
									91d4806611
								
							
						
					
					
						commit
						c7d7dd91f8
					
				
					 3 changed files with 9 additions and 5 deletions
				
			
		| 
						 | 
					@ -1623,7 +1623,7 @@ 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) ||
 | 
						} else if (!SPA_FLAG_IS_SET(g->permissions, PW_PERM_M) ||
 | 
				
			||||||
		(c->metadata && !SPA_FLAG_IS_SET(c->metadata->permissions, PW_PERM_W|PW_PERM_X))) {
 | 
							(c->metadata && !SPA_FLAG_IS_SET(c->metadata->permissions, PW_PERM_W|PW_PERM_X))) {
 | 
				
			||||||
		error = PA_ERR_ACCESS;
 | 
							error = PA_ERR_ACCESS;
 | 
				
			||||||
	} else if (c->metadata) {
 | 
						} else if (c->metadata) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2076,7 +2076,7 @@ static void do_target_node(pa_operation *o, void *userdata)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (t == NULL) {
 | 
						if (t == NULL) {
 | 
				
			||||||
		error = PA_ERR_NOENTITY;
 | 
							error = PA_ERR_NOENTITY;
 | 
				
			||||||
	} else if (!SPA_FLAG_IS_SET(g->permissions, PW_PERM_R) ||
 | 
						} else if (!SPA_FLAG_IS_SET(g->permissions, PW_PERM_M) ||
 | 
				
			||||||
		(c->metadata && !SPA_FLAG_IS_SET(c->metadata->permissions, PW_PERM_W|PW_PERM_X))) {
 | 
							(c->metadata && !SPA_FLAG_IS_SET(c->metadata->permissions, PW_PERM_W|PW_PERM_X))) {
 | 
				
			||||||
		error = PA_ERR_ACCESS;
 | 
							error = PA_ERR_ACCESS;
 | 
				
			||||||
	} else if (c->metadata) {
 | 
						} else if (c->metadata) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -45,14 +45,17 @@ extern "C" {
 | 
				
			||||||
#define PW_PERM_W	0200	/**< methods can be called that modify the object */
 | 
					#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
 | 
					#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. */
 | 
									  *  present in order to call methods that modify the object. */
 | 
				
			||||||
 | 
					#define PW_PERM_M	0010	/**< metadata can be set on object, Since 0.3.9 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define PW_PERM_RWX	(PW_PERM_R|PW_PERM_W|PW_PERM_X)
 | 
					#define PW_PERM_RWX	(PW_PERM_R|PW_PERM_W|PW_PERM_X)
 | 
				
			||||||
 | 
					#define PW_PERM_RWXM	(PW_PERM_RWX|PW_PERM_M)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define PW_PERM_IS_R(p) (((p)&PW_PERM_R) == PW_PERM_R)
 | 
					#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_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_IS_X(p) (((p)&PW_PERM_X) == PW_PERM_X)
 | 
				
			||||||
 | 
					#define PW_PERM_IS_M(p) (((p)&PW_PERM_M) == PW_PERM_M)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define PW_PERM_ALL	PW_PERM_RWX
 | 
					#define PW_PERM_ALL	PW_PERM_RWXM
 | 
				
			||||||
#define PW_PERM_INVALID	(uint32_t)(0xffffffff)
 | 
					#define PW_PERM_INVALID	(uint32_t)(0xffffffff)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct pw_permission {
 | 
					struct pw_permission {
 | 
				
			||||||
| 
						 | 
					@ -62,11 +65,12 @@ struct pw_permission {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define PW_PERMISSION_INIT(id,p) (struct pw_permission){ (id), (p) }
 | 
					#define PW_PERMISSION_INIT(id,p) (struct pw_permission){ (id), (p) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define PW_PERMISSION_FORMAT "%c%c%c"
 | 
					#define PW_PERMISSION_FORMAT "%c%c%c%c"
 | 
				
			||||||
#define PW_PERMISSION_ARGS(permission)		\
 | 
					#define PW_PERMISSION_ARGS(permission)		\
 | 
				
			||||||
	(permission) & PW_PERM_R ? 'r' : '-',	\
 | 
						(permission) & PW_PERM_R ? 'r' : '-',	\
 | 
				
			||||||
	(permission) & PW_PERM_W ? 'w' : '-',	\
 | 
						(permission) & PW_PERM_W ? 'w' : '-',	\
 | 
				
			||||||
	(permission) & PW_PERM_X ? 'x' : '-'
 | 
						(permission) & PW_PERM_X ? 'x' : '-',	\
 | 
				
			||||||
 | 
						(permission) & PW_PERM_M ? 'm' : '-'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef __cplusplus
 | 
					#ifdef __cplusplus
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue