X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=pgp.c;h=3ed7d877bc5abf1de10fe5380ffbc531536104ca;hb=48d5c7532ee9fdfb5d1d06483ef6bf8e3b09891d;hp=779b2f4f460c120e8d0288f4ab5d2061facbf8d5;hpb=3db1eed8cb47ae930ec78a1dc6576f608363da85;p=apps%2Fmadmutt.git diff --git a/pgp.c b/pgp.c index 779b2f4..3ed7d87 100644 --- a/pgp.c +++ b/pgp.c @@ -103,10 +103,16 @@ void pgp_forget_passphrase (void) mutt_message _("PGP passphrase forgotten."); } -int pgp_use_gpg_agent (void) -{ - return option (OPTUSEGPGAGENT) && getenv ("GPG_TTY") - && getenv ("GPG_AGENT_INFO"); +int pgp_use_gpg_agent (void) { + char *tty; + + if (!option (OPTUSEGPGAGENT) || !getenv ("GPG_AGENT_INFO")) + return 0; + + if ((tty = ttyname(0))) + setenv ("GPG_TTY", tty, 0); + + return 1; } char *pgp_keyid (pgp_key_t k) @@ -228,7 +234,7 @@ static void pgp_copy_clearsigned (FILE * fpin, STATE * s, char *charset) int pgp_application_pgp_handler (BODY * m, STATE * s) { int needpass = -1, pgp_keyblock = 0; - int c; + int c = 1; int clearsign = 0, rv, rc; long start_pos = 0; long bytes, last_pos, offset; @@ -369,16 +375,20 @@ int pgp_application_pgp_handler (BODY * m, STATE * s) } /* treat empty result as sign of failure */ + /* TODO: maybe on failure mutt should include the original undecoded text. */ if (pgpout) { rewind (pgpout); c = fgetc (pgpout); ungetc (c, pgpout); } - if (!pgpout || c == EOF) { + if (!clearsign && (!pgpout || c == EOF)) { mutt_error _("Could not decrypt PGP message"); + mutt_sleep (1); pgp_void_passphrase (); - rc = -1; - goto out; + if (!(s->flags & M_DISPLAY)) { + rc = -1; + goto out; + } } }