comparison 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
comparison
equal deleted inserted replaced
2195:40ddaebeb81e 2196:8811fe9d6ef0
260 char *p; 260 char *p;
261 bool pgp_invalid = FALSE; 261 bool pgp_invalid = FALSE;
262 bool pgp_agent; 262 bool pgp_agent;
263 int retries; 263 int retries;
264 264
265 pk = settings_opt_get("pgp_private_key");
266
267 if (!pk)
268 scr_LogPrint(LPRINT_LOGNORM, "WARNING: unknown PGP private key");
269
270 if (gpg_init(pk, NULL)) {
271 scr_LogPrint(LPRINT_LOGNORM, "WARNING: Could not initialize PGP.");
272 return;
273 }
274
275 // We're done if the PGP engine version is > 1
276 // since the agent is mandatory and password mechanism is external.
277 if (!gpg_is_version1())
278 return;
279
280
265 p = getenv("GPG_AGENT_INFO"); 281 p = getenv("GPG_AGENT_INFO");
266 pgp_agent = (p && strchr(p, ':')); 282 pgp_agent = (p && strchr(p, ':'));
267
268 pk = settings_opt_get("pgp_private_key");
269 pp = settings_opt_get("pgp_passphrase");
270 283
271 if (settings_opt_get("pgp_passphrase_retries")) 284 if (settings_opt_get("pgp_passphrase_retries"))
272 retries = settings_opt_get_int("pgp_passphrase_retries"); 285 retries = settings_opt_get_int("pgp_passphrase_retries");
273 else 286 else
274 retries = 2; 287 retries = 2;
275 288
289 pp = settings_opt_get("pgp_passphrase");
290
276 if (!pk) { 291 if (!pk) {
277 scr_LogPrint(LPRINT_LOGNORM, "WARNING: unknown PGP private key");
278 pgp_invalid = TRUE; 292 pgp_invalid = TRUE;
279 } else if (!(pp || pgp_agent)) { 293 } else if (!(pp || pgp_agent)) {
280 // Request PGP passphrase 294 // Request PGP passphrase
281 pp = typed_passwd = ask_password("your PGP passphrase"); 295 pp = typed_passwd = ask_password("your PGP passphrase");
282 } 296 }
283 gpg_init(pk, pp); 297 gpg_set_passphrase(pp);
284 // Erase password from the settings array 298 // Erase password from the settings array
285 if (pp) { 299 if (pp) {
286 memset((char*)pp, 0, strlen(pp)); 300 memset((char*)pp, 0, strlen(pp));
287 if (typed_passwd) 301 if (typed_passwd)
288 g_free(typed_passwd); 302 g_free(typed_passwd);