Fixed gpg-agent SCD inquire command cancellation.
authorBen Kibbey <bjk@luxsci.net>
Sat, 9 Jul 2011 12:25:22 +0000 (08:25 -0400)
committerWerner Koch <wk@gnupg.org>
Wed, 27 Jul 2011 08:58:52 +0000 (10:58 +0200)
Need to send the CANCEL command back to scdaemon otherwise the next SCD
command will fail.

agent/ChangeLog
agent/call-scd.c

index e1becac..25eabbc 100644 (file)
@@ -1,3 +1,8 @@
+2011-07-09  Ben Kibbey <bjk@luxsci.net>
+
+       * call-scd.c (agent_card_scd): Send the CANCEL command back to SCD
+       when the SCD command is cancelled from the client.
+
 2011-07-22  Werner Koch  <wk@g10code.com>
 
        * command-ssh.c (ssh_receive_key): Do not init comment to an empty
index 710589f..1ffb123 100644 (file)
@@ -1175,6 +1175,19 @@ agent_card_scd (ctrl_t ctrl, const char *cmdline,
                         pass_data_thru, assuan_context,
                         inq_needpin, &inqparm,
                         pass_status_thru, assuan_context);
+  if (gpg_err_code(rc) == GPG_ERR_ASS_CANCELED)
+    {
+      rc = assuan_write_line(ctrl->scd_local->ctx, "CAN");
+      if (!rc) {
+       char *line;
+       size_t len;
+
+       rc = assuan_read_line(ctrl->scd_local->ctx, &line, &len);
+       if (!rc)
+         rc = gpg_error(GPG_ERR_ASS_CANCELED);
+      }
+    }
+
   assuan_set_flag (ctrl->scd_local->ctx, ASSUAN_CONVEY_COMMENTS, saveflag);
   if (rc)
     {