summaryrefslogtreecommitdiff
path: root/usr.bin/ssh/ssh.c
diff options
context:
space:
mode:
authorTodd C. Miller <millert@cvs.openbsd.org>2001-07-27 14:50:46 +0000
committerTodd C. Miller <millert@cvs.openbsd.org>2001-07-27 14:50:46 +0000
commit06068f5f3fda265d2af132b89dcfea620538fc18 (patch)
tree93f63e760f5d8d6e05155f91efc83dd406ac52a8 /usr.bin/ssh/ssh.c
parent02b8776a498a30cc320af3eb89086c93bfa30a90 (diff)
If smart card support is compiled in and a smart card is being used
for authentication, make it the first method used. markus@ OK
Diffstat (limited to 'usr.bin/ssh/ssh.c')
-rw-r--r--usr.bin/ssh/ssh.c41
1 files changed, 23 insertions, 18 deletions
diff --git a/usr.bin/ssh/ssh.c b/usr.bin/ssh/ssh.c
index 9bc8e4039cf..dd29b329350 100644
--- a/usr.bin/ssh/ssh.c
+++ b/usr.bin/ssh/ssh.c
@@ -39,7 +39,7 @@
*/
#include "includes.h"
-RCSID("$OpenBSD: ssh.c,v 1.130 2001/07/25 14:35:18 markus Exp $");
+RCSID("$OpenBSD: ssh.c,v 1.131 2001/07/27 14:50:45 millert Exp $");
#include <openssl/evp.h>
#include <openssl/err.h>
@@ -1129,44 +1129,49 @@ load_public_identity_files(void)
{
char *filename;
Key *public;
- int i;
+ int i = 0;
- for (i = 0; i < options.num_identity_files; i++) {
- filename = tilde_expand_filename(options.identity_files[i],
- original_real_uid);
- public = key_load_public(filename, NULL);
- debug("identity file %s type %d", filename,
- public ? public->type : -1);
- xfree(options.identity_files[i]);
- options.identity_files[i] = filename;
- options.identity_keys[i] = public;
- }
#ifdef SMARTCARD
if (sc_reader_num != -1 &&
options.num_identity_files + 1 < SSH_MAX_IDENTITY_FILES &&
(public = sc_get_key(sc_reader_num)) != NULL ) {
Key *new;
+ if (options.num_identity_files + 2 > SSH_MAX_IDENTITY_FILES)
+ options.num_identity_files = SSH_MAX_IDENTITY_FILES - 2;
+ memmove(&options.identity_files[2], &options.identity_files[0],
+ sizeof(char *) * options.num_identity_files);
+ options.num_identity_files += 2;
+ i = 2;
+
/* XXX ssh1 vs ssh2 */
new = key_new(KEY_RSA);
new->flags = KEY_FLAG_EXT;
BN_copy(new->rsa->n, public->rsa->n);
BN_copy(new->rsa->e, public->rsa->e);
RSA_set_method(new->rsa, sc_get_engine());
- i = options.num_identity_files++;
- options.identity_keys[i] = new;
- options.identity_files[i] = xstrdup("smartcard rsa key");;
+ options.identity_keys[0] = new;
+ options.identity_files[0] = xstrdup("smartcard rsa key");;
new = key_new(KEY_RSA1);
new->flags = KEY_FLAG_EXT;
BN_copy(new->rsa->n, public->rsa->n);
BN_copy(new->rsa->e, public->rsa->e);
RSA_set_method(new->rsa, sc_get_engine());
- i = options.num_identity_files++;
- options.identity_keys[i] = new;
- options.identity_files[i] = xstrdup("smartcard rsa1 key");;
+ options.identity_keys[1] = new;
+ options.identity_files[1] = xstrdup("smartcard rsa1 key");
key_free(public);
}
#endif
+ for (; i < options.num_identity_files; i++) {
+ filename = tilde_expand_filename(options.identity_files[i],
+ original_real_uid);
+ public = key_load_public(filename, NULL);
+ debug("identity file %s type %d", filename,
+ public ? public->type : -1);
+ xfree(options.identity_files[i]);
+ options.identity_files[i] = filename;
+ options.identity_keys[i] = public;
+ }
}