[Spice-devel] [spice-gtk v1 2/4] usb-acl-helper: always build access control helper

Victor Toso victortoso at redhat.com
Tue May 7 08:56:03 UTC 2019


From: Victor Toso <me at victortoso.com>

This will allow us to simplify channel-usbredir code, which contains a
few #ifdef USE_POLKIT blocks while the code itself is only calling
the usb-acl-helper APIs.

Let's keep the API working even when polkit is disabled.

This is a preparation patch, after this patch, the channel-usbredir.c
still only calls usb-acl-helper API's when polkit is enabled. The next
patch adds the missing bits so the API keeps working without Polkit.

Signed-off-by: Victor Toso <victortoso at redhat.com>
---
 src/Makefile.am      | 13 +++----------
 src/meson.build      |  7 ++-----
 src/usb-acl-helper.c | 19 ++++++++++++-------
 3 files changed, 17 insertions(+), 22 deletions(-)

diff --git a/src/Makefile.am b/src/Makefile.am
index 7b98180..90a5c7c 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -96,6 +96,7 @@ SPICE_COMMON_CPPFLAGS =						\
 
 AM_CPPFLAGS =					\
 	-DLOCALE_DIR=\""$(datadir)/locale"\"	\
+	-DACL_HELPER_PATH="\"$(ACL_HELPER_DIR)\""	\
 	$(SPICE_COMMON_CPPFLAGS)		\
 	$(SPICE_CFLAGS)				\
 	$(NULL)
@@ -203,15 +204,6 @@ libspice_client_glib_impl_la_LIBADD =					\
 	$(PHODAV_LIBS)							\
 	$(NULL)
 
-if WITH_POLKIT
-USB_ACL_HELPER_SRCS =				\
-	usb-acl-helper.c			\
-	usb-acl-helper.h			\
-	$(NULL)
-AM_CPPFLAGS += -DACL_HELPER_PATH="\"$(ACL_HELPER_DIR)\""
-else
-USB_ACL_HELPER_SRCS =
-endif
 
 libspice_client_glib_2_0_la_SOURCES =
 libspice_client_glib_impl_la_SOURCES =			\
@@ -264,7 +256,8 @@ libspice_client_glib_impl_la_SOURCES =			\
 	usb-device-manager-priv.h			\
 	usbutil.c					\
 	usbutil.h					\
-	$(USB_ACL_HELPER_SRCS)				\
+	usb-acl-helper.c				\
+	usb-acl-helper.h				\
 	vmcstream.c					\
 	vmcstream.h					\
 							\
diff --git a/src/meson.build b/src/meson.build
index 5365f05..0608532 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -118,6 +118,8 @@ spice_client_glib_sources = [
   'spice-uri.c',
   'spice-uri-priv.h',
   'spice-util-priv.h',
+  'usb-acl-helper.c',
+  'usb-acl-helper.h',
   'usb-device-manager-priv.h',
   'usbutil.c',
   'usbutil.h',
@@ -129,11 +131,6 @@ if spice_gtk_has_builtin_mjpeg
   spice_client_glib_sources += 'channel-display-mjpeg.c'
 endif
 
-if spice_gtk_has_polkit
-  spice_client_glib_sources += ['usb-acl-helper.c',
-                                'usb-acl-helper.h']
-endif
-
 if spice_gtk_has_phodav
   spice_client_glib_sources += ['giopipe.c',
                                 'giopipe.h']
diff --git a/src/usb-acl-helper.c b/src/usb-acl-helper.c
index 3145597..30ac3dd 100644
--- a/src/usb-acl-helper.c
+++ b/src/usb-acl-helper.c
@@ -81,6 +81,15 @@ static void async_result_set_cancelled(GTask *task)
                 "Setting USB device node ACL cancelled");
 }
 
+static void cancelled_cb(GCancellable *cancellable, gpointer user_data)
+{
+    SpiceUsbAclHelper *self = SPICE_USB_ACL_HELPER(user_data);
+
+    spice_usb_acl_helper_cancel(self);
+}
+
+#ifdef USE_POLKIT
+
 static gboolean cb_out_watch(GIOChannel    *channel,
                              GIOCondition   cond,
                              gpointer      *user_data)
@@ -142,13 +151,6 @@ done:
     return FALSE;
 }
 
-static void cancelled_cb(GCancellable *cancellable, gpointer user_data)
-{
-    SpiceUsbAclHelper *self = SPICE_USB_ACL_HELPER(user_data);
-
-    spice_usb_acl_helper_cancel(self);
-}
-
 static void helper_child_watch_cb(GPid pid, gint status, gpointer user_data)
 {
     /* Nothing to do, but we need the child watch to avoid zombies */
@@ -201,6 +203,7 @@ exec_usb_acl_helper_bin(SpiceUsbAclHelper *self,
                    (GIOFunc)cb_out_watch, g_object_ref(self));
     return TRUE;
 }
+#endif /* USE_POLKIT */
 
 /* ------------------------------------------------------------------ */
 /* private api                                                        */
@@ -242,12 +245,14 @@ void spice_usb_acl_helper_open_acl_async(SpiceUsbAclHelper *self,
         goto done;
     }
 
+#ifdef USE_POLKIT
     gchar buf[128];
     snprintf(buf, sizeof(buf), "%d %d\n", busnum, devnum);
     if (!exec_usb_acl_helper_bin(self, buf, &err)) {
         g_task_return_error(task, err);
         goto done;
     }
+#endif /* USE_POLKIT */
 
     priv->task = task;
     if (cancellable) {
-- 
2.20.1



More information about the Spice-devel mailing list