From 67d936e46cedfa3f9621946ac02156e8c15990e3 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Wed, 01 Sep 2010 22:20:57 +0000 Subject: polkit: fix for polkit >= 0.97 (bgo #628105) --- diff --git a/configure.ac b/configure.ac index a0c65e7..af4bd09 100644 --- a/configure.ac +++ b/configure.ac @@ -64,6 +64,10 @@ case $with_polkit in AC_DEFINE(WITH_POLKIT, 1, [Define if you want to use PolicyKit]) AC_SUBST(POLKIT_CFLAGS) AC_SUBST(POLKIT_LIBS) + + # Check for polkit_authority_get_sync() + AC_CHECK_LIB([polkit-gobject-1], [polkit_authority_get_sync], ac_have_pk_auth_get_sync="1", ac_have_pk_auth_get_sync="0") + AC_DEFINE_UNQUOTED(HAVE_POLKIT_AUTHORITY_GET_SYNC, $ac_have_pk_auth_get_sync, [Define if you have a polkit with polkit_authority_get_sync()]) ;; *) with_polkit=no diff --git a/src/mm-auth-provider-polkit.c b/src/mm-auth-provider-polkit.c index c457eaf..2cd4a8a 100644 --- a/src/mm-auth-provider-polkit.c +++ b/src/mm-auth-provider-polkit.c @@ -15,6 +15,7 @@ #include +#include #include "mm-auth-request-polkit.h" #include "mm-auth-provider-polkit.h" @@ -72,19 +73,39 @@ real_create_request (MMAuthProvider *provider, /*****************************************************************************/ +/* Fix for polkit 0.97 and later */ +#if !HAVE_POLKIT_AUTHORITY_GET_SYNC +static inline PolkitAuthority * +polkit_authority_get_sync (GCancellable *cancellable, GError **error) +{ + PolkitAuthority *authority; + + authority = polkit_authority_get (); + if (!authority) + g_set_error (error, 0, 0, "failed to get the PolicyKit authority"); + return authority; +} +#endif + static void mm_auth_provider_polkit_init (MMAuthProviderPolkit *self) { MMAuthProviderPolkitPrivate *priv = MM_AUTH_PROVIDER_POLKIT_GET_PRIVATE (self); + GError *error = NULL; - priv->authority = polkit_authority_get (); + priv->authority = polkit_authority_get_sync (NULL, &error); if (priv->authority) { priv->auth_changed_id = g_signal_connect (priv->authority, "changed", G_CALLBACK (pk_authority_changed_cb), self); - } else - g_warning ("%s: failed to create PolicyKit authority.", __func__); + } else { + g_warning ("%s: failed to create PolicyKit authority: (%d) %s", + __func__, + error ? error->code : -1, + error && error->message ? error->message : "(unknown)"); + g_clear_error (&error); + } } static void -- cgit v0.8.3-6-g21f6