diff options
Diffstat (limited to 'testing/polkit')
-rw-r--r-- | testing/polkit/PKGBUILD | 43 | ||||
-rwxr-xr-x | testing/polkit/autogen.sh | 123 | ||||
-rw-r--r-- | testing/polkit/fix-empty-wheel.patch | 47 | ||||
-rw-r--r-- | testing/polkit/logind+ConsoleKit.patch | 638 | ||||
-rw-r--r-- | testing/polkit/polkit.install | 18 | ||||
-rw-r--r-- | testing/polkit/polkit.pam | 7 |
6 files changed, 0 insertions, 876 deletions
diff --git a/testing/polkit/PKGBUILD b/testing/polkit/PKGBUILD deleted file mode 100644 index 70bb6e4d8..000000000 --- a/testing/polkit/PKGBUILD +++ /dev/null @@ -1,43 +0,0 @@ -# $Id: PKGBUILD 169160 2012-10-18 19:22:54Z jgc $ -# Maintainer: Jan de Groot <jgc@archlinux.org> - -pkgname=polkit -pkgver=0.107 -pkgrel=4 -pkgdesc="Application development toolkit for controlling system-wide privileges" -arch=(i686 x86_64) -license=('LGPL') -url="http://www.freedesktop.org/wiki/Software/PolicyKit" -depends=('glib2' 'pam' 'expat' 'libsystemd' 'js') -makedepends=('intltool' 'gtk-doc' 'gobject-introspection') -replaces=('policykit') -options=('!libtool') -install=polkit.install -source=(http://www.freedesktop.org/software/polkit/releases/$pkgname-$pkgver.tar.gz - polkit.pam fix-empty-wheel.patch) -md5sums=('0e4f9c53f43fd1b25ac3f0d2e09b2ae1' - '6564f95878297b954f0572bc1610dd15' - 'c99ab2a7919ad0b69fde4804c043b07f') - -build() { - cd $pkgname-$pkgver - - # https://bugs.archlinux.org/task/31717 - patch -Np1 -i ../fix-empty-wheel.patch - - ./configure --prefix=/usr --sysconfdir=/etc \ - --localstatedir=/var --libexecdir=/usr/lib/polkit-1 \ - --with-systemdsystemunitdir=/usr/lib/systemd/system \ - --disable-static --enable-gtk-doc - make -} - -package() { - cd $pkgname-$pkgver - make DESTDIR="$pkgdir" install - - chown 102 "$pkgdir/etc/polkit-1/rules.d" - chown 102 "$pkgdir/usr/share/polkit-1/rules.d" - - install -m644 "$srcdir/polkit.pam" "$pkgdir/etc/pam.d/polkit-1" -} diff --git a/testing/polkit/autogen.sh b/testing/polkit/autogen.sh deleted file mode 100755 index d08b00a49..000000000 --- a/testing/polkit/autogen.sh +++ /dev/null @@ -1,123 +0,0 @@ -#!/bin/sh -# Run this to generate all the initial makefiles, etc. - -srcdir=`dirname $0` -test -z "$srcdir" && srcdir=. - -DIE=0 - -(test -f $srcdir/configure.ac) || { - echo -n "**Error**: Directory $srcdir does not look like the" - echo " top-level package directory" - exit 1 -} - -olddir=`pwd` -cd "$srcdir" - -touch ChangeLog - -(autoconf --version) < /dev/null > /dev/null 2>&1 || { - echo - echo "**Error**: You must have autoconf installed." - echo "Download the appropriate package for your distribution," - echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" - DIE=1 -} - -(grep "^AM_PROG_LIBTOOL" configure.ac >/dev/null) && { - (libtoolize --version) < /dev/null > /dev/null 2>&1 || { - echo - echo "**Error**: You must have libtool installed." - echo "You can get it from: ftp://ftp.gnu.org/pub/gnu/" - DIE=1 - } -} - -(gtkdocize --flavour no-tmpl) < /dev/null > /dev/null 2>&1 || { - echo - echo "You must have gtk-doc installed to compile $PROJECT." - echo "Install the appropriate package for your distribution," - echo "or get the source tarball at http://ftp.gnome.org/pub/GNOME/sources/gtk-doc/" - DIE=1 -} - -(automake --version) < /dev/null > /dev/null 2>&1 || { - echo - echo "**Error**: You must have automake installed." - echo "You can get it from: ftp://ftp.gnu.org/pub/gnu/" - DIE=1 - NO_AUTOMAKE=yes -} - - -# if no automake, don't bother testing for aclocal -test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&1 || { - echo - echo "**Error**: Missing aclocal. The version of automake" - echo "installed doesn't appear recent enough." - echo "You can get automake from ftp://ftp.gnu.org/pub/gnu/" - DIE=1 -} - - -# if no automake, don't bother testing for autoreconf -test -n "$NO_AUTOMAKE" || (autoreconf --version) < /dev/null > /dev/null 2>&1 || { - echo - echo "**Error**: You must have autoreconf installed." - echo "You can get autoreconf from ..." - DIE=1 -} - - -if test "$DIE" -eq 1; then - exit 1 -fi - -if test -z "$*"; then - echo "**Warning**: I am going to run configure with no arguments." - echo "If you wish to pass any to it, please specify them on the" - echo $0 " command line." - echo -fi - -case $CC in -xlc ) - am_opt=--include-deps;; -esac - - aclocalinclude="$ACLOCAL_FLAGS" - - echo "Running autoreconf on test/mocklibc ..." - (cd "test/mocklibc"; autoreconf --install) - - if grep "^AM_PROG_LIBTOOL" configure.ac >/dev/null; then - if test -z "$NO_LIBTOOLIZE" ; then - echo "Running libtoolize..." - libtoolize --force --copy - fi - fi - echo "Running aclocal $aclocalinclude ..." - aclocal $aclocalinclude - if grep "^AM_CONFIG_HEADER" configure.ac >/dev/null; then - echo "Running autoheader..." - autoheader - fi - echo "Running automake --gnu -Wno-portability $am_opt ..." - automake --add-missing --gnu -Wno-portability $am_opt - echo "Running autoconf ..." - autoconf - -intltoolize --copy --force --automake || exit 1 - -cd "$olddir" - -conf_flags="--enable-maintainer-mode --enable-gtk-doc" - -if test x$NOCONFIGURE = x; then - echo "Running $srcdir/configure $conf_flags $@ ..." - $srcdir/configure $conf_flags "$@" \ - && echo "Now type make to compile." || exit 1 -else - echo "Skipping configure process." -fi diff --git a/testing/polkit/fix-empty-wheel.patch b/testing/polkit/fix-empty-wheel.patch deleted file mode 100644 index d6f99c43d..000000000 --- a/testing/polkit/fix-empty-wheel.patch +++ /dev/null @@ -1,47 +0,0 @@ -From fa04223240d46641b0773dbf9f7d72f529046bea Mon Sep 17 00:00:00 2001 -From: David Zeuthen <zeuthen@gmail.com> -Date: Tue, 18 Sep 2012 18:47:06 +0000 -Subject: Fall back to authenticating as uid 0 if the list of admin identities is empty - -For example, this can happen if the wheel group has no members. This -was reported in Red Hat bug 834494, see - - https://bugzilla.redhat.com/show_bug.cgi?id=834494 - -Signed-off-by: David Zeuthen <zeuthen@gmail.com> ---- -diff --git a/src/polkitbackend/polkitbackendinteractiveauthority.c b/src/polkitbackend/polkitbackendinteractiveauthority.c -index 1d4a555..3bd2f0b 100644 ---- a/src/polkitbackend/polkitbackendinteractiveauthority.c -+++ b/src/polkitbackend/polkitbackendinteractiveauthority.c -@@ -1293,15 +1293,11 @@ polkit_backend_interactive_authority_get_admin_identities (PolkitBackendInteract - PolkitDetails *details) - { - PolkitBackendInteractiveAuthorityClass *klass; -- GList *ret; -+ GList *ret = NULL; - - klass = POLKIT_BACKEND_INTERACTIVE_AUTHORITY_GET_CLASS (authority); - -- if (klass->get_admin_identities == NULL) -- { -- ret = g_list_prepend (NULL, polkit_unix_user_new (0)); -- } -- else -+ if (klass->get_admin_identities != NULL) - { - ret = klass->get_admin_identities (authority, - caller, -@@ -2257,6 +2253,10 @@ authentication_agent_initiate_challenge (AuthenticationAgent *agent, - } - } - -+ /* Fall back to uid 0 if no users are available (rhbz #834494) */ -+ if (user_identities == NULL) -+ user_identities = g_list_prepend (NULL, polkit_unix_user_new (0)); -+ - session = authentication_session_new (agent, - cookie, - subject, --- -cgit v0.9.0.2-2-gbebe diff --git a/testing/polkit/logind+ConsoleKit.patch b/testing/polkit/logind+ConsoleKit.patch deleted file mode 100644 index 042d1043a..000000000 --- a/testing/polkit/logind+ConsoleKit.patch +++ /dev/null @@ -1,638 +0,0 @@ -From ba143769e17e4bbc1f2b0c88e735f993dfb3c873 Mon Sep 17 00:00:00 2001 -From: Tom Gundersen <teg@jklm.no> -Date: Tue, 7 Aug 2012 21:06:18 +0200 -Subject: [PATCH] session tracking: always require consolekit - -Only systemd is now optional at compile-time, and if enabled we fallback to consolekit -at runtime, if not booted with systemd. - -Bits-stolen-from: Jan Alexander Steffens <jan.steffens@gmail.com> -Signed-off-by: Tom Gundersen <teg@jklm.no> ---- - configure.ac | 6 +- - src/polkit/polkitunixsession-systemd.c | 96 ++++++- - src/polkitbackend/polkitbackendjsauthority.c | 10 +- - .../polkitbackendsessionmonitor-systemd.c | 313 +++++++++++++++++++-- - 4 files changed, 380 insertions(+), 45 deletions(-) - -diff --git a/configure.ac b/configure.ac -index 7a0d938..1d1e4ba 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -163,15 +163,15 @@ AC_ARG_ENABLE([libsystemd-login], - [enable_libsystemd_login=auto]) - if test "$enable_libsystemd_login" != "no"; then - PKG_CHECK_MODULES(LIBSYSTEMD_LOGIN, -- [libsystemd-login], -+ [libsystemd-login libsystemd-daemon], - have_libsystemd_login=yes, - have_libsystemd_login=no) - if test "$have_libsystemd_login" = "yes"; then -- SESSION_TRACKING=libsystemd-login -+ SESSION_TRACKING="libsystemd-login (with ConsoleKit runtime fallback)" - AC_DEFINE([HAVE_LIBSYSTEMD_LOGIN], 1, [Define to 1 if libsystemd-login is available]) - else - if test "$enable_libsystemd_login" = "yes"; then -- AC_MSG_ERROR([libsystemd-login support requested but libsystemd-login library not found]) -+ AC_MSG_ERROR([libsystemd-login support requested but systemd libraries not found]) - fi - fi - fi -diff --git a/src/polkit/polkitunixsession-systemd.c b/src/polkit/polkitunixsession-systemd.c -index 8a8bf65..bb89044 100644 ---- a/src/polkit/polkitunixsession-systemd.c -+++ b/src/polkit/polkitunixsession-systemd.c -@@ -1,5 +1,5 @@ - /* -- * Copyright (C) 2011 Red Hat, Inc. -+ * Copyright (C) 2008, 2011 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public -@@ -17,6 +17,7 @@ - * Boston, MA 02111-1307, USA. - * - * Author: Matthias Clasen -+ * Author: David Zeuthen <davidz@redhat.com> - */ - - #ifdef HAVE_CONFIG_H -@@ -31,6 +32,7 @@ - #include "polkitprivate.h" - - #include <systemd/sd-login.h> -+#include <systemd/sd-daemon.h> - - /** - * SECTION:polkitunixsession -@@ -367,9 +369,41 @@ polkit_unix_session_exists_sync (PolkitSubject *subject, - PolkitUnixSession *session = POLKIT_UNIX_SESSION (subject); - gboolean ret = FALSE; - uid_t uid; -+ GDBusConnection *connection; /* consolekit */ -+ GVariant *result; /* consolekit */ - -- if (sd_session_get_uid (session->session_id, &uid) == 0) -- ret = TRUE; -+ if (sd_booted()) -+ { -+ if (sd_session_get_uid (session->session_id, &uid) == 0) -+ ret = TRUE; -+ } -+ else /* consolekit */ -+ { -+ connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, cancellable, error); -+ if (connection == NULL) -+ goto out; -+ -+ result = g_dbus_connection_call_sync (connection, -+ "org.freedesktop.ConsoleKit", /* name */ -+ session->session_id, /* object path */ -+ "org.freedesktop.ConsoleKit.Session", /* interface name */ -+ "GetUser", /* method */ -+ NULL, /* parameters */ -+ G_VARIANT_TYPE ("(u)"), -+ G_DBUS_CALL_FLAGS_NONE, -+ -1, -+ cancellable, -+ error); -+ if (result == NULL) -+ goto out; -+ -+ ret = TRUE; -+ g_variant_unref (result); -+ -+ out: -+ if (connection != NULL) -+ g_object_unref (connection); -+ } - - return ret; - } -@@ -451,29 +485,61 @@ polkit_unix_session_initable_init (GInitable *initable, - PolkitUnixSession *session = POLKIT_UNIX_SESSION (initable); - gboolean ret = FALSE; - char *s; -+ GDBusConnection *connection; /* consolekit */ -+ GVariant *result; /* consolekit */ -+ connection = NULL; /* consolekit */ - - if (session->session_id != NULL) - { - /* already set, nothing to do */ -- ret = TRUE; -- goto out; -+ return TRUE; - } - -- if (sd_pid_get_session (session->pid, &s) == 0) -+ if (sd_booted()) -+ { -+ if (sd_pid_get_session (session->pid, &s) == 0) -+ { -+ session->session_id = g_strdup (s); -+ free (s); -+ return TRUE; -+ } -+ -+ g_set_error (error, -+ POLKIT_ERROR, -+ POLKIT_ERROR_FAILED, -+ "No session for pid %d", -+ (gint) session->pid); -+ } -+ else /* consolekit */ - { -- session->session_id = g_strdup (s); -- free (s); -+ connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, cancellable, error); -+ if (connection == NULL) -+ goto out; -+ -+ result = g_dbus_connection_call_sync (connection, -+ "org.freedesktop.ConsoleKit", /* name */ -+ "/org/freedesktop/ConsoleKit/Manager", /* object path */ -+ "org.freedesktop.ConsoleKit.Manager", /* interface name */ -+ "GetSessionForUnixProcess", /* method */ -+ g_variant_new ("(u)", session->pid), /* parameters */ -+ G_VARIANT_TYPE ("(o)"), -+ G_DBUS_CALL_FLAGS_NONE, -+ -1, -+ cancellable, -+ error); -+ if (result == NULL) -+ goto out; -+ -+ g_variant_get (result, "(o)", &session->session_id); -+ g_variant_unref (result); -+ - ret = TRUE; -- goto out; - } - -- g_set_error (error, -- POLKIT_ERROR, -- POLKIT_ERROR_FAILED, -- "No session for pid %d", -- (gint) session->pid); -+ out: -+ if (connection != NULL) /* consolekit */ -+ g_object_unref (connection); - --out: - return ret; - } - -diff --git a/src/polkitbackend/polkitbackendjsauthority.c b/src/polkitbackend/polkitbackendjsauthority.c -index bdfaa73..ee38739 100644 ---- a/src/polkitbackend/polkitbackendjsauthority.c -+++ b/src/polkitbackend/polkitbackendjsauthority.c -@@ -36,6 +36,7 @@ - - #ifdef HAVE_LIBSYSTEMD_LOGIN - #include <systemd/sd-login.h> -+#include <systemd/sd-daemon.h> - #endif /* HAVE_LIBSYSTEMD_LOGIN */ - - #include <jsapi.h> -@@ -731,11 +732,14 @@ subject_to_jsval (PolkitBackendJsAuthority *authority, - } - - #ifdef HAVE_LIBSYSTEMD_LOGIN -- if (sd_pid_get_session (pid, &session_str) == 0) -+ if (sd_booted()) - { -- if (sd_session_get_seat (session_str, &seat_str) == 0) -+ if (sd_pid_get_session (pid, &session_str) == 0) - { -- /* do nothing */ -+ if (sd_session_get_seat (session_str, &seat_str) == 0) -+ { -+ /* do nothing */ -+ } - } - } - #endif /* HAVE_LIBSYSTEMD_LOGIN */ -diff --git a/src/polkitbackend/polkitbackendsessionmonitor-systemd.c b/src/polkitbackend/polkitbackendsessionmonitor-systemd.c -index 58593c3..5114dfa 100644 ---- a/src/polkitbackend/polkitbackendsessionmonitor-systemd.c -+++ b/src/polkitbackend/polkitbackendsessionmonitor-systemd.c -@@ -26,11 +26,15 @@ - #include <string.h> - #include <glib/gstdio.h> - #include <systemd/sd-login.h> -+#include <systemd/sd-daemon.h> - #include <stdlib.h> - - #include <polkit/polkit.h> - #include "polkitbackendsessionmonitor.h" - -+/* consolekit */ -+#define CKDB_PATH "/var/run/ConsoleKit/database" -+ - /* <internal> - * SECTION:polkitbackendsessionmonitor - * @title: PolkitBackendSessionMonitor -@@ -126,6 +130,11 @@ struct _PolkitBackendSessionMonitor - GDBusConnection *system_bus; - - GSource *sd_source; -+ -+ /* consolekit */ -+ GKeyFile *database; -+ GFileMonitor *database_monitor; -+ time_t database_mtime; - }; - - struct _PolkitBackendSessionMonitorClass -@@ -148,6 +157,101 @@ G_DEFINE_TYPE (PolkitBackendSessionMonitor, polkit_backend_session_monitor, G_TY - - /* ---------------------------------------------------------------------------------------------------- */ - -+/* consolekit */ -+static gboolean -+reload_database (PolkitBackendSessionMonitor *monitor, -+ GError **error) -+{ -+ gboolean ret; -+ struct stat statbuf; -+ -+ ret = FALSE; -+ -+ if (monitor->database != NULL) -+ { -+ g_key_file_free (monitor->database); -+ monitor->database = NULL; -+ } -+ -+ if (stat (CKDB_PATH, &statbuf) != 0) -+ { -+ g_set_error (error, -+ G_IO_ERROR, -+ g_io_error_from_errno (errno), -+ "Error statting file " CKDB_PATH ": %s", -+ strerror (errno)); -+ goto out; -+ } -+ -+ monitor->database_mtime = statbuf.st_mtime; -+ -+ monitor->database = g_key_file_new (); -+ if (!g_key_file_load_from_file (monitor->database, -+ CKDB_PATH, -+ G_KEY_FILE_NONE, -+ error)) -+ { -+ goto out; -+ } -+ -+ ret = TRUE; -+ -+ out: -+ return ret; -+} -+ -+static gboolean -+ensure_database (PolkitBackendSessionMonitor *monitor, -+ GError **error) -+{ -+ gboolean ret = FALSE; -+ -+ if (monitor->database != NULL) -+ { -+ struct stat statbuf; -+ -+ if (stat (CKDB_PATH, &statbuf) != 0) -+ { -+ g_set_error (error, -+ G_IO_ERROR, -+ g_io_error_from_errno (errno), -+ "Error statting file " CKDB_PATH " to check timestamp: %s", -+ strerror (errno)); -+ goto out; -+ } -+ if (statbuf.st_mtime == monitor->database_mtime) -+ { -+ ret = TRUE; -+ goto out; -+ } -+ } -+ -+ ret = reload_database (monitor, error); -+ -+ out: -+ return ret; -+} -+ -+static void -+on_file_monitor_changed (GFileMonitor *file_monitor, -+ GFile *file, -+ GFile *other_file, -+ GFileMonitorEvent event_type, -+ gpointer user_data) -+{ -+ PolkitBackendSessionMonitor *monitor = POLKIT_BACKEND_SESSION_MONITOR (user_data); -+ -+ /* throw away cache */ -+ if (monitor->database != NULL) -+ { -+ g_key_file_free (monitor->database); -+ monitor->database = NULL; -+ } -+ g_signal_emit (monitor, signals[CHANGED_SIGNAL], 0); -+} -+ -+/* consolekit - end */ -+ - static gboolean - sessions_changed (gpointer user_data) - { -@@ -163,6 +267,7 @@ static void - polkit_backend_session_monitor_init (PolkitBackendSessionMonitor *monitor) - { - GError *error; -+ GFile *file; /* consolekit */ - - error = NULL; - monitor->system_bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error); -@@ -172,9 +277,41 @@ polkit_backend_session_monitor_init (PolkitBackendSessionMonitor *monitor) - g_error_free (error); - } - -- monitor->sd_source = sd_source_new (); -- g_source_set_callback (monitor->sd_source, sessions_changed, monitor, NULL); -- g_source_attach (monitor->sd_source, NULL); -+ if (sd_booted()) -+ { -+ monitor->sd_source = sd_source_new (); -+ g_source_set_callback (monitor->sd_source, sessions_changed, monitor, NULL); -+ g_source_attach (monitor->sd_source, NULL); -+ } -+ else /* consolekit */ -+ { -+ error = NULL; -+ if (!ensure_database (monitor, &error)) -+ { -+ g_printerr ("Error loading " CKDB_PATH ": %s", error->message); -+ g_error_free (error); -+ } -+ -+ error = NULL; -+ file = g_file_new_for_path (CKDB_PATH); -+ monitor->database_monitor = g_file_monitor_file (file, -+ G_FILE_MONITOR_NONE, -+ NULL, -+ &error); -+ g_object_unref (file); -+ if (monitor->database_monitor == NULL) -+ { -+ g_printerr ("Error monitoring " CKDB_PATH ": %s", error->message); -+ g_error_free (error); -+ } -+ else -+ { -+ g_signal_connect (monitor->database_monitor, -+ "changed", -+ G_CALLBACK (on_file_monitor_changed), -+ monitor); -+ } -+ } - } - - static void -@@ -191,6 +328,14 @@ polkit_backend_session_monitor_finalize (GObject *object) - g_source_unref (monitor->sd_source); - } - -+ /* consolekit */ -+ if (monitor->database_monitor != NULL) -+ g_object_unref (monitor->database_monitor); -+ -+ if (monitor->database != NULL) -+ g_key_file_free (monitor->database); -+ /* consolekit - end */ -+ - if (G_OBJECT_CLASS (polkit_backend_session_monitor_parent_class)->finalize != NULL) - G_OBJECT_CLASS (polkit_backend_session_monitor_parent_class)->finalize (object); - } -@@ -258,6 +403,8 @@ polkit_backend_session_monitor_get_user_for_subject (PolkitBackendSessionMonitor - GError **error) - { - PolkitIdentity *ret; -+ GError *local_error; /* consolekit */ -+ gchar *group; /* consolekit */ - guint32 uid; - - ret = NULL; -@@ -300,16 +447,38 @@ polkit_backend_session_monitor_get_user_for_subject (PolkitBackendSessionMonitor - else if (POLKIT_IS_UNIX_SESSION (subject)) - { - -- if (sd_session_get_uid (polkit_unix_session_get_session_id (POLKIT_UNIX_SESSION (subject)), &uid) < 0) -+ if (sd_booted()) - { -- g_set_error (error, -- POLKIT_ERROR, -- POLKIT_ERROR_FAILED, -- "Error getting uid for session"); -- goto out; -+ if (sd_session_get_uid (polkit_unix_session_get_session_id (POLKIT_UNIX_SESSION (subject)), &uid) < 0) -+ { -+ g_set_error (error, -+ POLKIT_ERROR, -+ POLKIT_ERROR_FAILED, -+ "Error getting uid for session"); -+ goto out; -+ } -+ -+ ret = polkit_unix_user_new (uid); -+ } -+ else /* consolekit */ -+ { -+ if (!ensure_database (monitor, error)) -+ { -+ g_prefix_error (error, "Error getting user for session: Error ensuring CK database at " CKDB_PATH ": "); -+ goto out; -+ } -+ -+ group = g_strdup_printf ("Session %s", polkit_unix_session_get_session_id (POLKIT_UNIX_SESSION (subject))); -+ local_error = NULL; -+ uid = g_key_file_get_integer (monitor->database, group, "uid", &local_error); -+ if (local_error != NULL) -+ { -+ g_propagate_prefixed_error (error, local_error, "Error getting uid using " CKDB_PATH ": "); -+ g_free (group); -+ goto out; -+ } -+ g_free (group); - } -- -- ret = polkit_unix_user_new (uid); - } - - out: -@@ -337,20 +506,43 @@ polkit_backend_session_monitor_get_session_for_subject (PolkitBackendSessionMoni - - if (POLKIT_IS_UNIX_PROCESS (subject)) - { -- gchar *session_id; -- pid_t pid; -+ if (sd_booted()) -+ { -+ gchar *session_id; -+ pid_t pid; - -- pid = polkit_unix_process_get_pid (POLKIT_UNIX_PROCESS (subject)); -- if (sd_pid_get_session (pid, &session_id) < 0) -- goto out; -+ pid = polkit_unix_process_get_pid (POLKIT_UNIX_PROCESS (subject)); -+ if (sd_pid_get_session (pid, &session_id) < 0) -+ goto out; - -- session = polkit_unix_session_new (session_id); -- free (session_id); -+ session = polkit_unix_session_new (session_id); -+ free (session_id); -+ } -+ else /* consolekit */ -+ { -+ const gchar *session_id; -+ GVariant *result; -+ result = g_dbus_connection_call_sync (monitor->system_bus, -+ "org.freedesktop.ConsoleKit", -+ "/org/freedesktop/ConsoleKit/Manager", -+ "org.freedesktop.ConsoleKit.Manager", -+ "GetSessionForUnixProcess", -+ g_variant_new ("(u)", polkit_unix_process_get_pid (POLKIT_UNIX_PROCESS (subject))), -+ G_VARIANT_TYPE ("(o)"), -+ G_DBUS_CALL_FLAGS_NONE, -+ -1, /* timeout_msec */ -+ NULL, /* GCancellable */ -+ error); -+ if (result == NULL) -+ goto out; -+ g_variant_get (result, "(&o)", &session_id); -+ session = polkit_unix_session_new (session_id); -+ g_variant_unref (result); -+ } - } - else if (POLKIT_IS_SYSTEM_BUS_NAME (subject)) - { - guint32 pid; -- gchar *session_id; - GVariant *result; - - result = g_dbus_connection_call_sync (monitor->system_bus, -@@ -369,11 +561,35 @@ polkit_backend_session_monitor_get_session_for_subject (PolkitBackendSessionMoni - g_variant_get (result, "(u)", &pid); - g_variant_unref (result); - -- if (sd_pid_get_session (pid, &session_id) < 0) -- goto out; -+ if (sd_booted()) -+ { -+ gchar *session_id; -+ if (sd_pid_get_session (pid, &session_id) < 0) -+ goto out; - -- session = polkit_unix_session_new (session_id); -- free (session_id); -+ session = polkit_unix_session_new (session_id); -+ free (session_id); -+ } -+ else /* consolekit */ -+ { -+ const gchar *session_id; -+ result = g_dbus_connection_call_sync (monitor->system_bus, -+ "org.freedesktop.ConsoleKit", -+ "/org/freedesktop/ConsoleKit/Manager", -+ "org.freedesktop.ConsoleKit.Manager", -+ "GetSessionForUnixProcess", -+ g_variant_new ("(u)", pid), -+ G_VARIANT_TYPE ("(o)"), -+ G_DBUS_CALL_FLAGS_NONE, -+ -1, /* timeout_msec */ -+ NULL, /* GCancellable */ -+ error); -+ if (result == NULL) -+ goto out; -+ g_variant_get (result, "(&o)", &session_id); -+ session = polkit_unix_session_new (session_id); -+ g_variant_unref (result); -+ } - } - else - { -@@ -389,12 +605,58 @@ polkit_backend_session_monitor_get_session_for_subject (PolkitBackendSessionMoni - return session; - } - -+static gboolean -+get_boolean (PolkitBackendSessionMonitor *monitor, -+ PolkitSubject *session, -+ const gchar *key_name) -+{ -+ gboolean ret; -+ gchar *group; -+ GError *error; -+ -+ ret = FALSE; -+ -+ group = g_strdup_printf ("Session %s", polkit_unix_session_get_session_id (POLKIT_UNIX_SESSION (session))); -+ -+ error = NULL; -+ if (!ensure_database (monitor, &error)) -+ { -+ g_printerr ("Error getting boolean `%s' in group `%s': Error ensuring CK database at " CKDB_PATH ": %s", -+ key_name, -+ group, -+ error->message); -+ g_error_free (error); -+ goto out; -+ } -+ -+ error = NULL; -+ ret = g_key_file_get_boolean (monitor->database, group, key_name, &error); -+ if (error != NULL) -+ { -+ g_printerr ("Error looking %s using " CKDB_PATH " for %s: %s\n", -+ key_name, -+ group, -+ error->message); -+ g_error_free (error); -+ goto out; -+ } -+ -+ out: -+ g_free (group); -+ return ret; -+} -+ - gboolean - polkit_backend_session_monitor_is_session_local (PolkitBackendSessionMonitor *monitor, - PolkitSubject *session) - { - char *seat; - -+ if (!sd_booted()) /* consolekit */ -+ { -+ return get_boolean (monitor, session, "is_local"); -+ } -+ - if (!sd_session_get_seat (polkit_unix_session_get_session_id (POLKIT_UNIX_SESSION (session)), &seat)) - { - free (seat); -@@ -409,6 +671,9 @@ gboolean - polkit_backend_session_monitor_is_session_active (PolkitBackendSessionMonitor *monitor, - PolkitSubject *session) - { -- return sd_session_is_active (polkit_unix_session_get_session_id (POLKIT_UNIX_SESSION (session))); -+ if (sd_booted()) -+ return sd_session_is_active (polkit_unix_session_get_session_id (POLKIT_UNIX_SESSION (session))); -+ else /* consolekit */ -+ return get_boolean (monitor, session, "is_active"); - } - --- -1.7.11.4 - diff --git a/testing/polkit/polkit.install b/testing/polkit/polkit.install deleted file mode 100644 index fbb98919e..000000000 --- a/testing/polkit/polkit.install +++ /dev/null @@ -1,18 +0,0 @@ -post_install() { - getent group polkitd >/dev/null || groupadd -g 102 polkitd - getent passwd polkitd >/dev/null || useradd -c 'Policy Kit Daemon' -u 102 -g polkitd -d '/' -s /bin/false polkitd - passwd -l polkitd &>/dev/null -} - -post_upgrade() { - post_install -} - -post_remove() { - if getent passwd polkitd >/dev/null; then - userdel polkitd - fi - if getent group polkitd >/dev/null; then - groupdel polkitd - fi -} diff --git a/testing/polkit/polkit.pam b/testing/polkit/polkit.pam deleted file mode 100644 index 04f53e0db..000000000 --- a/testing/polkit/polkit.pam +++ /dev/null @@ -1,7 +0,0 @@ -auth requisite pam_nologin.so -auth required pam_env.so -auth required pam_unix.so -account required pam_unix.so -session required pam_limits.so -session required pam_unix.so -password required pam_unix.so |