diff mcabber/mcabber/main.c @ 2196:8811fe9d6ef0

Improve support for GnuPG v2+ If the gnupg engine detected is not 1.x, do not check the environment variable GPG_AGENT_INFO and do not set up a password callback.
author Mikael Berthe <mikael@lilotux.net>
date Wed, 07 Oct 2015 21:58:38 +0200
parents f30459c47092
children 1afa40f1d80d
line wrap: on
line diff
--- a/mcabber/mcabber/main.c	Wed Oct 07 21:55:51 2015 +0200
+++ b/mcabber/mcabber/main.c	Wed Oct 07 21:58:38 2015 +0200
@@ -262,25 +262,39 @@
   bool pgp_agent;
   int retries;
 
+  pk = settings_opt_get("pgp_private_key");
+
+  if (!pk)
+    scr_LogPrint(LPRINT_LOGNORM, "WARNING: unknown PGP private key");
+
+  if (gpg_init(pk, NULL)) {
+    scr_LogPrint(LPRINT_LOGNORM, "WARNING: Could not initialize PGP.");
+    return;
+  }
+
+  // We're done if the PGP engine version is > 1
+  // since the agent is mandatory and password mechanism is external.
+  if (!gpg_is_version1())
+    return;
+
+
   p = getenv("GPG_AGENT_INFO");
   pgp_agent = (p && strchr(p, ':'));
 
-  pk = settings_opt_get("pgp_private_key");
-  pp = settings_opt_get("pgp_passphrase");
-
   if (settings_opt_get("pgp_passphrase_retries"))
     retries = settings_opt_get_int("pgp_passphrase_retries");
   else
     retries = 2;
 
+  pp = settings_opt_get("pgp_passphrase");
+
   if (!pk) {
-    scr_LogPrint(LPRINT_LOGNORM, "WARNING: unknown PGP private key");
     pgp_invalid = TRUE;
   } else if (!(pp || pgp_agent)) {
     // Request PGP passphrase
     pp = typed_passwd = ask_password("your PGP passphrase");
   }
-  gpg_init(pk, pp);
+  gpg_set_passphrase(pp);
   // Erase password from the settings array
   if (pp) {
     memset((char*)pp, 0, strlen(pp));