From 7ad0b640aa6f6882e76fb5e5ae790bb47b9a0d98 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 27 Mar 2008 20:34:04 +0000 Subject: [PATCH] modernize polkit code a bit, use new functions from pk 0.7 instead of our home-grown ones git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@2131 fefdeb5f-60dc-0310-8127-8f9354f1896f --- configure.ac | 26 ++++++++---------- src/daemon/polkit.c | 78 ++++++++--------------------------------------------- 2 files changed, 22 insertions(+), 82 deletions(-) diff --git a/configure.ac b/configure.ac index 39ccd28..42d1e98 100644 --- a/configure.ac +++ b/configure.ac @@ -150,11 +150,11 @@ AC_ARG_ENABLE([atomic-arm-memory-barrier], AC_MSG_CHECKING([target operating system]) case $host in *-*-linux*) - AC_MSG_RESULT([linux]) + AC_MSG_RESULT([linux]) pulse_target_os=linux ;; *) - AC_MSG_RESULT([unknown]) + AC_MSG_RESULT([unknown]) pulse_target_os=unknown ;; esac @@ -173,14 +173,14 @@ if test $ret -eq 0 ; then need_libatomic_ops=no else AC_MSG_RESULT([no]) - # HW specific atomic ops stuff + # HW specific atomic ops stuff AC_MSG_CHECKING([architecture for native atomic operations]) - case $host_cpu in + case $host_cpu in arm*) AC_MSG_RESULT([arm]) AC_MSG_CHECKING([whether we can use Linux kernel helpers]) # The Linux kernel helper functions have been there since 2.6.16. However - # compile time checking for kernel version in cross compile environment + # compile time checking for kernel version in cross compile environment # (which is usually the case for arm cpu) is tricky (or impossible). if test "x$pulse_target_os" = "xlinux" && test "x$atomic_arm_linux_helpers" != "xno"; then AC_MSG_RESULT([yes]) @@ -189,8 +189,8 @@ else else AC_MSG_RESULT([no]) AC_MSG_CHECKING([compiler support for arm inline asm atomic operations]) - AC_LANG_CONFTEST([[int main() - { + AC_LANG_CONFTEST([[int main() + { volatile int a=0; int o=0, n=1, r; asm volatile ("ldrex %0, [%1]\n" @@ -201,7 +201,7 @@ else : "cc"); return (a==1 ? 0 : -1); }]]) - $CC conftest.c $CFLAGS -o conftest > /dev/null 2>&1 + $CC conftest.c $CFLAGS -o conftest > /dev/null 2>&1 ret=$? rm -f conftest.o conftest if test $ret -eq 0 ; then @@ -209,7 +209,7 @@ else AC_MSG_RESULT([yes]) need_libatomic_ops=no else - AC_MSG_RESULT([no]) + AC_MSG_RESULT([no]) fi fi ;; @@ -494,7 +494,7 @@ AC_SUBST(LIBSNDFILE_LIBS) #### atomic-ops ### -AC_MSG_CHECKING([whether we need libatomic_ops]) +AC_MSG_CHECKING([whether we need libatomic_ops]) if test "x$need_libatomic_ops" = "xyes"; then AC_MSG_RESULT([yes]) AC_CHECK_HEADERS([atomic_ops.h], [], [ @@ -976,13 +976,9 @@ AC_ARG_ENABLE([polkit], if test "x${polkit}" != xno ; then - PKG_CHECK_MODULES(POLKIT, [ polkit-dbus ], + PKG_CHECK_MODULES(POLKIT, [ polkit-dbus >= 0.7 ], [ HAVE_POLKIT=1 - saved_LIBS="$LIBS" - LIBS="$LIBS $POLKIT_LIBS" - AC_CHECK_FUNCS(polkit_context_is_caller_authorized) - LIBS="$saved_LIBS" AC_DEFINE([HAVE_POLKIT], 1, [Have PolicyKit]) policydir=`pkg-config polkit-dbus --variable prefix`/share/PolicyKit/policy/ AC_SUBST(policydir) diff --git a/src/daemon/polkit.c b/src/daemon/polkit.c index 362c519..ce7c83e 100644 --- a/src/daemon/polkit.c +++ b/src/daemon/polkit.c @@ -38,59 +38,6 @@ #include "polkit.h" -static pa_bool_t show_grant_dialog(const char *action_id) { - DBusError dbus_error; - DBusConnection *bus = NULL; - DBusMessage *m = NULL, *reply = NULL; - pa_bool_t r = FALSE; - uint32_t xid = 0; - int verdict; - - dbus_error_init(&dbus_error); - - if (!(bus = dbus_bus_get(DBUS_BUS_SESSION, &dbus_error))) { - pa_log_error("Cannot connect to session bus: %s", dbus_error.message); - goto finish; - } - - if (!(m = dbus_message_new_method_call("org.gnome.PolicyKit", "/org/gnome/PolicyKit/Manager", "org.gnome.PolicyKit.Manager", "ShowDialog"))) { - pa_log_error("Failed to allocate D-Bus message."); - goto finish; - } - - if (!(dbus_message_append_args(m, DBUS_TYPE_STRING, &action_id, DBUS_TYPE_UINT32, &xid, DBUS_TYPE_INVALID))) { - pa_log_error("Failed to append arguments to D-Bus message."); - goto finish; - } - - if (!(reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &dbus_error))) { - pa_log_warn("Failed to show grant dialog: %s", dbus_error.message); - goto finish; - } - - if (!(dbus_message_get_args(reply, &dbus_error, DBUS_TYPE_BOOLEAN, &verdict, DBUS_TYPE_INVALID))) { - pa_log_warn("Malformed response from grant manager: %s", dbus_error.message); - goto finish; - } - - r = !!verdict; - -finish: - - if (bus) - dbus_connection_unref(bus); - - dbus_error_free(&dbus_error); - - if (m) - dbus_message_unref(m); - - if (reply) - dbus_message_unref(reply); - - return r; -} - int pa_polkit_check(const char *action_id) { int ret = -1; DBusError dbus_error; @@ -161,35 +108,32 @@ int pa_polkit_check(const char *action_id) { for (;;) { -#ifdef HAVE_POLKIT_CONTEXT_IS_CALLER_AUTHORIZED polkit_result = polkit_context_is_caller_authorized(context, action, caller, TRUE, &polkit_error); if (polkit_error_is_set(polkit_error)) { pa_log_error("Could not determine whether caller is authorized: %s", polkit_error_get_error_message(polkit_error)); goto finish; } -#else - - polkit_result = polkit_context_can_caller_do_action(context, action, caller); - -#endif if (polkit_result == POLKIT_RESULT_ONLY_VIA_ADMIN_AUTH || polkit_result == POLKIT_RESULT_ONLY_VIA_ADMIN_AUTH_KEEP_SESSION || polkit_result == POLKIT_RESULT_ONLY_VIA_ADMIN_AUTH_KEEP_ALWAYS || -#ifdef POLKIT_RESULT_ONLY_VIA_ADMIN_AUTH_ONE_SHOT polkit_result == POLKIT_RESULT_ONLY_VIA_ADMIN_AUTH_ONE_SHOT || -#endif polkit_result == POLKIT_RESULT_ONLY_VIA_SELF_AUTH || polkit_result == POLKIT_RESULT_ONLY_VIA_SELF_AUTH_KEEP_SESSION || - polkit_result == POLKIT_RESULT_ONLY_VIA_SELF_AUTH_KEEP_ALWAYS -#ifdef POLKIT_RESULT_ONLY_VIA_SELF_AUTH_ONE_SHOT - || polkit_result == POLKIT_RESULT_ONLY_VIA_SELF_AUTH_ONE_SHOT -#endif + polkit_result == POLKIT_RESULT_ONLY_VIA_SELF_AUTH_KEEP_ALWAYS || + polkit_result == POLKIT_RESULT_ONLY_VIA_SELF_AUTH_ONE_SHOT ) { - if (show_grant_dialog(action_id)) - continue; + if (polkit_auth_obtain(action_id, 0, getpid(), &dbus_error)) { + polkit_result = POLKIT_RESULT_YES; + break; + } + + if (dbus_error_is_set(&dbus_error)) { + pa_log_error("Cannot obtain auth: %s", dbus_error.message); + goto finish; + } } break; -- 2.7.4