Date: Thu, 16 Jan 2020 16:10:50 +0000 (UTC) From: Ganael LAPLANCHE <martymac@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-branches@freebsd.org Subject: svn commit: r523247 - in branches/2020Q1/ftp/lftp: . files Message-ID: <202001161610.00GGAoSh046736@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: martymac Date: Thu Jan 16 16:10:50 2020 New Revision: 523247 URL: https://svnweb.freebsd.org/changeset/ports/523247 Log: MFH: r523101 Fix segmentation fault at startup when IPv6 is enabled Backport commit 5d34493 from upstream. PR: 243307 Submitted by: Victor Sudakov <vas@sibptus.ru> Obtained from: Github <https://github.com/lavv17/lftp/commit/5d344937d60380341c20409c11f135afb630d7ee> Approved by: portmgr Added: branches/2020Q1/ftp/lftp/files/patch-5d34493.txt - copied unchanged from r523101, head/ftp/lftp/files/patch-5d34493.txt Modified: branches/2020Q1/ftp/lftp/Makefile Directory Properties: branches/2020Q1/ (props changed) Modified: branches/2020Q1/ftp/lftp/Makefile ============================================================================== --- branches/2020Q1/ftp/lftp/Makefile Thu Jan 16 15:55:35 2020 (r523246) +++ branches/2020Q1/ftp/lftp/Makefile Thu Jan 16 16:10:50 2020 (r523247) @@ -3,6 +3,7 @@ PORTNAME= lftp PORTVERSION= 4.9.0 +PORTREVISION= 1 CATEGORIES= ftp MASTER_SITES= http://lftp.tech/ftp/ \ http://lftp.tech/ftp/old/ \ Copied: branches/2020Q1/ftp/lftp/files/patch-5d34493.txt (from r523101, head/ftp/lftp/files/patch-5d34493.txt) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/2020Q1/ftp/lftp/files/patch-5d34493.txt Thu Jan 16 16:10:50 2020 (r523247, copy of r523101, head/ftp/lftp/files/patch-5d34493.txt) @@ -0,0 +1,102 @@ +commit 5d344937d60380341c20409c11f135afb630d7ee +Author: Alexander V. Lukyanov <lavv17f@gmail.com> +Date: Sat Jan 11 19:20:46 2020 +0300 + + check for ipv6 in resolver to avoid global init order problems (fix #557, fix #562) + +diff --git a/src/Resolver.cc b/src/Resolver.cc +index 0332d5be..4e119966 100644 +--- src/Resolver.cc ++++ src/Resolver.cc +@@ -355,6 +355,19 @@ int Resolver::FindAddressFamily(const char *name) + return -1; + } + ++bool Resolver::IsAddressFamilySupporded(int af) ++{ ++#if INET6 ++ // check if ipv6 is really supported ++ if(af==AF_INET6 && (!FindGlobalIPv6Address() || !CanCreateIpv6Socket())) ++ { ++ LogNote(4, "IPv6 is not supported or configured"); ++ return false; ++ } ++#endif // INET6 ++ return true; ++} ++ + void Resolver::ParseOrder(const char *s,int *o) + { + const char * const delim="\t "; +@@ -364,7 +377,7 @@ void Resolver::ParseOrder(const char *s,int *o) + for(s1=strtok(s1,delim); s1; s1=strtok(0,delim)) + { + int af=FindAddressFamily(s1); +- if(af!=-1 && idx<15) ++ if(af!=-1 && idx<15 && IsAddressFamilySupporded(af)) + { + if(o) o[idx]=af; + idx++; +diff --git a/src/Resolver.h b/src/Resolver.h +index 724714d9..18eeed42 100644 +--- src/Resolver.h ++++ src/Resolver.h +@@ -26,7 +26,7 @@ + #include "Cache.h" + #include "network.h" + +-class Resolver : public SMTask, protected ProtoLog ++class Resolver : public SMTask, protected ProtoLog, protected Networker + { + xstring hostname; + xstring portname; +@@ -53,6 +53,7 @@ class Resolver : public SMTask, protected ProtoLog + void DoGethostbyname(); + + static int FindAddressFamily(const char *name); ++ static bool IsAddressFamilySupporded(int af); + static void ParseOrder(const char *s,int *o); + + void LookupOne(const char *name); +diff --git a/src/network.cc b/src/network.cc +index e54076de..ea1b02eb 100644 +--- src/network.cc ++++ src/network.cc +@@ -454,7 +454,7 @@ const char *Networker::FindGlobalIPv6Address() + return 0; + } + +-static bool CanCreateIpv6Socket() ++bool Networker::CanCreateIpv6Socket() + { + #if INET6 + bool can=true; +@@ -472,16 +472,3 @@ static bool CanCreateIpv6Socket() + return false; + #endif + } +- +-static struct NetworkInit : private Networker { +- NetworkInit(); +-} NETWORK_INIT; +- +-NetworkInit::NetworkInit() +-{ +-#if INET6 +- // check if ipv6 is really supported +- if(!Networker::FindGlobalIPv6Address() || !CanCreateIpv6Socket()) +- ResMgr::Set("dns:order",0,"inet"); +-#endif // INET6 +-} +diff --git a/src/network.h b/src/network.h +index 3223ce82..e4ede6ef 100644 +--- src/network.h ++++ src/network.h +@@ -140,6 +140,7 @@ protected: + static int SocketCreateUnboundTCP(int af,const char *hostname); + static void SocketSinglePF(int sock,int pf); + static const char *FindGlobalIPv6Address(); ++ static bool CanCreateIpv6Socket(); + }; + + #endif //NETWORK_H
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202001161610.00GGAoSh046736>