summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2008-03-27 23:38:46 +0000
committerLennart Poettering <lennart@poettering.net>2008-03-27 23:38:46 +0000
commit95422a8d21115cdc78c816b2480b7ec048eb8f51 (patch)
treeda3ed741e1000685dcdc8d46df63396c9b365075
parentedd1a509d3cc6d5a14bbbde8a8044e7ef5c8347a (diff)
merge r2131 from trunk
git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/prepare-0.9.10@2174 fefdeb5f-60dc-0310-8127-8f9354f1896f
-rw-r--r--configure.ac26
-rw-r--r--src/daemon/polkit.c78
2 files changed, 22 insertions, 82 deletions
diff --git a/configure.ac b/configure.ac
index 9da54305..c71d1d15 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 362c5194..ce7c83e0 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;