PolicyKit: Branch 'master'

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jul 15 12:36:07 UTC 2021


 .gitlab-ci.yml        |    3 --
 meson_post_install.py |   58 +++++++++++++++++++++++++++++++++++++++++---------
 2 files changed, 49 insertions(+), 12 deletions(-)

New commits:
commit 6c8022392713955c5ae0061e22b50a16a1c2252a
Author: Simon McVittie <smcv at collabora.com>
Date:   Thu Jul 15 12:36:05 2021 +0000

    Improve meson_post_install script

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8ac3e9f..6d0abb4 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -26,8 +26,6 @@ build_stable:
   before_script:
     - dnf upgrade -y --nogpgcheck fedora-release fedora-repos*
     - dnf update -y && dnf install -y $DEPENDENCIES
-    - getent group polkitd >/dev/null || groupadd -r polkitd
-    - getent passwd polkitd >/dev/null || useradd -r -g polkitd -d / -s /sbin/nologin -c "User for polkitd" polkitd
 
   script:
     - meson setup 
@@ -43,6 +41,7 @@ build_stable:
     - meson compile -C builddir
     - meson test    -C builddir
     - meson install -C builddir
+    - DESTDIR=$(pwd)/DESTDIR meson install -C builddir
   artifacts:
     name: 'test logs'
     when: 'always'
diff --git a/meson_post_install.py b/meson_post_install.py
index 0a0fccf..0ab7469 100644
--- a/meson_post_install.py
+++ b/meson_post_install.py
@@ -1,20 +1,44 @@
 #!/usr/bin/env python3
 
-import getpass
 import os
 import pwd
 import sys
 
+destdir = os.environ.get('DESTDIR')
 prefix = os.environ['MESON_INSTALL_DESTDIR_PREFIX']
 
-bindir = os.path.join(prefix, sys.argv[1])
-pkgdatadir = os.path.join(prefix, sys.argv[2])
-pkglibdir = os.path.join(prefix, sys.argv[3])
-pkgsysconfdir = os.path.join(prefix, sys.argv[4])
+def destdir_path(p):
+    if os.path.isabs(p):
+        if destdir is None:
+            return p
+        else:
+            return os.path.join(destdir, os.path.relpath(p, '/'))
+    else:
+        return os.path.join(prefix, p)
 
-polkitd_uid = pwd.getpwnam(sys.argv[5]).pw_uid
+bindir = destdir_path(sys.argv[1])
+pkgdatadir = destdir_path(sys.argv[2])
+pkglibdir = destdir_path(sys.argv[3])
+pkgsysconfdir = destdir_path(sys.argv[4])
+polkitd_user = sys.argv[5]
 
-os.chmod(os.path.join(bindir, 'pkexec'), 0o4775)
+try:
+    polkitd_uid = pwd.getpwnam(polkitd_user).pw_uid
+except KeyError:
+    polkitd_uid = None
+
+dst = os.path.join(bindir, 'pkexec')
+
+if os.geteuid() == 0:
+    os.chmod(dst, 0o4755)
+    os.chown(dst, 0, -1)
+else:
+    print(
+        'Owner and mode of {} need to be setuid root (04755) after '
+        'installation'.format(
+            dst,
+        )
+    )
 
 dst_dirs = [
     os.path.join(pkgsysconfdir, 'rules.d'),
@@ -24,13 +48,27 @@ dst_dirs = [
 for dst in dst_dirs:
     if not os.path.exists(dst):
         os.makedirs(dst, mode=0o700)
-        if getpass.getuser() == "root":
+        if os.geteuid() == 0 and polkitd_uid is not None:
             os.chown(dst, polkitd_uid, -1)
+        else:
+            print(
+                'Owner of {} needs to be set to {} after installation'.format(
+                    dst, polkitd_user,
+                )
+            )
 
 # polkit-agent-helper-1 need to be setuid root because it's used to
 # authenticate not only the invoking user, but possibly also root
 # and/or other users.
 dst = os.path.join(pkglibdir, 'polkit-agent-helper-1')
-os.chmod(dst, 0o4755)
-if getpass.getuser() == "root":
+
+if os.geteuid() == 0:
+    os.chmod(dst, 0o4755)
     os.chown(dst, 0, -1)
+else:
+    print(
+        'Owner and mode of {} need to be setuid root (04755) after '
+        'installation'.format(
+            dst,
+        )
+    )


More information about the hal-commit mailing list