|
Julius Milan |
c90eb8 |
From 8cd12d7d7f2af69079f357cc23d64be96e06cd87 Mon Sep 17 00:00:00 2001
|
|
Julius Milan |
c90eb8 |
From: Wes Lindauer <wesley.lindauer@gmail.com>
|
|
Julius Milan |
c90eb8 |
Date: Wed, 21 Jun 2017 11:55:59 -0400
|
|
Julius Milan |
c90eb8 |
Subject: [PATCH 14/27] cli,dbus: Allow polkit to be optional at build time
|
|
Julius Milan |
c90eb8 |
|
|
Julius Milan |
c90eb8 |
---
|
|
Julius Milan |
c90eb8 |
configure.ac | 13 +++++++++++--
|
|
Julius Milan |
c90eb8 |
src/cli/abrt-cli-core.c | 10 ++++++++++
|
|
Julius Milan |
c90eb8 |
src/dbus/abrt-polkit.c | 20 ++++++++++++++++++--
|
|
Julius Milan |
c90eb8 |
3 files changed, 39 insertions(+), 4 deletions(-)
|
|
Julius Milan |
c90eb8 |
|
|
Julius Milan |
c90eb8 |
diff --git a/configure.ac b/configure.ac
|
|
Julius Milan |
c90eb8 |
index 01a29e1..d277ea4 100644
|
|
Julius Milan |
c90eb8 |
--- a/configure.ac
|
|
Julius Milan |
c90eb8 |
+++ b/configure.ac
|
|
Julius Milan |
c90eb8 |
@@ -189,8 +189,6 @@ PKG_CHECK_MODULES([LIBNOTIFY], [libnotify >= 0.7.0])
|
|
Julius Milan |
c90eb8 |
PKG_CHECK_MODULES([NSS], [nss])
|
|
Julius Milan |
c90eb8 |
PKG_CHECK_MODULES([LIBREPORT], [libreport])
|
|
Julius Milan |
c90eb8 |
PKG_CHECK_MODULES([LIBREPORT_GTK], [libreport-gtk])
|
|
Julius Milan |
c90eb8 |
-PKG_CHECK_MODULES([POLKIT], [polkit-gobject-1])
|
|
Julius Milan |
c90eb8 |
-PKG_CHECK_MODULES([POLKIT_AGENT], [polkit-agent-1])
|
|
Julius Milan |
c90eb8 |
PKG_CHECK_MODULES([GIO], [gio-2.0])
|
|
Julius Milan |
c90eb8 |
PKG_CHECK_MODULES([GIO_UNIX], [gio-unix-2.0])
|
|
Julius Milan |
c90eb8 |
PKG_CHECK_MODULES([SATYR], [satyr])
|
|
Julius Milan |
c90eb8 |
@@ -433,6 +431,17 @@ ABRT_PARSE_WITH([rpm]))
|
|
Julius Milan |
c90eb8 |
AC_DEFINE(HAVE_LIBRPM, [], [Have rpm support.])
|
|
Julius Milan |
c90eb8 |
[fi]
|
|
Julius Milan |
c90eb8 |
|
|
Julius Milan |
c90eb8 |
+AC_ARG_WITH(polkit,
|
|
Julius Milan |
c90eb8 |
+AS_HELP_STRING([--with-polkit],[build polkit support (default is YES)]),
|
|
Julius Milan |
c90eb8 |
+ABRT_PARSE_WITH([polkit]))
|
|
Julius Milan |
c90eb8 |
+
|
|
Julius Milan |
c90eb8 |
+[if test -z "$NO_POLKIT"]
|
|
Julius Milan |
c90eb8 |
+[then]
|
|
Julius Milan |
c90eb8 |
+ PKG_CHECK_MODULES([POLKIT], [polkit-gobject-1])
|
|
Julius Milan |
c90eb8 |
+ PKG_CHECK_MODULES([POLKIT_AGENT], [polkit-agent-1])
|
|
Julius Milan |
c90eb8 |
+ AC_DEFINE(HAVE_POLKIT, [], [Have polkit support.])
|
|
Julius Milan |
c90eb8 |
+[fi]
|
|
Julius Milan |
c90eb8 |
+
|
|
Julius Milan |
c90eb8 |
# Initialize the test suite.
|
|
Julius Milan |
c90eb8 |
AC_CONFIG_TESTDIR(tests)
|
|
Julius Milan |
c90eb8 |
AC_CONFIG_FILES([tests/Makefile tests/atlocal])
|
|
Julius Milan |
c90eb8 |
diff --git a/src/cli/abrt-cli-core.c b/src/cli/abrt-cli-core.c
|
|
Julius Milan |
c90eb8 |
index ca49dbd..fdd936c 100644
|
|
Julius Milan |
c90eb8 |
--- a/src/cli/abrt-cli-core.c
|
|
Julius Milan |
c90eb8 |
+++ b/src/cli/abrt-cli-core.c
|
|
Julius Milan |
c90eb8 |
@@ -23,13 +23,17 @@
|
|
Julius Milan |
c90eb8 |
/* It is not possible to include polkitagent.h without the following define.
|
|
Julius Milan |
c90eb8 |
* Check out the included header file.
|
|
Julius Milan |
c90eb8 |
*/
|
|
Julius Milan |
c90eb8 |
+#ifdef HAVE_POLKIT
|
|
Julius Milan |
c90eb8 |
#define POLKIT_AGENT_I_KNOW_API_IS_SUBJECT_TO_CHANGE
|
|
Julius Milan |
c90eb8 |
#include <polkitagent/polkitagent.h>
|
|
Julius Milan |
c90eb8 |
+#endif
|
|
Julius Milan |
c90eb8 |
|
|
Julius Milan |
c90eb8 |
int g_cli_authenticate;
|
|
Julius Milan |
c90eb8 |
|
|
Julius Milan |
c90eb8 |
+#ifdef HAVE_POLKIT
|
|
Julius Milan |
c90eb8 |
static PolkitAgentListener *s_local_polkit_agent = NULL;
|
|
Julius Milan |
c90eb8 |
static gpointer s_local_agent_handle = NULL;
|
|
Julius Milan |
c90eb8 |
+#endif
|
|
Julius Milan |
c90eb8 |
|
|
Julius Milan |
c90eb8 |
/* Vector of problems: */
|
|
Julius Milan |
c90eb8 |
/* problem_data_vector[i] = { "name" = { "content", CD_FLAG_foo_bits } } */
|
|
Julius Milan |
c90eb8 |
@@ -126,6 +130,7 @@ char *hash2dirname_if_necessary(const char *input)
|
|
Julius Milan |
c90eb8 |
|
|
Julius Milan |
c90eb8 |
void initialize_polkit_agent(void)
|
|
Julius Milan |
c90eb8 |
{
|
|
Julius Milan |
c90eb8 |
+#ifdef HAVE_POLKIT
|
|
Julius Milan |
c90eb8 |
GError *error = NULL;
|
|
Julius Milan |
c90eb8 |
PolkitSubject *subject = polkit_unix_process_new_for_owner(
|
|
Julius Milan |
c90eb8 |
getpid(),
|
|
Julius Milan |
c90eb8 |
@@ -148,13 +153,18 @@ void initialize_polkit_agent(void)
|
|
Julius Milan |
c90eb8 |
}
|
|
Julius Milan |
c90eb8 |
|
|
Julius Milan |
c90eb8 |
g_object_unref(subject);
|
|
Julius Milan |
c90eb8 |
+#else
|
|
Julius Milan |
c90eb8 |
+ log_info("Polkit support is currently disabled");
|
|
Julius Milan |
c90eb8 |
+#endif
|
|
Julius Milan |
c90eb8 |
}
|
|
Julius Milan |
c90eb8 |
|
|
Julius Milan |
c90eb8 |
void uninitialize_polkit_agent(void)
|
|
Julius Milan |
c90eb8 |
{
|
|
Julius Milan |
c90eb8 |
+#ifdef HAVE_POLKIT
|
|
Julius Milan |
c90eb8 |
if (s_local_agent_handle != NULL)
|
|
Julius Milan |
c90eb8 |
polkit_agent_listener_unregister(s_local_agent_handle);
|
|
Julius Milan |
c90eb8 |
|
|
Julius Milan |
c90eb8 |
if (s_local_polkit_agent != NULL)
|
|
Julius Milan |
c90eb8 |
g_object_unref(s_local_polkit_agent);
|
|
Julius Milan |
c90eb8 |
+#endif
|
|
Julius Milan |
c90eb8 |
}
|
|
Julius Milan |
c90eb8 |
diff --git a/src/dbus/abrt-polkit.c b/src/dbus/abrt-polkit.c
|
|
Julius Milan |
c90eb8 |
index 7ce9132..e376be1 100644
|
|
Julius Milan |
c90eb8 |
--- a/src/dbus/abrt-polkit.c
|
|
Julius Milan |
c90eb8 |
+++ b/src/dbus/abrt-polkit.c
|
|
Julius Milan |
c90eb8 |
@@ -16,7 +16,6 @@
|
|
Julius Milan |
c90eb8 |
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
Julius Milan |
c90eb8 |
*/
|
|
Julius Milan |
c90eb8 |
|
|
Julius Milan |
c90eb8 |
-#include <polkit/polkit.h>
|
|
Julius Milan |
c90eb8 |
#include <glib-object.h>
|
|
Julius Milan |
c90eb8 |
#include <sys/types.h>
|
|
Julius Milan |
c90eb8 |
#include <unistd.h>
|
|
Julius Milan |
c90eb8 |
@@ -24,17 +23,23 @@
|
|
Julius Milan |
c90eb8 |
#include "libabrt.h"
|
|
Julius Milan |
c90eb8 |
#include "abrt-polkit.h"
|
|
Julius Milan |
c90eb8 |
|
|
Julius Milan |
c90eb8 |
+#ifdef HAVE_POLKIT
|
|
Julius Milan |
c90eb8 |
+#include <polkit/polkit.h>
|
|
Julius Milan |
c90eb8 |
+#endif
|
|
Julius Milan |
c90eb8 |
+
|
|
Julius Milan |
c90eb8 |
/*number of seconds: timeout for the authorization*/
|
|
Julius Milan |
c90eb8 |
#define POLKIT_TIMEOUT 20
|
|
Julius Milan |
c90eb8 |
|
|
Julius Milan |
c90eb8 |
+#ifdef HAVE_POLKIT
|
|
Julius Milan |
c90eb8 |
static gboolean do_cancel(GCancellable* cancellable)
|
|
Julius Milan |
c90eb8 |
{
|
|
Julius Milan |
c90eb8 |
log("Timer has expired; cancelling authorization check\n");
|
|
Julius Milan |
c90eb8 |
g_cancellable_cancel(cancellable);
|
|
Julius Milan |
c90eb8 |
return FALSE;
|
|
Julius Milan |
c90eb8 |
}
|
|
Julius Milan |
c90eb8 |
+#endif
|
|
Julius Milan |
c90eb8 |
|
|
Julius Milan |
c90eb8 |
-
|
|
Julius Milan |
c90eb8 |
+#ifdef HAVE_POLKIT
|
|
Julius Milan |
c90eb8 |
static PolkitResult do_check(PolkitSubject *subject, const char *action_id)
|
|
Julius Milan |
c90eb8 |
{
|
|
Julius Milan |
c90eb8 |
PolkitAuthority *authority;
|
|
Julius Milan |
c90eb8 |
@@ -90,17 +95,24 @@ out:
|
|
Julius Milan |
c90eb8 |
g_object_unref(auth_result);
|
|
Julius Milan |
c90eb8 |
return result;
|
|
Julius Milan |
c90eb8 |
}
|
|
Julius Milan |
c90eb8 |
+#endif
|
|
Julius Milan |
c90eb8 |
|
|
Julius Milan |
c90eb8 |
PolkitResult polkit_check_authorization_dname(const char *dbus_name, const char *action_id)
|
|
Julius Milan |
c90eb8 |
{
|
|
Julius Milan |
c90eb8 |
+#ifdef HAVE_POLKIT
|
|
Julius Milan |
c90eb8 |
glib_init();
|
|
Julius Milan |
c90eb8 |
|
|
Julius Milan |
c90eb8 |
PolkitSubject *subject = polkit_system_bus_name_new(dbus_name);
|
|
Julius Milan |
c90eb8 |
return do_check(subject, action_id);
|
|
Julius Milan |
c90eb8 |
+#else
|
|
Julius Milan |
c90eb8 |
+ log_warning("Polkit disabled. Everyone has access to private data");
|
|
Julius Milan |
c90eb8 |
+ return PolkitYes;
|
|
Julius Milan |
c90eb8 |
+#endif
|
|
Julius Milan |
c90eb8 |
}
|
|
Julius Milan |
c90eb8 |
|
|
Julius Milan |
c90eb8 |
PolkitResult polkit_check_authorization_pid(pid_t pid, const char *action_id)
|
|
Julius Milan |
c90eb8 |
{
|
|
Julius Milan |
c90eb8 |
+#ifdef HAVE_POLKIT
|
|
Julius Milan |
c90eb8 |
glib_init();
|
|
Julius Milan |
c90eb8 |
|
|
Julius Milan |
c90eb8 |
PolkitSubject *subject = polkit_unix_process_new_for_owner(pid,
|
|
Julius Milan |
c90eb8 |
@@ -108,4 +120,8 @@ PolkitResult polkit_check_authorization_pid(pid_t pid, const char *action_id)
|
|
Julius Milan |
c90eb8 |
/*use uid from /proc*/ -1);
|
|
Julius Milan |
c90eb8 |
|
|
Julius Milan |
c90eb8 |
return do_check(subject, action_id);
|
|
Julius Milan |
c90eb8 |
+#else
|
|
Julius Milan |
c90eb8 |
+ log_warning("Polkit disabled. Everyone has access to private data");
|
|
Julius Milan |
c90eb8 |
+ return PolkitYes;
|
|
Julius Milan |
c90eb8 |
+#endif
|
|
Julius Milan |
c90eb8 |
}
|
|
Julius Milan |
c90eb8 |
--
|
|
Julius Milan |
c90eb8 |
2.9.5
|
|
Julius Milan |
c90eb8 |
|