diff --git a/ftp/Makefile b/ftp/Makefile index 5c00b9b9cda3..0bd724eeb5b3 100644 --- a/ftp/Makefile +++ b/ftp/Makefile @@ -1,103 +1,104 @@ COMMENT = FTP client and server utilities SUBDIR += R-cran-RCurl SUBDIR += R-cran-curl SUBDIR += axel SUBDIR += bbftp-client SUBDIR += bbftp-server SUBDIR += bftpd SUBDIR += bsdftpd-ssl SUBDIR += cmdftp SUBDIR += coeurl SUBDIR += curl + SUBDIR += curl-impersonate SUBDIR += curlie SUBDIR += curlpp SUBDIR += dmachine SUBDIR += fastdfs SUBDIR += filezilla SUBDIR += fineftp-server SUBDIR += fmirror SUBDIR += freebsd-ftpd SUBDIR += ftpcopy SUBDIR += ftpfind SUBDIR += ftplib SUBDIR += ftpproxy SUBDIR += ftpsync SUBDIR += gftp SUBDIR += gnustep-ftp SUBDIR += gstreamer1-plugins-curl SUBDIR += hsftp SUBDIR += jftp SUBDIR += lftp SUBDIR += libfilezilla SUBDIR += linux-c7-curl SUBDIR += linux-rl9-curl SUBDIR += linux-rl9-wget SUBDIR += mirror SUBDIR += ncftp3 SUBDIR += netdumpd SUBDIR += ocaml-ocurl SUBDIR += oftpd SUBDIR += omi SUBDIR += p5-File-Fetch SUBDIR += p5-Net-FTP-Common SUBDIR += p5-Net-FTP-Recursive SUBDIR += p5-Net-FTPSSL SUBDIR += p5-Net-FTPServer SUBDIR += p5-POE-Component-Client-FTP SUBDIR += p5-SOAP-Transport-FTP SUBDIR += paraget SUBDIR += pavuk SUBDIR += pear-Net_FTP SUBDIR += pftpd SUBDIR += pget SUBDIR += php82-curl SUBDIR += php82-ftp SUBDIR += php83-curl SUBDIR += php83-ftp SUBDIR += php84-curl SUBDIR += php84-ftp SUBDIR += php85-curl SUBDIR += php85-ftp SUBDIR += php86-curl SUBDIR += php86-ftp SUBDIR += phpwebftp SUBDIR += proftpd SUBDIR += proftpd-mod_vroot SUBDIR += profxp SUBDIR += pure-ftpd SUBDIR += py-aioftp SUBDIR += py-ftputil SUBDIR += py-parfive SUBDIR += py-pycurl SUBDIR += py-pyftpdlib SUBDIR += py-requests-ftp SUBDIR += py-sftp SUBDIR += py-tftpy SUBDIR += quftp SUBDIR += rexx-curl SUBDIR += rubygem-curb SUBDIR += rubygem-net-ftp SUBDIR += sftpgo SUBDIR += smbftpd SUBDIR += spegla SUBDIR += surge SUBDIR += termscp SUBDIR += tftp-hpa SUBDIR += tnftp SUBDIR += tnftpd SUBDIR += twoftpd SUBDIR += uftp SUBDIR += unftp SUBDIR += vsftpd SUBDIR += vsftpd-ext SUBDIR += waiho SUBDIR += weex SUBDIR += wget SUBDIR += wmget SUBDIR += wput SUBDIR += wush SUBDIR += wzdftpd SUBDIR += yafc .include diff --git a/ftp/curl-impersonate/Makefile b/ftp/curl-impersonate/Makefile new file mode 100644 index 000000000000..a5ee0f9fcbaf --- /dev/null +++ b/ftp/curl-impersonate/Makefile @@ -0,0 +1,68 @@ +PORTNAME= curl-impersonate +DISTVERSIONPREFIX= v +DISTVERSION= 2.0.0 +CATEGORIES= ftp +MASTER_SITES= https://github.com/google/boringssl/archive/:boringssl \ + https://github.com/google/brotli/archive/refs/tags/:brotli \ + https://github.com/curl/curl/archive/:curl \ + https://github.com/nghttp2/nghttp2/releases/download/v1.63.0/:nghttp2 \ + https://github.com/ngtcp2/ngtcp2/releases/download/v1.20.0/:ngtcp2 \ + https://github.com/ngtcp2/nghttp3/releases/download/v1.15.0/:nghttp3 \ + https://github.com/madler/zlib/releases/download/v1.3.1/:zlib \ + https://github.com/facebook/zstd/releases/download/v1.5.7/:zstd +DISTFILES= ${BORING_SSL_COMMIT}.zip:boringssl \ + curl-8_21_0.tar.gz:curl \ + v1.2.0.tar.gz:brotli \ + nghttp2-1.63.0.tar.bz2:nghttp2 \ + ngtcp2-1.20.0.tar.bz2:ngtcp2 \ + nghttp3-1.15.0.tar.bz2:nghttp3 \ + zlib-1.3.1.tar.gz:zlib \ + zstd-1.5.7.tar.gz:zstd +DIST_SUBDIR= ${PORTNAME} +EXTRACT_ONLY= ${DISTNAME}${EXTRACT_SUFX} + +MAINTAINER= yuri@FreeBSD.org +COMMENT= Curl with impersonation +WWW= https://curl-impersonate.readthedocs.io/en/latest/ \ + https://github.com/lexiforest/curl-impersonate + +LICENSE= MIT +LICENSE_FILE= ${WRKSRC}/LICENSE + +USES= cmake localbase:ldflags pkgconfig ssl + +USE_GITHUB= yes +GH_ACCOUNT= lexiforest + +BORING_SSL_COMMIT= 156c7b75ae9b8c3b3f847acf264f17594c3859fb + +USE_LDCONFIG= yes + +MAKE_JOBS_UNSAFE= yes + +post-patch: + @${RLN} ${DISTDIR}/${DIST_SUBDIR}/${BORING_SSL_COMMIT}.zip ${WRKSRC}/${BORING_SSL_COMMIT}.zip + @${RLN} ${DISTDIR}/${DIST_SUBDIR}/v1.2.0.tar.gz ${WRKSRC}/brotli-1.2.0.tar.gz + @${RLN} ${DISTDIR}/${DIST_SUBDIR}/curl-8_21_0.tar.gz ${WRKSRC}/curl-8_21_0.tar.gz + @${RLN} ${DISTDIR}/${DIST_SUBDIR}/nghttp2-1.63.0.tar.bz2 ${WRKSRC}/nghttp2-1.63.0.tar.bz2 + @${RLN} ${DISTDIR}/${DIST_SUBDIR}/ngtcp2-1.20.0.tar.bz2 ${WRKSRC}/ngtcp2-1.20.0.tar.bz2 + @${RLN} ${DISTDIR}/${DIST_SUBDIR}/nghttp3-1.15.0.tar.bz2 ${WRKSRC}/nghttp3-1.15.0.tar.bz2 + @${RLN} ${DISTDIR}/${DIST_SUBDIR}/zlib-1.3.1.tar.gz ${WRKSRC}/zlib-1.3.1.tar.gz + @${RLN} ${DISTDIR}/${DIST_SUBDIR}/zstd-1.5.7.tar.gz ${WRKSRC}/zstd-1.5.7.tar.gz + +pre-configure: + @${REINPLACE_CMD} \ + -e 's|https://github.com/madler/zlib/releases/download/v$${ZLIB_VERSION}/zlib-$${ZLIB_VERSION}.tar.gz|file://$${CMAKE_SOURCE_DIR}/zlib-$${ZLIB_VERSION}.tar.gz|' \ + -e 's|https://github.com/facebook/zstd/releases/download/v$${ZSTD_VERSION}/zstd-$${ZSTD_VERSION}.tar.gz|file://$${CMAKE_SOURCE_DIR}/zstd-$${ZSTD_VERSION}.tar.gz|' \ + -e 's|https://github.com/google/brotli/archive/refs/tags/v$${BROTLI_VERSION}.tar.gz|file://$${CMAKE_SOURCE_DIR}/brotli-$${BROTLI_VERSION}.tar.gz|' \ + -e 's|https://github.com/google/boringssl/archive/$${BORINGSSL_COMMIT}.zip|file://$${CMAKE_SOURCE_DIR}/$${BORINGSSL_COMMIT}.zip|' \ + -e 's|https://github.com/nghttp2/nghttp2/releases/download/v$${NGHTTP2_VERSION}/nghttp2-$${NGHTTP2_VERSION}.tar.bz2|file://$${CMAKE_SOURCE_DIR}/nghttp2-$${NGHTTP2_VERSION}.tar.bz2|' \ + -e 's|https://github.com/ngtcp2/ngtcp2/releases/download/v$${NGTCP2_VERSION}/ngtcp2-$${NGTCP2_VERSION}.tar.bz2|file://$${CMAKE_SOURCE_DIR}/ngtcp2-$${NGTCP2_VERSION}.tar.bz2|' \ + -e 's|https://github.com/ngtcp2/nghttp3/releases/download/v$${NGHTTP3_VERSION}/nghttp3-$${NGHTTP3_VERSION}.tar.bz2|file://$${CMAKE_SOURCE_DIR}/nghttp3-$${NGHTTP3_VERSION}.tar.bz2|' \ + -e 's|https://github.com/curl/curl/archive/$${CURL_VERSION}.tar.gz|file://$${CMAKE_SOURCE_DIR}/$${CURL_VERSION}.tar.gz|' \ + ${WRKSRC}/CMakeLists.txt + +post-install: + @${RM} -r ${STAGEDIR}${PREFIX}/lib/CMakeFiles + +.include diff --git a/ftp/curl-impersonate/distinfo b/ftp/curl-impersonate/distinfo new file mode 100644 index 000000000000..6efb15b9754b --- /dev/null +++ b/ftp/curl-impersonate/distinfo @@ -0,0 +1,19 @@ +TIMESTAMP = 1785626016 +SHA256 (curl-impersonate/156c7b75ae9b8c3b3f847acf264f17594c3859fb.zip) = 450e169b284697c6eafe523cb7679f4221fbe1a0993f773a566c33b188762844 +SIZE (curl-impersonate/156c7b75ae9b8c3b3f847acf264f17594c3859fb.zip) = 80313844 +SHA256 (curl-impersonate/curl-8_21_0.tar.gz) = ec753aa6f408a3ca9f0d6d5f7a77417aecd1544db13c03ae5d443612bf367364 +SIZE (curl-impersonate/curl-8_21_0.tar.gz) = 3592963 +SHA256 (curl-impersonate/v1.2.0.tar.gz) = 816c96e8e8f193b40151dad7e8ff37b1221d019dbcb9c35cd3fadbfe6477dfec +SIZE (curl-impersonate/v1.2.0.tar.gz) = 646315 +SHA256 (curl-impersonate/nghttp2-1.63.0.tar.bz2) = 607b174554d22a828bc532d1d734fe0f729b5d5ed207f2f12e96a62e83f29c55 +SIZE (curl-impersonate/nghttp2-1.63.0.tar.bz2) = 2012107 +SHA256 (curl-impersonate/ngtcp2-1.20.0.tar.bz2) = 871ec97ad86803cf312901b0c393b0ee70163e25a87c9b2894d1234341ce4e97 +SIZE (curl-impersonate/ngtcp2-1.20.0.tar.bz2) = 898205 +SHA256 (curl-impersonate/nghttp3-1.15.0.tar.bz2) = c6c491a52804814098e446630e6efc459afc0d3da7952ffe6cbdc0b3f99b2b62 +SIZE (curl-impersonate/nghttp3-1.15.0.tar.bz2) = 519681 +SHA256 (curl-impersonate/zlib-1.3.1.tar.gz) = 9a93b2b7dfdac77ceba5a558a580e74667dd6fede4585b91eefb60f03b72df23 +SIZE (curl-impersonate/zlib-1.3.1.tar.gz) = 1512791 +SHA256 (curl-impersonate/zstd-1.5.7.tar.gz) = eb33e51f49a15e023950cd7825ca74a4a2b43db8354825ac24fc1b7ee09e6fa3 +SIZE (curl-impersonate/zstd-1.5.7.tar.gz) = 2434947 +SHA256 (curl-impersonate/lexiforest-curl-impersonate-v2.0.0_GH0.tar.gz) = a9827cfce8246e78b86e26f012ae9fcb9bc05822009cd7ce4c9e130af6bdfb6f +SIZE (curl-impersonate/lexiforest-curl-impersonate-v2.0.0_GH0.tar.gz) = 207780 diff --git a/ftp/curl-impersonate/files/patch-CMakeLists.txt b/ftp/curl-impersonate/files/patch-CMakeLists.txt new file mode 100644 index 000000000000..b6ea06fe17c4 --- /dev/null +++ b/ftp/curl-impersonate/files/patch-CMakeLists.txt @@ -0,0 +1,63 @@ +--- CMakeLists.txt.orig 2026-08-01 23:39:17 UTC ++++ CMakeLists.txt +@@ -195,6 +195,7 @@ ExternalProject_Add(zlib + -DBUILD_SHARED_LIBS=OFF + -DZLIB_BUILD_EXAMPLES=OFF + BUILD_COMMAND ${CMAKE_COMMAND} --build --config Release --parallel ${SUBJOBS} ++ INSTALL_COMMAND ${CMAKE_COMMAND} -E env DESTDIR= ${CMAKE_COMMAND} --build --config Release --target install --parallel ${SUBJOBS} + ) + + # zstd +@@ -214,6 +215,7 @@ ExternalProject_Add(zstd + -DZSTD_BUILD_CONTRIB=OFF + -DZSTD_BUILD_TESTS=OFF + BUILD_COMMAND ${CMAKE_COMMAND} --build --config Release --parallel ${SUBJOBS} ++ INSTALL_COMMAND ${CMAKE_COMMAND} -E env DESTDIR= ${CMAKE_COMMAND} --build --config Release --target install --parallel ${SUBJOBS} + ) + + # brotli +@@ -234,7 +236,7 @@ ExternalProject_Add(brotli + -DBROTLI_BUILD_TOOLS=OFF + -DCMAKE_MACOSX_BUNDLE=OFF + BUILD_COMMAND ${CMAKE_COMMAND} --build --config Release --parallel ${SUBJOBS} +- INSTALL_COMMAND ${CMAKE_COMMAND} --build --config Release --target install --parallel ${SUBJOBS} ++ INSTALL_COMMAND ${CMAKE_COMMAND} -E env DESTDIR= ${CMAKE_COMMAND} --build --config Release --target install --parallel ${SUBJOBS} + ) + + # boringssl +@@ -270,7 +272,7 @@ ExternalProject_Add(boringssl + PATCH_COMMAND ${PATCH_EXE} -p1 -i "${_boringssl_patch_file}" + CMAKE_ARGS ${_boringssl_cmake_args} + BUILD_COMMAND ${CMAKE_COMMAND} --build --config Release --target ssl crypto --parallel ${SUBJOBS} +- INSTALL_COMMAND ${CMAKE_COMMAND} --build --config Release --target install --parallel ${SUBJOBS} ++ INSTALL_COMMAND ${CMAKE_COMMAND} -E env DESTDIR= ${CMAKE_COMMAND} --build --config Release --target install --parallel ${SUBJOBS} + ) + + ExternalProject_Get_Property(boringssl source_dir binary_dir) +@@ -308,7 +310,7 @@ ExternalProject_Add(nghttp2 + -DENABLE_DOC=OFF + -DBUILD_TESTING=OFF + BUILD_COMMAND ${CMAKE_COMMAND} --build --config Release --parallel ${SUBJOBS} +- INSTALL_COMMAND ${CMAKE_COMMAND} --build --config Release --target install --parallel ${SUBJOBS} ++ INSTALL_COMMAND ${CMAKE_COMMAND} -E env DESTDIR= ${CMAKE_COMMAND} --build --config Release --target install --parallel ${SUBJOBS} + ) + + # nghttp3 +@@ -330,7 +332,7 @@ ExternalProject_Add(nghttp3 + -DBUILD_TESTING=OFF + BUILD_COMMAND ${CMAKE_COMMAND} --build --config Release --parallel ${SUBJOBS} + INSTALL_COMMAND +- ${CMAKE_COMMAND} --build --config Release --target install --parallel ${SUBJOBS} ++ ${CMAKE_COMMAND} -E env DESTDIR= ${CMAKE_COMMAND} --build --config Release --target install --parallel ${SUBJOBS} + COMMAND ${CMAKE_COMMAND} -E copy_if_different + /lib/includes/nghttp3/nghttp3.h + /include/nghttp3/nghttp3.h +@@ -370,7 +372,7 @@ ExternalProject_Add(ngtcp2 + -DBORINGSSL_INCLUDE_DIR=${BORINGSSL_INCLUDE_DIR} + ${_ngtcp2_boringssl_libs_arg} + BUILD_COMMAND ${CMAKE_COMMAND} --build --config Release --parallel ${SUBJOBS} +- INSTALL_COMMAND ${CMAKE_COMMAND} --build --config Release --target install --parallel ${SUBJOBS} ++ INSTALL_COMMAND ${CMAKE_COMMAND} -E env DESTDIR= ${CMAKE_COMMAND} --build --config Release --target install --parallel ${SUBJOBS} + ) + + # libidn2 diff --git a/ftp/curl-impersonate/files/patch-patches_curl.patch b/ftp/curl-impersonate/files/patch-patches_curl.patch new file mode 100644 index 000000000000..a689e1bc5896 --- /dev/null +++ b/ftp/curl-impersonate/files/patch-patches_curl.patch @@ -0,0 +1,31 @@ +--- patches/curl.patch.orig 2026-08-01 23:27:43 UTC ++++ patches/curl.patch +@@ -11817,3 +11817,28 @@ + NV1(CURLOPT_TLS_STATUS_REQUEST, 1), + NV1(CURLOPT_TCP_NODELAY, 1), + NV1(CURLOPT_PROXY_SSL_VERIFYPEER, 1), + NV1(CURLOPT_PROXY_SSL_VERIFYHOST, 1), ++diff --git a/CMakeLists.txt b/CMakeLists.txt ++index c96af1dc7b..d8e8474f82 100644 ++--- a/CMakeLists.txt +++++ b/CMakeLists.txt ++@@ -824,6 +824,20 @@ if(CURL_USE_OPENSSL) ++ ++ # Depend on OpenSSL via imported targets. This allows our dependents to ++ # get our dependencies transitively. +++ +++ # Create OpenSSL::SSL and OpenSSL::Crypto targets manually if they don't exist (for BoringSSL) +++ if(NOT TARGET OpenSSL::SSL) +++ add_library(OpenSSL::SSL UNKNOWN IMPORTED) +++ set_target_properties(OpenSSL::SSL PROPERTIES +++ IMPORTED_LOCATION "${OPENSSL_SSL_LIBRARY}" +++ INTERFACE_INCLUDE_DIRECTORIES "${OPENSSL_INCLUDE_DIR}") +++ endif() +++ if(NOT TARGET OpenSSL::Crypto) +++ add_library(OpenSSL::Crypto UNKNOWN IMPORTED) +++ set_target_properties(OpenSSL::Crypto PROPERTIES +++ IMPORTED_LOCATION "${OPENSSL_CRYPTO_LIBRARY}" +++ INTERFACE_INCLUDE_DIRECTORIES "${OPENSSL_INCLUDE_DIR}") +++ endif() ++ list(APPEND CURL_LIBS OpenSSL::SSL OpenSSL::Crypto) ++ ++ if(CURL_DEFAULT_SSL_BACKEND AND CURL_DEFAULT_SSL_BACKEND STREQUAL "openssl") diff --git a/ftp/curl-impersonate/pkg-descr b/ftp/curl-impersonate/pkg-descr new file mode 100644 index 000000000000..6bc3319f7584 --- /dev/null +++ b/ftp/curl-impersonate/pkg-descr @@ -0,0 +1,7 @@ +curl-impersonate is a special build of curl that can impersonate the four major +browsers: Chrome, Edge, Safari & Firefox. curl-impersonate is able to perform +TLS and HTTP handshakes that are identical to that of a real browser. + +curl-impersonate can be used either as a command line tool, similar to the +regular curl, or as a library that can be integrated instead of the regular +libcurl. diff --git a/ftp/curl-impersonate/pkg-plist b/ftp/curl-impersonate/pkg-plist new file mode 100644 index 000000000000..cd316e1cf669 --- /dev/null +++ b/ftp/curl-impersonate/pkg-plist @@ -0,0 +1,54 @@ +bin/curl-impersonate +bin/curl_chrome100 +bin/curl_chrome101 +bin/curl_chrome104 +bin/curl_chrome107 +bin/curl_chrome110 +bin/curl_chrome116 +bin/curl_chrome119 +bin/curl_chrome120 +bin/curl_chrome123 +bin/curl_chrome124 +bin/curl_chrome131 +bin/curl_chrome131_android +bin/curl_chrome133a +bin/curl_chrome136 +bin/curl_chrome142 +bin/curl_chrome145 +bin/curl_chrome146 +bin/curl_chrome99 +bin/curl_chrome99_android +bin/curl_edge101 +bin/curl_edge99 +bin/curl_firefox133 +bin/curl_firefox135 +bin/curl_firefox144 +bin/curl_firefox147 +bin/curl_safari153 +bin/curl_safari155 +bin/curl_safari170 +bin/curl_safari172_ios +bin/curl_safari180 +bin/curl_safari180_ios +bin/curl_safari184 +bin/curl_safari184_ios +bin/curl_safari260 +bin/curl_safari2601 +bin/curl_safari260_ios +bin/curl_tor145 +include/curl/curl.h +include/curl/curlver.h +include/curl/easy.h +include/curl/header.h +include/curl/mprintf.h +include/curl/multi.h +include/curl/options.h +include/curl/stdcheaders.h +include/curl/system.h +include/curl/typecheck-gcc.h +include/curl/urlapi.h +include/curl/websockets.h +lib/libcurl-impersonate.a +lib/libcurl-impersonate.so +lib/libcurl-impersonate.so.4 +lib/libcurl-impersonate.so.4.8.0