Introduce a ring buffer for log_sockaddr() this way log_addr() can be
authorclaudio <claudio@openbsd.org>
Wed, 29 May 2024 10:34:07 +0000 (10:34 +0000)
committerclaudio <claudio@openbsd.org>
Wed, 29 May 2024 10:34:07 +0000 (10:34 +0000)
used more then once in a log message (e.g. log_peer_warnx + log_addr.
OK henning@ sthen@

usr.sbin/bgpd/util.c

index 44513b9..c81d143 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: util.c,v 1.85 2024/03/22 15:41:34 claudio Exp $ */
+/*     $OpenBSD: util.c,v 1.86 2024/05/29 10:34:07 claudio Exp $ */
 
 /*
  * Copyright (c) 2006 Claudio Jeker <claudio@openbsd.org>
@@ -98,13 +98,15 @@ log_in6addr(const struct in6_addr *addr)
 const char *
 log_sockaddr(struct sockaddr *sa, socklen_t len)
 {
-       static char     buf[NI_MAXHOST];
+       static char     buf[4][NI_MAXHOST];
+       static int      bufidx;
 
-       if (sa == NULL || getnameinfo(sa, len, buf, sizeof(buf), NULL, 0,
-           NI_NUMERICHOST))
+       bufidx = (bufidx + 1) % 4;
+       if (sa == NULL || getnameinfo(sa, len, buf[bufidx], sizeof(buf[0]),
+           NULL, 0, NI_NUMERICHOST))
                return ("(unknown)");
        else
-               return (buf);
+               return (buf[bufidx]);
 }
 
 const char *