← Back to team overview

ayatana-commits team mailing list archive

[Merge] lp:~pitti/indicator-session/polkit-1 into lp:indicator-session

 

Martin Pitt has proposed merging lp:~pitti/indicator-session/polkit-1 into lp:indicator-session.

Requested reviews:
    Indicator Applet Developers (indicator-applet-developers)

This was already uploaded to Karmic (see bug 412601), it's the last package that held the old policykit-gnome on the CDs.

It's also necessary, since ConsoleKit uses polkit-1, not the old policykit 0.9 API any more.
-- 
https://code.launchpad.net/~pitti/indicator-session/polkit-1/+merge/12221
Your team ayatana-commits is subscribed to branch lp:indicator-session.
=== modified file 'configure.ac'
--- configure.ac	2009-09-17 16:00:41 +0000
+++ configure.ac	2009-09-22 12:45:17 +0000
@@ -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)

=== modified file 'src/gtk-dialog/ck-pk-helper.c'
--- src/gtk-dialog/ck-pk-helper.c	2009-08-07 22:52:48 +0000
+++ src/gtk-dialog/ck-pk-helper.c	2009-09-22 12:45:17 +0000
@@ -24,7 +24,7 @@
 #include <unistd.h>
 #include <glib.h>
 #include <dbus/dbus-glib.h>
-#include <polkit-gnome/polkit-gnome.h>
+#include <polkit/polkit.h>
 
 #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;
-	}
-	return FALSE;
+		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 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);
-
-		if (pol_result != NULL) {
-			*pol_result = result;
-		}
-
-        return result != POLKIT_RESULT_NO && result != POLKIT_RESULT_UNKNOWN;
+	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());
+
+	result = polkit_authority_check_authorization_sync (authority, subject, action_id, NULL, 0, NULL, NULL);
+	g_object_unref (authority);
+
+	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;
+	
 }

=== modified file 'src/gtk-dialog/ck-pk-helper.h'
--- src/gtk-dialog/ck-pk-helper.h	2009-08-07 22:52:48 +0000
+++ src/gtk-dialog/ck-pk-helper.h	2009-09-22 12:45:17 +0000
@@ -24,9 +24,9 @@
 #ifndef __CK_PK_HELPER_H__
 #define __CK_PK_HELPER_H__ 1
 
-#include <polkit-gnome/polkit-gnome.h>
+#include <polkit/polkit.h>
 
 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__ */