From 8425a13987c3657bc59791715befd8fe9cbc8c6c Mon Sep 17 00:00:00 2001 From: Eric Hameleers Date: Sun, 13 Sep 2015 13:04:59 +0200 Subject: Updated 'deps' for KDE 5_15.09_02 LoginKit: removed. It was causing a minute-long delay on logout and display of the 'Leave' menu. ConsoleKit2 offers a systemd-logind API as well. ConsoleKit2: rebuilt with patches to make it work correctly on x86_64 (lib64). libproxy: added a rebuilt version of Slackware's package with KDE4 support removed, which prevents crashes in Qt5/KF5 applications which use libproxy (such as OwnCloud). --- .../0001-Revert-Minor-code-refactoring.patch | 477 +++++++++++++++++++++ 1 file changed, 477 insertions(+) create mode 100644 deps/ConsoleKit2/patches/0001-Revert-Minor-code-refactoring.patch (limited to 'deps/ConsoleKit2/patches/0001-Revert-Minor-code-refactoring.patch') diff --git a/deps/ConsoleKit2/patches/0001-Revert-Minor-code-refactoring.patch b/deps/ConsoleKit2/patches/0001-Revert-Minor-code-refactoring.patch new file mode 100644 index 0000000..b6cadb3 --- /dev/null +++ b/deps/ConsoleKit2/patches/0001-Revert-Minor-code-refactoring.patch @@ -0,0 +1,477 @@ +From 1e3f7f9862dceec3fa11ee4205c343ed64ce5b63 Mon Sep 17 00:00:00 2001 +From: Eric Koegel +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 +-#include + + 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 + -- cgit v1.2.3