summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuli Suominen <ssuominen@gentoo.org>2010-09-09 21:13:16 +0000
committerSamuli Suominen <ssuominen@gentoo.org>2010-09-09 21:13:16 +0000
commitb9935eb2466240f6c5bcbd415477c36545ba044d (patch)
treed2ff71f3209c9da270b8787ab8232db326d8682a /sys-auth/consolekit
parentUnmask qbittorrent-2.4.0 (diff)
downloadgentoo-2-b9935eb2466240f6c5bcbd415477c36545ba044d.tar.gz
gentoo-2-b9935eb2466240f6c5bcbd415477c36545ba044d.tar.bz2
gentoo-2-b9935eb2466240f6c5bcbd415477c36545ba044d.zip
Revert upstream "Only set sessions to be is-local=true if set by a trusted party" wrt #336634.
(Portage version: 2.2_rc78/cvs/Linux x86_64)
Diffstat (limited to 'sys-auth/consolekit')
-rw-r--r--sys-auth/consolekit/ChangeLog9
-rw-r--r--sys-auth/consolekit/consolekit-0.4.2-r1.ebuild (renamed from sys-auth/consolekit/consolekit-0.4.2.ebuild)5
-rw-r--r--sys-auth/consolekit/files/consolekit-0.4.2-revert.patch210
3 files changed, 221 insertions, 3 deletions
diff --git a/sys-auth/consolekit/ChangeLog b/sys-auth/consolekit/ChangeLog
index 89bd66bf8b17..5437779dfa20 100644
--- a/sys-auth/consolekit/ChangeLog
+++ b/sys-auth/consolekit/ChangeLog
@@ -1,6 +1,13 @@
# ChangeLog for sys-auth/consolekit
# Copyright 1999-2010 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/sys-auth/consolekit/ChangeLog,v 1.75 2010/09/07 14:22:36 ssuominen Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-auth/consolekit/ChangeLog,v 1.76 2010/09/09 21:13:16 ssuominen Exp $
+
+*consolekit-0.4.2-r1 (09 Sep 2010)
+
+ 09 Sep 2010; Samuli Suominen <ssuominen@gentoo.org>
+ +consolekit-0.4.2-r1.ebuild, +files/consolekit-0.4.2-revert.patch:
+ Revert upstream "Only set sessions to be is-local=true if set by a trusted
+ party" wrt #336634.
*consolekit-0.4.2 (07 Sep 2010)
diff --git a/sys-auth/consolekit/consolekit-0.4.2.ebuild b/sys-auth/consolekit/consolekit-0.4.2-r1.ebuild
index bb126cb5b08c..93a222d3d8be 100644
--- a/sys-auth/consolekit/consolekit-0.4.2.ebuild
+++ b/sys-auth/consolekit/consolekit-0.4.2-r1.ebuild
@@ -1,6 +1,6 @@
# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/sys-auth/consolekit/consolekit-0.4.2.ebuild,v 1.2 2010/09/07 14:37:30 ssuominen Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-auth/consolekit/consolekit-0.4.2-r1.ebuild,v 1.1 2010/09/09 21:13:16 ssuominen Exp $
EAPI=3
inherit autotools eutils multilib pam
@@ -36,7 +36,8 @@ src_prepare() {
"${FILESDIR}"/${PN}-0.2.10-cleanup_console_tags.patch \
"${FILESDIR}"/${PN}-0.4.0-polkit-automagic.patch \
"${FILESDIR}"/${PN}-0.4.0-multilib.patch \
- "${FILESDIR}"/${PN}-0.4.1-shutdown-reboot-without-policies.patch
+ "${FILESDIR}"/${PN}-0.4.1-shutdown-reboot-without-policies.patch \
+ "${FILESDIR}"/${PN}-0.4.2-revert.patch
eautoreconf
}
diff --git a/sys-auth/consolekit/files/consolekit-0.4.2-revert.patch b/sys-auth/consolekit/files/consolekit-0.4.2-revert.patch
new file mode 100644
index 000000000000..cb1f461de94c
--- /dev/null
+++ b/sys-auth/consolekit/files/consolekit-0.4.2-revert.patch
@@ -0,0 +1,210 @@
+Revert upstream http://cgit.freedesktop.org/ConsoleKit/commit/?id=4f88228f31a63c026c424a92827f26ad7535275c
+which renders ConsoleKit unusable.
+
+diff -ur ConsoleKit-0.4.2.orig/src/ck-manager.c ConsoleKit-0.4.2/src/ck-manager.c
+--- ConsoleKit-0.4.2.orig/src/ck-manager.c 2010-09-03 16:54:31.000000000 +0300
++++ ConsoleKit-0.4.2/src/ck-manager.c 2010-09-10 00:02:32.000000000 +0300
+@@ -1660,175 +1660,12 @@
+ dbus_g_method_return (context, cookie);
+ }
+
+-enum {
+- PROP_STRING,
+- PROP_BOOLEAN,
+-};
+-
+-#define CK_TYPE_PARAMETER_STRUCT (dbus_g_type_get_struct ("GValueArray", \
+- G_TYPE_STRING, \
+- G_TYPE_VALUE, \
+- G_TYPE_INVALID))
+-
+-static gboolean
+-_get_parameter (GPtrArray *parameters,
+- const char *name,
+- int prop_type,
+- gpointer *value)
+-{
+- gboolean ret;
+- int i;
+-
+- if (parameters == NULL) {
+- return FALSE;
+- }
+-
+- ret = FALSE;
+-
+- for (i = 0; i < parameters->len && ret == FALSE; i++) {
+- gboolean res;
+- GValue val_struct = { 0, };
+- char *prop_name;
+- GValue *prop_val;
+-
+- g_value_init (&val_struct, CK_TYPE_PARAMETER_STRUCT);
+- g_value_set_static_boxed (&val_struct, g_ptr_array_index (parameters, i));
+-
+- res = dbus_g_type_struct_get (&val_struct,
+- 0, &prop_name,
+- 1, &prop_val,
+- G_MAXUINT);
+- if (! res) {
+- g_debug ("Unable to extract parameter input");
+- goto cont;
+- }
+-
+- if (prop_name == NULL) {
+- g_debug ("Skipping NULL parameter");
+- goto cont;
+- }
+-
+- if (strcmp (prop_name, name) != 0) {
+- goto cont;
+- }
+-
+- switch (prop_type) {
+- case PROP_STRING:
+- if (value != NULL) {
+- *value = g_value_dup_string (prop_val);
+- }
+- break;
+- case PROP_BOOLEAN:
+- if (value != NULL) {
+- *(gboolean *)value = g_value_get_boolean (prop_val);
+- }
+- break;
+- default:
+- g_assert_not_reached ();
+- break;
+- }
+-
+- ret = TRUE;
+-
+- cont:
+- g_free (prop_name);
+- if (prop_val != NULL) {
+- g_value_unset (prop_val);
+- g_free (prop_val);
+- }
+- }
+-
+- return ret;
+-}
+-
+-static gboolean
+-_verify_login_session_id_is_local (CkManager *manager,
+- const char *login_session_id)
+-{
+- GHashTableIter iter;
+- const char *id;
+- CkSession *session;
+-
+- g_return_val_if_fail (CK_IS_MANAGER (manager), FALSE);
+-
+- /* If any local session exists for the given login session id
+- then that means a trusted party has vouched for the
+- original login */
+-
+- g_debug ("Looking for local sessions for login-session-id=%s", login_session_id);
+-
+- session = NULL;
+- g_hash_table_iter_init (&iter, manager->priv->sessions);
+- while (g_hash_table_iter_next (&iter, (gpointer *)&id, (gpointer *)&session)) {
+- if (session != NULL) {
+- gboolean is_local;
+- char *sessid;
+-
+- sessid = NULL;
+- g_object_get (session,
+- "login-session-id", &sessid,
+- "is-local", &is_local,
+- NULL);
+- if (g_strcmp0 (sessid, login_session_id) == 0 && is_local) {
+- g_debug ("CkManager: found is-local=true on %s", id);
+- return TRUE;
+- }
+- }
+- }
+-
+- return FALSE;
+-}
+-
+-static void
+-add_param_boolean (GPtrArray *parameters,
+- const char *key,
+- gboolean value)
+-{
+- GValue val = { 0, };
+- GValue param_val = { 0, };
+-
+- g_value_init (&val, G_TYPE_BOOLEAN);
+- g_value_set_boolean (&val, value);
+- g_value_init (&param_val, CK_TYPE_PARAMETER_STRUCT);
+- g_value_take_boxed (&param_val,
+- dbus_g_type_specialized_construct (CK_TYPE_PARAMETER_STRUCT));
+- dbus_g_type_struct_set (&param_val,
+- 0, key,
+- 1, &val,
+- G_MAXUINT);
+- g_value_unset (&val);
+-
+- g_ptr_array_add (parameters, g_value_get_boxed (&param_val));
+-}
+-
+ static void
+ verify_and_open_session_for_leader (CkManager *manager,
+ CkSessionLeader *leader,
+- GPtrArray *parameters,
++ const GPtrArray *parameters,
+ DBusGMethodInvocation *context)
+ {
+- /* Only allow a local session if originating from an existing
+- local session. Effectively this means that only trusted
+- parties can create local sessions. */
+-
+- g_debug ("CkManager: verifying session for leader");
+-
+- if (parameters != NULL && ! _get_parameter (parameters, "is-local", PROP_BOOLEAN, NULL)) {
+- gboolean is_local;
+- char *login_session_id;
+-
+- g_debug ("CkManager: is-local has not been set, will inherit from existing login-session-id if available");
+-
+- is_local = FALSE;
+-
+- if (_get_parameter (parameters, "login-session-id", PROP_STRING, (gpointer *) &login_session_id)) {
+- is_local = _verify_login_session_id_is_local (manager, login_session_id);
+- g_debug ("CkManager: found is-local=%s", is_local ? "true" : "false");
+- }
+-
+- add_param_boolean (parameters, "is-local", is_local);
+- }
+-
+ open_session_for_leader (manager,
+ leader,
+ parameters,
+diff -ur ConsoleKit-0.4.2.orig/tools/ck-collect-session-info.c ConsoleKit-0.4.2/tools/ck-collect-session-info.c
+--- ConsoleKit-0.4.2.orig/tools/ck-collect-session-info.c 2010-09-03 16:54:31.000000000 +0300
++++ ConsoleKit-0.4.2/tools/ck-collect-session-info.c 2010-09-10 00:06:30.000000000 +0300
+@@ -274,7 +274,8 @@
+ si->x11_display_device = ck_process_stat_get_tty (xorg_stat);
+ ck_process_stat_free (xorg_stat);
+
+- /* don't set is-local here - let the daemon do that */
++ si->is_local = TRUE;
++ si->is_local_is_set = TRUE;
+
+ g_free (si->remote_host_name);
+ si->remote_host_name = NULL;
+@@ -303,6 +304,13 @@
+
+ fill_x11_info (si);
+
++ if (! si->is_local_is_set) {
++ /* FIXME: how should we set this? */
++ /* non x11 sessions must be local I guess */
++ si->is_local = TRUE;
++ si->is_local_is_set = TRUE;
++ }
++
+ res = ck_unix_pid_get_login_session_id (si->pid, &si->login_session_id);
+ if (! res) {
+ si->login_session_id = NULL;