summaryrefslogtreecommitdiff
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 2568c00e8..ccebbaf76 100644
--- a/ssh-keygen.c
+++ b/ssh-keygen.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-keygen.c,v 1.316 2018/06/01 04:21:29 djm Exp $ */ 1/* $OpenBSD: ssh-keygen.c,v 1.317 2018/06/06 18:29:18 markus Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1994 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1994 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -870,7 +870,8 @@ do_fingerprint(struct passwd *pw)
870{ 870{
871 FILE *f; 871 FILE *f;
872 struct sshkey *public = NULL; 872 struct sshkey *public = NULL;
873 char *comment = NULL, *cp, *ep, line[SSH_MAX_PUBKEY_BYTES]; 873 char *comment = NULL, *cp, *ep, *line = NULL;
874 size_t linesize = 0;
874 int i, invalid = 1; 875 int i, invalid = 1;
875 const char *path; 876 const char *path;
876 u_long lnum = 0; 877 u_long lnum = 0;
@@ -885,7 +886,8 @@ do_fingerprint(struct passwd *pw)
885 } else if ((f = fopen(path, "r")) == NULL) 886 } else if ((f = fopen(path, "r")) == NULL)
886 fatal("%s: %s: %s", __progname, path, strerror(errno)); 887 fatal("%s: %s: %s", __progname, path, strerror(errno));
887 888
888 while (read_keyfile_line(f, path, line, sizeof(line), &lnum) == 0) { 889 while (getline(&line, &linesize, f) != -1) {
890 lnum++;
889 cp = line; 891 cp = line;
890 cp[strcspn(cp, "\n")] = '\0'; 892 cp[strcspn(cp, "\n")] = '\0';
891 /* Trim leading space and comments */ 893 /* Trim leading space and comments */
@@ -905,6 +907,7 @@ do_fingerprint(struct passwd *pw)
905 */ 907 */
906 if (lnum == 1 && strcmp(identity_file, "-") != 0 && 908 if (lnum == 1 && strcmp(identity_file, "-") != 0 &&
907 strstr(cp, "PRIVATE KEY") != NULL) { 909 strstr(cp, "PRIVATE KEY") != NULL) {
910 free(line);
908 fclose(f); 911 fclose(f);
909 fingerprint_private(path); 912 fingerprint_private(path);
910 exit(0); 913 exit(0);
@@ -951,6 +954,7 @@ do_fingerprint(struct passwd *pw)
951 invalid = 0; /* One good key in the file is sufficient */ 954 invalid = 0; /* One good key in the file is sufficient */
952 } 955 }
953 fclose(f); 956 fclose(f);
957 free(line);
954 958
955 if (invalid) 959 if (invalid)
956 fatal("%s is not a public key file.", path); 960 fatal("%s is not a public key file.", path);
@@ -2004,8 +2008,9 @@ do_show_cert(struct passwd *pw)
2004 struct stat st; 2008 struct stat st;
2005 int r, is_stdin = 0, ok = 0; 2009 int r, is_stdin = 0, ok = 0;
2006 FILE *f; 2010 FILE *f;
2007 char *cp, line[SSH_MAX_PUBKEY_BYTES]; 2011 char *cp, *line = NULL;
2008 const char *path; 2012 const char *path;
2013 size_t linesize = 0;
2009 u_long lnum = 0; 2014 u_long lnum = 0;
2010 2015
2011 if (!have_identity) 2016 if (!have_identity)
@@ -2021,7 +2026,8 @@ do_show_cert(struct passwd *pw)
2021 } else if ((f = fopen(identity_file, "r")) == NULL) 2026 } else if ((f = fopen(identity_file, "r")) == NULL)
2022 fatal("fopen %s: %s", identity_file, strerror(errno)); 2027 fatal("fopen %s: %s", identity_file, strerror(errno));
2023 2028
2024 while (read_keyfile_line(f, path, line, sizeof(line), &lnum) == 0) { 2029 while (getline(&line, &linesize, f) != -1) {
2030 lnum++;
2025 sshkey_free(key); 2031 sshkey_free(key);
2026 key = NULL; 2032 key = NULL;
2027 /* Trim leading space and comments */ 2033 /* Trim leading space and comments */
@@ -2046,6 +2052,7 @@ do_show_cert(struct passwd *pw)
2046 printf("%s:%lu:\n", path, lnum); 2052 printf("%s:%lu:\n", path, lnum);
2047 print_cert(key); 2053 print_cert(key);
2048 } 2054 }
2055 free(line);
2049 sshkey_free(key); 2056 sshkey_free(key);
2050 fclose(f); 2057 fclose(f);
2051 exit(ok ? 0 : 1); 2058 exit(ok ? 0 : 1);
@@ -2077,7 +2084,8 @@ update_krl_from_file(struct passwd *pw, const char *file, int wild_ca,
2077{ 2084{
2078 struct sshkey *key = NULL; 2085 struct sshkey *key = NULL;
2079 u_long lnum = 0; 2086 u_long lnum = 0;
2080 char *path, *cp, *ep, line[SSH_MAX_PUBKEY_BYTES]; 2087 char *path, *cp, *ep, *line = NULL;
2088 size_t linesize = 0;
2081 unsigned long long serial, serial2; 2089 unsigned long long serial, serial2;
2082 int i, was_explicit_key, was_sha1, r; 2090 int i, was_explicit_key, was_sha1, r;
2083 FILE *krl_spec; 2091 FILE *krl_spec;
@@ -2092,8 +2100,8 @@ update_krl_from_file(struct passwd *pw, const char *file, int wild_ca,
2092 2100
2093 if (!quiet) 2101 if (!quiet)
2094 printf("Revoking from %s\n", path); 2102 printf("Revoking from %s\n", path);
2095 while (read_keyfile_line(krl_spec, path, line, sizeof(line), 2103 while (getline(&line, &linesize, krl_spec) != -1) {
2096 &lnum) == 0) { 2104 lnum++;
2097 was_explicit_key = was_sha1 = 0; 2105 was_explicit_key = was_sha1 = 0;
2098 cp = line + strspn(line, " \t"); 2106 cp = line + strspn(line, " \t");
2099 /* Trim trailing space, comments and strip \n */ 2107 /* Trim trailing space, comments and strip \n */
@@ -2193,6 +2201,7 @@ update_krl_from_file(struct passwd *pw, const char *file, int wild_ca,
2193 } 2201 }
2194 if (strcmp(path, "-") != 0) 2202 if (strcmp(path, "-") != 0)
2195 fclose(krl_spec); 2203 fclose(krl_spec);
2204 free(line);
2196 free(path); 2205 free(path);
2197} 2206}
2198 2207