comparison mcabber/src/main.c @ 1313:d1d12a09b04a

Make passphrase entry retries customizable (suggested by Till Maas) Based on a patch provided by Till Maas.
author Mikael Berthe <mikael@lilotux.net>
date Thu, 20 Sep 2007 20:08:59 +0200
parents 0dda8238af21
children 7daf906fbcdc
comparison
equal deleted inserted replaced
1312:f4830fada2af 1313:d1d12a09b04a
282 const char *pk, *pp; 282 const char *pk, *pp;
283 char *typed_passwd = NULL; 283 char *typed_passwd = NULL;
284 char *p; 284 char *p;
285 bool pgp_invalid = FALSE; 285 bool pgp_invalid = FALSE;
286 bool pgp_agent; 286 bool pgp_agent;
287 int retries;
287 288
288 p = getenv("GPG_AGENT_INFO"); 289 p = getenv("GPG_AGENT_INFO");
289 pgp_agent = (p && strchr(p, ':')); 290 pgp_agent = (p && strchr(p, ':'));
290 291
291 pk = settings_opt_get("pgp_private_key"); 292 pk = settings_opt_get("pgp_private_key");
292 pp = settings_opt_get("pgp_passphrase"); 293 pp = settings_opt_get("pgp_passphrase");
294
295 if (settings_opt_get("pgp_passphrase_retries"))
296 retries = settings_opt_get_int("pgp_passphrase_retries");
297 else
298 retries = 2;
299
293 if (!pk) { 300 if (!pk) {
294 scr_LogPrint(LPRINT_LOGNORM, "WARNING: unkown PGP private key"); 301 scr_LogPrint(LPRINT_LOGNORM, "WARNING: unkown PGP private key");
295 pgp_invalid = TRUE; 302 pgp_invalid = TRUE;
296 } else if (!(pp || pgp_agent)) { 303 } else if (!(pp || pgp_agent)) {
297 // Request PGP passphrase 304 // Request PGP passphrase
307 settings_set(SETTINGS_TYPE_OPTION, "pgp_passphrase", NULL); 314 settings_set(SETTINGS_TYPE_OPTION, "pgp_passphrase", NULL);
308 } 315 }
309 if (!pgp_agent && pk && pp && gpg_test_passphrase()) { 316 if (!pgp_agent && pk && pp && gpg_test_passphrase()) {
310 // Let's check the pasphrase 317 // Let's check the pasphrase
311 int i; 318 int i;
312 for (i = 0; i < 2; i++) { 319 for (i = 1; retries < 0 || i <= retries; i++) {
313 typed_passwd = ask_password("PGP passphrase"); // Ask again... 320 typed_passwd = ask_password("PGP passphrase"); // Ask again...
314 if (typed_passwd) { 321 if (typed_passwd) {
315 gpg_set_passphrase(typed_passwd); 322 gpg_set_passphrase(typed_passwd);
316 memset(typed_passwd, 0, strlen(typed_passwd)); 323 memset(typed_passwd, 0, strlen(typed_passwd));
317 g_free(typed_passwd); 324 g_free(typed_passwd);
318 } 325 }
319 if (!gpg_test_passphrase()) 326 if (!gpg_test_passphrase())
320 break; // Ok 327 break; // Ok
321 } 328 }
322 if (i == 2) 329 if (i > retries)
323 pgp_invalid = TRUE; 330 pgp_invalid = TRUE;
324 } 331 }
325 if (pgp_invalid) 332 if (pgp_invalid)
326 scr_LogPrint(LPRINT_LOGNORM, "WARNING: PGP key/pass invalid"); 333 scr_LogPrint(LPRINT_LOGNORM, "WARNING: PGP key/pass invalid");
327 #else /* not HAVE_GPGME */ 334 #else /* not HAVE_GPGME */