Parse INQUIRE_MAXLEN in the passphrase callback.
authorBen Kibbey <bjk@luxsci.net>
Sun, 16 Aug 2015 16:29:41 +0000 (12:29 -0400)
committerBen Kibbey <bjk@luxsci.net>
Sun, 16 Aug 2015 16:54:50 +0000 (12:54 -0400)
* src/passphrase.c (_gpgme_passphrase_status_handler): Parse
GPGME_STATUS_INQUIRE_MAXLEN.
* src/passphrase.c (_gpgme_passphrase_command_handler): Send the
INQUIRE_MAXLEN status message.

--
Fixes passing this status message along when decrypting symmetric data
from gpg.

src/passphrase.c

index 00e9d99..63ab31e 100644 (file)
@@ -41,6 +41,7 @@ typedef struct
   char *uid_hint;
   char *passphrase_info;
   int bad_passphrase;
   char *uid_hint;
   char *passphrase_info;
   int bad_passphrase;
+  char *maxlen;
 } *op_data_t;
 
 
 } *op_data_t;
 
 
@@ -53,6 +54,7 @@ release_op_data (void *hook)
     free (opd->passphrase_info);
   if (opd->uid_hint)
     free (opd->uid_hint);
     free (opd->passphrase_info);
   if (opd->uid_hint)
     free (opd->uid_hint);
+  free (opd->maxlen);
 }
 
 \f
 }
 
 \f
@@ -73,6 +75,11 @@ _gpgme_passphrase_status_handler (void *priv, gpgme_status_code_t code,
 
   switch (code)
     {
 
   switch (code)
     {
+    case GPGME_STATUS_INQUIRE_MAXLEN:
+      free (opd->maxlen);
+      if (!(opd->maxlen = strdup (args)))
+        return gpg_error_from_syserror ();
+      break;
     case GPGME_STATUS_USERID_HINT:
       if (opd->uid_hint)
        free (opd->uid_hint);
     case GPGME_STATUS_USERID_HINT:
       if (opd->uid_hint)
        free (opd->uid_hint);
@@ -141,9 +148,14 @@ _gpgme_passphrase_command_handler (void *priv, gpgme_status_code_t code,
       if (processed)
        *processed = 1;
 
       if (processed)
        *processed = 1;
 
-      err = ctx->passphrase_cb (ctx->passphrase_cb_value,
-                               opd->uid_hint, opd->passphrase_info,
-                               opd->bad_passphrase, fd);
+      if (ctx->status_cb && opd->maxlen)
+        err = ctx->status_cb (ctx->status_cb_value, "INQUIRE_MAXLEN",
+                              opd->maxlen);
+
+      if (!err)
+        err = ctx->passphrase_cb (ctx->passphrase_cb_value,
+                                  opd->uid_hint, opd->passphrase_info,
+                                  opd->bad_passphrase, fd);
 
       /* Reset bad passphrase flag, in case it is correct now.  */
       opd->bad_passphrase = 0;
 
       /* Reset bad passphrase flag, in case it is correct now.  */
       opd->bad_passphrase = 0;