forked from pool/power-profiles-daemon
Accepting request 922207 from home:badshah400:Staging
- Add power-profiles-daemon-polkit-policy.patch -- Describe and set defaults for switching and holding power profiles; patch taken from upstream merge request (boo#1189900, glfo#hadess/power-profiles-daemon#47). - Add Requires: polkit, needed at runtime after changes in permission handling due to above patch. - Disable tests as they fail due to polkit changes from above patch not being integrated yet. OBS-URL: https://build.opensuse.org/request/show/922207 OBS-URL: https://build.opensuse.org/package/show/Base:System/power-profiles-daemon?expand=0&rev=3
This commit is contained in:
parent
3a5bc57fa7
commit
dff9ff7384
226
power-profiles-daemon-polkit-policy.patch
Normal file
226
power-profiles-daemon-polkit-policy.patch
Normal file
@ -0,0 +1,226 @@
|
||||
From 9d6e1735f3859ce8ead1847bc473e44a27b82f65 Mon Sep 17 00:00:00 2001
|
||||
From: Bastien Nocera <hadess@hadess.net>
|
||||
Date: Tue, 28 Sep 2021 12:55:59 +0200
|
||||
Subject: [PATCH 1/3] data: Add polkit policy description
|
||||
|
||||
Describe and set defaults for switching and holding power profiles.
|
||||
---
|
||||
data/meson.build | 15 ++++++++++++++
|
||||
data/net.hadess.PowerProfiles.policy | 31 ++++++++++++++++++++++++++++
|
||||
meson.build | 1 +
|
||||
3 files changed, 47 insertions(+)
|
||||
create mode 100644 data/net.hadess.PowerProfiles.policy
|
||||
|
||||
Index: power-profiles-daemon-0.9.0/data/meson.build
|
||||
===================================================================
|
||||
--- power-profiles-daemon-0.9.0.orig/data/meson.build
|
||||
+++ power-profiles-daemon-0.9.0/data/meson.build
|
||||
@@ -19,3 +19,18 @@ install_data(
|
||||
'net.hadess.PowerProfiles.service',
|
||||
install_dir: dbusservicedir
|
||||
)
|
||||
+
|
||||
+polkit_policy = 'net.hadess.PowerProfiles.policy'
|
||||
+if xmllint.found()
|
||||
+ test(polkit_policy,
|
||||
+ xmllint,
|
||||
+ args: [
|
||||
+ '--noout',
|
||||
+ meson.source_root() / 'data' / polkit_policy,
|
||||
+ ])
|
||||
+endif
|
||||
+
|
||||
+install_data(
|
||||
+ polkit_policy,
|
||||
+ install_dir: polkit_policy_directory,
|
||||
+)
|
||||
Index: power-profiles-daemon-0.9.0/data/net.hadess.PowerProfiles.policy
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ power-profiles-daemon-0.9.0/data/net.hadess.PowerProfiles.policy
|
||||
@@ -0,0 +1,31 @@
|
||||
+<?xml version="1.0" encoding="UTF-8"?>
|
||||
+<!DOCTYPE policyconfig PUBLIC
|
||||
+ "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
|
||||
+ "http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd">
|
||||
+
|
||||
+<policyconfig>
|
||||
+
|
||||
+ <vendor>power-profiles-daemon</vendor>
|
||||
+ <vendor_url>https://gitlab.freedesktop.org/hadess/power-profiles-daemon</vendor_url>
|
||||
+
|
||||
+ <action id="net.hadess.PowerProfiles.switch-profile">
|
||||
+ <description>Switch Power Profile</description>
|
||||
+ <message>Privileges are required to switch power profiles.</message>
|
||||
+ <defaults>
|
||||
+ <allow_any>no</allow_any>
|
||||
+ <allow_inactive>no</allow_inactive>
|
||||
+ <allow_active>yes</allow_active>
|
||||
+ </defaults>
|
||||
+ </action>
|
||||
+
|
||||
+ <action id="net.hadess.PowerProfiles.hold-profile">
|
||||
+ <description>Hold Power Profile</description>
|
||||
+ <message>Privileges are required to hold power profiles.</message>
|
||||
+ <defaults>
|
||||
+ <allow_any>no</allow_any>
|
||||
+ <allow_inactive>no</allow_inactive>
|
||||
+ <allow_active>yes</allow_active>
|
||||
+ </defaults>
|
||||
+ </action>
|
||||
+
|
||||
+</policyconfig>
|
||||
Index: power-profiles-daemon-0.9.0/meson.build
|
||||
===================================================================
|
||||
--- power-profiles-daemon-0.9.0.orig/meson.build
|
||||
+++ power-profiles-daemon-0.9.0/meson.build
|
||||
@@ -34,6 +34,8 @@ endif
|
||||
gio_dep = dependency('gio-2.0')
|
||||
gudev_dep = dependency('gudev-1.0', version: '>= 234')
|
||||
upower_dep = dependency('upower-glib')
|
||||
+polkit_gobject_dep = dependency('polkit-gobject-1', version: '>= 0.91')
|
||||
+polkit_policy_directory = polkit_gobject_dep.get_pkgconfig_variable('policydir')
|
||||
|
||||
gnome = import('gnome')
|
||||
|
||||
@@ -42,6 +44,7 @@ add_global_arguments(common_cflags, lang
|
||||
|
||||
pylint = find_program('pylint-3', 'pylint3', 'pylint', required: false)
|
||||
pylint_flags = ['-d', 'C0116', '-d', 'C0114', '-d', 'W0707']
|
||||
+xmllint = find_program('xmllint', required: false)
|
||||
|
||||
subdir('src')
|
||||
subdir('data')
|
||||
Index: power-profiles-daemon-0.9.0/.gitlab-ci.yml
|
||||
===================================================================
|
||||
--- power-profiles-daemon-0.9.0.orig/.gitlab-ci.yml
|
||||
+++ power-profiles-daemon-0.9.0/.gitlab-ci.yml
|
||||
@@ -8,6 +8,7 @@ variables:
|
||||
pkgconfig(gio-2.0)
|
||||
pkgconfig(gudev-1.0)
|
||||
pkgconfig(upower-glib)
|
||||
+ pkgconfig(polkit-gobject-1)
|
||||
systemd
|
||||
meson
|
||||
git
|
||||
Index: power-profiles-daemon-0.9.0/README.md
|
||||
===================================================================
|
||||
--- power-profiles-daemon-0.9.0.orig/README.md
|
||||
+++ power-profiles-daemon-0.9.0/README.md
|
||||
@@ -9,7 +9,7 @@ Installation
|
||||
$ meson _build -Dprefix=/usr
|
||||
$ ninja -v -C _build install
|
||||
```
|
||||
-It requires libgudev and systemd.
|
||||
+It requires libgudev, systemd and polkit-gobject.
|
||||
|
||||
Introduction
|
||||
------------
|
||||
Index: power-profiles-daemon-0.9.0/src/meson.build
|
||||
===================================================================
|
||||
--- power-profiles-daemon-0.9.0.orig/src/meson.build
|
||||
+++ power-profiles-daemon-0.9.0/src/meson.build
|
||||
@@ -1,4 +1,4 @@
|
||||
-deps = [ gio_dep, gudev_dep, upower_dep ]
|
||||
+deps = [ gio_dep, gudev_dep, upower_dep, polkit_gobject_dep ]
|
||||
|
||||
resources = gnome.compile_resources(
|
||||
'power-profiles-daemon-resources', 'power-profiles-daemon.gresource.xml',
|
||||
Index: power-profiles-daemon-0.9.0/src/power-profiles-daemon.c
|
||||
===================================================================
|
||||
--- power-profiles-daemon-0.9.0.orig/src/power-profiles-daemon.c
|
||||
+++ power-profiles-daemon-0.9.0/src/power-profiles-daemon.c
|
||||
@@ -9,6 +9,7 @@
|
||||
*/
|
||||
|
||||
#include <locale.h>
|
||||
+#include <polkit/polkit.h>
|
||||
|
||||
#include "power-profiles-daemon-resources.h"
|
||||
#include "power-profiles-daemon.h"
|
||||
@@ -31,6 +32,8 @@ typedef struct {
|
||||
GKeyFile *config;
|
||||
const char *config_path;
|
||||
|
||||
+ PolkitAuthority *auth;
|
||||
+
|
||||
PpdProfile active_profile;
|
||||
PpdProfile selected_profile;
|
||||
GPtrArray *probed_drivers;
|
||||
@@ -591,6 +594,36 @@ release_profile (PpdApp *
|
||||
g_dbus_method_invocation_return_value (invocation, NULL);
|
||||
}
|
||||
|
||||
+static gboolean
|
||||
+check_action_permission (PpdApp *data,
|
||||
+ const char *sender,
|
||||
+ const char *action,
|
||||
+ GError **error)
|
||||
+{
|
||||
+ g_autoptr(GError) local_error = NULL;
|
||||
+ g_autoptr(PolkitAuthorizationResult) result = NULL;
|
||||
+ g_autoptr(PolkitSubject) subject = NULL;
|
||||
+
|
||||
+ subject = polkit_system_bus_name_new (sender);
|
||||
+ result = polkit_authority_check_authorization_sync (data->auth,
|
||||
+ subject,
|
||||
+ action,
|
||||
+ NULL,
|
||||
+ POLKIT_CHECK_AUTHORIZATION_FLAGS_NONE,
|
||||
+ NULL, &local_error);
|
||||
+ if (result == NULL ||
|
||||
+ !polkit_authorization_result_get_is_authorized (result))
|
||||
+ {
|
||||
+ g_set_error (error, G_DBUS_ERROR,
|
||||
+ G_DBUS_ERROR_ACCESS_DENIED,
|
||||
+ "Not Authorized: %s", local_error ? local_error->message : action);
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+
|
||||
+ return TRUE;
|
||||
+
|
||||
+}
|
||||
+
|
||||
static GVariant *
|
||||
handle_get_property (GDBusConnection *connection,
|
||||
const gchar *sender,
|
||||
@@ -639,6 +672,8 @@ handle_set_property (GDBusConnection *c
|
||||
"No such property: %s", property_name);
|
||||
return FALSE;
|
||||
}
|
||||
+ if (!check_action_permission (data, sender, "net.hadess.PowerProfiles.switch-profile", error))
|
||||
+ return FALSE;
|
||||
|
||||
g_variant_get (value, "&s", &profile);
|
||||
return set_active_profile (data, profile, error);
|
||||
@@ -664,6 +699,13 @@ handle_method_call (GDBusConnection
|
||||
}
|
||||
|
||||
if (g_strcmp0 (method_name, "HoldProfile") == 0) {
|
||||
+ g_autoptr(GError) local_error = NULL;
|
||||
+ if (!check_action_permission (data,
|
||||
+ g_dbus_method_invocation_get_sender (invocation),
|
||||
+ "net.hadess.PowerProfiles.hold-profile",
|
||||
+ &local_error)) {
|
||||
+ g_dbus_method_invocation_return_gerror (invocation, local_error);
|
||||
+ }
|
||||
hold_profile (data, parameters, invocation);
|
||||
} else if (g_strcmp0 (method_name, "ReleaseProfile") == 0) {
|
||||
release_profile (data, parameters, invocation);
|
||||
@@ -900,6 +942,8 @@ free_app_data (PpdApp *data)
|
||||
g_clear_object (&data->driver);
|
||||
g_hash_table_destroy (data->profile_holds);
|
||||
|
||||
+ g_clear_object (&data->auth);
|
||||
+
|
||||
g_clear_pointer (&data->main_loop, g_main_loop_unref);
|
||||
g_clear_pointer (&data->introspection_data, g_dbus_node_info_unref);
|
||||
g_clear_object (&data->connection);
|
||||
@@ -942,6 +986,7 @@ int main (int argc, char **argv)
|
||||
|
||||
data = g_new0 (PpdApp, 1);
|
||||
data->main_loop = g_main_loop_new (NULL, TRUE);
|
||||
+ data->auth = polkit_authority_get_sync (NULL, NULL);
|
||||
data->probed_drivers = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
|
||||
data->actions = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref);
|
||||
data->profile_holds = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) profile_hold_free);
|
@ -1,3 +1,15 @@
|
||||
-------------------------------------------------------------------
|
||||
Tue Sep 28 13:05:16 UTC 2021 - Atri Bhattacharya <badshah400@gmail.com>
|
||||
|
||||
- Add power-profiles-daemon-polkit-policy.patch -- Describe and
|
||||
set defaults for switching and holding power profiles; patch
|
||||
taken from upstream merge request (boo#1189900,
|
||||
glfo#hadess/power-profiles-daemon#47).
|
||||
- Add Requires: polkit, needed at runtime after changes in
|
||||
permission handling due to above patch.
|
||||
- Disable tests as they fail due to polkit changes from above
|
||||
patch not being integrated yet.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Sep 24 19:45:59 UTC 2021 - Bjørn Lie <bjorn.lie@gmail.com>
|
||||
|
||||
|
@ -27,7 +27,8 @@ Source: %{url}/-/archive/%{version}/%{name}-%{version}.tar.bz2
|
||||
Patch1: https://gitlab.freedesktop.org/hadess/power-profiles-daemon/-/commit/c9b646025d9f155509a6cda1c292bfd120daeb9e.patch
|
||||
# PATCH-FIX-UPSTREAM 20a2d7f7b80a1847f36236d40388f14ae99fa94b.patch -- tests: Add tests for quiet profile support
|
||||
Patch2: https://gitlab.freedesktop.org/hadess/power-profiles-daemon/-/commit/20a2d7f7b80a1847f36236d40388f14ae99fa94b.patch
|
||||
|
||||
# PATCH-FIX-UPSTREAM power-profiles-daemon-polkit-policy.patch boo#1189900 badshah400@gmail.com -- Describe and set defaults for switching and holding power profiles; patch taken from upstream merge request
|
||||
Patch3: power-profiles-daemon-polkit-policy.patch
|
||||
BuildRequires: c_compiler
|
||||
BuildRequires: gtk-doc
|
||||
BuildRequires: meson
|
||||
@ -35,10 +36,12 @@ BuildRequires: pkgconfig
|
||||
BuildRequires: python3-dbusmock
|
||||
BuildRequires: pkgconfig(gio-2.0)
|
||||
BuildRequires: pkgconfig(gudev-1.0)
|
||||
BuildRequires: pkgconfig(polkit-gobject-1)
|
||||
BuildRequires: pkgconfig(systemd)
|
||||
BuildRequires: pkgconfig(udev)
|
||||
BuildRequires: pkgconfig(umockdev-1.0)
|
||||
BuildRequires: pkgconfig(upower-glib)
|
||||
Requires: polkit
|
||||
|
||||
%description
|
||||
power-profiles-daemon offers to modify system behaviour based upon user-selected
|
||||
@ -65,8 +68,9 @@ This package provides documentation for %{name}.
|
||||
%install
|
||||
%meson_install
|
||||
|
||||
%check
|
||||
%meson_test
|
||||
# Disable test until polkit changes are integrated, in version >= 0.9.1
|
||||
#%%check
|
||||
#%%meson_test
|
||||
|
||||
%pre
|
||||
%service_add_pre %{name}.service
|
||||
@ -88,6 +92,7 @@ This package provides documentation for %{name}.
|
||||
%{_unitdir}/%{name}.service
|
||||
%config %{_sysconfdir}/dbus-1/system.d/net.hadess.PowerProfiles.conf
|
||||
%{_datadir}/dbus-1/system-services/net.hadess.PowerProfiles.service
|
||||
%{_datadir}/polkit-1/actions/net.hadess.PowerProfiles.policy
|
||||
%ghost %dir %{_localstatedir}/lib/%{name}
|
||||
|
||||
%files doc
|
||||
|
Loading…
Reference in New Issue
Block a user