--- indicator-session-0.1.4/configure.ac 2009-09-22 09:12:00.000000000 +0200 +++ indicator-session-0.1.4.new/configure.ac 2009-09-22 09:11:42.000000000 +0200 @@ -28,6 +28,7 @@ GTK_REQUIRED_VERSION=2.12 INDICATOR_REQUIRED_VERSION=0.2.0 DBUSMENUGTK_REQUIRED_VERSION=0.1.1 +POLKIT_REQUIRED_VERSION=0.92 PKG_CHECK_MODULES(APPLET, gtk+-2.0 >= $GTK_REQUIRED_VERSION indicator >= $INDICATOR_REQUIRED_VERSION @@ -53,7 +54,8 @@ AC_SUBST(SESSIONERVICE_LIBS) PKG_CHECK_MODULES(GTKLOGOUTHELPER, gtk+-2.0 >= $GTK_REQUIRED_VERSION - polkit-gnome) + polkit-gobject-1 >= $POLKIT_REQUIRED_VERSION) + AC_SUBST(GTKLOGOUTHELPER_CFLAGS) AC_SUBST(GTKLOGOUTHELPER_LIBS) diff -ur indicator-session-0.1.4/src/gtk-dialog/ck-pk-helper.c indicator-session-0.1.4.new/src/gtk-dialog/ck-pk-helper.c --- indicator-session-0.1.4/src/gtk-dialog/ck-pk-helper.c 2009-09-22 09:12:00.000000000 +0200 +++ indicator-session-0.1.4.new/src/gtk-dialog/ck-pk-helper.c 2009-09-22 09:11:43.000000000 +0200 @@ -24,7 +24,7 @@ #include #include #include -#include +#include #include "logout-dialog.h" #include "ck-pk-helper.h" @@ -170,67 +170,53 @@ } } - PolKitResult polres; + PolkitAuthorizationResult *polres = NULL; + gboolean ret = FALSE; if (pk_can_do_action(pk_action, &polres)) { - if (polres == POLKIT_RESULT_YES) { - return FALSE; + if (polkit_authorization_result_get_is_challenge (polres)) { + ret = TRUE; } - return TRUE; + g_debug ("pk_require_auth(%s): authorized, is_challenge: %i", pk_action, ret); + } else { + g_debug ("pk_require_auth(%s): not authorized", pk_action); + } + if (polres) { + g_object_unref (polres); } - return FALSE; + return ret; } gboolean -pk_can_do_action (const gchar *action_id, PolKitResult * pol_result) +pk_can_do_action (const gchar *action_id, PolkitAuthorizationResult ** pol_result) { - PolKitGnomeContext *gnome_context; - PolKitAction *action; - PolKitCaller *caller; - DBusError dbus_error; - PolKitError *error; - PolKitResult result; - - gnome_context = polkit_gnome_context_get (NULL); - - if (gnome_context == NULL) { - return FALSE; - } - - if (gnome_context->pk_tracker == NULL) { - return FALSE; - } - - dbus_error_init (&dbus_error); - caller = polkit_tracker_get_caller_from_pid (gnome_context->pk_tracker, - getpid (), - &dbus_error); - dbus_error_free (&dbus_error); - - if (caller == NULL) { - return FALSE; - } - - action = polkit_action_new (); - if (!polkit_action_set_action_id (action, action_id)) { - polkit_action_unref (action); - polkit_caller_unref (caller); - return FALSE; - } - - result = POLKIT_RESULT_UNKNOWN; - error = NULL; - result = polkit_context_is_caller_authorized (gnome_context->pk_context, - action, caller, FALSE, - &error); - if (polkit_error_is_set (error)) { - polkit_error_free (error); - } - polkit_action_unref (action); - polkit_caller_unref (caller); + PolkitAuthority *authority; + PolkitSubject *subject; + PolkitAuthorizationResult *result; + gboolean ret; + + authority = polkit_authority_get(); + if (!authority) { + g_warning ("Could not get PolicyKit authority instance"); + return FALSE; + } + subject = polkit_unix_process_new (getpid()); - if (pol_result != NULL) { - *pol_result = result; - } + result = polkit_authority_check_authorization_sync (authority, subject, action_id, NULL, 0, NULL, NULL); + g_object_unref (authority); - return result != POLKIT_RESULT_NO && result != POLKIT_RESULT_UNKNOWN; + ret = FALSE; + if (result) { + ret = polkit_authorization_result_get_is_authorized (result) || + polkit_authorization_result_get_is_challenge (result); + g_debug ("pk_can_do_action(%s): %i", action_id, ret); + } else { + g_warning ("pk_can_do_action(%s): check_authorization returned NULL", action_id); + } + if (pol_result) { + *pol_result = result; + } else { + g_object_unref (result); + } + return ret; + } diff -ur indicator-session-0.1.4/src/gtk-dialog/ck-pk-helper.h indicator-session-0.1.4.new/src/gtk-dialog/ck-pk-helper.h --- indicator-session-0.1.4/src/gtk-dialog/ck-pk-helper.h 2009-09-22 09:12:00.000000000 +0200 +++ indicator-session-0.1.4.new/src/gtk-dialog/ck-pk-helper.h 2009-09-22 09:11:43.000000000 +0200 @@ -24,9 +24,9 @@ #ifndef __CK_PK_HELPER_H__ #define __CK_PK_HELPER_H__ 1 -#include +#include gboolean pk_require_auth (LogoutDialogAction action); -gboolean pk_can_do_action (const gchar *action_id, PolKitResult * pol_result); +gboolean pk_can_do_action (const gchar *action_id, PolkitAuthorizationResult ** pol_result); #endif /* __CK_PK_HELPER__ */