1
0
Fork 0
mirror of git://git.gnupg.org/gnupg.git synced 2025-07-02 22:46:30 +02:00

scd: Add reder information to --card-status.

* g10/call-agent.h, g10/call-agent.c (agent_release_card_info)
g10/card-util.c (card_status): Add READER.
* scd/apdu.c (close_ccid_reader, open_ccid_reader): Handle RDRNAME.
(apdu_get_reader_name): New.
* scd/ccid-driver.c (ccid_open_reader): Add argument to RDRNAME_P.
* scd/command.c (cmd_learn): Return READER information.
This commit is contained in:
NIIBE Yutaka 2015-11-09 16:15:44 +09:00
parent 2242658efe
commit bce0e3f71d
8 changed files with 41 additions and 6 deletions

View file

@ -2466,6 +2466,7 @@ static int
close_ccid_reader (int slot)
{
ccid_close_reader (reader_table[slot].ccid.handle);
reader_table[slot].rdrname = NULL;
reader_table[slot].used = 0;
return 0;
}
@ -2619,7 +2620,8 @@ open_ccid_reader (const char *portstr)
return -1;
slotp = reader_table + slot;
err = ccid_open_reader (&slotp->ccid.handle, portstr);
err = ccid_open_reader (&slotp->ccid.handle, portstr,
(const char **)&slotp->rdrname);
if (err)
{
slotp->used = 0;
@ -4326,3 +4328,10 @@ apdu_send_direct (int slot, size_t extended_length,
return 0;
}
const char *
apdu_get_reader_name (int slot)
{
return reader_table[slot].rdrname;
}

View file

@ -134,6 +134,6 @@ int apdu_send_direct (int slot, size_t extended_length,
const unsigned char *apdudata, size_t apdudatalen,
int handle_more,
unsigned char **retbuf, size_t *retbuflen);
const char *apdu_get_reader_name (int slot);
#endif /*APDU_H*/

View file

@ -1542,7 +1542,8 @@ ccid_vendor_specific_init (ccid_driver_t handle)
/* Open the reader with the internal number READERNO and return a
pointer to be used as handle in HANDLE. Returns 0 on success. */
int
ccid_open_reader (ccid_driver_t *handle, const char *readerid)
ccid_open_reader (ccid_driver_t *handle, const char *readerid,
const char **rdrname_p)
{
int rc = 0;
struct usb_device *dev = NULL;
@ -1661,6 +1662,9 @@ ccid_open_reader (ccid_driver_t *handle, const char *readerid)
free (*handle);
*handle = NULL;
}
else
if (rdrname_p)
*rdrname_p = (*handle)->rid;
return rc;
}
@ -3735,7 +3739,7 @@ main (int argc, char **argv)
break;
}
rc = ccid_open_reader (&ccid, argc? *argv:NULL);
rc = ccid_open_reader (&ccid, argc? *argv:NULL, NULL);
if (rc)
return 1;

View file

@ -111,7 +111,8 @@ typedef struct ccid_driver_s *ccid_driver_t;
int ccid_set_debug_level (int level);
char *ccid_get_reader_list (void);
int ccid_open_reader (ccid_driver_t *handle, const char *readerid);
int ccid_open_reader (ccid_driver_t *handle, const char *readerid,
const char **rdrname_p);
int ccid_set_progress_cb (ccid_driver_t handle,
void (*cb)(void *, const char *, int, int, int),
void *cb_arg);

View file

@ -667,9 +667,18 @@ cmd_learn (assuan_context_t ctx, char *line)
knows about this card */
if (!only_keypairinfo)
{
int slot;
const char *reader;
char *serial;
time_t stamp;
slot = vreader_slot (ctrl->server_local->vreader_idx);
reader = apdu_get_reader_name (slot);
if (!reader)
return out_of_core ();
send_status_direct (ctrl, "READER", reader);
/* No need to free the string of READER. */
rc = app_get_serial_and_stamp (ctrl->app_ctx, &serial, &stamp);
if (rc)
return rc;