diff options
author | Damien Miller <djm@cvs.openbsd.org> | 2014-07-03 01:45:39 +0000 |
---|---|---|
committer | Damien Miller <djm@cvs.openbsd.org> | 2014-07-03 01:45:39 +0000 |
commit | 5d41488e530212bc1fd484a9baab7290dfc0de06 (patch) | |
tree | 7982b51aeafb39ec8f24d71740e6c0b6e22e4b69 /usr.bin | |
parent | 527c53abab1ae3ebf9d30c1c1ae34f5e1886fee4 (diff) |
make Ed25519 keys' title fit properly in the randomart border; bz#2247
based on patch from Christian Hesse
Diffstat (limited to 'usr.bin')
-rw-r--r-- | usr.bin/ssh/sshkey.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/usr.bin/ssh/sshkey.c b/usr.bin/ssh/sshkey.c index 1648b7e62be..e29574207c4 100644 --- a/usr.bin/ssh/sshkey.c +++ b/usr.bin/ssh/sshkey.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sshkey.c,v 1.2 2014/06/27 18:50:39 markus Exp $ */ +/* $OpenBSD: sshkey.c,v 1.3 2014/07/03 01:45:38 djm Exp $ */ /* * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. * Copyright (c) 2008 Alexander von Gernler. All rights reserved. @@ -1002,11 +1002,11 @@ fingerprint_randomart(u_char *dgst_raw, size_t dgst_raw_len, * intersects with itself. Matter of taste. */ char *augmentation_string = " .o+=*BOX@%&#/^SE"; - char *retval, *p; + char *retval, *p, title[FLDSIZE_X]; u_char field[FLDSIZE_X][FLDSIZE_Y]; - size_t i; + size_t i, tlen; u_int b; - int x, y; + int x, y, r; size_t len = strlen(augmentation_string) - 1; if ((retval = calloc((FLDSIZE_X + 3), (FLDSIZE_Y + 2))) == NULL) @@ -1044,12 +1044,21 @@ fingerprint_randomart(u_char *dgst_raw, size_t dgst_raw_len, field[FLDSIZE_X / 2][FLDSIZE_Y / 2] = len - 1; field[x][y] = len; - /* fill in retval */ - snprintf(retval, FLDSIZE_X, "+--[%4s %4u]", - sshkey_type(k), sshkey_size(k)); - p = strchr(retval, '\0'); + /* assemble title */ + r = snprintf(title, sizeof(title), "[%s %u]", + sshkey_type(k), sshkey_size(k)); + /* If [type size] won't fit, then try [type]; fits "[ED25519-CERT]" */ + if (r < 0 || r > (int)sizeof(title)) + snprintf(title, sizeof(title), "[%s]", sshkey_type(k)); + tlen = strlen(title); /* output upper border */ + p = retval; + *p++ = '+'; + for (i = 0; i < (FLDSIZE_X - tlen) / 2; i++) + *p++ = '-'; + memcpy(p, title, tlen); + p += tlen; for (i = p - retval - 1; i < FLDSIZE_X; i++) *p++ = '-'; *p++ = '+'; |