summaryrefslogtreecommitdiffstats
path: root/source/l/ConsoleKit2/patches/0001-Revert-Minor-code-refactoring.patch
diff options
context:
space:
mode:
author Patrick J Volkerding <volkerdi@slackware.com>2016-06-30 20:26:57 +0000
committer Eric Hameleers <alien@slackware.com>2018-05-31 23:31:18 +0200
commitd31c50870d0bee042ce660e445c9294a59a3a65b (patch)
tree6bfc0de3c95267b401b620c2c67859557dc60f97 /source/l/ConsoleKit2/patches/0001-Revert-Minor-code-refactoring.patch
parent76fc4757ac91ac7947a01fb7b53dddf9a78a01d1 (diff)
downloadcurrent-d31c50870d0bee042ce660e445c9294a59a3a65b.tar.gz
current-d31c50870d0bee042ce660e445c9294a59a3a65b.tar.xz
Slackware 14.2slackware-14.2
Thu Jun 30 20:26:57 UTC 2016 Slackware 14.2 x86_64 stable is released! The long development cycle (the Linux community has lately been living in "interesting times", as they say) is finally behind us, and we're proud to announce the release of Slackware 14.2. The new release brings many updates and modern tools, has switched from udev to eudev (no systemd), and adds well over a hundred new packages to the system. Thanks to the team, the upstream developers, the dedicated Slackware community, and everyone else who pitched in to help make this release a reality. The ISOs are off to be replicated, a 6 CD-ROM 32-bit set and a dual-sided 32-bit/64-bit x86/x86_64 DVD. Please consider supporting the Slackware project by picking up a copy from store.slackware.com. We're taking pre-orders now, and offer a discount if you sign up for a subscription. Have fun! :-)
Diffstat (limited to 'source/l/ConsoleKit2/patches/0001-Revert-Minor-code-refactoring.patch')
-rw-r--r--source/l/ConsoleKit2/patches/0001-Revert-Minor-code-refactoring.patch477
1 files changed, 477 insertions, 0 deletions
diff --git a/source/l/ConsoleKit2/patches/0001-Revert-Minor-code-refactoring.patch b/source/l/ConsoleKit2/patches/0001-Revert-Minor-code-refactoring.patch
new file mode 100644
index 000000000..b6cadb3f8
--- /dev/null
+++ b/source/l/ConsoleKit2/patches/0001-Revert-Minor-code-refactoring.patch
@@ -0,0 +1,477 @@
+From 1e3f7f9862dceec3fa11ee4205c343ed64ce5b63 Mon Sep 17 00:00:00 2001
+From: Eric Koegel <eric.koegel@gmail.com>
+Date: Sat, 22 Aug 2015 10:51:20 +0300
+Subject: [PATCH 1/5] Revert "Minor code refactoring"
+
+This reverts commit bee63889f4a0b8f57807a61d8396346cec8cd5b1.
+
+There are some cases where ConsoleKit2 would crash after successfully
+suspending so revert this commit.
+---
+ src/ck-manager.c | 160 ++++++++++++++++++++++++++++++++++----------------
+ src/ck-session.c | 56 +++++++++++++++++-
+ src/ck-sysdeps-unix.c | 59 -------------------
+ src/ck-sysdeps.h | 6 --
+ tools/Makefile.am | 3 -
+ 5 files changed, 163 insertions(+), 121 deletions(-)
+
+diff --git a/src/ck-manager.c b/src/ck-manager.c
+index db5f906..66da8b2 100644
+--- a/src/ck-manager.c
++++ b/src/ck-manager.c
+@@ -960,11 +960,13 @@ logind_ready_cb (PolkitAuthority *authority,
+ g_object_unref (ret);
+ }
+
++/* We use this to avoid breaking API compability with ConsoleKit1 for
++ * CanStop and CanRestart, but this method emulates how logind
++ * presents it's API */
+ static void
+-get_polkit_permissions_for_callback (CkManager *manager,
+- const char *action,
+- GDBusMethodInvocation *context,
+- GAsyncReadyCallback callback)
++get_polkit_logind_permissions (CkManager *manager,
++ const char *action,
++ GDBusMethodInvocation *context)
+ {
+ const char *sender;
+ PolkitSubject *subject;
+@@ -980,37 +982,96 @@ get_polkit_permissions_for_callback (CkManager *manager,
+ NULL,
+ 0,
+ NULL,
+- callback,
++ (GAsyncReadyCallback) logind_ready_cb,
+ context);
+ g_object_unref (subject);
+ }
+
+-/* We use this to avoid breaking API compability with ConsoleKit1 for
+- * CanStop and CanRestart, but this method emulates how logind
+- * presents it's API */
+-static void
+-get_polkit_logind_permissions (CkManager *manager,
+- const char *action,
+- GDBusMethodInvocation *context)
+-{
+- get_polkit_permissions_for_callback (manager,
+- action,
+- context,
+- (GAsyncReadyCallback) logind_ready_cb);
+-}
+-
+ static void
+ get_polkit_permissions (CkManager *manager,
+ const char *action,
+ GDBusMethodInvocation *context)
+ {
+- get_polkit_permissions_for_callback (manager,
+- action,
+- context,
+- (GAsyncReadyCallback) ready_cb);
++ const char *sender;
++ PolkitSubject *subject;
++
++ g_debug ("get permissions for action %s", action);
++
++ sender = g_dbus_method_invocation_get_sender (context);
++ subject = polkit_system_bus_name_new (sender);
++
++ polkit_authority_check_authorization (manager->priv->pol_ctx,
++ subject,
++ action,
++ NULL,
++ 0,
++ NULL,
++ (GAsyncReadyCallback) ready_cb,
++ context);
++ g_object_unref (subject);
+ }
+ #endif
+
++/* adapted from PolicyKit */
++static gboolean
++get_caller_info (CkManager *manager,
++ const char *sender,
++ uid_t *calling_uid,
++ pid_t *calling_pid)
++{
++ gboolean res = FALSE;
++ GVariant *value = NULL;
++ GError *error = NULL;
++
++ if (sender == NULL) {
++ g_debug ("sender == NULL");
++ goto out;
++ }
++
++ if (manager->priv->bus_proxy == NULL) {
++ g_debug ("manager->priv->bus_proxy == NULL");
++ goto out;
++ }
++
++ value = g_dbus_proxy_call_sync (manager->priv->bus_proxy, "GetConnectionUnixUser",
++ g_variant_new ("(s)", sender),
++ G_DBUS_CALL_FLAGS_NONE,
++ 2000,
++ NULL,
++ &error);
++
++ if (value == NULL) {
++ g_warning ("GetConnectionUnixUser() failed: %s", error->message);
++ g_error_free (error);
++ goto out;
++ }
++ g_variant_get (value, "(u)", calling_uid);
++ g_variant_unref (value);
++
++ value = g_dbus_proxy_call_sync (manager->priv->bus_proxy, "GetConnectionUnixProcessID",
++ g_variant_new ("(s)", sender),
++ G_DBUS_CALL_FLAGS_NONE,
++ 2000,
++ NULL,
++ &error);
++
++ if (value == NULL) {
++ g_warning ("GetConnectionUnixProcessID() failed: %s", error->message);
++ g_error_free (error);
++ goto out;
++ }
++ g_variant_get (value, "(u)", calling_pid);
++ g_variant_unref (value);
++
++ res = TRUE;
++
++ g_debug ("uid = %d", *calling_uid);
++ g_debug ("pid = %d", *calling_pid);
++
++out:
++ return res;
++}
++
+ static char *
+ get_user_name (uid_t uid)
+ {
+@@ -1118,7 +1179,7 @@ check_rbac_permissions (CkManager *manager,
+
+ username = NULL;
+ sender = g_dbus_method_invocation_get_sender (context);
+- res = get_caller_info (manager->priv->bus_proxy,
++ res = get_caller_info (manager,
+ sender,
+ &uid,
+ &pid);
+@@ -2055,7 +2116,7 @@ dbus_inhibit (ConsoleKitManager *ckmanager,
+ priv = CK_MANAGER_GET_PRIVATE (CK_MANAGER (ckmanager));
+
+ sender = g_dbus_method_invocation_get_sender (context);
+- res = get_caller_info (priv->bus_proxy,
++ res = get_caller_info (CK_MANAGER (ckmanager),
+ sender,
+ &uid,
+ &pid);
+@@ -2698,7 +2759,7 @@ create_session_for_sender (CkManager *manager,
+
+ g_debug ("CkManager: create session for sender: %s", sender);
+
+- res = get_caller_info (manager->priv->bus_proxy,
++ res = get_caller_info (manager,
+ sender,
+ &uid,
+ &pid);
+@@ -2767,7 +2828,7 @@ dbus_get_session_for_cookie (ConsoleKitManager *ckmanager,
+
+ sender = g_dbus_method_invocation_get_sender (context);
+
+- res = get_caller_info (manager->priv->bus_proxy,
++ res = get_caller_info (manager,
+ sender,
+ &calling_uid,
+ &calling_pid);
+@@ -2852,7 +2913,7 @@ dbus_get_session_for_unix_process (ConsoleKitManager *ckmanager,
+ TRACE ();
+ g_debug ("pid: %u", pid);
+
+- res = get_caller_info (manager->priv->bus_proxy,
++ res = get_caller_info (manager,
+ sender,
+ &calling_uid,
+ &calling_pid);
+@@ -2900,7 +2961,7 @@ dbus_get_current_session (ConsoleKitManager *ckmanager,
+
+ g_debug ("CkManager: get current session");
+
+- res = get_caller_info (manager->priv->bus_proxy,
++ res = get_caller_info (manager,
+ sender,
+ &calling_uid,
+ &calling_pid);
+@@ -3100,7 +3161,7 @@ dbus_close_session (ConsoleKitManager *ckmanager,
+ manager = CK_MANAGER (ckmanager);
+
+ sender = g_dbus_method_invocation_get_sender (context);
+- res = get_caller_info (manager->priv->bus_proxy,
++ res = get_caller_info (manager,
+ sender,
+ &calling_uid,
+ &calling_pid);
+@@ -3443,17 +3504,6 @@ create_seats (CkManager *manager)
+ }
+
+ static void
+-cancel_timeout_and_call_system_action (CkManagerPrivate *priv)
+-{
+- /* The inhibit lock for this action was removed.
+- * Stop the timeout and call the system action now.
+- */
+- g_source_remove (priv->system_action_idle_id);
+- priv->system_action_idle_id = 0;
+- system_action_idle_cb (priv->system_action_data);
+-}
+-
+-static void
+ on_inhibit_manager_changed_event (CkInhibitManager *manager, gint inhibit_mode, gint event, gboolean enabled, gpointer user_data)
+ {
+ CkManagerPrivate *priv;
+@@ -3472,6 +3522,17 @@ on_inhibit_manager_changed_event (CkInhibitManager *manager, gint inhibit_mode,
+ return;
+ }
+
++ /* this system action must be for a sleep or shutdown operation */
++ if (priv->system_action_data->signal != PREPARE_FOR_SLEEP &&
++ priv->system_action_data->signal != PREPARE_FOR_SHUTDOWN) {
++ return;
++ }
++
++ /* the inhibit change must be for sleep or shutdown */
++ if (event != CK_INHIBIT_EVENT_SUSPEND && event != CK_INHIBIT_EVENT_SHUTDOWN) {
++ return;
++ }
++
+ /* must be a delay inhibitor */
+ if (inhibit_mode != CK_INHIBIT_MODE_DELAY) {
+ return;
+@@ -3482,17 +3543,12 @@ on_inhibit_manager_changed_event (CkInhibitManager *manager, gint inhibit_mode,
+ return;
+ }
+
+- /* Did we stop inhibiting sleep? */
+- if (priv->system_action_data->signal == PREPARE_FOR_SLEEP &&
+- event == CK_INHIBIT_EVENT_SUSPEND) {
+- cancel_timeout_and_call_system_action (priv);
+- }
+-
+- /* Did we stop inhibiting shutdown? */
+- if (priv->system_action_data->signal == PREPARE_FOR_SHUTDOWN &&
+- event == CK_INHIBIT_EVENT_SHUTDOWN) {
+- cancel_timeout_and_call_system_action (priv);
+- }
++ /* The inhibit lock for this action was removed.
++ * Stop the timeout and call the system action now.
++ */
++ g_source_remove (priv->system_action_idle_id);
++ priv->system_action_idle_id = 0;
++ system_action_idle_cb (priv->system_action_data);
+ }
+
+ static void
+diff --git a/src/ck-session.c b/src/ck-session.c
+index 478dce2..ca0f8ca 100644
+--- a/src/ck-session.c
++++ b/src/ck-session.c
+@@ -248,6 +248,60 @@ dbus_unlock (ConsoleKitSession *cksession,
+ return TRUE;
+ }
+
++/* adapted from PolicyKit */
++static gboolean
++get_caller_info (CkSession *session,
++ const char *sender,
++ uid_t *calling_uid,
++ pid_t *calling_pid)
++{
++ gboolean res = FALSE;
++ GVariant *value = NULL;
++ GError *error = NULL;
++
++ if (sender == NULL) {
++ goto out;
++ }
++
++ value = g_dbus_proxy_call_sync (session->priv->bus_proxy, "GetConnectionUnixUser",
++ g_variant_new ("(s)", sender),
++ G_DBUS_CALL_FLAGS_NONE,
++ 2000,
++ NULL,
++ &error);
++
++ if (value == NULL) {
++ g_warning ("GetConnectionUnixUser() failed: %s", error->message);
++ g_error_free (error);
++ goto out;
++ }
++ g_variant_get (value, "(u)", calling_uid);
++ g_variant_unref (value);
++
++ value = g_dbus_proxy_call_sync (session->priv->bus_proxy, "GetConnectionUnixProcessID",
++ g_variant_new ("(s)", sender),
++ G_DBUS_CALL_FLAGS_NONE,
++ 2000,
++ NULL,
++ &error);
++
++ if (value == NULL) {
++ g_warning ("GetConnectionUnixProcessID() failed: %s", error->message);
++ g_error_free (error);
++ goto out;
++ }
++ g_variant_get (value, "(u)", calling_pid);
++ g_variant_unref (value);
++
++ res = TRUE;
++
++ g_debug ("uid = %d", *calling_uid);
++ g_debug ("pid = %d", *calling_pid);
++
++out:
++ return res;
++}
++
+ static gboolean
+ session_set_idle_hint_internal (CkSession *session,
+ gboolean idle_hint)
+@@ -326,7 +380,7 @@ dbus_set_idle_hint (ConsoleKitSession *cksession,
+
+ sender = g_dbus_method_invocation_get_sender (context);
+
+- res = get_caller_info (session->priv->bus_proxy,
++ res = get_caller_info (session,
+ sender,
+ &calling_uid,
+ &calling_pid);
+diff --git a/src/ck-sysdeps-unix.c b/src/ck-sysdeps-unix.c
+index 87333d1..0f751b9 100644
+--- a/src/ck-sysdeps-unix.c
++++ b/src/ck-sysdeps-unix.c
+@@ -132,65 +132,6 @@ ck_get_socket_peer_credentials (int socket_fd,
+ return ret;
+ }
+
+-/* adapted from PolicyKit */
+-gboolean
+-get_caller_info (GDBusProxy *bus_proxy,
+- const char *sender,
+- uid_t *calling_uid,
+- pid_t *calling_pid)
+-{
+- gboolean res = FALSE;
+- GVariant *value = NULL;
+- GError *error = NULL;
+-
+- if (sender == NULL) {
+- g_debug ("sender == NULL");
+- goto out;
+- }
+-
+- if (bus_proxy == NULL) {
+- g_debug ("bus_proxy == NULL");
+- goto out;
+- }
+-
+- value = g_dbus_proxy_call_sync (bus_proxy, "GetConnectionUnixUser",
+- g_variant_new ("(s)", sender),
+- G_DBUS_CALL_FLAGS_NONE,
+- 2000,
+- NULL,
+- &error);
+-
+- if (value == NULL) {
+- g_warning ("GetConnectionUnixUser() failed: %s", error->message);
+- g_error_free (error);
+- goto out;
+- }
+- g_variant_get (value, "(u)", calling_uid);
+- g_variant_unref (value);
+-
+- value = g_dbus_proxy_call_sync (bus_proxy, "GetConnectionUnixProcessID",
+- g_variant_new ("(s)", sender),
+- G_DBUS_CALL_FLAGS_NONE,
+- 2000,
+- NULL,
+- &error);
+-
+- if (value == NULL) {
+- g_warning ("GetConnectionUnixProcessID() failed: %s", error->message);
+- g_error_free (error);
+- goto out;
+- }
+- g_variant_get (value, "(u)", calling_pid);
+- g_variant_unref (value);
+-
+- res = TRUE;
+-
+- g_debug ("uid = %d", *calling_uid);
+- g_debug ("pid = %d", *calling_pid);
+-
+-out:
+- return res;
+-}
+
+ /*
+ * getfd.c
+diff --git a/src/ck-sysdeps.h b/src/ck-sysdeps.h
+index 66df581..bc32631 100644
+--- a/src/ck-sysdeps.h
++++ b/src/ck-sysdeps.h
+@@ -24,7 +24,6 @@
+ #include "config.h"
+
+ #include <glib.h>
+-#include <gio/gio.h>
+
+ G_BEGIN_DECLS
+
+@@ -55,11 +54,6 @@ gboolean ck_get_socket_peer_credentials (int socket_fd,
+ uid_t *uid,
+ GError **error);
+
+-gboolean get_caller_info (GDBusProxy *bus_proxy,
+- const char *sender,
+- uid_t *calling_uid,
+- pid_t *calling_pid);
+-
+ int ck_get_a_console_fd (void);
+
+ gboolean ck_fd_is_a_console (int fd);
+diff --git a/tools/Makefile.am b/tools/Makefile.am
+index 69dd1eb..81f4d1f 100644
+--- a/tools/Makefile.am
++++ b/tools/Makefile.am
+@@ -131,7 +131,6 @@ ck_collect_session_info_SOURCES = \
+ $(NULL)
+
+ ck_collect_session_info_LDADD = \
+- $(CONSOLE_KIT_LIBS) \
+ $(TOOLS_LIBS) \
+ $(top_builddir)/src/libck.la \
+ $(NULL)
+@@ -141,7 +140,6 @@ ck_get_x11_server_pid_SOURCES = \
+ $(NULL)
+
+ ck_get_x11_server_pid_LDADD = \
+- $(CONSOLE_KIT_LIBS) \
+ $(TOOLS_LIBS) \
+ $(XLIB_LIBS) \
+ $(top_builddir)/src/libck.la \
+@@ -152,7 +150,6 @@ ck_get_x11_display_device_SOURCES = \
+ $(NULL)
+
+ ck_get_x11_display_device_LDADD = \
+- $(CONSOLE_KIT_LIBS) \
+ $(TOOLS_LIBS) \
+ $(top_builddir)/src/libck.la \
+ $(NULL)
+--
+2.5.1
+