Re: [PATCH spice] smartcard: set char device state

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> 
> From: Marc-André Lureau <marcandre.lureau@xxxxxxxxxx>
> 
> Follow all other char devices implementation (spicevmc, agent,
> stream-device) and set the char device state when
> connected/disconnected. This allows qemu to discard writes, optimize a
> bit the source polling, and will trigger HUP events.
> 
> See related qemu "char/spice: discard write() if backend is
> disconnected".
> 
> Note: sif->state() should probably be handled at the char-device
> level. I am not sure what the smartcard channel really brings over
> plain spicevmc...
> 
> Signed-off-by: Marc-André Lureau <marcandre.lureau@xxxxxxxxxx>
> ---
>  server/smartcard.c | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
> 
> diff --git a/server/smartcard.c b/server/smartcard.c
> index 2cb68e06..403805a8 100644
> --- a/server/smartcard.c
> +++ b/server/smartcard.c
> @@ -343,6 +343,11 @@ void
> smartcard_char_device_attach_client(SpiceCharDeviceInstance *char_device,
>          dev->priv->scc = NULL;
>          smartcard_channel_client_set_char_device(scc, NULL);
>          red_channel_client_disconnect(RED_CHANNEL_CLIENT(scc));
> +    } else {
> +        SpiceCharDeviceInterface *sif =
> spice_char_device_get_interface(char_device);
> +        if (sif->state) {
> +            sif->state(char_device, 1);
> +        }
>      }
>  }
>  
> @@ -373,11 +378,21 @@ gboolean
> smartcard_char_device_notify_reader_remove(RedCharDeviceSmartcard *dev)
>  void smartcard_char_device_detach_client(RedCharDeviceSmartcard *smartcard,
>                                           SmartCardChannelClient *scc)
>  {
> +    SpiceCharDeviceInterface *sif;
> +    SpiceCharDeviceInstance *sin;
> +
> +    g_object_get(smartcard, "sin", &sin, NULL);
> +    sif = spice_char_device_get_interface(sin);
> +
>      spice_assert(smartcard->priv->scc == scc);
>      red_char_device_client_remove(RED_CHAR_DEVICE(smartcard),
>                                    red_channel_client_get_client(RED_CHANNEL_CLIENT(scc)));
>      smartcard_channel_client_set_char_device(scc, NULL);
>      smartcard->priv->scc = NULL;
> +
> +    if (sif->state) {
> +        sif->state(sin, 0);
> +    }
>  }
>  
>  SmartCardChannelClient*
>  smartcard_char_device_get_client(RedCharDeviceSmartcard *smartcard)

I never tried smartcard support but I remember that when you disable the device
from the guest the device cannot be opened. I saw in the past some smart card usage
and I remember for instance that on Windows if smartcards are configured during the
login the login screen change adding smart card support. What would happen in
this case if presenting the login screen there are no clients connected then
you connect? Would the system detect that now the device can be used and add
smart card support to the login? I don't know how to setup such test, was this
tested?

Frediano
_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/spice-devel




[Index of Archives]     [Linux Virtualization]     [Linux Virtualization]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]