mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-10-31 22:25:33 -04:00
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
This commit is contained in:
parent
8a14304b6d
commit
7ad0b640aa
2 changed files with 22 additions and 82 deletions
26
configure.ac
26
configure.ac
|
|
@ -150,11 +150,11 @@ AC_ARG_ENABLE([atomic-arm-memory-barrier],
|
||||||
AC_MSG_CHECKING([target operating system])
|
AC_MSG_CHECKING([target operating system])
|
||||||
case $host in
|
case $host in
|
||||||
*-*-linux*)
|
*-*-linux*)
|
||||||
AC_MSG_RESULT([linux])
|
AC_MSG_RESULT([linux])
|
||||||
pulse_target_os=linux
|
pulse_target_os=linux
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
AC_MSG_RESULT([unknown])
|
AC_MSG_RESULT([unknown])
|
||||||
pulse_target_os=unknown
|
pulse_target_os=unknown
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
@ -173,14 +173,14 @@ if test $ret -eq 0 ; then
|
||||||
need_libatomic_ops=no
|
need_libatomic_ops=no
|
||||||
else
|
else
|
||||||
AC_MSG_RESULT([no])
|
AC_MSG_RESULT([no])
|
||||||
# HW specific atomic ops stuff
|
# HW specific atomic ops stuff
|
||||||
AC_MSG_CHECKING([architecture for native atomic operations])
|
AC_MSG_CHECKING([architecture for native atomic operations])
|
||||||
case $host_cpu in
|
case $host_cpu in
|
||||||
arm*)
|
arm*)
|
||||||
AC_MSG_RESULT([arm])
|
AC_MSG_RESULT([arm])
|
||||||
AC_MSG_CHECKING([whether we can use Linux kernel helpers])
|
AC_MSG_CHECKING([whether we can use Linux kernel helpers])
|
||||||
# The Linux kernel helper functions have been there since 2.6.16. However
|
# 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).
|
# (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
|
if test "x$pulse_target_os" = "xlinux" && test "x$atomic_arm_linux_helpers" != "xno"; then
|
||||||
AC_MSG_RESULT([yes])
|
AC_MSG_RESULT([yes])
|
||||||
|
|
@ -189,8 +189,8 @@ else
|
||||||
else
|
else
|
||||||
AC_MSG_RESULT([no])
|
AC_MSG_RESULT([no])
|
||||||
AC_MSG_CHECKING([compiler support for arm inline asm atomic operations])
|
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;
|
volatile int a=0;
|
||||||
int o=0, n=1, r;
|
int o=0, n=1, r;
|
||||||
asm volatile ("ldrex %0, [%1]\n"
|
asm volatile ("ldrex %0, [%1]\n"
|
||||||
|
|
@ -201,7 +201,7 @@ else
|
||||||
: "cc");
|
: "cc");
|
||||||
return (a==1 ? 0 : -1);
|
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=$?
|
ret=$?
|
||||||
rm -f conftest.o conftest
|
rm -f conftest.o conftest
|
||||||
if test $ret -eq 0 ; then
|
if test $ret -eq 0 ; then
|
||||||
|
|
@ -209,7 +209,7 @@ else
|
||||||
AC_MSG_RESULT([yes])
|
AC_MSG_RESULT([yes])
|
||||||
need_libatomic_ops=no
|
need_libatomic_ops=no
|
||||||
else
|
else
|
||||||
AC_MSG_RESULT([no])
|
AC_MSG_RESULT([no])
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
|
@ -494,7 +494,7 @@ AC_SUBST(LIBSNDFILE_LIBS)
|
||||||
|
|
||||||
#### atomic-ops ###
|
#### 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
|
if test "x$need_libatomic_ops" = "xyes"; then
|
||||||
AC_MSG_RESULT([yes])
|
AC_MSG_RESULT([yes])
|
||||||
AC_CHECK_HEADERS([atomic_ops.h], [], [
|
AC_CHECK_HEADERS([atomic_ops.h], [], [
|
||||||
|
|
@ -976,13 +976,9 @@ AC_ARG_ENABLE([polkit],
|
||||||
|
|
||||||
if test "x${polkit}" != xno ; then
|
if test "x${polkit}" != xno ; then
|
||||||
|
|
||||||
PKG_CHECK_MODULES(POLKIT, [ polkit-dbus ],
|
PKG_CHECK_MODULES(POLKIT, [ polkit-dbus >= 0.7 ],
|
||||||
[
|
[
|
||||||
HAVE_POLKIT=1
|
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])
|
AC_DEFINE([HAVE_POLKIT], 1, [Have PolicyKit])
|
||||||
policydir=`pkg-config polkit-dbus --variable prefix`/share/PolicyKit/policy/
|
policydir=`pkg-config polkit-dbus --variable prefix`/share/PolicyKit/policy/
|
||||||
AC_SUBST(policydir)
|
AC_SUBST(policydir)
|
||||||
|
|
|
||||||
|
|
@ -38,59 +38,6 @@
|
||||||
|
|
||||||
#include "polkit.h"
|
#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 pa_polkit_check(const char *action_id) {
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
DBusError dbus_error;
|
DBusError dbus_error;
|
||||||
|
|
@ -161,35 +108,32 @@ int pa_polkit_check(const char *action_id) {
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
|
||||||
#ifdef HAVE_POLKIT_CONTEXT_IS_CALLER_AUTHORIZED
|
|
||||||
polkit_result = polkit_context_is_caller_authorized(context, action, caller, TRUE, &polkit_error);
|
polkit_result = polkit_context_is_caller_authorized(context, action, caller, TRUE, &polkit_error);
|
||||||
|
|
||||||
if (polkit_error_is_set(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));
|
pa_log_error("Could not determine whether caller is authorized: %s", polkit_error_get_error_message(polkit_error));
|
||||||
goto finish;
|
goto finish;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
|
|
||||||
polkit_result = polkit_context_can_caller_do_action(context, action, caller);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (polkit_result == POLKIT_RESULT_ONLY_VIA_ADMIN_AUTH ||
|
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_SESSION ||
|
||||||
polkit_result == POLKIT_RESULT_ONLY_VIA_ADMIN_AUTH_KEEP_ALWAYS ||
|
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 ||
|
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 ||
|
||||||
polkit_result == POLKIT_RESULT_ONLY_VIA_SELF_AUTH_KEEP_SESSION ||
|
polkit_result == POLKIT_RESULT_ONLY_VIA_SELF_AUTH_KEEP_SESSION ||
|
||||||
polkit_result == POLKIT_RESULT_ONLY_VIA_SELF_AUTH_KEEP_ALWAYS
|
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
|
||||||
|| polkit_result == POLKIT_RESULT_ONLY_VIA_SELF_AUTH_ONE_SHOT
|
|
||||||
#endif
|
|
||||||
) {
|
) {
|
||||||
|
|
||||||
if (show_grant_dialog(action_id))
|
if (polkit_auth_obtain(action_id, 0, getpid(), &dbus_error)) {
|
||||||
continue;
|
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;
|
break;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue