git: 65d71ce9bdd9 - main - net/fping: Avoid ident collisions
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 02 Jun 2022 00:46:55 UTC
The branch main has been updated by leres:
URL: https://cgit.FreeBSD.org/ports/commit/?id=65d71ce9bdd96d79b5c9cffafc144fe23ebf6b15
commit 65d71ce9bdd96d79b5c9cffafc144fe23ebf6b15
Author: Craig Leres <leres@FreeBSD.org>
AuthorDate: 2022-06-02 00:46:21 +0000
Commit: Craig Leres <leres@FreeBSD.org>
CommitDate: 2022-06-02 00:46:21 +0000
net/fping: Avoid ident collisions
fping derives the ident it puts in the outbound packet to from the
low 16 bits of the process id. This means a busy nagios server can
see collisions. More details on this issue and a patch to solve it
here:
https://github.com/schweikert/fping/issues/206
Apply the patch from the github issue:
PR: 264402
Reported by: Case Larsen
Approved by: jharris (maintainer)
---
net/fping/Makefile | 2 +-
net/fping/files/patch-fping.c | 23 +++++++++++++++++++++++
2 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/net/fping/Makefile b/net/fping/Makefile
index af42b27bf518..1a3c2d858d24 100644
--- a/net/fping/Makefile
+++ b/net/fping/Makefile
@@ -2,7 +2,7 @@
PORTNAME= fping
PORTVERSION= 5.0
-PORTREVISION= 1
+PORTREVISION= 2
CATEGORIES= net
MASTER_SITES= http://fping.org/dist/ \
https://github.com/schweikert/${PORTNAME}/releases/download/v${PORTVERSION}/
diff --git a/net/fping/files/patch-fping.c b/net/fping/files/patch-fping.c
index 054f171fad67..e8b5343c04ba 100644
--- a/net/fping/files/patch-fping.c
+++ b/net/fping/files/patch-fping.c
@@ -14,3 +14,26 @@
socket_set_src_addr_ipv6(socket6, &src_addr6, (socktype6 == SOCK_DGRAM) ? &ident6 : NULL);
}
#endif
+@@ -2299,6 +2299,22 @@ int wait_for_reply(int64_t wait_time)
+ #endif
+ else {
+ return 1;
++ }
++
++ /* Check that src address is one of the hosts we pinged before */
++ int found = 0;
++ for (int i = 0; i < num_hosts; i++) {
++ HOST_ENTRY *h = table[i];
++ if (!addr_cmp((struct sockaddr*)&response_addr, (struct sockaddr*)&h->saddr)) {
++ found = 1;
++ break;
++ }
++ }
++ if (!found) {
++ // char buf[INET6_ADDRSTRLEN];
++ // getnameinfo((struct sockaddr*)&response_addr, sizeof(response_addr), buf, INET6_ADDRSTRLEN, NULL, 0, NI_NUMERICHOST);
++ // fprintf(stderr, "ignoring response from %s\n", buf);
++ return 1; /* packet received, but not from a host we pinged */
+ }
+
+ seqmap_value = seqmap_fetch(seq, current_time_ns);