[PATCH 1/1] rework printing for visual host key upper border
Christian Hesse
mail at eworm.de
Mon Jun 16 23:43:03 EST 2014
Key types are getting longer and the current implementation of visual
host key breaks with ED25519, resulting in (note the missing bracket):
+--[ED25519 256--+
This reworks the calculation of visual host key upper border. Please be
aware that this slightly modifies the output for other key types as well:
+--[ DSA 1024]----+
+---[DSA 1024]----+
+--[ RSA 2048]----+
+---[RSA 2048]----+
+--[ECDSA 256]---+
+---[ECDSA 256]---+
+--[ED25519 256--+
+--[ED25519 256]--+
---
key.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/key.c b/key.c
index e8fc5b1..a71d46c 100644
--- a/key.c
+++ b/key.c
@@ -547,13 +547,14 @@ key_fingerprint_randomart(u_char *dgst_raw, u_int dgst_raw_len, const Key *k)
* intersects with itself. Matter of taste.
*/
char *augmentation_string = " .o+=*BOX@%&#/^SE";
- char *retval, *p;
+ char *retval, *p, key_details[FLDSIZE_X + 1];
u_char field[FLDSIZE_X][FLDSIZE_Y];
u_int i, b;
int x, y;
size_t len = strlen(augmentation_string) - 1;
retval = xcalloc(1, (FLDSIZE_X + 3) * (FLDSIZE_Y + 2));
+ p = retval;
/* initialize field */
memset(field, 0, FLDSIZE_X * FLDSIZE_Y * sizeof(char));
@@ -587,11 +588,14 @@ key_fingerprint_randomart(u_char *dgst_raw, u_int dgst_raw_len, const Key *k)
field[FLDSIZE_X / 2][FLDSIZE_Y / 2] = len - 1;
field[x][y] = len;
- /* fill in retval */
- snprintf(retval, FLDSIZE_X, "+--[%4s %4u]", key_type(k), key_size(k));
- p = strchr(retval, '\0');
+ /* assemble key detail string */
+ snprintf(key_details, FLDSIZE_X, "[%s %u]", key_type(k), key_size(k));
/* output upper border */
+ *p++ = '+';
+ for (i = 0; i < (FLDSIZE_X - strlen(key_details)) / 2; i++)
+ *p++ = '-';
+ p += sprintf(p, "%s", key_details);
for (i = p - retval - 1; i < FLDSIZE_X; i++)
*p++ = '-';
*p++ = '+';
--
2.0.0
More information about the openssh-unix-dev
mailing list