aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCraig Leres <leres@FreeBSD.org>2022-06-02 00:46:21 +0000
committerCraig Leres <leres@FreeBSD.org>2022-06-02 00:46:21 +0000
commit65d71ce9bdd96d79b5c9cffafc144fe23ebf6b15 (patch)
tree068b4da324a9ee9c192519932581187cff3f48e7
parent6a8d8b737bb61d0f8bec9ef30991eaccb8d25b37 (diff)
downloadports-65d71ce9bdd96d79b5c9cffafc144fe23ebf6b15.tar.gz
ports-65d71ce9bdd96d79b5c9cffafc144fe23ebf6b15.zip
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)
-rw-r--r--net/fping/Makefile2
-rw-r--r--net/fping/files/patch-fping.c23
2 files changed, 24 insertions, 1 deletions
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);