diff options
author | Colin Watson <cjwatson@debian.org> | 2014-10-07 12:13:50 +0100 |
---|---|---|
committer | Colin Watson <cjwatson@debian.org> | 2014-10-07 12:13:50 +0100 |
commit | 487bdb3a5ef6075887b830ccb8a0b14f6da78e93 (patch) | |
tree | a2cff6fec1e6c4b4153a170a3e172cfe6bfdec46 /ssh-add.c | |
parent | 796ba4fd011b5d0d9d78d592ba2f30fc9d5ed2e7 (diff) | |
parent | 28453d58058a4d60c3ebe7d7f0c31a510cbf6158 (diff) |
Import openssh_6.7p1.orig.tar.gz
Diffstat (limited to 'ssh-add.c')
-rw-r--r-- | ssh-add.c | 28 |
1 files changed, 20 insertions, 8 deletions
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssh-add.c,v 1.109 2014/02/02 03:44:31 djm Exp $ */ | 1 | /* $OpenBSD: ssh-add.c,v 1.113 2014/07/09 14:15:56 benno Exp $ */ |
2 | /* | 2 | /* |
3 | * Author: Tatu Ylonen <ylo@cs.hut.fi> | 3 | * Author: Tatu Ylonen <ylo@cs.hut.fi> |
4 | * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland | 4 | * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland |
@@ -62,6 +62,7 @@ | |||
62 | #include "authfile.h" | 62 | #include "authfile.h" |
63 | #include "pathnames.h" | 63 | #include "pathnames.h" |
64 | #include "misc.h" | 64 | #include "misc.h" |
65 | #include "ssherr.h" | ||
65 | 66 | ||
66 | /* argv0 */ | 67 | /* argv0 */ |
67 | extern char *__progname; | 68 | extern char *__progname; |
@@ -170,7 +171,7 @@ add_file(AuthenticationConnection *ac, const char *filename, int key_only) | |||
170 | Key *private, *cert; | 171 | Key *private, *cert; |
171 | char *comment = NULL; | 172 | char *comment = NULL; |
172 | char msg[1024], *certpath = NULL; | 173 | char msg[1024], *certpath = NULL; |
173 | int fd, perms_ok, ret = -1; | 174 | int r, fd, perms_ok, ret = -1; |
174 | Buffer keyblob; | 175 | Buffer keyblob; |
175 | 176 | ||
176 | if (strcmp(filename, "-") == 0) { | 177 | if (strcmp(filename, "-") == 0) { |
@@ -201,12 +202,18 @@ add_file(AuthenticationConnection *ac, const char *filename, int key_only) | |||
201 | close(fd); | 202 | close(fd); |
202 | 203 | ||
203 | /* At first, try empty passphrase */ | 204 | /* At first, try empty passphrase */ |
204 | private = key_parse_private(&keyblob, filename, "", &comment); | 205 | if ((r = sshkey_parse_private_fileblob(&keyblob, "", filename, |
206 | &private, &comment)) != 0 && r != SSH_ERR_KEY_WRONG_PASSPHRASE) | ||
207 | fatal("Cannot parse %s: %s", filename, ssh_err(r)); | ||
208 | /* try last */ | ||
209 | if (private == NULL && pass != NULL) { | ||
210 | if ((r = sshkey_parse_private_fileblob(&keyblob, pass, filename, | ||
211 | &private, &comment)) != 0 && | ||
212 | r != SSH_ERR_KEY_WRONG_PASSPHRASE) | ||
213 | fatal("Cannot parse %s: %s", filename, ssh_err(r)); | ||
214 | } | ||
205 | if (comment == NULL) | 215 | if (comment == NULL) |
206 | comment = xstrdup(filename); | 216 | comment = xstrdup(filename); |
207 | /* try last */ | ||
208 | if (private == NULL && pass != NULL) | ||
209 | private = key_parse_private(&keyblob, filename, pass, NULL); | ||
210 | if (private == NULL) { | 217 | if (private == NULL) { |
211 | /* clear passphrase since it did not work */ | 218 | /* clear passphrase since it did not work */ |
212 | clear_pass(); | 219 | clear_pass(); |
@@ -220,8 +227,11 @@ add_file(AuthenticationConnection *ac, const char *filename, int key_only) | |||
220 | buffer_free(&keyblob); | 227 | buffer_free(&keyblob); |
221 | return -1; | 228 | return -1; |
222 | } | 229 | } |
223 | private = key_parse_private(&keyblob, filename, pass, | 230 | if ((r = sshkey_parse_private_fileblob(&keyblob, |
224 | &comment); | 231 | pass, filename, &private, NULL)) != 0 && |
232 | r != SSH_ERR_KEY_WRONG_PASSPHRASE) | ||
233 | fatal("Cannot parse %s: %s", | ||
234 | filename, ssh_err(r)); | ||
225 | if (private != NULL) | 235 | if (private != NULL) |
226 | break; | 236 | break; |
227 | clear_pass(); | 237 | clear_pass(); |
@@ -427,6 +437,8 @@ main(int argc, char **argv) | |||
427 | 437 | ||
428 | OpenSSL_add_all_algorithms(); | 438 | OpenSSL_add_all_algorithms(); |
429 | 439 | ||
440 | setlinebuf(stdout); | ||
441 | |||
430 | /* At first, get a connection to the authentication agent. */ | 442 | /* At first, get a connection to the authentication agent. */ |
431 | ac = ssh_get_authentication_connection(); | 443 | ac = ssh_get_authentication_connection(); |
432 | if (ac == NULL) { | 444 | if (ac == NULL) { |