Package: libspice-client-glib-2.0-8
Version: 0.28-1
Severity: normal

Hello,

I set up udev rules to enable access to select USB devices from my
account but I cannot redirect them from the spice client.

This is because I did not set up policy kit permissions for those
devices and opening the device directly is not attempted when policylit
support is enabled.

Sending a patch that fixes this.

Thanks

Michal

-- System Information:
Debian Release: 8.1
  APT prefers stable
  APT policy: (900, 'stable'), (610, 'oldstable'), (500, 'testing'), (410, 
'unstable'), (400, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386, armhf

Kernel: Linux 4.1.0-rc7+ (SMP w/4 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) (ignored: LC_ALL 
set to en_US.UTF-8)
Shell: /bin/sh linked to /bin/bash
Init: systemd (via /run/systemd/system)

Versions of packages libspice-client-glib-2.0-8 depends on:
ii  libc6                             2.19-18
ii  libglib2.0-0                      2.42.1-1
ii  libjpeg62-turbo                   1:1.3.1-12
ii  liblz4-1                          0.0~r122-2
ii  libopus0                          1.1-2
ii  libpixman-1-0                     0.32.6-3
ii  libpulse-mainloop-glib0           5.0-13
ii  libpulse0                         5.0-13
ii  libsasl2-2                        2.1.26.dfsg1-13
ii  libssl1.0.0                       1.0.1k-3+deb8u1
ii  libusb-1.0-0                      2:1.0.19-1
ii  libusbredirhost1                  0.7-1
ii  libusbredirparser1                0.7-1
ii  multiarch-support                 2.19-18
ii  spice-client-glib-usb-acl-helper  0.25-1+b1
ii  zlib1g                            1:1.2.8.dfsg-2+b1

libspice-client-glib-2.0-8 recommends no packages.

libspice-client-glib-2.0-8 suggests no packages.

-- no debconf information
Even if polkit is used try to open the device first.
Otherwise user accessible devices are denied because of negative polkit reply.
Index: spice-gtk-0.28/gtk/channel-usbredir.c
===================================================================
--- spice-gtk-0.28.orig/gtk/channel-usbredir.c	2015-02-06 02:24:10.000000000 +0100
+++ spice-gtk-0.28/gtk/channel-usbredir.c	2015-06-29 14:49:44.962340089 +0200
@@ -319,9 +319,7 @@
 {
     SpiceUsbredirChannelPrivate *priv = channel->priv;
     GSimpleAsyncResult *result;
-#if ! USE_POLKIT
     GError *err = NULL;
-#endif
 
     g_return_if_fail(SPICE_IS_USBREDIR_CHANNEL(channel));
     g_return_if_fail(device != NULL);
@@ -348,28 +346,28 @@
     priv->device = libusb_ref_device(device);
     priv->spice_device = g_boxed_copy(spice_usb_device_get_type(),
                                       spice_device);
+    if (!spice_usbredir_channel_open_device(channel, &err)) {
 #if USE_POLKIT
-    priv->result = result;
-    priv->state  = STATE_WAITING_FOR_ACL_HELPER;
-    priv->acl_helper = spice_usb_acl_helper_new();
-    g_object_set(spice_channel_get_session(SPICE_CHANNEL(channel)),
-                 "inhibit-keyboard-grab", TRUE, NULL);
-    spice_usb_acl_helper_open_acl(priv->acl_helper,
-                                  libusb_get_bus_number(device),
-                                  libusb_get_device_address(device),
-                                  cancellable,
-                                  spice_usbredir_channel_open_acl_cb,
-                                  channel);
-    return;
+        priv->result = result;
+        priv->state  = STATE_WAITING_FOR_ACL_HELPER;
+        priv->acl_helper = spice_usb_acl_helper_new();
+        g_object_set(spice_channel_get_session(SPICE_CHANNEL(channel)),
+                "inhibit-keyboard-grab", TRUE, NULL);
+        spice_usb_acl_helper_open_acl(priv->acl_helper,
+                libusb_get_bus_number(device),
+                libusb_get_device_address(device),
+                cancellable,
+                spice_usbredir_channel_open_acl_cb,
+                channel);
+        return;
 #else
-    if (!spice_usbredir_channel_open_device(channel, &err)) {
         g_simple_async_result_take_error(result, err);
         libusb_unref_device(priv->device);
         priv->device = NULL;
         g_boxed_free(spice_usb_device_get_type(), priv->spice_device);
         priv->spice_device = NULL;
-    }
 #endif
+    }
 
 done:
     g_simple_async_result_complete_in_idle(result);

Reply via email to