summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Levy <alevy@redhat.com>2011-02-02 15:11:59 +0200
committerAlon Levy <alevy@redhat.com>2011-02-03 16:54:27 +0200
commit3b03acffe00a90c10c6a5c686889ce7a4a1c5382 (patch)
treef7a4c1f31a777ffa361ec3274166da1cf17b1ac2
parent86f89cdf87c83e1d609ecd32b95131e7f83ed08c (diff)
vscclient: read payload after header check, before type switch
-rw-r--r--vscclient.c37
1 files changed, 26 insertions, 11 deletions
diff --git a/vscclient.c b/vscclient.c
index 5561145..1820aa9 100644
--- a/vscclient.c
+++ b/vscclient.c
@@ -284,17 +284,27 @@ do_command(void)
reader_id = get_id_from_string(&string[7], reader_id);
}
reader = vreader_get_reader_by_id(reader_id);
- error = vcard_emul_force_card_insert(reader);
- printf("insert %s, returned %d\n", reader ? vreader_get_name(reader)
- : "invalid reader", error);
+ if (reader != NULL) {
+ error = vcard_emul_force_card_insert(reader);
+ printf("insert %s, returned %d\n",
+ reader ? vreader_get_name(reader)
+ : "invalid reader", error);
+ } else {
+ printf("no reader by id %d found\n", reader_id);
+ }
} else if (strncmp(string,"remove",6) == 0) {
if (string[6] == ' ') {
reader_id = get_id_from_string(&string[7], reader_id);
}
reader = vreader_get_reader_by_id(reader_id);
- error = vcard_emul_force_card_remove(reader);
- printf("remove %s, returned %d\n", reader ? vreader_get_name(reader)
- : "invalid reader", error);
+ if (reader != NULL) {
+ error = vcard_emul_force_card_remove(reader);
+ printf("remove %s, returned %d\n",
+ reader ? vreader_get_name(reader)
+ : "invalid reader", error);
+ } else {
+ printf("no reader by id %d found\n", reader_id);
+ }
} else if (strncmp(string,"select",6) == 0) {
if (string[6] == ' ') {
reader_id = get_id_from_string(&string[7],
@@ -584,11 +594,21 @@ main (
}
switch (mhHeader.type) {
case VSC_APDU:
+ case VSC_Flush:
+ case VSC_Error:
+ case VSC_Init:
rv = read (
sock,
pbSendBuffer,
mhHeader.length
);
+ break;
+ default:
+ printf ("Unexpected message of type 0x%X\n", mhHeader.type);
+ return 0;
+ }
+ switch (mhHeader.type) {
+ case VSC_APDU:
if (rv < 0) {
/* Error */
printf ("read error\n");
@@ -636,11 +656,6 @@ main (
send_msg(VSC_FlushComplete, mhHeader.reader_id, NULL, 0);
break;
case VSC_Error:
- rv = read (
- sock,
- pbSendBuffer,
- mhHeader.length
- );
error_msg = (VSCMsgError *) pbSendBuffer;
if (error_msg->code == VSC_SUCCESS) {
MUTEX_LOCK(pending_reader_lock);