1
0
mirror of https://git.FreeBSD.org/ports.git synced 2024-11-20 00:21:35 +00:00

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)
This commit is contained in:
Craig Leres 2022-06-01 17:46:21 -07:00
parent 6a8d8b737b
commit 65d71ce9bd
2 changed files with 24 additions and 1 deletions

View File

@ -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}/

View File

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