summaryrefslogtreecommitdiff
path: root/src/passphrase.c
diff options
context:
space:
mode:
authorBen Kibbey <bjk@luxsci.net>2015-08-16 12:29:41 -0400
committerBen Kibbey <bjk@luxsci.net>2015-08-16 12:54:50 -0400
commitccbaccbf2e0ba582d181b9ee4d8543d7c1248b2c (patch)
tree7e78438d2f29ce042c1b09ce95ceae0183186b31 /src/passphrase.c
parent70b3e5964ea0592bd09d1877d720b2c63f501970 (diff)
downloadgpgme-ccbaccbf2e0ba582d181b9ee4d8543d7c1248b2c.tar.gz
Parse INQUIRE_MAXLEN in the passphrase callback.
* 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.
Diffstat (limited to 'src/passphrase.c')
-rw-r--r--src/passphrase.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/passphrase.c b/src/passphrase.c
index 00e9d999..63ab31e6 100644
--- a/src/passphrase.c
+++ b/src/passphrase.c
@@ -41,6 +41,7 @@ typedef struct
char *uid_hint;
char *passphrase_info;
int bad_passphrase;
+ char *maxlen;
} *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->maxlen);
}
@@ -73,6 +75,11 @@ _gpgme_passphrase_status_handler (void *priv, gpgme_status_code_t 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);
@@ -141,9 +148,14 @@ _gpgme_passphrase_command_handler (void *priv, gpgme_status_code_t code,
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;