Hello community,

here is the log from the commit of package brightnessctl for openSUSE:Factory 
checked in at 2020-01-31 23:58:05
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/brightnessctl (Old)
 and      /work/SRC/openSUSE:Factory/.brightnessctl.new.26092 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "brightnessctl"

Fri Jan 31 23:58:05 2020 rev:3 rq:769065 version:0.4

Changes:
--------
--- /work/SRC/openSUSE:Factory/brightnessctl/brightnessctl.changes      
2019-05-22 12:20:07.840846161 +0200
+++ /work/SRC/openSUSE:Factory/.brightnessctl.new.26092/brightnessctl.changes   
2020-01-31 23:59:14.091712048 +0100
@@ -1,0 +2,15 @@
+Thu Jan 30 08:52:07 UTC 2020 - Dan Čermák <[email protected]>
+
+- Add support for using logind mode for recent distributions
+  cherry pick patches from upstream:
+  * 0001-Fixed-inconsistency-in-README-thanks-AJGQ.patch
+  * 0002-Support-the-new-SetBrightness-logind-API.patch
+  * 0003-Make-the-use-of-SetBrightness-dynamic.patch
+  * 0004-Use-non-suid-permissions-when-logind-is-used.patch
+
+-------------------------------------------------------------------
+Thu Oct 17 14:57:05 UTC 2019 - Richard Brown <[email protected]>
+
+- Remove obsolete Groups tag (fate#326485)
+
+-------------------------------------------------------------------

New:
----
  0001-Fixed-inconsistency-in-README-thanks-AJGQ.patch
  0002-Support-the-new-SetBrightness-logind-API.patch
  0003-Make-the-use-of-SetBrightness-dynamic.patch
  0004-Use-non-suid-permissions-when-logind-is-used.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ brightnessctl.spec ++++++
--- /var/tmp/diff_new_pack.7GUUbV/_old  2020-01-31 23:59:15.331712690 +0100
+++ /var/tmp/diff_new_pack.7GUUbV/_new  2020-01-31 23:59:15.335712692 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package brightnessctl
 #
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
 # Copyright (c) 2019 R Tyler Croy <[email protected]>
 # Copyright (c) 2016 Fabio Alessandro Locati <[email protected]>
 #
@@ -18,37 +18,69 @@
 #
 
 
+# use systemd-logind instead of udev for systemd >= 243
+%if 0%{?sle_version} >= 150200 || 0%{?suse_version} > 1500
+%global use_logind 1
+%else
+%global use_logind 0
+%endif
 Name:           brightnessctl
 Version:        0.4
 Release:        0
 Summary:        Tool to read and control device brightness
 License:        MIT
-Group:          System/Management
 URL:            https://github.com/Hummer12007/%{name}
-Source:         
https://github.com/Hummer12007/brightnessctl/archive/%{version}.tar.gz
+Source:         %{URL}/archive/%{version}.tar.gz
+# required to resolve cherry pick conflicts
+# 
https://github.com/Hummer12007/brightnessctl/commit/aa6a71cd8206992a64269239f038dbf5f516e54a
+Patch0:         0001-Fixed-inconsistency-in-README-thanks-AJGQ.patch
+# https://github.com/Hummer12007/brightnessctl/pull/33
+Patch1:         0002-Support-the-new-SetBrightness-logind-API.patch
+Patch2:         0003-Make-the-use-of-SetBrightness-dynamic.patch
+# https://github.com/Hummer12007/brightnessctl/pull/41
+Patch3:         0004-Use-non-suid-permissions-when-logind-is-used.patch
 BuildRequires:  gcc
 BuildRequires:  make
+%if %{use_logind}
+BuildRequires:  pkgconfig(libsystemd)
+Requires:       systemd >= 243
+%else
 BuildRequires:  systemd-rpm-macros
+%endif
 
 %description
 A utility to read and control the display brightness.
 
 %prep
-%autosetup
+%autosetup -N
+%if %{use_logind}
+%autopatch -p1
+%endif
 
 %build
-export CFLAGS="%{optflags}"
+%if %{use_logind}
+export ENABLE_SYSTEMD=1
+%{set_build_flags}
+%else
 export MODE="4755"
+export CFLAGS="%{optflags}"
+%endif
 %make_build
 
 %install
+%if %{use_logind}
+%make_install INSTALL_UDEV_RULES=0 ENABLE_SYSTEMD=1 PREFIX=%{_prefix}
+%else
 %make_install UDEVDIR=%{_udevrulesdir}
+%endif
 
 %files
 %doc README.md
 %license LICENSE
 %{_bindir}/%{name}
+%if ! %{use_logind}
 %{_udevrulesdir}/90-brightnessctl.rules
+%endif
 %{_mandir}/man1/brightnessctl.1%{?ext_man}
 
 %changelog

++++++ 0001-Fixed-inconsistency-in-README-thanks-AJGQ.patch ++++++
>From 5bee979cd84347369027b45b5df5d917b3231ab6 Mon Sep 17 00:00:00 2001
From: Hummer12007 <[email protected]>
Date: Fri, 2 Aug 2019 15:23:38 +0300
Subject: [PATCH 1/4] Fixed inconsistency in README (thanks @AJGQ)

Closes #28
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 92b65b0..0042bb4 100644
--- a/README.md
+++ b/README.md
@@ -23,7 +23,7 @@ Modifying brightness requires write permissions for device 
files. `brightnessctl
 
 2) installing `brightnessctl` as a suid binary.
 
-The behavior is controlled by the `INSTALL_UDEV_RULES` flag (setting it to `1` 
installs the udev rules, `0` is the default value).
+The behavior is controlled by the `INSTALL_UDEV_RULES` flag (setting it to `1` 
installs the udev rules, it is the default value).
 
 ## Usage
 ```
-- 
2.25.0

++++++ 0002-Support-the-new-SetBrightness-logind-API.patch ++++++
>From d8dfd8ed49762922e9ff8ebd19b2607fc6cd60aa Mon Sep 17 00:00:00 2001
From: Antoine Damhet <[email protected]>
Date: Tue, 10 Sep 2019 00:24:05 +0200
Subject: [PATCH 2/4] Support the new `SetBrightness` logind API

This API from `org.freedesktop.login1.Session` allows an unprivileged
user with an active session to change its own backlight.

Systemd >= v243 is needed.

Signed-off-by: Antoine Damhet <[email protected]>
---
 Makefile        |  6 ++++++
 README.md       |  6 +++++-
 brightnessctl.c | 48 +++++++++++++++++++++++++++++++++++++++++++++++-
 3 files changed, 58 insertions(+), 2 deletions(-)

diff --git a/Makefile b/Makefile
index f324efd..22ff475 100644
--- a/Makefile
+++ b/Makefile
@@ -11,6 +11,12 @@ INSTALL_UDEV_RULES = 1
 INSTALL_UDEV_1 = install_udev_rules
 UDEVDIR ?= /lib/udev/rules.d
 
+ifdef ENABLE_SYSTEMD
+       CFLAGS += ${shell pkg-config --cflags libsystemd}
+       LDLIBS += ${shell pkg-config --libs libsystemd}
+       CPPFLAGS += -DENABLE_SYSTEMD
+endif
+
 MODE_0 = 4711
 MODE_1 = 0755
 MODE = ${MODE_${INSTALL_UDEV_RULES}}
diff --git a/README.md b/README.md
index 0042bb4..b57d3df 100644
--- a/README.md
+++ b/README.md
@@ -17,14 +17,18 @@ One can build and install the program using `make install`. 
Consult the Makefile
 
 ## Permissions
 
-Modifying brightness requires write permissions for device files. 
`brightnessctl` accomplishes this (without using `sudo`/`su`/etc.) by either of 
the following means:
+Modifying brightness requires write permissions for device files or systemd 
support. `brightnessctl` accomplishes this (without using `sudo`/`su`/etc.) by 
either of the following means:
 
 1) installing relevant udev rules to add permissions to backlight class 
devices for users in `video` and leds for users in `input`. (done by default)
 
 2) installing `brightnessctl` as a suid binary.
 
+3) using the `systemd-logind` API.
+
 The behavior is controlled by the `INSTALL_UDEV_RULES` flag (setting it to `1` 
installs the udev rules, it is the default value).
 
+The systemd support (since v243) is controlled by the `ENABLE_SYSTEMD` flag 
(in that case it is recommended to set `INSTALL_UDEV_RULES` to 0).
+
 ## Usage
 ```
 Usage: brightnessctl [options] [operation] [value]
diff --git a/brightnessctl.c b/brightnessctl.c
index eb3ce3c..3fec6ec 100644
--- a/brightnessctl.c
+++ b/brightnessctl.c
@@ -14,6 +14,10 @@
 #include <string.h>
 #include <math.h>
 
+#ifdef ENABLE_SYSTEMD
+# include <systemd/sd-bus.h>
+#endif
+
 static char *path = "/sys/class";
 static char *classes[] = { "backlight", "leds", NULL };
 
@@ -101,7 +105,12 @@ int main(int argc, char **argv) {
        struct device *devs[255];
        struct device *dev;
        struct utsname name;
-       char *dev_name, *file_path, *sys_run_dir;
+       char *dev_name, *sys_run_dir;
+
+#ifndef ENABLE_SYSTEMD
+       char *file_path;
+#endif
+
        int n, c, phelp = 0;
        if (uname(&name))
                fail("Unable to determine current OS. Exiting!\n");
@@ -194,6 +203,8 @@ int main(int argc, char **argv) {
                fail("Invalid value given");
        if (!(dev = find_device(devs, dev_name)))
                fail("Device '%s' not found.\n", dev_name);
+
+#ifndef ENABLE_SYSTEMD
        if ((p.operation == SET || p.restore) && !p.pretend && geteuid()) {
                errno = 0;
                file_path = cat_with('/', path, dev->class, dev->id, 
"brightness");
@@ -204,6 +215,8 @@ int main(int argc, char **argv) {
                }
                free(file_path);
        }
+#endif
+
        if ((sys_run_dir = getenv("XDG_RUNTIME_DIR")))
            run_dir = dir_child(sys_run_dir, "brightnessctl");
        if (p.save)
@@ -325,6 +338,37 @@ apply:
        d->curr_brightness = new;
 }
 
+#ifdef ENABLE_SYSTEMD
+
+bool write_device(struct device *d) {
+       sd_bus *bus = NULL;
+       int r = sd_bus_default_system(&bus);
+       if (r < 0) {
+               fprintf(stderr, "Can't connect to system bus: %s\n", 
strerror(-r));
+               return false;
+       }
+
+       r = sd_bus_call_method(bus,
+                              "org.freedesktop.login1",
+                              "/org/freedesktop/login1/session/auto",
+                              "org.freedesktop.login1.Session",
+                              "SetBrightness",
+                              NULL,
+                              NULL,
+                              "ssu",
+                              d->class,
+                              d->id,
+                              d->curr_brightness);
+       if (r < 0)
+               fprintf(stderr, "Failed to set brightness: %s\n", strerror(-r));
+
+       sd_bus_unref(bus);
+
+       return r >= 0;
+}
+
+#else
+
 bool write_device(struct device *d) {
        FILE *f;
        char c[16];
@@ -348,6 +392,8 @@ fail:
        return !errno;
 }
 
+#endif
+
 bool read_device(struct device *d, char *class, char *id) {
        DIR *dirp;
        FILE *f;
-- 
2.25.0

++++++ 0003-Make-the-use-of-SetBrightness-dynamic.patch ++++++
>From 658d5d058cb03a94269f8eec5b7ac4f1e8c43880 Mon Sep 17 00:00:00 2001
From: Antoine Damhet <[email protected]>
Date: Tue, 10 Sep 2019 08:52:59 +0200
Subject: [PATCH 3/4] Make the use of `SetBrightness` dynamic

It will only be used if the user do not have the permission to directly
write to the backlight device.

Signed-off-by: Antoine Damhet <[email protected]>
---
 brightnessctl.c | 31 +++++++++++++++----------------
 1 file changed, 15 insertions(+), 16 deletions(-)

diff --git a/brightnessctl.c b/brightnessctl.c
index 3fec6ec..576e591 100644
--- a/brightnessctl.c
+++ b/brightnessctl.c
@@ -38,7 +38,7 @@ static char *class_path(char *);
 static void apply_value(struct device *, struct value *);
 static int apply_operation(struct device *, enum operation, struct value *);
 static bool parse_value(struct value *, char *);
-static bool write_device(struct device *);
+static bool do_write_device(struct device *);
 static bool read_device(struct device *, char *, char *);
 static int read_class(struct device **, char *);
 static int read_devices(struct device **);
@@ -50,6 +50,10 @@ static bool restore_device_data(struct device *);
 static bool ensure_dir(char *);
 #define ensure_run_dir() ensure_dir(run_dir)
 
+#ifdef ENABLE_SYSTEMD
+static bool logind_set_brightness(struct device *);
+#endif
+
 struct device {
        char *class;
        char *id;
@@ -101,16 +105,13 @@ static const struct option options[] = {
        {NULL,}
 };
 
+static bool (*write_device)(struct device *) = do_write_device;
+
 int main(int argc, char **argv) {
        struct device *devs[255];
        struct device *dev;
        struct utsname name;
-       char *dev_name, *sys_run_dir;
-
-#ifndef ENABLE_SYSTEMD
-       char *file_path;
-#endif
-
+       char *dev_name, *file_path, *sys_run_dir;
        int n, c, phelp = 0;
        if (uname(&name))
                fail("Unable to determine current OS. Exiting!\n");
@@ -203,20 +204,20 @@ int main(int argc, char **argv) {
                fail("Invalid value given");
        if (!(dev = find_device(devs, dev_name)))
                fail("Device '%s' not found.\n", dev_name);
-
-#ifndef ENABLE_SYSTEMD
        if ((p.operation == SET || p.restore) && !p.pretend && geteuid()) {
                errno = 0;
                file_path = cat_with('/', path, dev->class, dev->id, 
"brightness");
                if (access(file_path, W_OK)) {
+#ifdef ENABLE_SYSTEMD
+                       write_device = logind_set_brightness;
+#else
                        perror("Can't modify brightness");
                        fail("\nYou should run this program with root 
privileges.\n"
                                "Alternatively, get write permissions for 
device files.\n");
+#endif
                }
                free(file_path);
        }
-#endif
-
        if ((sys_run_dir = getenv("XDG_RUNTIME_DIR")))
            run_dir = dir_child(sys_run_dir, "brightnessctl");
        if (p.save)
@@ -340,7 +341,7 @@ apply:
 
 #ifdef ENABLE_SYSTEMD
 
-bool write_device(struct device *d) {
+bool logind_set_brightness(struct device *d) {
        sd_bus *bus = NULL;
        int r = sd_bus_default_system(&bus);
        if (r < 0) {
@@ -367,9 +368,9 @@ bool write_device(struct device *d) {
        return r >= 0;
 }
 
-#else
+#endif
 
-bool write_device(struct device *d) {
+bool do_write_device(struct device *d) {
        FILE *f;
        char c[16];
        size_t s = sprintf(c, "%u", d->curr_brightness);
@@ -392,8 +393,6 @@ fail:
        return !errno;
 }
 
-#endif
-
 bool read_device(struct device *d, char *class, char *id) {
        DIR *dirp;
        FILE *f;
-- 
2.25.0

++++++ 0004-Use-non-suid-permissions-when-logind-is-used.patch ++++++
>From 4e815152fb366972ca24ce17d3d25f337a3b01b9 Mon Sep 17 00:00:00 2001
From: Christian Kellner <[email protected]>
Date: Sun, 26 Jan 2020 13:15:40 +0100
Subject: [PATCH 4/4] Use non-suid permissions when logind is used

When systemd-logind and its D-Bus API is used to actual change the
brightness of devices the binary does not have to be suid, which is
desired for security reasons.
---
 Makefile | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/Makefile b/Makefile
index 22ff475..fcd746a 100644
--- a/Makefile
+++ b/Makefile
@@ -11,16 +11,17 @@ INSTALL_UDEV_RULES = 1
 INSTALL_UDEV_1 = install_udev_rules
 UDEVDIR ?= /lib/udev/rules.d
 
+MODE_0 = 4711
+MODE_1 = 0755
+MODE = ${MODE_${INSTALL_UDEV_RULES}}
+
 ifdef ENABLE_SYSTEMD
        CFLAGS += ${shell pkg-config --cflags libsystemd}
        LDLIBS += ${shell pkg-config --libs libsystemd}
        CPPFLAGS += -DENABLE_SYSTEMD
+       MODE = 0755
 endif
 
-MODE_0 = 4711
-MODE_1 = 0755
-MODE = ${MODE_${INSTALL_UDEV_RULES}}
-
 all: brightnessctl brightnessctl.1
 
 install: all ${INSTALL_UDEV_${INSTALL_UDEV_RULES}}
-- 
2.25.0


Reply via email to