[Spice-devel] [PATCH spice-gtk] smartcard: add reader and cards on channel up

Pavel Grunt pgrunt at redhat.com
Fri Mar 27 12:01:23 PDT 2015


> 
> Looks like this patchset broke the build with smartcard support
> disabled.
> 

Sorry about that, I'm sending a patch.

Thanks for reporting

Pavel

> 
> 
> On Wed, 2015-03-25 at 06:28 -0400, Pavel Grunt wrote:
> > Hi, it looks good, ACK.
> > 
> > I tested it in rhel6.7 using the "smartcard emulation".
> > For spice-gtk v0.26 I "needed" commit
> > 2a72a2c665d4d6ecd9861377f7dfb6223cf31c47.
> > 
> > Thanks,
> > 
> > Pavel
> > 
> > > 
> > > The smartcard manager reports reader/card events on insertion and
> > > removal. If a smartcard channel is created after those events,
> > > the
> > > channel state will not be in sync with the current reader/card
> > > state.
> > > Sync the state when the channel is up.
> > > 
> > > Fixes:
> > > https://bugzilla.redhat.com/show_bug.cgi?id=1205171
> > > ---
> > >  gtk/channel-smartcard.c | 24 +++++++++++++++++++++++-
> > >  1 file changed, 23 insertions(+), 1 deletion(-)
> > > 
> > > diff --git a/gtk/channel-smartcard.c b/gtk/channel-smartcard.c
> > > index cc3ae3b..0ab7213 100644
> > > --- a/gtk/channel-smartcard.c
> > > +++ b/gtk/channel-smartcard.c
> > > @@ -400,6 +400,10 @@ static void
> > > reader_added_cb(SpiceSmartcardManager *manager, VReader *reader,
> > >      SpiceSmartcardChannel *channel =
> > >      SPICE_SMARTCARD_CHANNEL(user_data);
> > >      const char *reader_name = vreader_get_name(reader);
> > >  
> > > +    if (vreader_get_id(reader) != -1 ||
> > > +        g_list_find(channel->priv->pending_reader_additions,
> > > reader))
> > > +        return;
> > > +
> > >      channel->priv->pending_reader_additions =
> > >          g_list_append(channel->priv->pending_reader_additions,
> > >          reader);
> > >  
> > > @@ -452,6 +456,8 @@ static void
> > > spice_smartcard_channel_up_cb(GObject
> > > *source_object,
> > >                                            gpointer user_data)
> > >  {
> > >      SpiceChannel *channel = SPICE_CHANNEL(user_data);
> > > +    SpiceSmartcardManager *manager =
> > > spice_smartcard_manager_get();
> > > +    GList *l, *list = NULL;
> > >      GError *error = NULL;
> > >  
> > >      g_return_if_fail(channel != NULL);
> > > @@ -459,9 +465,25 @@ static void
> > > spice_smartcard_channel_up_cb(GObject *source_object,
> > >  
> > >      spice_smartcard_manager_init_finish(SPICE_SESSION(source_object),
> > >                                          res, &error);
> > > -    if (error)
> > > +    if (error) {
> > >          g_warning("%s", error->message);
> > > +        goto end;
> > > +    }
> > > +
> > > +    list = spice_smartcard_manager_get_readers(manager);
> > > +    for (l = list; l != NULL; l = l->next) {
> > > +        VReader *reader = l->data;
> > > +        gboolean has_card = vreader_card_is_present(reader) ==
> > > VREADER_OK;
> > > +
> > > +        reader_added_cb(manager, reader, channel);
> > > +        if (has_card)
> > > +            card_inserted_cb(manager, reader, channel);
> > > +
> > > +        g_boxed_free(SPICE_TYPE_SMARTCARD_READER, reader);
> > > +    }
> > >  
> > > +end:
> > > +    g_list_free(list);
> > >      g_clear_error(&error);
> > >  }
> > >  
> > > --
> > > 2.1.0
> > > 
> > > 
> > _______________________________________________
> > Spice-devel mailing list
> > Spice-devel at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/spice-devel
> 
> 
> 


More information about the Spice-devel mailing list