diff --git a/ftp/lftp/Makefile b/ftp/lftp/Makefile index 75fcda5de246..dadf23a98dba 100644 --- a/ftp/lftp/Makefile +++ b/ftp/lftp/Makefile @@ -1,74 +1,75 @@ # Created by: Andrey Zakhvatov # $FreeBSD$ PORTNAME= lftp PORTVERSION= 4.9.0 +PORTREVISION= 1 CATEGORIES= ftp MASTER_SITES= http://lftp.tech/ftp/ \ http://lftp.tech/ftp/old/ \ http://lftp.cybermirror.org/ \ http://lftp.cybermirror.org/old/ \ http://ftp.st.ryukoku.ac.jp/pub/network/ftp/lftp/ \ http://ftp.st.ryukoku.ac.jp/pub/network/ftp/lftp/old/ \ http://ftp.tuwien.ac.at/infosys/browsers/ftp/lftp/ \ ftp://ftp.cs.tu-berlin.de/pub/net/ftp/lftp/ MAINTAINER= martymac@FreeBSD.org COMMENT= Shell-like command line FTP client LICENSE= GPLv3 LICENSE_FILE= ${WRKSRC}/COPYING LIB_DEPENDS= libexpat.so:textproc/expat2 \ libidn2.so:dns/libidn2 USES= compiler:c++11-lang charsetfix iconv libtool localbase \ readline shebangfix GNU_CONFIGURE= yes PORTDOCS= AUTHORS BUGS ChangeLog FAQ FEATURES INSTALL \ MIRRORS NEWS README README.debug-levels README.modules \ THANKS TODO SHEBANG_FILES= src/verify-file \ src/convert-mozilla-cookies \ src/xdg-move OPTIONS_DEFINE= DOCS NLS OPTIONS_RADIO= SSL OPTIONS_RADIO_SSL= OPENSSL GNUTLS OPTIONS_DEFAULT= SSL OPENSSL OPTIONS_SUB= yes NLS_USES= gettext NLS_CONFIGURE_ENABLE= nls OPENSSL_CONFIGURE_WITH= openssl OPENSSL_USES= ssl GNUTLS_CONFIGURE_WITH= gnutls GNUTLS_LIB_DEPENDS= libgnutls.so:security/gnutls GNUTLS_USES= pkgconfig post-install: ${MV} ${STAGEDIR}${PREFIX}/etc/lftp.conf \ ${STAGEDIR}${PREFIX}/etc/lftp.conf.sample post-install-DOCS-on: ${MKDIR} ${STAGEDIR}${DOCSDIR} ${INSTALL_DATA} ${PORTDOCS:S|^|${WRKSRC}/|} ${STAGEDIR}${DOCSDIR} .include # Only link to libthr if necessary .if ${PORT_OPTIONS:MGNUTLS} NEED_PTHREAD= yes .else .if exists(${OPENSSLLIB}/libssl.so) NEED_PTHREAD!= ldd ${OPENSSLLIB}/libssl.so | ${GREP} -w 'libthr\.so' || ${ECHO_CMD} .else NEED_PTHREAD= # empty .endif .endif .if !empty(NEED_PTHREAD) LDFLAGS+= -pthread .endif .include diff --git a/ftp/lftp/files/patch-5d34493.txt b/ftp/lftp/files/patch-5d34493.txt new file mode 100644 index 000000000000..1f09d7fa28d1 --- /dev/null +++ b/ftp/lftp/files/patch-5d34493.txt @@ -0,0 +1,102 @@ +commit 5d344937d60380341c20409c11f135afb630d7ee +Author: Alexander V. Lukyanov +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