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