From 3ed39b2a798419a168e5c79a2db9f7ee20de70fa Mon Sep 17 00:00:00 2001 From: outfoxxed Date: Thu, 26 Sep 2024 15:52:31 -0700 Subject: [PATCH] service/pipewire: fix metadata permission checks --- src/services/pipewire/defaults.cpp | 7 +++++++ src/services/pipewire/metadata.cpp | 7 ++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/services/pipewire/defaults.cpp b/src/services/pipewire/defaults.cpp index 7cc6d171..4851f27b 100644 --- a/src/services/pipewire/defaults.cpp +++ b/src/services/pipewire/defaults.cpp @@ -193,6 +193,13 @@ bool PwDefaultTracker::setConfiguredDefault(const char* key, const QString& valu return false; } + if (!meta->hasSetPermission()) { + qCCritical(logDefaults + ) << "Cannot set default node as write+execute permissions are missing for" + << meta; + return false; + } + if (value.isEmpty()) { meta->setProperty(key, "Spa:String:JSON", nullptr); } else { diff --git a/src/services/pipewire/metadata.cpp b/src/services/pipewire/metadata.cpp index 582e9ac6..930725c3 100644 --- a/src/services/pipewire/metadata.cpp +++ b/src/services/pipewire/metadata.cpp @@ -2,13 +2,13 @@ #include #include +#include #include #include #include #include #include #include -#include #include #include "registry.hpp" @@ -54,7 +54,7 @@ int PwMetadata::onProperty( } bool PwMetadata::hasSetPermission() const { - return (this->perms & SPA_PARAM_INFO_WRITE) == SPA_PARAM_INFO_WRITE; + return (this->perms & (PW_PERM_W | PW_PERM_X)) == (PW_PERM_W | PW_PERM_X); } void PwMetadata::setProperty(const char* key, const char* type, const char* value) { @@ -64,7 +64,8 @@ void PwMetadata::setProperty(const char* key, const char* type, const char* valu } if (!this->hasSetPermission()) { - qCCritical(logMeta) << "Tried to change property of" << this << "which is read-only."; + qCCritical(logMeta) << "Tried to change property of" << this + << "which is missing write+execute permissions."; } pw_metadata_set_property(this->proxy(), PW_ID_CORE, key, type, value);