diff options
Diffstat (limited to 'source/l/ConsoleKit/consolekit-0.4.2-revert.patch')
-rw-r--r-- | source/l/ConsoleKit/consolekit-0.4.2-revert.patch | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/source/l/ConsoleKit/consolekit-0.4.2-revert.patch b/source/l/ConsoleKit/consolekit-0.4.2-revert.patch new file mode 100644 index 00000000..cb1f461d --- /dev/null +++ b/source/l/ConsoleKit/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 (¶m_val, CK_TYPE_PARAMETER_STRUCT); +- g_value_take_boxed (¶m_val, +- dbus_g_type_specialized_construct (CK_TYPE_PARAMETER_STRUCT)); +- dbus_g_type_struct_set (¶m_val, +- 0, key, +- 1, &val, +- G_MAXUINT); +- g_value_unset (&val); +- +- g_ptr_array_add (parameters, g_value_get_boxed (¶m_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; |