summaryrefslogtreecommitdiffstats
path: root/ssh-keygen.c
diff options
context:
space:
mode:
authormarkus@openbsd.org <markus@openbsd.org>2018-06-06 18:29:18 +0000
committerDamien Miller <djm@mindrot.org>2018-06-07 04:34:05 +1000
commit7f90635216851f6cb4bf3999e98b825f85d604f8 (patch)
treeac302db18a71c1e3c5d9077d1a820e37fbc2b9b5 /ssh-keygen.c
parent392db2bc83215986a91c0b65feb0e40e7619ce7e (diff)
upstream: switch config file parsing to getline(3) as this avoids
static limits noted by gerhard@; ok dtucker@, djm@ OpenBSD-Commit-ID: 6d702eabef0fa12e5a1d75c334a8c8b325298b5c
Diffstat (limited to 'ssh-keygen.c')
-rw-r--r--ssh-keygen.c25
1 files changed, 17 insertions, 8 deletions
diff --git a/ssh-keygen.c b/ssh-keygen.c
index 2568c00e..ccebbaf7 100644
--- a/ssh-keygen.c
+++ b/ssh-keygen.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh-keygen.c,v 1.316 2018/06/01 04:21:29 djm Exp $ */
+/* $OpenBSD: ssh-keygen.c,v 1.317 2018/06/06 18:29:18 markus Exp $ */
/*
* Author: Tatu Ylonen <ylo@cs.hut.fi>
* Copyright (c) 1994 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -870,7 +870,8 @@ do_fingerprint(struct passwd *pw)
{
FILE *f;
struct sshkey *public = NULL;
- char *comment = NULL, *cp, *ep, line[SSH_MAX_PUBKEY_BYTES];
+ char *comment = NULL, *cp, *ep, *line = NULL;
+ size_t linesize = 0;
int i, invalid = 1;
const char *path;
u_long lnum = 0;
@@ -885,7 +886,8 @@ do_fingerprint(struct passwd *pw)
} else if ((f = fopen(path, "r")) == NULL)
fatal("%s: %s: %s", __progname, path, strerror(errno));
- while (read_keyfile_line(f, path, line, sizeof(line), &lnum) == 0) {
+ while (getline(&line, &linesize, f) != -1) {
+ lnum++;
cp = line;
cp[strcspn(cp, "\n")] = '\0';
/* Trim leading space and comments */
@@ -905,6 +907,7 @@ do_fingerprint(struct passwd *pw)
*/
if (lnum == 1 && strcmp(identity_file, "-") != 0 &&
strstr(cp, "PRIVATE KEY") != NULL) {
+ free(line);
fclose(f);
fingerprint_private(path);
exit(0);
@@ -951,6 +954,7 @@ do_fingerprint(struct passwd *pw)
invalid = 0; /* One good key in the file is sufficient */
}
fclose(f);
+ free(line);
if (invalid)
fatal("%s is not a public key file.", path);
@@ -2004,8 +2008,9 @@ do_show_cert(struct passwd *pw)
struct stat st;
int r, is_stdin = 0, ok = 0;
FILE *f;
- char *cp, line[SSH_MAX_PUBKEY_BYTES];
+ char *cp, *line = NULL;
const char *path;
+ size_t linesize = 0;
u_long lnum = 0;
if (!have_identity)
@@ -2021,7 +2026,8 @@ do_show_cert(struct passwd *pw)
} else if ((f = fopen(identity_file, "r")) == NULL)
fatal("fopen %s: %s", identity_file, strerror(errno));
- while (read_keyfile_line(f, path, line, sizeof(line), &lnum) == 0) {
+ while (getline(&line, &linesize, f) != -1) {
+ lnum++;
sshkey_free(key);
key = NULL;
/* Trim leading space and comments */
@@ -2046,6 +2052,7 @@ do_show_cert(struct passwd *pw)
printf("%s:%lu:\n", path, lnum);
print_cert(key);
}
+ free(line);
sshkey_free(key);
fclose(f);
exit(ok ? 0 : 1);
@@ -2077,7 +2084,8 @@ update_krl_from_file(struct passwd *pw, const char *file, int wild_ca,
{
struct sshkey *key = NULL;
u_long lnum = 0;
- char *path, *cp, *ep, line[SSH_MAX_PUBKEY_BYTES];
+ char *path, *cp, *ep, *line = NULL;
+ size_t linesize = 0;
unsigned long long serial, serial2;
int i, was_explicit_key, was_sha1, r;
FILE *krl_spec;
@@ -2092,8 +2100,8 @@ update_krl_from_file(struct passwd *pw, const char *file, int wild_ca,
if (!quiet)
printf("Revoking from %s\n", path);
- while (read_keyfile_line(krl_spec, path, line, sizeof(line),
- &lnum) == 0) {
+ while (getline(&line, &linesize, krl_spec) != -1) {
+ lnum++;
was_explicit_key = was_sha1 = 0;
cp = line + strspn(line, " \t");
/* Trim trailing space, comments and strip \n */
@@ -2193,6 +2201,7 @@ update_krl_from_file(struct passwd *pw, const char *file, int wild_ca,
}
if (strcmp(path, "-") != 0)
fclose(krl_spec);
+ free(line);
free(path);
}