diff --git a/net/fping/Makefile b/net/fping/Makefile index af42b27bf518..1a3c2d858d24 100644 --- a/net/fping/Makefile +++ b/net/fping/Makefile @@ -1,32 +1,32 @@ # Created by: David O'Brien (obrien@NUXI.com) 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}/ MAINTAINER= jharris@widomaker.com COMMENT= Quickly ping multiple hosts without flooding the network LICENSE= PreviousBSD LICENSE_GROUPS= FSF LICENSE_NAME= Previous BSD License LICENSE_FILE= ${WRKSRC}/COPYING LICENSE_PERMS= dist-mirror dist-sell pkg-mirror pkg-sell auto-accept USES= autoreconf GNU_CONFIGURE= yes INSTALL_TARGET= install-strip OPTIONS_DEFINE= IPV6 OPTIONS_SUB= yes IPV6_CONFIGURE_OFF=--disable-ipv6 post-install-IPV6-on: ${RLN} ${STAGEDIR}${PREFIX}/sbin/fping ${STAGEDIR}${PREFIX}/sbin/fping6 ${RLN} ${STAGEDIR}${PREFIX}/man/man8/fping.8 ${STAGEDIR}${PREFIX}/man/man8/fping6.8 .include 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 @@ -1,16 +1,39 @@ --- src/fping.c.orig 2020-08-05 11:10:13 UTC +++ src/fping.c @@ -1060,11 +1060,11 @@ int main(int argc, char** argv) exit(num_noaddress ? 2 : 1); } - if (socket4 >= 0) { + if (src_addr_set && socket4 >= 0) { socket_set_src_addr_ipv4(socket4, &src_addr, (socktype4 == SOCK_DGRAM) ? &ident4 : NULL); } #ifdef IPV6 - if (socket6 >= 0) { + if (src_addr6_set && socket6 >= 0) { 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);