version 1.55, 2001/03/23 11:04:07 |
version 1.56, 2001/03/26 08:07:09 |
|
|
{ |
{ |
Key *private; |
Key *private; |
char prompt[300], *passphrase; |
char prompt[300], *passphrase; |
int success = 0, quit, i; |
int quit, i; |
struct stat st; |
struct stat st; |
|
|
if (stat(filename, &st) < 0) { |
if (stat(filename, &st) < 0) { |
debug3("no such identity: %s", filename); |
debug3("no such identity: %s", filename); |
return NULL; |
return NULL; |
} |
} |
private = key_new(KEY_UNSPEC); |
private = key_load_private_type(KEY_UNSPEC, filename, "", NULL); |
if (!load_private_key(filename, "", private, NULL)) { |
if (private == NULL) { |
if (options.batch_mode) { |
if (options.batch_mode) |
key_free(private); |
|
return NULL; |
return NULL; |
} |
|
snprintf(prompt, sizeof prompt, |
snprintf(prompt, sizeof prompt, |
"Enter passphrase for key '%.100s': ", filename); |
"Enter passphrase for key '%.100s': ", filename); |
for (i = 0; i < options.number_of_password_prompts; i++) { |
for (i = 0; i < options.number_of_password_prompts; i++) { |
passphrase = read_passphrase(prompt, 0); |
passphrase = read_passphrase(prompt, 0); |
if (strcmp(passphrase, "") != 0) { |
if (strcmp(passphrase, "") != 0) { |
success = load_private_key(filename, |
private = key_load_private_type(KEY_UNSPEC, filename, |
passphrase, private, NULL); |
passphrase, NULL); |
quit = 0; |
quit = 0; |
} else { |
} else { |
debug2("no passphrase given, try next key"); |
debug2("no passphrase given, try next key"); |
|
|
} |
} |
memset(passphrase, 0, strlen(passphrase)); |
memset(passphrase, 0, strlen(passphrase)); |
xfree(passphrase); |
xfree(passphrase); |
if (success || quit) |
if (private != NULL || quit) |
break; |
break; |
debug2("bad passphrase given, try again..."); |
debug2("bad passphrase given, try again..."); |
} |
|
if (!success) { |
|
key_free(private); |
|
return NULL; |
|
} |
} |
} |
} |
return private; |
return private; |