]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
ss: fix output of MD5 signature keys configured on TCP sockets
authorLars Ellenberg <lars.ellenberg@linbit.com>
Fri, 1 Mar 2024 12:33:24 +0000 (13:33 +0100)
committerStephen Hemminger <stephen@networkplumber.org>
Mon, 4 Mar 2024 16:25:34 +0000 (08:25 -0800)
da9cc6ab introduced printing of MD5 signature keys when found.
But when changing printf() to out() calls with 90351722,
the implicit printf call in print_escape_buf() was overlooked.
That results in a funny output in the first line:
"<all-your-tcp-signature-keys-concatenated>State"
and ambiguity as to which of those bytes belong to which socket.

Add a static void out_escape_buf() immediately before we use it.

da9cc6ab (ss: print MD5 signature keys configured on TCP sockets, 2017-10-06)
90351722 (ss: Replace printf() calls for "main" output by calls to helper, 2017-12-12)

Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
misc/ss.c

index 5296cabe9982a35143b7f47402c02ff5d532109d..fb560a55e2449874ea4bd13263b056fdb956c7de 100644 (file)
--- a/misc/ss.c
+++ b/misc/ss.c
@@ -24,6 +24,7 @@
 #include <stdbool.h>
 #include <limits.h>
 #include <stdarg.h>
+#include <ctype.h>
 
 #include "ss_util.h"
 #include "utils.h"
@@ -2891,6 +2892,20 @@ static void print_skmeminfo(struct rtattr *tb[], int attrtype)
        out(")");
 }
 
+/* like lib/utils.c print_escape_buf(), but use out(), not printf()! */
+static void out_escape_buf(const __u8 *buf, size_t len, const char *escape)
+{
+       size_t i;
+
+       for (i = 0; i < len; ++i) {
+               if (isprint(buf[i]) && buf[i] != '\\' &&
+                   !strchr(escape, buf[i]))
+                       out("%c", buf[i]);
+               else
+                       out("\\%03o", buf[i]);
+       }
+}
+
 static void print_md5sig(struct tcp_diag_md5sig *sig)
 {
        out("%s/%d=",
@@ -2898,7 +2913,7 @@ static void print_md5sig(struct tcp_diag_md5sig *sig)
                        sig->tcpm_family == AF_INET6 ? 16 : 4,
                        &sig->tcpm_addr),
            sig->tcpm_prefixlen);
-       print_escape_buf(sig->tcpm_key, sig->tcpm_keylen, " ,");
+       out_escape_buf(sig->tcpm_key, sig->tcpm_keylen, " ,");
 }
 
 static void tcp_tls_version(struct rtattr *attr)