Mercurial > ~mikael > mcabber > hg
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 */ |