summaryrefslogtreecommitdiff
path: root/gnome-unstable
diff options
context:
space:
mode:
authorroot <root@rshg054.dnsready.net>2012-09-08 00:04:17 +0000
committerroot <root@rshg054.dnsready.net>2012-09-08 00:04:17 +0000
commitc85b504e8916411d424cd3fc654ff879237d529e (patch)
tree3107088a155cd162c6fa050327d5f9f6a9c410d9 /gnome-unstable
parented51a8c1611ffa602f5f9628c858f6edbc218fc8 (diff)
Sat Sep 8 00:04:17 UTC 2012
Diffstat (limited to 'gnome-unstable')
-rw-r--r--gnome-unstable/clutter/PKGBUILD28
-rw-r--r--gnome-unstable/gcr/PKGBUILD33
-rw-r--r--gnome-unstable/gcr/gcr.install14
-rw-r--r--gnome-unstable/gjs/PKGBUILD26
-rw-r--r--gnome-unstable/json-glib/PKGBUILD31
-rw-r--r--gnome-unstable/polkit/PKGBUILD39
-rwxr-xr-xgnome-unstable/polkit/autogen.sh123
-rw-r--r--gnome-unstable/polkit/logind+ConsoleKit.patch638
-rw-r--r--gnome-unstable/polkit/polkit.install18
-rw-r--r--gnome-unstable/polkit/polkit.pam7
10 files changed, 957 insertions, 0 deletions
diff --git a/gnome-unstable/clutter/PKGBUILD b/gnome-unstable/clutter/PKGBUILD
new file mode 100644
index 000000000..b1608804d
--- /dev/null
+++ b/gnome-unstable/clutter/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 166355 2012-09-06 21:24:56Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+# Contributor: Sergej Pupykin <pupykin.s+arch@gmail.com>
+# Contributor: William Rea <sillywilly@gmail.com>
+
+pkgname=clutter
+pkgver=1.11.14
+pkgrel=1
+pkgdesc="A GObject based library for creating fast, visually rich graphical user interfaces"
+arch=('i686' 'x86_64')
+url="http://clutter-project.org/"
+options=('!libtool')
+license=('LGPL')
+depends=('cogl' 'mesa' 'json-glib' 'atk' 'libxi')
+makedepends=('gobject-introspection' 'mesa')
+source=(http://download.gnome.org/sources/$pkgname/${pkgver%.*}/$pkgname-$pkgver.tar.xz)
+sha256sums=('2da2c220dd966a2657eb6f02e835e2527bc1b5a10cc649b70a8906e08a61a832')
+
+build() {
+ cd "$pkgname-$pkgver"
+ ./configure --prefix=/usr --enable-introspection
+ make
+}
+
+package() {
+ cd "$pkgname-$pkgver"
+ make DESTDIR="$pkgdir" install
+}
diff --git a/gnome-unstable/gcr/PKGBUILD b/gnome-unstable/gcr/PKGBUILD
new file mode 100644
index 000000000..ace88daa9
--- /dev/null
+++ b/gnome-unstable/gcr/PKGBUILD
@@ -0,0 +1,33 @@
+# $Id: PKGBUILD 166366 2012-09-06 22:17:08Z jgc $
+# Maintainer: Ionut Biru <ibiru@archlinux.org>
+
+pkgname=gcr
+pkgver=3.5.90
+pkgrel=1
+pkgdesc="A library for bits of crypto UI and parsing"
+arch=(i686 x86_64)
+url="http://www.gnome.org"
+license=('GPL2')
+depends=('dconf' 'desktop-file-utils' 'gtk3' 'hicolor-icon-theme' 'libgcrypt')
+makedepends=('intltool' 'gobject-introspection')
+options=(!libtool)
+install=gcr.install
+source=(http://download.gnome.org/sources/$pkgname/${pkgver%.*}/$pkgname-$pkgver.tar.xz)
+sha256sums=('279a5b6db60bec078a0bef9b52a43713d715b622fc4e3c4695982a4a030462ce')
+
+build() {
+ cd "$pkgname-$pkgver"
+ ./configure --prefix=/usr \
+ --libexec=/usr/lib/gcr \
+ --disable-static \
+ --disable-update-mime \
+ --disable-schemas-compile
+ make
+}
+
+package() {
+ cd "$pkgname-$pkgver"
+ make DESTDIR="$pkgdir" install
+}
+
+# vim:set ts=2 sw=2 et:
diff --git a/gnome-unstable/gcr/gcr.install b/gnome-unstable/gcr/gcr.install
new file mode 100644
index 000000000..8677671c4
--- /dev/null
+++ b/gnome-unstable/gcr/gcr.install
@@ -0,0 +1,14 @@
+post_install () {
+ glib-compile-schemas /usr/share/glib-2.0/schemas
+ gtk-update-icon-cache -q -t -f /usr/share/icons/hicolor
+ update-mime-database /usr/share/mime &> /dev/null
+ update-desktop-database -q
+}
+
+post_upgrade () {
+ post_install
+}
+
+post_remove() {
+ post_install
+}
diff --git a/gnome-unstable/gjs/PKGBUILD b/gnome-unstable/gjs/PKGBUILD
new file mode 100644
index 000000000..83ef5bd13
--- /dev/null
+++ b/gnome-unstable/gjs/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 166357 2012-09-06 21:31:23Z jgc $
+# Maintainer: Ionut Biru <ibiru@archlinux.org>
+
+pkgname=gjs
+pkgver=1.33.10
+pkgrel=1
+pkgdesc="Javascript Bindings for GNOME"
+arch=('i686' 'x86_64')
+url="http://live.gnome.org/Gjs"
+license=('GPL')
+depends=('cairo' 'dbus-glib' 'gobject-introspection' 'js')
+options=('!libtool')
+source=(http://download.gnome.org/sources/$pkgname/${pkgver%.*}/$pkgname-$pkgver.tar.xz)
+sha256sums=('b856e329eac8208e6618d7e5a7176828ffcc8bb8bb72cf13c34d66524d0ecafd')
+
+build() {
+ cd "$srcdir/$pkgname-$pkgver"
+ sed -i 's|python|python2|' scripts/make-tests
+ ./configure --prefix=/usr --disable-static
+ make
+}
+
+package() {
+ cd "$srcdir/$pkgname-$pkgver"
+ make DESTDIR="$pkgdir" install
+}
diff --git a/gnome-unstable/json-glib/PKGBUILD b/gnome-unstable/json-glib/PKGBUILD
new file mode 100644
index 000000000..15103ec4e
--- /dev/null
+++ b/gnome-unstable/json-glib/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 166351 2012-09-06 20:52:29Z jgc $
+# Maintainer: Ionut Biru <ibiru@archlinux.org>
+
+pkgname=json-glib
+pkgver=0.15.2
+pkgrel=1
+pkgdesc="JSON library built on GLib"
+arch=('i686' 'x86_64')
+url="http://live.gnome.org/JsonGlib"
+license=('GPL')
+depends=('glib2')
+makedepends=('gobject-introspection')
+options=('!libtool')
+source=(http://ftp.gnome.org/pub/GNOME/sources/${pkgname}/0.15/${pkgname}-${pkgver}.tar.xz)
+sha256sums=('f090cd94acc85989e033d72028fa70863d05092ae5bba6b454e70c132b24cdde')
+
+build(){
+ cd ${srcdir}/${pkgname}-${pkgver}
+ ./configure --prefix=/usr
+ make
+}
+
+package(){
+ cd ${srcdir}/${pkgname}-${pkgver}
+ make DESTDIR=${pkgdir} install
+}
+
+check(){
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ make check
+}
diff --git a/gnome-unstable/polkit/PKGBUILD b/gnome-unstable/polkit/PKGBUILD
new file mode 100644
index 000000000..fc3d4d3ba
--- /dev/null
+++ b/gnome-unstable/polkit/PKGBUILD
@@ -0,0 +1,39 @@
+# $Id: PKGBUILD 166359 2012-09-06 21:43:48Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=polkit
+pkgver=0.107
+pkgrel=1
+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)
+md5sums=('0e4f9c53f43fd1b25ac3f0d2e09b2ae1'
+ '6564f95878297b954f0572bc1610dd15')
+
+build() {
+ cd $pkgname-$pkgver
+
+ ./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/gnome-unstable/polkit/autogen.sh b/gnome-unstable/polkit/autogen.sh
new file mode 100755
index 000000000..d08b00a49
--- /dev/null
+++ b/gnome-unstable/polkit/autogen.sh
@@ -0,0 +1,123 @@
+#!/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/gnome-unstable/polkit/logind+ConsoleKit.patch b/gnome-unstable/polkit/logind+ConsoleKit.patch
new file mode 100644
index 000000000..042d1043a
--- /dev/null
+++ b/gnome-unstable/polkit/logind+ConsoleKit.patch
@@ -0,0 +1,638 @@
+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/gnome-unstable/polkit/polkit.install b/gnome-unstable/polkit/polkit.install
new file mode 100644
index 000000000..fbb98919e
--- /dev/null
+++ b/gnome-unstable/polkit/polkit.install
@@ -0,0 +1,18 @@
+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/gnome-unstable/polkit/polkit.pam b/gnome-unstable/polkit/polkit.pam
new file mode 100644
index 000000000..04f53e0db
--- /dev/null
+++ b/gnome-unstable/polkit/polkit.pam
@@ -0,0 +1,7 @@
+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