mirror of
git://slackware.nl/current.git
synced 2025-01-04 23:02:35 +01:00
211 lines
7.7 KiB
Diff
211 lines
7.7 KiB
Diff
|
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;
|