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);