diff --git a/.cirrus.yml b/.cirrus.yml index 8033442e1..33047ba26 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -41,7 +41,7 @@ freebsd_task: pkginstall_script: - pkg update -f - - pkg install -y autoconf automake libtool pkgconf brotli openldap-client heimdal libpsl libmetalink libssh2 openssh-portable libidn2 librtmp libnghttp2 nghttp2 stunnel + - pkg install -y autoconf automake libtool pkgconf brotli openldap-client heimdal libpsl libssh2 openssh-portable libidn2 librtmp libnghttp2 nghttp2 stunnel - case `python -V` in Python?3.7*) pkg install -y py37-impacket ;; Python?2.7*) pkg install -y py27-impacket ;; @@ -56,7 +56,7 @@ freebsd_task: export CXXFLAGS="-fsanitize=address,undefined -fno-sanitize-recover=undefined,integer -Wformat -Werror=format-security -Werror=array-bounds -g"; export LDFLAGS="-fsanitize=address,undefined -fno-sanitize-recover=undefined,integer" ;; esac - - ./configure --prefix="${HOME}"/install --enable-debug --with-openssl --with-libssh2 --with-brotli --with-gssapi --with-libidn2 --enable-manual --enable-ldap --enable-ldaps --with-librtmp --with-libmetalink --with-libpsl --with-nghttp2 || { tail -300 config.log; false; } + - ./configure --prefix="${HOME}"/install --enable-debug --with-openssl --with-libssh2 --with-brotli --with-gssapi --with-libidn2 --enable-manual --enable-ldap --enable-ldaps --with-librtmp --with-libpsl --with-nghttp2 || { tail -300 config.log; false; } compile_script: - make V=1 && cd tests && make V=1 test_script: diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 368ff0401..116d14da2 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -38,19 +38,19 @@ jobs: macosx-version-min: 10.9 - name: HTTP only install: nghttp2 - configure: --enable-debug --enable-maintainer-mode --disable-dict --disable-file --disable-ftp --disable-gopher --disable-imap --disable-ldap --disable-pop3 --disable-rtmp --disable-rtsp --disable-scp --disable-sftp --disable-smb --disable-smtp --disable-telnet --disable-tftp --disable-unix-sockets --disable-shared --without-brotli --without-gssapi --without-libidn2 --without-libmetalink --without-libpsl --without-librtmp --without-libssh2 --without-nghttp2 --without-ntlm-auth --without-ssl --without-zlib + configure: --enable-debug --enable-maintainer-mode --disable-dict --disable-file --disable-ftp --disable-gopher --disable-imap --disable-ldap --disable-pop3 --disable-rtmp --disable-rtsp --disable-scp --disable-sftp --disable-smb --disable-smtp --disable-telnet --disable-tftp --disable-unix-sockets --disable-shared --without-brotli --without-gssapi --without-libidn2 --without-libpsl --without-librtmp --without-libssh2 --without-nghttp2 --without-ntlm-auth --without-ssl --without-zlib macosx-version-min: 10.15 - - name: SecureTransport metalink - install: nghttp2 libmetalink - configure: --enable-debug --with-secure-transport --with-libmetalink + - name: SecureTransport http2 + install: nghttp2 + configure: --enable-debug --with-secure-transport macosx-version-min: 10.8 - - name: OpenSSL metalink - install: nghttp2 openssl libmetalink - configure: --enable-debug --with-openssl=/usr/local/opt/openssl --with-libmetalink + - name: OpenSSL http2 + install: nghttp2 openssl + configure: --enable-debug --with-openssl=/usr/local/opt/openssl macosx-version-min: 10.9 - - name: LibreSSL metalink - install: nghttp2 libressl libmetalink - configure: --enable-debug --with-openssl=/usr/local/opt/libressl --with-libmetalink + - name: LibreSSL http2 + install: nghttp2 libressl + configure: --enable-debug --with-openssl=/usr/local/opt/libressl macosx-version-min: 10.9 - name: torture install: nghttp2 openssl @@ -63,7 +63,7 @@ jobs: tflags: -n -t --shallow=20 FTP macosx-version-min: 10.9 - name: macOS 10.15 - install: nghttp2 libmetalink libssh2 openssl + install: nghttp2 libssh2 openssl configure: --enable-debug --disable-ldap --with-openssl=/usr/local/opt/openssl macosx-version-min: 10.15 steps: diff --git a/.lgtm.yml b/.lgtm.yml index 35a84722f..932e9c0b5 100644 --- a/.lgtm.yml +++ b/.lgtm.yml @@ -28,4 +28,4 @@ extraction: - rm -f CMakeLists.txt - ./buildconf configure: # enable as many optional features as possible - command: ./configure --enable-ares --with-libssh2 --with-gssapi --with-librtmp --with-libmetalink --with-openssl + command: ./configure --enable-ares --with-libssh2 --with-gssapi --with-librtmp --with-openssl diff --git a/configure.ac b/configure.ac index c8827c2c0..9186bbaed 100755 --- a/configure.ac +++ b/configure.ac @@ -163,7 +163,6 @@ curl_verbose_msg="enabled (--disable-verbose)" curl_ldaps_msg="no (--enable-ldaps)" curl_rtsp_msg="no (--enable-rtsp)" curl_rtmp_msg="no (--with-librtmp)" - curl_mtlnk_msg="no (--with-libmetalink)" curl_psl_msg="no (--with-libpsl)" curl_altsvc_msg="enabled (--disable-alt-svc)" curl_hsts_msg="enabled (--disable-hsts)" @@ -1853,99 +1852,8 @@ if test $with_libgsasl != "no"; then fi AM_CONDITIONAL([USE_GSASL], [test "$curl_gsasl_msg" = "enabled"]) -dnl ********************************************************************** -dnl Check for libmetalink -dnl ********************************************************************** - -OPT_LIBMETALINK=no - -AC_ARG_WITH(libmetalink,dnl -AS_HELP_STRING([--with-libmetalink=PATH],[where to look for libmetalink, PATH points to the installation root]) -AS_HELP_STRING([--without-libmetalink], [disable libmetalink detection]), - OPT_LIBMETALINK=$withval) - -if test X"$OPT_LIBMETALINK" != Xno; then - - addld="" - addlib="" - addcflags="" - version="" - libmetalinklib="" - - PKGTEST="no" - if test "x$OPT_LIBMETALINK" = "xyes"; then - dnl this is with no partiular path given - PKGTEST="yes" - CURL_CHECK_PKGCONFIG(libmetalink) - else - dnl When particular path is given, set PKG_CONFIG_LIBDIR using the path. - LIBMETALINK_PCDIR="$OPT_LIBMETALINK/lib/pkgconfig" - AC_MSG_NOTICE([PKG_CONFIG_LIBDIR will be set to "$LIBMETALINK_PCDIR"]) - if test -f "$LIBMETALINK_PCDIR/libmetalink.pc"; then - PKGTEST="yes" - fi - if test "$PKGTEST" = "yes"; then - CURL_CHECK_PKGCONFIG(libmetalink, [$LIBMETALINK_PCDIR]) - fi - fi - if test "$PKGTEST" = "yes" && test "$PKGCONFIG" != "no"; then - addlib=`CURL_EXPORT_PCDIR([$LIBMETALINK_PCDIR]) dnl - $PKGCONFIG --libs-only-l libmetalink` - addld=`CURL_EXPORT_PCDIR([$LIBMETALINK_PCDIR]) dnl - $PKGCONFIG --libs-only-L libmetalink` - addcflags=`CURL_EXPORT_PCDIR([$LIBMETALINK_PCDIR]) dnl - $PKGCONFIG --cflags-only-I libmetalink` - version=`CURL_EXPORT_PCDIR([$LIBMETALINK_PCDIR]) dnl - $PKGCONFIG --modversion libmetalink` - libmetalinklib=`echo $addld | $SED -e 's/^-L//'` - fi - if test -n "$addlib"; then - - clean_CPPFLAGS="$CPPFLAGS" - clean_LDFLAGS="$LDFLAGS" - clean_LIBS="$LIBS" - CPPFLAGS="$clean_CPPFLAGS $addcflags" - LDFLAGS="$clean_LDFLAGS $addld" - LIBS="$addlib $clean_LIBS" - AC_MSG_CHECKING([if libmetalink is recent enough]) - AC_LINK_IFELSE([ - AC_LANG_PROGRAM([[ -# include - ]],[[ - if(0 != metalink_strerror(0)) /* added in 0.1.0 */ - return 1; - ]]) - ],[ - AC_MSG_RESULT([yes ($version)]) - want_metalink="yes" - ],[ - AC_MSG_RESULT([no ($version)]) - AC_MSG_NOTICE([libmetalink library defective or too old]) - want_metalink="no" - ]) - if test "x$OPENSSL_ENABLED" != "x1" -a "x$USE_WINDOWS_SSPI" != "x1" \ - -a "x$GNUTLS_ENABLED" != "x1" -a "x$NSS_ENABLED" != "x1" \ - -a "x$SECURETRANSPORT_ENABLED" != "x1"; then - AC_MSG_WARN([metalink support requires a compatible SSL/TLS backend]) - want_metalink="no" - fi - CPPFLAGS="$clean_CPPFLAGS" - LDFLAGS="$clean_LDFLAGS" - LIBS="$clean_LIBS" - if test "$want_metalink" = "yes"; then - dnl finally libmetalink will be used - AC_DEFINE(USE_METALINK, 1, [Define to enable metalink support]) - LIBMETALINK_LIBS=$addlib - LIBMETALINK_LDFLAGS=$addld - LIBMETALINK_CPPFLAGS=$addcflags - AC_SUBST([LIBMETALINK_LIBS]) - AC_SUBST([LIBMETALINK_LDFLAGS]) - AC_SUBST([LIBMETALINK_CPPFLAGS]) - curl_mtlnk_msg="enabled" - fi - - fi -fi +AC_ARG_WITH(libmetalink,, + AC_MSG_ERROR([--with-libmetalink no longer works!])) dnl ********************************************************************** dnl Check for the presence of LIBSSH2 libraries and headers @@ -4342,7 +4250,6 @@ AC_MSG_NOTICE([Configured to build curl/libcurl: LDAPS: ${curl_ldaps_msg} RTSP: ${curl_rtsp_msg} RTMP: ${curl_rtmp_msg} - Metalink: ${curl_mtlnk_msg} PSL: ${curl_psl_msg} Alt-svc: ${curl_altsvc_msg} HSTS: ${curl_hsts_msg} diff --git a/docs/FEATURES.md b/docs/FEATURES.md index d4278d3a8..38e2ac3ed 100644 --- a/docs/FEATURES.md +++ b/docs/FEATURES.md @@ -8,7 +8,6 @@ - multiple file upload on a single command line - custom maximum transfer rate - redirectable stderr - - metalink support (13) - parallel transfers ## libcurl @@ -79,7 +78,7 @@ - download - authentication - - Kerberos 5 (14) + - Kerberos 5 (13) - active/passive using PORT, EPRT, PASV or EPSV - single file size information (compare to HTTP HEAD) - 'type=' URL support @@ -218,6 +217,4 @@ 10. - 11. requires libidn2 or Windows 12. requires libz, brotli and/or zstd - 13. requires libmetalink, and either an Apple or Microsoft operating - system, or OpenSSL, or GnuTLS, or NSS - 14. requires a GSS-API implementation (such as Heimdal or MIT Kerberos) + 13. requires a GSS-API implementation (such as Heimdal or MIT Kerberos) diff --git a/docs/MANUAL.md b/docs/MANUAL.md index 79ec4facc..a637c66c0 100644 --- a/docs/MANUAL.md +++ b/docs/MANUAL.md @@ -952,31 +952,6 @@ previous example in an SFTP URL might look like: IPv6 addresses provided other than in URLs (e.g. to the `--proxy`, `--interface` or `--ftp-port` options) should not be URL encoded. -## Metalink - -Curl supports Metalink (both version 3 and 4 (RFC 5854) are supported), a way -to list multiple URIs and hashes for a file. Curl will make use of the mirrors -listed within for failover if there are errors (such as the file or server not -being available). It will also verify the hash of the file after the download -completes. The Metalink file itself is downloaded and processed in memory and -not stored in the local file system. - -Example to use a remote Metalink file: - - curl --metalink http://www.example.com/example.metalink - -To use a Metalink file in the local file system, use FILE protocol -(`file://`): - - curl --metalink file:///example.metalink - -Please note that if FILE protocol is disabled, there is no way to use a local -Metalink file at the time of this writing. Also note that if `--metalink` and -`--include` are used together, `--include` will be ignored. This is because -including headers in the response will break Metalink parser and if the -headers are included in the file described in Metalink file, hash check will -fail. - ## Mailing Lists For your convenience, we have several open mailing lists to discuss curl, its diff --git a/docs/cmdline-opts/metalink.d b/docs/cmdline-opts/metalink.d index 888e80718..1dced5c72 100644 --- a/docs/cmdline-opts/metalink.d +++ b/docs/cmdline-opts/metalink.d @@ -1,27 +1,8 @@ Long: metalink Help: Process given URLs as metalink XML file Added: 7.27.0 -Requires: metalink Category: misc --- -This option can tell curl to parse and process a given URI as Metalink file -(both version 3 and 4 (RFC 5854) are supported) and make use of the mirrors -listed within for failover if there are errors (such as the file or server not -being available). It will also verify the hash of the file after the download -completes. The Metalink file itself is downloaded and processed in memory and -not stored in the local file system. - -Example to use a remote Metalink file: - - curl --metalink http://www.example.com/example.metalink - -To use a Metalink file in the local file system, use FILE protocol (file://): - - curl --metalink file:///example.metalink - -Please note that if FILE protocol is disabled, there is no way to use a local -Metalink file at the time of this writing. Also note that if --metalink and ---include are used together, --include will be ignored. This is because -including headers in the response will break Metalink parser and if the -headers are included in the file described in Metalink file, hash check will -fail. +This option was previously used to specify a metalink resource. Metalink +support has unfortunately been disabled in curl since 7.78.0 due to security +reasons. \ No newline at end of file diff --git a/docs/cmdline-opts/page-header b/docs/cmdline-opts/page-header index 4162d5766..b66310aa2 100644 --- a/docs/cmdline-opts/page-header +++ b/docs/cmdline-opts/page-header @@ -37,8 +37,8 @@ interaction. curl offers a busload of useful tricks like proxy support, user authentication, FTP upload, HTTP post, SSL connections, cookies, file transfer -resume, Metalink, and more. As you will see below, the number of features will -make your head spin! +resume and more. As you will see below, the number of features will make your +head spin! curl is powered by libcurl for all transfer-related features. See *libcurl(3)* for details. diff --git a/docs/cmdline-opts/version.d b/docs/cmdline-opts/version.d index 677d2459b..a257ebd9f 100644 --- a/docs/cmdline-opts/version.d +++ b/docs/cmdline-opts/version.d @@ -50,8 +50,6 @@ This curl supports transfers of large files, files larger than 2GB. .IP "libz" Automatic decompression (via gzip, deflate) of compressed files over HTTP is supported. -.IP "Metalink" -This curl supports Metalink. .IP "MultiSSL" This curl supports multiple TLS backends. .IP "NTLM" diff --git a/docs/examples/Makefile.m32 b/docs/examples/Makefile.m32 index 525c495a9..45ec8679c 100644 --- a/docs/examples/Makefile.m32 +++ b/docs/examples/Makefile.m32 @@ -59,10 +59,6 @@ endif ifndef LIBRTMP_PATH LIBRTMP_PATH = ../../../librtmp-2.4 endif -# Edit the path below to point to the base of your libmetalink package. -ifndef LIBMETALINK_PATH -LIBMETALINK_PATH = ../../../libmetalink-0.1.3 -endif # Edit the path below to point to the base of your libexpat package. ifndef LIBEXPAT_PATH LIBEXPAT_PATH = ../../../expat-2.1.0 @@ -220,9 +216,6 @@ endif ifeq ($(findstring -ipv6,$(CFG)),-ipv6) IPV6 = 1 endif -ifeq ($(findstring -metalink,$(CFG)),-metalink) -METALINK = 1 -endif ifeq ($(findstring -winssl,$(CFG)),-winssl) WINSSL = 1 SSPI = 1 @@ -354,18 +347,6 @@ ifdef WINIDN curl_LDADD += -L"$(WINIDN_PATH)" -lnormaliz endif endif -ifdef METALINK - INCLUDES += -I"$(LIBMETALINK_PATH)/include" - CFLAGS += -DUSE_METALINK - curl_LDADD += -L"$(LIBMETALINK_PATH)/lib" -lmetalink - ifndef DYN - ifeq ($(findstring libexpat_metalink_parser.o,$(shell $(AR) t "$(LIBMETALINK_PATH)/lib/libmetalink.a")),libexpat_metalink_parser.o) - curl_LDADD += -L"$(LIBEXPAT_PATH)/lib" -lexpat - else - curl_LDADD += -L"$(LIBXML2_PATH)/lib" -lxml2 - endif - endif -endif ifdef SSPI CFLAGS += -DUSE_WINDOWS_SSPI endif diff --git a/packages/vms/gnv_link_curl.com b/packages/vms/gnv_link_curl.com index c9db8d90d..0e2719cde 100644 --- a/packages/vms/gnv_link_curl.com +++ b/packages/vms/gnv_link_curl.com @@ -4,7 +4,7 @@ $! $Id$ $! $! File to build images using gnv$libcurl.exe $! -$! Copyright 2009 - 2020, John Malmberg +$! Copyright 2009 - 2021, John Malmberg $! $! Permission to use, copy, modify, and/or distribute this software for any $! purpose with or without fee is hereby granted, provided that the above @@ -408,7 +408,7 @@ $ link'ldebug'/exe=[.src]curl.exe/dsf=[.src]curl.dsf - [.src]curl-tool_getpass.o, [.src]curl-tool_help.o, - [.src]curl-tool_helpers.o, [.src]curl-tool_homedir.o, - [.src]curl-tool_hugehelp.o, [.src]curl-tool_libinfo.o, - - [.src]curl-tool_metalink.o, [.src]curl-tool_mfiles.o, - + [.src]curl-tool_mfiles.o, - [.src]curl-tool_msgs.o, [.src]curl-tool_operate.o, - [.src]curl-tool_operhlp.o, [.src]curl-tool_panykey.o, - [.src]curl-tool_paramhlp.o, [.src]curl-tool_parsecfg.o, - diff --git a/src/Makefile.am b/src/Makefile.am index dff248fe3..734373187 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -5,7 +5,7 @@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # -# Copyright (C) 1998 - 2020, Daniel Stenberg, , et al. +# Copyright (C) 1998 - 2021, Daniel Stenberg, , et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms @@ -61,18 +61,15 @@ CFLAGS += @CURL_CFLAG_EXTRAS@ LIBS = $(BLANK_AT_MAKETIME) if USE_EXPLICIT_LIB_DEPS -curl_LDADD = $(top_builddir)/lib/libcurl.la @LIBMETALINK_LIBS@ @LIBCURL_LIBS@ +curl_LDADD = $(top_builddir)/lib/libcurl.la @LIBCURL_LIBS@ else -curl_LDADD = $(top_builddir)/lib/libcurl.la @LIBMETALINK_LIBS@ @NSS_LIBS@ @SSL_LIBS@ @ZLIB_LIBS@ @CURL_NETWORK_AND_TIME_LIBS@ +curl_LDADD = $(top_builddir)/lib/libcurl.la @NSS_LIBS@ @SSL_LIBS@ @ZLIB_LIBS@ @CURL_NETWORK_AND_TIME_LIBS@ endif -curl_LDFLAGS = @LIBMETALINK_LDFLAGS@ -curl_CPPFLAGS = $(AM_CPPFLAGS) $(LIBMETALINK_CPPFLAGS) - # if unit tests are enabled, build a static library to link them with if BUILD_UNITTESTS noinst_LTLIBRARIES = libcurltool.la -libcurltool_la_CPPFLAGS = $(LIBMETALINK_CPPFLAGS) $(AM_CPPFLAGS) \ +libcurltool_la_CPPFLAGS = $(AM_CPPFLAGS) \ -DCURL_STATICLIB -DUNITTESTS libcurltool_la_CFLAGS = libcurltool_la_LDFLAGS = -static $(LINKFLAGS) diff --git a/src/Makefile.inc b/src/Makefile.inc index 329afacfa..9839d4ff3 100644 --- a/src/Makefile.inc +++ b/src/Makefile.inc @@ -5,7 +5,7 @@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # -# Copyright (C) 1998 - 2020, Daniel Stenberg, , et al. +# Copyright (C) 1998 - 2021, Daniel Stenberg, , et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms @@ -74,7 +74,6 @@ CURL_CFILES = \ tool_hugehelp.c \ tool_libinfo.c \ tool_main.c \ - tool_metalink.c \ tool_msgs.c \ tool_operate.c \ tool_operhlp.c \ @@ -117,7 +116,6 @@ CURL_HFILES = \ tool_hugehelp.h \ tool_libinfo.h \ tool_main.h \ - tool_metalink.h \ tool_msgs.h \ tool_operate.h \ tool_operhlp.h \ diff --git a/src/Makefile.m32 b/src/Makefile.m32 index 8706381b2..380d264e7 100644 --- a/src/Makefile.m32 +++ b/src/Makefile.m32 @@ -59,10 +59,6 @@ endif ifndef LIBRTMP_PATH LIBRTMP_PATH = ../../librtmp-2.4 endif -# Edit the path below to point to the base of your libmetalink package. -ifndef LIBMETALINK_PATH -LIBMETALINK_PATH = ../../libmetalink-0.1.3 -endif # Edit the path below to point to the base of your libexpat package. ifndef LIBEXPAT_PATH LIBEXPAT_PATH = ../../expat-2.1.0 @@ -229,9 +225,6 @@ endif ifeq ($(findstring -ipv6,$(CFG)),-ipv6) IPV6 = 1 endif -ifeq ($(findstring -metalink,$(CFG)),-metalink) -METALINK = 1 -endif ifeq ($(findstring -winssl,$(CFG)),-winssl) WINSSL = 1 SSPI = 1 @@ -379,18 +372,6 @@ ifdef WINIDN curl_LDADD += -L"$(WINIDN_PATH)" -lnormaliz endif endif -ifdef METALINK - INCLUDES += -I"$(LIBMETALINK_PATH)/include" - CFLAGS += -DUSE_METALINK - curl_LDADD += -L"$(LIBMETALINK_PATH)/lib" -lmetalink - ifndef DYN - ifeq ($(findstring libexpat_metalink_parser.o,$(shell $(AR) t "$(LIBMETALINK_PATH)/lib/libmetalink.a")),libexpat_metalink_parser.o) - curl_LDADD += -L"$(LIBEXPAT_PATH)/lib" -lexpat - else - curl_LDADD += -L"$(LIBXML2_PATH)/lib" -lxml2 - endif - endif -endif ifdef SSPI CFLAGS += -DUSE_WINDOWS_SSPI endif diff --git a/src/Makefile.netware b/src/Makefile.netware index 999873c8b..20c82eaa2 100644 --- a/src/Makefile.netware +++ b/src/Makefile.netware @@ -6,7 +6,7 @@ # \___|\___/|_| \_\_____| # # Copyright (C) 2004 - 2014, Guenter Knauf -# Copyright (C) 2001 - 2020, Daniel Stenberg, , et al. +# Copyright (C) 2001 - 2021, Daniel Stenberg, , et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms @@ -69,11 +69,6 @@ ifndef FBOPENSSL_PATH FBOPENSSL_PATH = ../../fbopenssl-0.4 endif -# Edit the path below to point to the base of your libmetalink package. -ifndef LIBMETALINK_PATH -LIBMETALINK_PATH = ../../libmetalink-0.1.2 -endif - # Edit the path below to point to the base of your libexpat package. ifndef LIBEXPAT_PATH LIBEXPAT_PATH = ../../expat-2.1.0 @@ -243,10 +238,6 @@ endif ifeq ($(findstring -idn,$(CFG)),-idn) WITH_IDN = 1 endif -ifeq ($(findstring -metalink,$(CFG)),-metalink) -WITH_METALINK = 1 -WITH_SSL = 1 -endif ifeq ($(findstring -nghttp2,$(CFG)),-nghttp2) WITH_NGHTTP2 = 1 endif @@ -301,25 +292,6 @@ ifdef WITH_NGHTTP2 INCLUDES += -I$(NGHTTP2_PATH)/include LDLIBS += $(NGHTTP2_PATH)/lib/libnghttp2.$(LIBEXT) endif -ifdef WITH_METALINK - CFLAGS += -DUSE_METALINK - INCLUDES += -I$(OPENSSL_PATH)/outinc_nw_$(LIBARCH_L) - INCLUDES += -I$(LIBMETALINK_PATH)/include - LDLIBS += $(LIBMETALINK_PATH)/lib/libmetalink.$(LIBEXT) - ifdef WITH_LIBEXPAT - ifeq ($(LIBARCH),LIBC) - IMPORTS += @$(LIBEXPAT_PATH)/imports/expatlbc.imp - MODULES += expatlbc - else - IMPORTS += @$(LIBEXPAT_PATH)/imports/expatlib.imp - MODULES += expatlib - endif -else -ifdef WITH_LIBXML2 - IMPORTS += @$(LIBXML2_PATH)/lib/libxml2.imp - MODULES += libxml2 -endif -endif endif ifeq ($(LIBARCH),LIBC) diff --git a/src/tool_cfgable.h b/src/tool_cfgable.h index c7c8dfea5..0d04c8bac 100644 --- a/src/tool_cfgable.h +++ b/src/tool_cfgable.h @@ -23,7 +23,6 @@ ***************************************************************************/ #include "tool_setup.h" #include "tool_sdecls.h" -#include "tool_metalink.h" #include "tool_urlglob.h" #include "tool_formparse.h" @@ -270,10 +269,6 @@ struct OperationConfig { bool ssl_auto_client_cert; /* automatically locate and use a client certificate for authentication (Schannel) */ bool proxy_ssl_auto_client_cert; /* proxy version of ssl_auto_client_cert */ - - bool use_metalink; /* process given URLs as metalink XML file */ - struct metalinkfile *metalinkfile_list; /* point to the first node */ - struct metalinkfile *metalinkfile_last; /* point to the last/current node */ char *oauth_bearer; /* OAuth 2.0 bearer token */ bool nonpn; /* enable/disable TLS NPN extension */ bool noalpn; /* enable/disable TLS ALPN extension */ diff --git a/src/tool_getparam.c b/src/tool_getparam.c index 3a3c10789..641cca2e4 100644 --- a/src/tool_getparam.c +++ b/src/tool_getparam.c @@ -36,7 +36,6 @@ #include "tool_getparam.h" #include "tool_helpers.h" #include "tool_libinfo.h" -#include "tool_metalink.h" #include "tool_msgs.h" #include "tool_paramhlp.h" #include "tool_parsecfg.h" @@ -1140,29 +1139,8 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */ GetStr(&config->mail_auth, nextarg); break; case 'J': /* --metalink */ - { -#ifdef USE_METALINK - int mlmaj, mlmin, mlpatch; - metalink_get_version(&mlmaj, &mlmin, &mlpatch); - if((mlmaj*10000)+(mlmin*100) + mlpatch < CURL_REQ_LIBMETALINK_VERS) { - warnf(global, - "--metalink option cannot be used because the version of " - "the linked libmetalink library is too old. " - "Required: %d.%d.%d, found %d.%d.%d\n", - CURL_REQ_LIBMETALINK_MAJOR, - CURL_REQ_LIBMETALINK_MINOR, - CURL_REQ_LIBMETALINK_PATCH, - mlmaj, mlmin, mlpatch); - return PARAM_BAD_USE; - } - else - config->use_metalink = toggle; -#else - warnf(global, "--metalink option is ignored because the binary is " - "built without the Metalink support.\n"); -#endif - break; - } + errorf(global, "--metalink is disabled\n"); + return PARAM_BAD_USE; case '6': /* --sasl-authzid */ GetStr(&config->sasl_authzid, nextarg); break; diff --git a/src/tool_help.c b/src/tool_help.c index 45f137f2a..62ebf3417 100644 --- a/src/tool_help.c +++ b/src/tool_help.c @@ -30,7 +30,6 @@ #include "tool_panykey.h" #include "tool_help.h" #include "tool_libinfo.h" -#include "tool_metalink.h" #include "tool_version.h" #include "memdebug.h" /* keep this as LAST include */ @@ -967,27 +966,11 @@ featcomp(const void *p1, const void *p2) #endif } -#ifdef USE_METALINK -static const char *metalnk_version(void) -{ - static char version[25]; - int major = 0; - int minor = 0; - int patch = 0; - metalink_get_version(&major, &minor, &patch); - msnprintf(version, sizeof(version), " libmetalink/%u.%u.%u", - major, minor, patch); - return version; -} -#else -#define metalnk_version() "" -#endif - void tool_version_info(void) { const char *const *proto; - printf(CURL_ID "%s%s\n", curl_version(), metalnk_version()); + printf(CURL_ID "%s\n", curl_version()); #ifdef CURL_PATCHSTAMP printf("Release-Date: %s, security patched: %s\n", LIBCURL_TIMESTAMP, CURL_PATCHSTAMP); @@ -1010,9 +993,6 @@ void tool_version_info(void) if(curlinfo->features & feats[i].bitmask) featp[numfeat++] = (char *)feats[i].name; } -#ifdef USE_METALINK - featp[numfeat++] = (char *)"Metalink"; -#endif qsort(&featp[0], numfeat, sizeof(char *), featcomp); for(i = 0; i< numfeat; i++) printf(" %s", featp[i]); diff --git a/src/tool_main.c b/src/tool_main.c index c3751e177..9f16a4e27 100644 --- a/src/tool_main.c +++ b/src/tool_main.c @@ -212,7 +212,6 @@ static void main_free(struct GlobalConfig *config) /* Main cleanup */ curl_global_cleanup(); convert_cleanup(); - metalink_cleanup(); #ifdef USE_NSS if(PR_Initialized()) { /* prevent valgrind from reporting still reachable mem from NSRP arenas */ diff --git a/src/tool_metalink.c b/src/tool_metalink.c deleted file mode 100644 index 2bdfbb743..000000000 --- a/src/tool_metalink.c +++ /dev/null @@ -1,873 +0,0 @@ -/*************************************************************************** - * _ _ ____ _ - * Project ___| | | | _ \| | - * / __| | | | |_) | | - * | (__| |_| | _ <| |___ - * \___|\___/|_| \_\_____| - * - * Copyright (C) 1998 - 2021, Daniel Stenberg, , et al. - * - * This software is licensed as described in the file COPYING, which - * you should have received as part of this distribution. The terms - * are also available at https://curl.se/docs/copyright.html. - * - * You may opt to use, copy, modify, merge, publish, distribute and/or sell - * copies of the Software, and permit persons to whom the Software is - * furnished to do so, under the terms of the COPYING file. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ***************************************************************************/ -#include "tool_setup.h" - -#ifdef USE_METALINK - -#include -#include - -#ifdef HAVE_FCNTL_H -# include -#endif - -#undef HAVE_NSS_CONTEXT - -#ifdef USE_OPENSSL -# include -# include -#elif defined(USE_GNUTLS) -# include -# include -# define MD5_CTX struct md5_ctx -# define SHA_CTX struct sha1_ctx -# define SHA256_CTX struct sha256_ctx -#elif defined(USE_NSS) -# include -# include -# define MD5_CTX void * -# define SHA_CTX void * -# define SHA256_CTX void * -# define HAVE_NSS_CONTEXT - static NSSInitContext *nss_context; -#elif (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && \ - (__MAC_OS_X_VERSION_MAX_ALLOWED >= 1040)) || \ - (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && \ - (__IPHONE_OS_VERSION_MAX_ALLOWED >= 20000)) -/* For Apple operating systems: CommonCrypto has the functions we need. - The library's headers are even backward-compatible with OpenSSL's - headers as long as we define COMMON_DIGEST_FOR_OPENSSL first. - - These functions are available on Tiger and later, as well as iOS 2.0 - and later. If you're building for an older cat, well, sorry. */ -# define COMMON_DIGEST_FOR_OPENSSL -# include -#elif defined(USE_WIN32_CRYPTO) -/* For Windows: If no other crypto library is provided, we fallback - to the hash functions provided within the Microsoft Windows CryptoAPI */ -# include -/* Custom structure in order to store the required provider and hash handle */ -struct win32_crypto_hash { - HCRYPTPROV hCryptProv; - HCRYPTHASH hHash; -}; -/* Custom Microsoft AES Cryptographic Provider defines required for MinGW */ -# ifndef ALG_SID_SHA_256 -# define ALG_SID_SHA_256 12 -# endif -# ifndef CALG_SHA_256 -# define CALG_SHA_256 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_256) -# endif -# define MD5_CTX struct win32_crypto_hash -# define SHA_CTX struct win32_crypto_hash -# define SHA256_CTX struct win32_crypto_hash -#else -# error "Can't compile METALINK support without a crypto library." -#endif - -#define ENABLE_CURLX_PRINTF -/* use our own printf() functions */ -#include "curlx.h" - -#include "tool_getparam.h" -#include "tool_paramhlp.h" -#include "tool_cfgable.h" -#include "tool_metalink.h" -#include "tool_operate.h" -#include "tool_msgs.h" - -#include "memdebug.h" /* keep this as LAST include */ - -/* Copied from tool_getparam.c */ -#define GetStr(str,val) do { \ - if(*(str)) { \ - free(*(str)); \ - *(str) = NULL; \ - } \ - if((val)) \ - *(str) = strdup((val)); \ - if(!(val)) \ - return PARAM_NO_MEM; \ -} while(0) - -#if defined(USE_OPENSSL) -/* Functions are already defined */ -#elif defined(USE_GNUTLS) - -static int MD5_Init(MD5_CTX *ctx) -{ - md5_init(ctx); - return 1; -} - -static void MD5_Update(MD5_CTX *ctx, - const unsigned char *input, - unsigned int inputLen) -{ - md5_update(ctx, inputLen, input); -} - -static void MD5_Final(unsigned char digest[16], MD5_CTX *ctx) -{ - md5_digest(ctx, 16, digest); -} - -static int SHA1_Init(SHA_CTX *ctx) -{ - sha1_init(ctx); - return 1; -} - -static void SHA1_Update(SHA_CTX *ctx, - const unsigned char *input, - unsigned int inputLen) -{ - sha1_update(ctx, inputLen, input); -} - -static void SHA1_Final(unsigned char digest[20], SHA_CTX *ctx) -{ - sha1_digest(ctx, 20, digest); -} - -static int SHA256_Init(SHA256_CTX *ctx) -{ - sha256_init(ctx); - return 1; -} - -static void SHA256_Update(SHA256_CTX *ctx, - const unsigned char *input, - unsigned int inputLen) -{ - sha256_update(ctx, inputLen, input); -} - -static void SHA256_Final(unsigned char digest[32], SHA256_CTX *ctx) -{ - sha256_digest(ctx, 32, digest); -} - -#elif defined(USE_NSS) - -static int nss_hash_init(void **pctx, SECOidTag hash_alg) -{ - PK11Context *ctx; - - /* we have to initialize NSS if not initialized already */ - if(!NSS_IsInitialized() && !nss_context) { - static NSSInitParameters params; - params.length = sizeof(params); - nss_context = NSS_InitContext("", "", "", "", ¶ms, NSS_INIT_READONLY - | NSS_INIT_NOCERTDB | NSS_INIT_NOMODDB | NSS_INIT_FORCEOPEN - | NSS_INIT_NOROOTINIT | NSS_INIT_OPTIMIZESPACE | NSS_INIT_PK11RELOAD); - } - - ctx = PK11_CreateDigestContext(hash_alg); - if(!ctx) - return /* failure */ 0; - - if(PK11_DigestBegin(ctx) != SECSuccess) { - PK11_DestroyContext(ctx, PR_TRUE); - return /* failure */ 0; - } - - *pctx = ctx; - return /* success */ 1; -} - -static void nss_hash_final(void **pctx, unsigned char *out, unsigned int len) -{ - PK11Context *ctx = *pctx; - unsigned int outlen; - PK11_DigestFinal(ctx, out, &outlen, len); - PK11_DestroyContext(ctx, PR_TRUE); -} - -static int MD5_Init(MD5_CTX *pctx) -{ - return nss_hash_init(pctx, SEC_OID_MD5); -} - -static void MD5_Update(MD5_CTX *pctx, - const unsigned char *input, - unsigned int input_len) -{ - PK11_DigestOp(*pctx, input, input_len); -} - -static void MD5_Final(unsigned char digest[16], MD5_CTX *pctx) -{ - nss_hash_final(pctx, digest, 16); -} - -static int SHA1_Init(SHA_CTX *pctx) -{ - return nss_hash_init(pctx, SEC_OID_SHA1); -} - -static void SHA1_Update(SHA_CTX *pctx, - const unsigned char *input, - unsigned int input_len) -{ - PK11_DigestOp(*pctx, input, input_len); -} - -static void SHA1_Final(unsigned char digest[20], SHA_CTX *pctx) -{ - nss_hash_final(pctx, digest, 20); -} - -static int SHA256_Init(SHA256_CTX *pctx) -{ - return nss_hash_init(pctx, SEC_OID_SHA256); -} - -static void SHA256_Update(SHA256_CTX *pctx, - const unsigned char *input, - unsigned int input_len) -{ - PK11_DigestOp(*pctx, input, input_len); -} - -static void SHA256_Final(unsigned char digest[32], SHA256_CTX *pctx) -{ - nss_hash_final(pctx, digest, 32); -} - -#elif defined(USE_WIN32_CRYPTO) - -static void win32_crypto_final(struct win32_crypto_hash *ctx, - unsigned char *digest, - unsigned int digestLen) -{ - unsigned long length; - CryptGetHashParam(ctx->hHash, HP_HASHVAL, NULL, &length, 0); - if(length == digestLen) - CryptGetHashParam(ctx->hHash, HP_HASHVAL, digest, &length, 0); - if(ctx->hHash) - CryptDestroyHash(ctx->hHash); - if(ctx->hCryptProv) - CryptReleaseContext(ctx->hCryptProv, 0); -} - -static int MD5_Init(MD5_CTX *ctx) -{ - if(CryptAcquireContext(&ctx->hCryptProv, NULL, NULL, PROV_RSA_FULL, - CRYPT_VERIFYCONTEXT | CRYPT_SILENT)) { - CryptCreateHash(ctx->hCryptProv, CALG_MD5, 0, 0, &ctx->hHash); - } - return 1; -} - -static void MD5_Update(MD5_CTX *ctx, - const unsigned char *input, - unsigned int inputLen) -{ - CryptHashData(ctx->hHash, (unsigned char *)input, inputLen, 0); -} - -static void MD5_Final(unsigned char digest[16], MD5_CTX *ctx) -{ - win32_crypto_final(ctx, digest, 16); -} - -static int SHA1_Init(SHA_CTX *ctx) -{ - if(CryptAcquireContext(&ctx->hCryptProv, NULL, NULL, PROV_RSA_FULL, - CRYPT_VERIFYCONTEXT | CRYPT_SILENT)) { - CryptCreateHash(ctx->hCryptProv, CALG_SHA1, 0, 0, &ctx->hHash); - } - return 1; -} - -static void SHA1_Update(SHA_CTX *ctx, - const unsigned char *input, - unsigned int inputLen) -{ - CryptHashData(ctx->hHash, (unsigned char *)input, inputLen, 0); -} - -static void SHA1_Final(unsigned char digest[20], SHA_CTX *ctx) -{ - win32_crypto_final(ctx, digest, 20); -} - -static int SHA256_Init(SHA256_CTX *ctx) -{ - if(CryptAcquireContext(&ctx->hCryptProv, NULL, NULL, PROV_RSA_AES, - CRYPT_VERIFYCONTEXT | CRYPT_SILENT)) { - CryptCreateHash(ctx->hCryptProv, CALG_SHA_256, 0, 0, &ctx->hHash); - } - return 1; -} - -static void SHA256_Update(SHA256_CTX *ctx, - const unsigned char *input, - unsigned int inputLen) -{ - CryptHashData(ctx->hHash, (unsigned char *)input, inputLen, 0); -} - -static void SHA256_Final(unsigned char digest[32], SHA256_CTX *ctx) -{ - win32_crypto_final(ctx, digest, 32); -} - -#endif /* CRYPTO LIBS */ - -const struct digest_params MD5_DIGEST_PARAMS[] = { - { - CURLX_FUNCTION_CAST(digest_init_func, MD5_Init), - CURLX_FUNCTION_CAST(digest_update_func, MD5_Update), - CURLX_FUNCTION_CAST(digest_final_func, MD5_Final), - sizeof(MD5_CTX), - 16 - } -}; - -const struct digest_params SHA1_DIGEST_PARAMS[] = { - { - CURLX_FUNCTION_CAST(digest_init_func, SHA1_Init), - CURLX_FUNCTION_CAST(digest_update_func, SHA1_Update), - CURLX_FUNCTION_CAST(digest_final_func, SHA1_Final), - sizeof(SHA_CTX), - 20 - } -}; - -const struct digest_params SHA256_DIGEST_PARAMS[] = { - { - CURLX_FUNCTION_CAST(digest_init_func, SHA256_Init), - CURLX_FUNCTION_CAST(digest_update_func, SHA256_Update), - CURLX_FUNCTION_CAST(digest_final_func, SHA256_Final), - sizeof(SHA256_CTX), - 32 - } -}; - -static const struct metalink_digest_def SHA256_DIGEST_DEF[] = { - {"sha-256", SHA256_DIGEST_PARAMS} -}; - -static const struct metalink_digest_def SHA1_DIGEST_DEF[] = { - {"sha-1", SHA1_DIGEST_PARAMS} -}; - -static const struct metalink_digest_def MD5_DIGEST_DEF[] = { - {"md5", MD5_DIGEST_PARAMS} -}; - -/* - * The alias of supported hash functions in the order by preference - * (basically stronger hash comes first). We included "sha-256" and - * "sha256". The former is the name defined in the IANA registry named - * "Hash Function Textual Names". The latter is widely (and - * historically) used in Metalink version 3. - */ -static const struct metalink_digest_alias digest_aliases[] = { - {"sha-256", SHA256_DIGEST_DEF}, - {"sha256", SHA256_DIGEST_DEF}, - {"sha-1", SHA1_DIGEST_DEF}, - {"sha1", SHA1_DIGEST_DEF}, - {"md5", MD5_DIGEST_DEF}, - {NULL, NULL} -}; - -static struct digest_context *digest_init(const struct digest_params *dparams) -{ - struct digest_context *ctxt = malloc(sizeof(*ctxt)); - if(!ctxt) - return ctxt; - - ctxt->digest_hashctx = malloc(dparams->digest_ctxtsize); - - if(!ctxt->digest_hashctx) { - free(ctxt); - return NULL; - } - - ctxt->digest_hash = dparams; - - if(dparams->digest_init(ctxt->digest_hashctx) != 1) { - free(ctxt->digest_hashctx); - free(ctxt); - return NULL; - } - - return ctxt; -} - -static int digest_update(struct digest_context *context, - const unsigned char *data, - unsigned int len) -{ - (*context->digest_hash->digest_update)(context->digest_hashctx, data, len); - - return 0; -} - -static int digest_final(struct digest_context *context, unsigned char *result) -{ - if(result) - (*context->digest_hash->digest_final)(result, context->digest_hashctx); - - free(context->digest_hashctx); - free(context); - - return 0; -} - -static unsigned char hex_to_uint(const char *s) -{ - char buf[3]; - unsigned long val; - buf[0] = s[0]; - buf[1] = s[1]; - buf[2] = 0; - val = strtoul(buf, NULL, 16); - return (unsigned char)(val&0xff); -} - -/* - * Check checksum of file denoted by filename. The expected hash value - * is given in hex_hash which is hex-encoded string. - * - * This function returns 1 if it succeeds or one of the following - * integers: - * - * 0: - * Checksum didn't match. - * -1: - * Could not open file; or could not read data from file. - * -2: - * Hash algorithm not available. - */ -static int check_hash(const char *filename, - const struct metalink_digest_def *digest_def, - const unsigned char *digest, FILE *error) -{ - unsigned char *result; - struct digest_context *dctx; - int check_ok, flags, fd; - - flags = O_RDONLY; -#ifdef O_BINARY - /* O_BINARY is required in order to avoid binary EOF in text mode */ - flags |= O_BINARY; -#endif - - fd = open(filename, flags); - if(fd == -1) { - fprintf(error, "Metalink: validating (%s) [%s] FAILED (%s)\n", filename, - digest_def->hash_name, strerror(errno)); - return -1; - } - - dctx = digest_init(digest_def->dparams); - if(!dctx) { - fprintf(error, "Metalink: validating (%s) [%s] FAILED (%s)\n", filename, - digest_def->hash_name, "failed to initialize hash algorithm"); - close(fd); - return -2; - } - - result = malloc(digest_def->dparams->digest_resultlen); - if(!result) { - close(fd); - digest_final(dctx, NULL); - return -1; - } - while(1) { - unsigned char buf[4096]; - ssize_t len = read(fd, buf, sizeof(buf)); - if(len == 0) { - break; - } - else if(len == -1) { - fprintf(error, "Metalink: validating (%s) [%s] FAILED (%s)\n", filename, - digest_def->hash_name, strerror(errno)); - digest_final(dctx, result); - close(fd); - return -1; - } - digest_update(dctx, buf, (unsigned int)len); - } - digest_final(dctx, result); - check_ok = memcmp(result, digest, - digest_def->dparams->digest_resultlen) == 0; - /* sha*sum style verdict output */ - if(check_ok) - fprintf(error, "Metalink: validating (%s) [%s] OK\n", filename, - digest_def->hash_name); - else - fprintf(error, "Metalink: validating (%s) [%s] FAILED (digest mismatch)\n", - filename, digest_def->hash_name); - - free(result); - close(fd); - return check_ok; -} - -int metalink_check_hash(struct GlobalConfig *config, - struct metalinkfile *mlfile, - const char *filename) -{ - int rv; - fprintf(config->errors, "Metalink: validating (%s)...\n", filename); - if(!mlfile->checksum) { - fprintf(config->errors, - "Metalink: validating (%s) FAILED (digest missing)\n", filename); - return -2; - } - rv = check_hash(filename, mlfile->checksum->digest_def, - mlfile->checksum->digest, config->errors); - return rv; -} - -static struct metalink_checksum * -checksum_from_hex_digest(const struct metalink_digest_def *digest_def, - const char *hex_digest) -{ - struct metalink_checksum *chksum; - unsigned char *digest; - size_t i; - size_t len = strlen(hex_digest); - digest = malloc(len/2); - if(!digest) - return 0; - - for(i = 0; i < len; i += 2) { - digest[i/2] = hex_to_uint(hex_digest + i); - } - chksum = malloc(sizeof(struct metalink_checksum)); - if(chksum) { - chksum->digest_def = digest_def; - chksum->digest = digest; - } - else - free(digest); - return chksum; -} - -static struct metalink_resource *new_metalink_resource(const char *url) -{ - struct metalink_resource *res = malloc(sizeof(struct metalink_resource)); - if(res) { - res->next = NULL; - res->url = strdup(url); - if(!res->url) { - free(res); - return NULL; - } - } - return res; -} - -/* Returns nonzero if hex_digest is properly formatted; that is each - letter is in [0-9A-Za-z] and the length of the string equals to the - result length of digest * 2. */ -static int check_hex_digest(const char *hex_digest, - const struct metalink_digest_def *digest_def) -{ - size_t i; - for(i = 0; hex_digest[i]; ++i) { - char c = hex_digest[i]; - if(!(('0' <= c && c <= '9') || ('a' <= c && c <= 'z') || - ('A' <= c && c <= 'Z'))) { - return 0; - } - } - return digest_def->dparams->digest_resultlen * 2 == i; -} - -static struct metalinkfile *new_metalinkfile(metalink_file_t *fileinfo) -{ - struct metalinkfile *f = malloc(sizeof(struct metalinkfile)); - if(!f) - return NULL; - - f->next = NULL; - f->filename = strdup(fileinfo->name); - if(!f->filename) { - free(f); - return NULL; - } - f->checksum = NULL; - f->resource = NULL; - if(fileinfo->checksums) { - const struct metalink_digest_alias *digest_alias; - for(digest_alias = digest_aliases; digest_alias->alias_name; - ++digest_alias) { - metalink_checksum_t **p; - for(p = fileinfo->checksums; *p; ++p) { - if(curl_strequal(digest_alias->alias_name, (*p)->type) && - check_hex_digest((*p)->hash, digest_alias->digest_def)) { - f->checksum = - checksum_from_hex_digest(digest_alias->digest_def, - (*p)->hash); - break; - } - } - if(f->checksum) { - break; - } - } - } - if(fileinfo->resources) { - metalink_resource_t **p; - struct metalink_resource root, *tail; - root.next = NULL; - tail = &root; - for(p = fileinfo->resources; *p; ++p) { - struct metalink_resource *res; - /* Filter by type if it is non-NULL. In Metalink v3, type - includes the type of the resource. In curl, we are only - interested in HTTP, HTTPS and FTP. In addition to them, - Metalink v3 file may contain bittorrent type URL, which - points to the BitTorrent metainfo file. We ignore it here. - In Metalink v4, type was deprecated and all - fileinfo->resources point to the target file. BitTorrent - metainfo file URL may be appeared in fileinfo->metaurls. - */ - if(!(*p)->type || - curl_strequal((*p)->type, "http") || - curl_strequal((*p)->type, "https") || - curl_strequal((*p)->type, "ftp") || - curl_strequal((*p)->type, "ftps")) { - res = new_metalink_resource((*p)->url); - if(res) { - tail->next = res; - tail = res; - } - else { - tail = root.next; - - /* clean up the linked list */ - while(tail) { - res = tail->next; - free(tail->url); - free(tail); - tail = res; - } - free(f->filename); - free(f); - return NULL; - } - } - } - f->resource = root.next; - } - return f; -} - -int parse_metalink(struct OperationConfig *config, struct OutStruct *outs, - const char *metalink_url) -{ - metalink_error_t r; - metalink_t* metalink; - metalink_file_t **files; - bool warnings = FALSE; - - /* metlaink_parse_final deletes outs->metalink_parser */ - r = metalink_parse_final(outs->metalink_parser, NULL, 0, &metalink); - outs->metalink_parser = NULL; - if(r) { - return -1; - } - if(!metalink->files) { - fprintf(config->global->errors, "Metalink: parsing (%s) WARNING " - "(missing or invalid file name)\n", - metalink_url); - metalink_delete(metalink); - return -1; - } - for(files = metalink->files; *files; ++files) { - struct getout *url; - /* Skip an entry which has no resource. */ - if(!(*files)->resources) { - fprintf(config->global->errors, "Metalink: parsing (%s) WARNING " - "(missing or invalid resource)\n", - metalink_url); - continue; - } - if(config->url_get || - ((config->url_get = config->url_list) != NULL)) { - /* there's a node here, if it already is filled-in continue to - find an "empty" node */ - while(config->url_get && (config->url_get->flags & GETOUT_URL)) - config->url_get = config->url_get->next; - } - - /* now there might or might not be an available node to fill in! */ - - if(config->url_get) - /* existing node */ - url = config->url_get; - else - /* there was no free node, create one! */ - url = new_getout(config); - - if(url) { - struct metalinkfile *mlfile = new_metalinkfile(*files); - if(!mlfile) - break; - - if(!mlfile->checksum) { - warnings = TRUE; - fprintf(config->global->errors, - "Metalink: parsing (%s) WARNING (digest missing)\n", - metalink_url); - } - /* Set name as url */ - GetStr(&url->url, mlfile->filename); - - /* set flag metalink here */ - url->flags |= GETOUT_URL | GETOUT_METALINK; - - if(config->metalinkfile_list) { - config->metalinkfile_last->next = mlfile; - config->metalinkfile_last = mlfile; - } - else { - config->metalinkfile_list = config->metalinkfile_last = mlfile; - } - } - } - metalink_delete(metalink); - return (warnings) ? -2 : 0; -} - -size_t metalink_write_cb(void *buffer, size_t sz, size_t nmemb, - void *userdata) -{ - struct per_transfer *per = userdata; - struct OutStruct *outs = &per->outs; - struct OperationConfig *config = per->config; - int rv; - - /* - * Once that libcurl has called back tool_write_cb() the returned value - * is checked against the amount that was intended to be written, if - * it does not match then it fails with CURLE_WRITE_ERROR. So at this - * point returning a value different from sz*nmemb indicates failure. - */ - const size_t failure = (sz && nmemb) ? 0 : 1; - - if(!config) - return failure; - - rv = metalink_parse_update(outs->metalink_parser, buffer, sz * nmemb); - if(rv == 0) - return sz * nmemb; - else { - fprintf(config->global->errors, "Metalink: parsing FAILED\n"); - return failure; - } -} - -/* - * Returns nonzero if content_type includes mediatype. - */ -static int check_content_type(const char *content_type, const char *media_type) -{ - const char *ptr = content_type; - size_t media_type_len = strlen(media_type); - for(; *ptr && (*ptr == ' ' || *ptr == '\t'); ++ptr); - if(!*ptr) { - return 0; - } - return curl_strnequal(ptr, media_type, media_type_len) && - (*(ptr + media_type_len) == '\0' || *(ptr + media_type_len) == ' ' || - *(ptr + media_type_len) == '\t' || *(ptr + media_type_len) == ';'); -} - -int check_metalink_content_type(const char *content_type) -{ - return check_content_type(content_type, "application/metalink+xml"); -} - -int count_next_metalink_resource(struct metalinkfile *mlfile) -{ - int count = 0; - struct metalink_resource *res; - for(res = mlfile->resource; res; res = res->next, ++count); - return count; -} - -static void delete_metalink_checksum(struct metalink_checksum *chksum) -{ - if(!chksum) - return; - Curl_safefree(chksum->digest); - Curl_safefree(chksum); -} - -static void delete_metalink_resource(struct metalink_resource *res) -{ - if(!res) { - return; - } - Curl_safefree(res->url); - Curl_safefree(res); -} - -void delete_metalinkfile(struct metalinkfile *mlfile) -{ - struct metalink_resource *res; - if(!mlfile) { - return; - } - Curl_safefree(mlfile->filename); - delete_metalink_checksum(mlfile->checksum); - for(res = mlfile->resource; res;) { - struct metalink_resource *next; - next = res->next; - delete_metalink_resource(res); - res = next; - } - Curl_safefree(mlfile); -} - -void clean_metalink(struct OperationConfig *config) -{ - if(config) { - while(config->metalinkfile_list) { - struct metalinkfile *mlfile = config->metalinkfile_list; - config->metalinkfile_list = config->metalinkfile_list->next; - delete_metalinkfile(mlfile); - } - config->metalinkfile_last = 0; - } -} - -void metalink_cleanup(void) -{ -#ifdef HAVE_NSS_CONTEXT - if(nss_context) { - NSS_ShutdownContext(nss_context); - nss_context = NULL; - } -#endif -} - -#endif /* USE_METALINK */ diff --git a/src/tool_metalink.h b/src/tool_metalink.h deleted file mode 100644 index d03dbf737..000000000 --- a/src/tool_metalink.h +++ /dev/null @@ -1,165 +0,0 @@ -#ifndef HEADER_CURL_TOOL_METALINK_H -#define HEADER_CURL_TOOL_METALINK_H -/*************************************************************************** - * _ _ ____ _ - * Project ___| | | | _ \| | - * / __| | | | |_) | | - * | (__| |_| | _ <| |___ - * \___|\___/|_| \_\_____| - * - * Copyright (C) 1998 - 2020, Daniel Stenberg, , et al. - * - * This software is licensed as described in the file COPYING, which - * you should have received as part of this distribution. The terms - * are also available at https://curl.se/docs/copyright.html. - * - * You may opt to use, copy, modify, merge, publish, distribute and/or sell - * copies of the Software, and permit persons to whom the Software is - * furnished to do so, under the terms of the COPYING file. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ***************************************************************************/ -#include "tool_setup.h" -#include "tool_sdecls.h" - -struct GlobalConfig; -struct OperationConfig; - -/* returns 1 for success, 0 otherwise (we use OpenSSL *_Init fncs directly) */ -typedef int (*digest_init_func)(void *context); - -typedef void (*digest_update_func)(void *context, - const unsigned char *data, - unsigned int len); -typedef void (*digest_final_func)(unsigned char *result, void *context); - -struct digest_params { - digest_init_func digest_init; /* Initialize context procedure */ - digest_update_func digest_update; /* Update context with data */ - digest_final_func digest_final; /* Get final result procedure */ - unsigned int digest_ctxtsize; /* Context structure size */ - unsigned int digest_resultlen; /* Result length (bytes) */ -}; - -struct digest_context { - const struct digest_params *digest_hash; /* Hash function definition */ - void *digest_hashctx; /* Hash function context */ -}; - -struct metalink_digest_def { - const char *hash_name; - const struct digest_params *dparams; -}; - -struct metalink_digest_alias { - const char *alias_name; - const struct metalink_digest_def *digest_def; -}; - -struct metalink_checksum { - const struct metalink_digest_def *digest_def; - /* raw digest value, not ascii hex digest */ - unsigned char *digest; -}; - -struct metalink_resource { - struct metalink_resource *next; - char *url; -}; - -struct metalinkfile { - struct metalinkfile *next; - char *filename; - struct metalink_checksum *checksum; - struct metalink_resource *resource; -}; - -#ifdef USE_METALINK - -/* - * curl requires libmetalink 0.1.0 or newer - */ -#define CURL_REQ_LIBMETALINK_MAJOR 0 -#define CURL_REQ_LIBMETALINK_MINOR 1 -#define CURL_REQ_LIBMETALINK_PATCH 0 - -#define CURL_REQ_LIBMETALINK_VERS ((CURL_REQ_LIBMETALINK_MAJOR * 10000) + \ - (CURL_REQ_LIBMETALINK_MINOR * 100) + \ - CURL_REQ_LIBMETALINK_PATCH) - -extern const struct digest_params MD5_DIGEST_PARAMS[1]; -extern const struct digest_params SHA1_DIGEST_PARAMS[1]; -extern const struct digest_params SHA256_DIGEST_PARAMS[1]; - -#include - -/* - * Counts the resource in the metalinkfile. - */ -int count_next_metalink_resource(struct metalinkfile *mlfile); - -void delete_metalinkfile(struct metalinkfile *mlfile); -void clean_metalink(struct OperationConfig *config); - -/* - * Performs final parse operation and extracts information from - * Metalink and creates metalinkfile structs. - * - * This function returns 0 if it succeeds without warnings, or one of - * the following negative error codes: - * - * -1: Parsing failed; or no file is found - * -2: Parsing succeeded with some warnings. - */ -int parse_metalink(struct OperationConfig *config, struct OutStruct *outs, - const char *metalink_url); - -/* - * Callback function for CURLOPT_WRITEFUNCTION - */ -size_t metalink_write_cb(void *buffer, size_t sz, size_t nmemb, - void *userdata); - -/* - * Returns nonzero if content_type includes "application/metalink+xml" - * media-type. The check is done in case-insensitive manner. - */ -int check_metalink_content_type(const char *content_type); - -/* - * Check checksum of file denoted by filename. - * - * This function returns 1 if the checksum matches or one of the - * following integers: - * - * 0: - * Checksum didn't match. - * -1: - * Could not open file; or could not read data from file. - * -2: - * No checksum in Metalink supported, hash algorithm not available, or - * Metalink does not contain checksum. - */ -int metalink_check_hash(struct GlobalConfig *config, - struct metalinkfile *mlfile, - const char *filename); - -/* - * Release resources allocated at global scope. - */ -void metalink_cleanup(void); - -#else /* USE_METALINK */ - -#define count_next_metalink_resource(x) 0 -#define delete_metalinkfile(x) (void)x -#define clean_metalink(x) (void)x - -/* metalink_cleanup() takes no arguments */ -#define metalink_cleanup() Curl_nop_stmt - -#endif /* USE_METALINK */ - -#endif /* HEADER_CURL_TOOL_METALINK_H */ diff --git a/src/tool_operate.c b/src/tool_operate.c index cd6131692..8fb0ef2e7 100644 --- a/src/tool_operate.c +++ b/src/tool_operate.c @@ -66,7 +66,6 @@ #include "tool_homedir.h" #include "tool_libinfo.h" #include "tool_main.h" -#include "tool_metalink.h" #include "tool_msgs.h" #include "tool_operate.h" #include "tool_operhlp.h" @@ -413,35 +412,6 @@ static CURLcode post_per_transfer(struct GlobalConfig *global, } } -#ifdef USE_METALINK - if(per->metalink && !per->metalink_next_res) - fprintf(global->errors, "Metalink: fetching (%s) from (%s) OK\n", - per->mlfile->filename, per->this_url); - - if(!per->metalink && config->use_metalink && result == CURLE_OK) { - int rv = parse_metalink(config, outs, per->this_url); - if(!rv) { - fprintf(config->global->errors, "Metalink: parsing (%s) OK\n", - per->this_url); - } - else if(rv == -1) - fprintf(config->global->errors, "Metalink: parsing (%s) FAILED\n", - per->this_url); - } - else if(per->metalink && result == CURLE_OK && !per->metalink_next_res) { - int rv; - (void)fflush(outs->stream); - rv = metalink_check_hash(global, per->mlfile, outs->filename); - if(!rv) - per->metalink_next_res = 1; - } -#endif /* USE_METALINK */ - -#ifdef USE_METALINK - if(outs->metalink_parser) - metalink_parser_context_delete(outs->metalink_parser); -#endif /* USE_METALINK */ - /* if retry-max-time is non-zero, make sure we haven't exceeded the time */ if(per->retry_numretries && @@ -600,36 +570,6 @@ static CURLcode post_per_transfer(struct GlobalConfig *global, return CURLE_OK; } } /* if retry_numretries */ - else if(per->metalink) { - /* Metalink: Decide to try the next resource or not. Try the next resource - if download was not successful. */ - long response = 0; - if(CURLE_OK == result) { - /* TODO We want to try next resource when download was - not successful. How to know that? */ - char *effective_url = NULL; - curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &effective_url); - if(effective_url && - curl_strnequal(effective_url, "http", 4)) { - /* This was HTTP(S) */ - curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response); - if(response != 200 && response != 206) { - per->metalink_next_res = 1; - fprintf(global->errors, - "Metalink: fetching (%s) from (%s) FAILED " - "(HTTP status code %ld)\n", - per->mlfile->filename, per->this_url, response); - } - } - } - else { - per->metalink_next_res = 1; - fprintf(global->errors, - "Metalink: fetching (%s) from (%s) FAILED (%s)\n", - per->mlfile->filename, per->this_url, - curl_easy_strerror(result)); - } - } if((global->progressmode == CURL_PROGRESS_BAR) && per->progressbar.calls) @@ -715,7 +655,6 @@ static CURLcode single_transfer(struct GlobalConfig *global, { CURLcode result = CURLE_OK; struct getout *urlnode; - struct metalinkfile *mlfile_last = NULL; bool orig_noprogress = global->noprogress; bool orig_isatty = global->isatty; struct State *state = &config->state; @@ -757,24 +696,7 @@ static CURLcode single_transfer(struct GlobalConfig *global, while(config->state.urlnode) { char *infiles; /* might be a glob pattern */ struct URLGlob *inglob = state->inglob; - bool metalink = FALSE; /* metalink download? */ - struct metalinkfile *mlfile; - struct metalink_resource *mlres; - urlnode = config->state.urlnode; - if(urlnode->flags & GETOUT_METALINK) { - metalink = 1; - if(!mlfile_last) { - mlfile_last = config->metalinkfile_list; - } - mlfile = mlfile_last; - mlfile_last = mlfile_last->next; - mlres = mlfile->resource; - } - else { - mlfile = NULL; - mlres = NULL; - } /* urlnode->url is the full URL (it might be NULL) */ @@ -836,12 +758,7 @@ static CURLcode single_transfer(struct GlobalConfig *global, } if(!state->urlnum) { - if(metalink) { - /* For Metalink download, we don't use glob. Instead we use - the number of resources as urlnum. */ - urlnum = count_next_metalink_resource(mlfile); - } - else if(!config->globoff) { + if(!config->globoff) { /* Unless explicitly shut off, we expand '{...}' and '[...]' expressions and return total number of URLs in pattern set */ result = glob_url(&state->urls, urlnode->url, &state->urlnum, @@ -997,51 +914,33 @@ static CURLcode single_transfer(struct GlobalConfig *global, } } - if(metalink) { - /* For Metalink download, use name in Metalink file as - filename. */ - per->outfile = strdup(mlfile->filename); - if(!per->outfile) { - result = CURLE_OUT_OF_MEMORY; + if(state->urls) { + result = glob_next_url(&per->this_url, state->urls); + if(result) break; - } - per->this_url = strdup(mlres->url); + } + else if(!state->li) { + per->this_url = strdup(urlnode->url); if(!per->this_url) { result = CURLE_OUT_OF_MEMORY; break; } - per->mlfile = mlfile; } - else { - if(state->urls) { - result = glob_next_url(&per->this_url, state->urls); - if(result) - break; - } - else if(!state->li) { - per->this_url = strdup(urlnode->url); - if(!per->this_url) { - result = CURLE_OUT_OF_MEMORY; - break; - } - } - else - per->this_url = NULL; - if(!per->this_url) - break; + else + per->this_url = NULL; + if(!per->this_url) + break; - if(state->outfiles) { - per->outfile = strdup(state->outfiles); - if(!per->outfile) { - result = CURLE_OUT_OF_MEMORY; - break; - } + if(state->outfiles) { + per->outfile = strdup(state->outfiles); + if(!per->outfile) { + result = CURLE_OUT_OF_MEMORY; + break; } } if(((urlnode->flags&GETOUT_USEREMOTE) || - (per->outfile && strcmp("-", per->outfile))) && - (metalink || !config->use_metalink)) { + (per->outfile && strcmp("-", per->outfile)))) { /* * We have specified a file name to store the result in, or we have @@ -1083,7 +982,7 @@ static CURLcode single_transfer(struct GlobalConfig *global, /* Create the directory hierarchy, if not pre-existent to a multiple file output call */ - if(config->create_dirs || metalink) { + if(config->create_dirs) { result = create_dir_hierarchy(per->outfile, global->errors); /* create_dir_hierarchy shows error upon CURLE_WRITE_ERROR */ if(result) @@ -1275,15 +1174,8 @@ static CURLcode single_transfer(struct GlobalConfig *global, my_setopt(curl, CURLOPT_WRITEDATA, per); my_setopt(curl, CURLOPT_INTERLEAVEDATA, per); - if(metalink || !config->use_metalink) - /* what call to write */ - my_setopt(curl, CURLOPT_WRITEFUNCTION, tool_write_cb); -#ifdef USE_METALINK - else - /* Set Metalink specific write callback function to parse - XML data progressively. */ - my_setopt(curl, CURLOPT_WRITEFUNCTION, metalink_write_cb); -#endif /* USE_METALINK */ + /* what call to write */ + my_setopt(curl, CURLOPT_WRITEFUNCTION, tool_write_cb); /* for uploads */ input->config = config; @@ -2136,23 +2028,6 @@ static CURLcode single_transfer(struct GlobalConfig *global, if(config->hsts) my_setopt_str(curl, CURLOPT_HSTS, config->hsts); -#ifdef USE_METALINK - if(!metalink && config->use_metalink) { - outs->metalink_parser = metalink_parser_context_new(); - if(!outs->metalink_parser) { - result = CURLE_OUT_OF_MEMORY; - break; - } - fprintf(global->errors, - "Metalink: parsing (%s) metalink/XML...\n", per->this_url); - } - else if(metalink) - fprintf(global->errors, - "Metalink: fetching (%s) from (%s)...\n", - mlfile->filename, per->this_url); -#endif /* USE_METALINK */ - - per->metalink = metalink; /* initialize retry vars for loop below */ per->retry_sleep_default = (config->retry_delay) ? config->retry_delay*1000L : RETRY_SLEEP_DEFAULT; /* ms */ @@ -2410,9 +2285,6 @@ static CURLcode serial_transfers(struct GlobalConfig *global, bailout = TRUE; } - /* Release metalink related resources here */ - delete_metalinkfile(per->mlfile); - per = del_per_transfer(per); if(bailout) @@ -2581,8 +2453,6 @@ static CURLcode run_all_transfers(struct GlobalConfig *global, /* Free list of given URLs */ clean_getout(per->config); - /* Release metalink related resources here */ - clean_metalink(per->config); per = del_per_transfer(per); } diff --git a/src/tool_operate.h b/src/tool_operate.h index 2739301ce..282b7858f 100644 --- a/src/tool_operate.h +++ b/src/tool_operate.h @@ -7,7 +7,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2020, Daniel Stenberg, , et al. + * Copyright (C) 1998 - 2021, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -36,10 +36,6 @@ struct per_transfer { long retry_sleep_default; long retry_sleep; struct timeval retrystart; - bool metalink; /* nonzero for metalink download. */ - bool metalink_next_res; - struct metalinkfile *mlfile; - struct metalink_resource *mlres; char *this_url; unsigned int urlnum; /* the index of the given URL */ char *outfile; diff --git a/src/tool_operhlp.c b/src/tool_operhlp.c index ce5fbda05..0a209bf65 100644 --- a/src/tool_operhlp.c +++ b/src/tool_operhlp.c @@ -5,7 +5,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2020, Daniel Stenberg, , et al. + * Copyright (C) 1998 - 2021, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -31,7 +31,6 @@ #include "tool_convert.h" #include "tool_doswin.h" #include "tool_operhlp.h" -#include "tool_metalink.h" #include "memdebug.h" /* keep this as LAST include */ diff --git a/src/tool_sdecls.h b/src/tool_sdecls.h index 39e63093a..543a953fd 100644 --- a/src/tool_sdecls.h +++ b/src/tool_sdecls.h @@ -7,7 +7,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2020, Daniel Stenberg, , et al. + * Copyright (C) 1998 - 2021, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -22,9 +22,6 @@ * ***************************************************************************/ #include "tool_setup.h" -#ifdef USE_METALINK -# include -#endif /* USE_METALINK */ /* * OutStruct variables keep track of information relative to curl's @@ -58,8 +55,6 @@ * 'init' member holds original file size or offset at which truncation is * taking place. Always zero unless appending to a non-empty regular file. * - * 'metalink_parser' member is a pointer to Metalink XML parser - * context. */ struct OutStruct { @@ -71,9 +66,6 @@ struct OutStruct { FILE *stream; curl_off_t bytes; curl_off_t init; -#ifdef USE_METALINK - metalink_parser_context_t *metalink_parser; -#endif /* USE_METALINK */ }; @@ -113,7 +105,6 @@ struct getout { #define GETOUT_USEREMOTE (1<<2) /* use remote file name locally */ #define GETOUT_UPLOAD (1<<3) /* if set, -T has been used */ #define GETOUT_NOUPLOAD (1<<4) /* if set, -T "" has been used */ -#define GETOUT_METALINK (1<<5) /* set when Metalink download */ /* * 'trace' enumeration represents curl's output look'n feel possibilities. diff --git a/tests/FILEFORMAT.md b/tests/FILEFORMAT.md index b99fd26a9..7a9c48204 100644 --- a/tests/FILEFORMAT.md +++ b/tests/FILEFORMAT.md @@ -388,7 +388,6 @@ Features testable here are: - `ld_preload` - `libz` - `manual` -- `Metalink` - `Mime` - `netrc` - `NSS` diff --git a/tests/data/Makefile.inc b/tests/data/Makefile.inc index a371031a2..6acd90c6b 100644 --- a/tests/data/Makefile.inc +++ b/tests/data/Makefile.inc @@ -215,9 +215,9 @@ test1916 test1917 test1918 \ \ test1933 test1934 test1935 test1936 \ \ -test2000 test2001 test2002 test2003 test2004 test2005 test2006 test2007 \ -test2008 test2009 test2010 test2011 test2012 test2013 test2014 test2015 \ -test2016 test2017 test2018 test2019 test2020 test2021 test2022 test2023 \ +test2000 test2001 test2002 test2003 test2004 \ +\ + test2023 \ test2024 test2025 test2026 test2027 test2028 test2029 test2030 test2031 \ test2032 test2034 test2035 test2036 test2037 test2038 test2039 \ test2040 test2041 test2042 test2043 test2044 test2045 test2046 test2047 \ diff --git a/tests/data/test2005 b/tests/data/test2005 deleted file mode 100644 index bbc321b52..000000000 --- a/tests/data/test2005 +++ /dev/null @@ -1,91 +0,0 @@ - - - -Metalink -HTTP -HTTP GET - - - -# -# Server-side - - -HTTP/1.1 200 OK -Date: Wed, 20 Jun 2012 14:49:00 GMT -Server: test-server/fake -Content-Length: 37 -Connection: close -Content-Type: text/html -Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange -Funny-head: yesyes - -Data delivered from an HTTP resource - - - -# -# Client-side - - -http - - -file -Metalink - - -Metalink local XML file, HTTP resource - - ---metalink file://%PWD/log/test%TESTNUMBER.metalink - -# local metalink file written before test command runs - - - - - - - a430d26389c69b7a245a9ad692cf20b4dc026fb7c2ff8a2c164c49a77130d6d9 - - - http://%HOSTIP:%HTTPPORT/%TESTNUMBER - - - - - - -perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER log/name%TESTNUMBER - - - -# -# Verify data after the test has been "shot" - - -GET /%TESTNUMBER HTTP/1.1 -Host: %HOSTIP:%HTTPPORT -User-Agent: curl/%VERSION -Accept: */* - - - -Data delivered from an HTTP resource - - - - -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) metalink/XML... -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) OK -Metalink: fetching (log/download%TESTNUMBER) from (http://%HOSTIP:%HTTPPORT/%TESTNUMBER)... -Metalink: fetching (log/download%TESTNUMBER) from (http://%HOSTIP:%HTTPPORT/%TESTNUMBER) OK -Metalink: validating (log/download%TESTNUMBER)... -Metalink: validating (log/download%TESTNUMBER) [sha-256] OK - - -$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) - - - diff --git a/tests/data/test2006 b/tests/data/test2006 deleted file mode 100644 index d4091b48b..000000000 --- a/tests/data/test2006 +++ /dev/null @@ -1,122 +0,0 @@ - - - -Metalink -HTTP -HTTP GET -FILE - - - -# -# Server-side - - -HTTP/1.1 200 OK -Date: Thu, 21 Jun 2012 14:49:01 GMT -Server: test-server/fake -Content-Length: 42 -Connection: close -Content-Type: text/html -Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange -Funny-head: yesyes - -Some data delivered from an HTTP resource - - - -# -# Client-side - -# This relies on the debug feature to allow us to set directory to store the -# -O output in, using the CURL_TESTDIR variable. This test might use it upon -# failure only, successful execution won't actually use it. - -debug -file -Metalink - - -http - - -Metalink local XML file, HTTP resource, using -O -D file - - -CURL_TESTDIR=%PWD/log - - ---metalink file://%PWD/log/test%TESTNUMBER.metalink -O -D log/heads%TESTNUMBER - -# local metalink file written before test command runs - - - - - - - we-only-check-the-strongest-hash-provided - 319cb6be756734b7ff689628ca3265580cdae6a0e38f42d4ac612ff4fba143b0 - - - http://%HOSTIP:%HTTPPORT/%TESTNUMBER - - - - - - -perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER log/name%TESTNUMBER - - - -# -# Verify data after the test has been "shot" - - -GET /%TESTNUMBER HTTP/1.1 -Host: %HOSTIP:%HTTPPORT -User-Agent: curl/%VERSION -Accept: */* - - - -Some data delivered from an HTTP resource - - -# The Content-Length replace here is to handle with 4/5 digit port number in -# the content - -s/Last-Modified:.*// -s/Content-Length: 49[67]/Content-Length: yeps/ - - -Content-Length: yeps -Accept-ranges: bytes - - -HTTP/1.1 200 OK -Date: Thu, 21 Jun 2012 14:49:01 GMT -Server: test-server/fake -Content-Length: 42 -Connection: close -Content-Type: text/html -Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange -Funny-head: yesyes - - - - - -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) metalink/XML... -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) OK -Metalink: fetching (log/download%TESTNUMBER) from (http://%HOSTIP:%HTTPPORT/%TESTNUMBER)... -Metalink: fetching (log/download%TESTNUMBER) from (http://%HOSTIP:%HTTPPORT/%TESTNUMBER) OK -Metalink: validating (log/download%TESTNUMBER)... -Metalink: validating (log/download%TESTNUMBER) [sha-256] OK - - -$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) - - - diff --git a/tests/data/test2007 b/tests/data/test2007 deleted file mode 100644 index 679de26e1..000000000 --- a/tests/data/test2007 +++ /dev/null @@ -1,122 +0,0 @@ - - - -Metalink -HTTP -HTTP GET --J -FILE - - - -# -# Server-side - - -HTTP/1.1 200 OK -Date: Thu, 21 Jun 2012 14:50:02 GMT -Server: test-server/fake -Content-Length: 42 -Connection: close -Content-Type: text/html -Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange -Funny-head: yesyes - -Something delivered from an HTTP resource - - - -# -# Client-side - -# This relies on the debug feature to allow us to set directory to store the -# -O and -J output in, using the CURL_TESTDIR variable. This test might use -# it upon failure only, successful execution won't actually use it. - -debug -file -Metalink - - -http - - -Metalink local XML file, HTTP resource, using -O -J -D file - - -CURL_TESTDIR=%PWD/log - - ---metalink file://%PWD/log/test%TESTNUMBER.metalink -J -O -D log/heads%TESTNUMBER - -# local metalink file written before test command runs - - - - - - - we-only-check-the-strongest-hash-provided - 52899e30f80e3490632d505653204e1fb5b02bda141048704ce9a0ed00b8a3f5 - - - http://%HOSTIP:%HTTPPORT/%TESTNUMBER - - - - - - -perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER log/name%TESTNUMBER - - - -# -# Verify data after the test has been "shot" - - -GET /%TESTNUMBER HTTP/1.1 -Host: %HOSTIP:%HTTPPORT -User-Agent: curl/%VERSION -Accept: */* - - - -Something delivered from an HTTP resource - -# The Content-Length replace here is to handle with 4/5 digit port number in -# the content - -s/Last-Modified:.*// -s/Content-Length: 49[67]/Content-Length: yeps/ - - -Content-Length: yeps -Accept-ranges: bytes - - -HTTP/1.1 200 OK -Date: Thu, 21 Jun 2012 14:50:02 GMT -Server: test-server/fake -Content-Length: 42 -Connection: close -Content-Type: text/html -Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange -Funny-head: yesyes - - - - - -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) metalink/XML... -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) OK -Metalink: fetching (log/download%TESTNUMBER) from (http://%HOSTIP:%HTTPPORT/%TESTNUMBER)... -Metalink: fetching (log/download%TESTNUMBER) from (http://%HOSTIP:%HTTPPORT/%TESTNUMBER) OK -Metalink: validating (log/download%TESTNUMBER)... -Metalink: validating (log/download%TESTNUMBER) [sha-256] OK - - -$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) - - - diff --git a/tests/data/test2008 b/tests/data/test2008 deleted file mode 100644 index 75ed402c7..000000000 --- a/tests/data/test2008 +++ /dev/null @@ -1,114 +0,0 @@ - - - -Metalink -HTTP -HTTP GET -FILE - - - -# -# Server-side - - -HTTP/1.1 200 OK -Date: Thu, 21 Jun 2012 15:23:48 GMT -Server: test-server/fake -Content-Length: 43 -Connection: close -Content-Type: text/html -Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange -Funny-head: yesyes - -Some stuff delivered from an HTTP resource - - - -# -# Client-side - - -file -Metalink - - -http - - -Metalink local XML file, HTTP resource, using -o fname -D file - - ---metalink file://%PWD/log/test%TESTNUMBER.metalink -o log/outfile%TESTNUMBER -D log/heads%TESTNUMBER - -# local metalink file written before test command runs - - - - - - - we-only-check-the-strongest-hash-provided - 711b1b566b536c5baae9b36f2f5c1830a7c8ff126d1afa2febc5b59f8d0aab54 - - - http://%HOSTIP:%HTTPPORT/%TESTNUMBER - - - - - - -perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER log/name%TESTNUMBER log/outfile%TESTNUMBER - - - -# -# Verify data after the test has been "shot" - - -GET /%TESTNUMBER HTTP/1.1 -Host: %HOSTIP:%HTTPPORT -User-Agent: curl/%VERSION -Accept: */* - - - -Some stuff delivered from an HTTP resource - -# The Content-Length replace here is to handle with 4/5 digit port number in -# the content - -s/Last-Modified:.*// -s/Content-Length: 49[67]/Content-Length: yeps/ - - -Content-Length: yeps -Accept-ranges: bytes - - -HTTP/1.1 200 OK -Date: Thu, 21 Jun 2012 15:23:48 GMT -Server: test-server/fake -Content-Length: 43 -Connection: close -Content-Type: text/html -Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange -Funny-head: yesyes - - - - - -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) metalink/XML... -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) OK -Metalink: fetching (log/download%TESTNUMBER) from (http://%HOSTIP:%HTTPPORT/%TESTNUMBER)... -Metalink: fetching (log/download%TESTNUMBER) from (http://%HOSTIP:%HTTPPORT/%TESTNUMBER) OK -Metalink: validating (log/download%TESTNUMBER)... -Metalink: validating (log/download%TESTNUMBER) [sha-256] OK - - -$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) - - - diff --git a/tests/data/test2009 b/tests/data/test2009 deleted file mode 100644 index 443559a97..000000000 --- a/tests/data/test2009 +++ /dev/null @@ -1,115 +0,0 @@ - - - -Metalink -HTTP -HTTP GET --J -FILE - - - -# -# Server-side - - -HTTP/1.1 200 OK -Date: Thu, 21 Jun 2012 16:27:17 GMT -Server: test-server/fake -Content-Length: 46 -Connection: close -Content-Type: text/html -Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange -Funny-head: yesyes - -Some contents delivered from an HTTP resource - - - -# -# Client-side - - -file -Metalink - - -http - - -Metalink local XML file, HTTP resource, using -o fname -J -D file - - ---metalink file://%PWD/log/test%TESTNUMBER.metalink -J -o log/outfile%TESTNUMBER -D log/heads%TESTNUMBER - -# local metalink file written before test command runs - - - - - - - we-only-check-the-strongest-hash-provided - e4c5b83384ba7d5f8e201d61747a14f29baacd7dfadce0fbd56661db4bba72b2 - - - http://%HOSTIP:%HTTPPORT/%TESTNUMBER - - - - - - -perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER log/name%TESTNUMBER log/outfile%TESTNUMBER - - - -# -# Verify data after the test has been "shot" - - -GET /%TESTNUMBER HTTP/1.1 -Host: %HOSTIP:%HTTPPORT -User-Agent: curl/%VERSION -Accept: */* - - - -Some contents delivered from an HTTP resource - -# The Content-Length replace here is to handle with 4/5 digit port number in -# the content - -s/Last-Modified:.*// -s/Content-Length: 49[67]/Content-Length: yeps/ - - -Content-Length: yeps -Accept-ranges: bytes - - -HTTP/1.1 200 OK -Date: Thu, 21 Jun 2012 16:27:17 GMT -Server: test-server/fake -Content-Length: 46 -Connection: close -Content-Type: text/html -Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange -Funny-head: yesyes - - - - - -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) metalink/XML... -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) OK -Metalink: fetching (log/download%TESTNUMBER) from (http://%HOSTIP:%HTTPPORT/%TESTNUMBER)... -Metalink: fetching (log/download%TESTNUMBER) from (http://%HOSTIP:%HTTPPORT/%TESTNUMBER) OK -Metalink: validating (log/download%TESTNUMBER)... -Metalink: validating (log/download%TESTNUMBER) [sha-256] OK - - -$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) - - - diff --git a/tests/data/test2010 b/tests/data/test2010 deleted file mode 100644 index 11affe9a1..000000000 --- a/tests/data/test2010 +++ /dev/null @@ -1,114 +0,0 @@ - - - -Metalink -HTTP -HTTP GET -FILE - - - -# -# Server-side - - -HTTP/1.1 200 OK -Date: Thu, 21 Jun 2012 17:37:27 GMT -Server: test-server/fake -Content-Length: 41 -Connection: close -Content-Type: text/html -Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange -Funny-head: yesyes - -Contents delivered from an HTTP resource - - - -# -# Client-side - - -file -Metalink - - -http - - -Metalink local XML file, HTTP resource, using -o fname -D file - - ---metalink file://%PWD/log/test%TESTNUMBER.metalink -o log/outfile%TESTNUMBER -D log/heads%TESTNUMBER - -# local metalink file written before test command runs - - - - - - - we-only-check-the-strongest-hash-provided - 19dcb4e2a99b9cd02c30b1ed6c55869b7ef8cda9f985648909c48a6dbb54356c - - - http://%HOSTIP:%HTTPPORT/%TESTNUMBER - - - - - - -perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER log/name%TESTNUMBER log/outfile%TESTNUMBER - - - -# -# Verify data after the test has been "shot" - - -GET /%TESTNUMBER HTTP/1.1 -Host: %HOSTIP:%HTTPPORT -User-Agent: curl/%VERSION -Accept: */* - - - -Contents delivered from an HTTP resource - -# The Content-Length replace here is to handle with 4/5 digit port number in -# the content - -s/Last-Modified:.*// -s/Content-Length: 49[67]/Content-Length: yeps/ - - -Content-Length: yeps -Accept-ranges: bytes - - -HTTP/1.1 200 OK -Date: Thu, 21 Jun 2012 17:37:27 GMT -Server: test-server/fake -Content-Length: 41 -Connection: close -Content-Type: text/html -Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange -Funny-head: yesyes - - - - - -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) metalink/XML... -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) OK -Metalink: fetching (log/download%TESTNUMBER) from (http://%HOSTIP:%HTTPPORT/%TESTNUMBER)... -Metalink: fetching (log/download%TESTNUMBER) from (http://%HOSTIP:%HTTPPORT/%TESTNUMBER) OK -Metalink: validating (log/download%TESTNUMBER)... -Metalink: validating (log/download%TESTNUMBER) [sha-256] OK - - -$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) - - - diff --git a/tests/data/test2011 b/tests/data/test2011 deleted file mode 100644 index 781697811..000000000 --- a/tests/data/test2011 +++ /dev/null @@ -1,91 +0,0 @@ - - - -Metalink -HTTP -HTTP GET - - - -# -# Server-side - - -HTTP/1.1 200 OK -Date: Wed, 20 Jun 2012 14:49:00 GMT -Server: test-server/fake -Content-Length: 37 -Connection: close -Content-Type: text/html -Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange -Funny-head: yesyes - -Data delivered from an HTTP resource - - - -# -# Client-side - - -http - - -file -Metalink - - -Metalink local XML file, HTTP resource, hash mismatch - - ---metalink file://%PWD/log/test%TESTNUMBER.metalink - -# local metalink file written before test command runs - - - - - - - badbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadb - - - http://%HOSTIP:%HTTPPORT/%TESTNUMBER - - - - - - -perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER log/name%TESTNUMBER - - - -# -# Verify data after the test has been "shot" - - -GET /%TESTNUMBER HTTP/1.1 -Host: %HOSTIP:%HTTPPORT -User-Agent: curl/%VERSION -Accept: */* - - - -Data delivered from an HTTP resource - - - - -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) metalink/XML... -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) OK -Metalink: fetching (log/download%TESTNUMBER) from (http://%HOSTIP:%HTTPPORT/%TESTNUMBER)... -Metalink: fetching (log/download%TESTNUMBER) from (http://%HOSTIP:%HTTPPORT/%TESTNUMBER) OK -Metalink: validating (log/download%TESTNUMBER)... -Metalink: validating (log/download%TESTNUMBER) [sha-256] FAILED (digest mismatch) - - -$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) - - - diff --git a/tests/data/test2012 b/tests/data/test2012 deleted file mode 100644 index b3cfd6146..000000000 --- a/tests/data/test2012 +++ /dev/null @@ -1,90 +0,0 @@ - - - -Metalink -HTTP -HTTP GET - - - -# -# Server-side - - -HTTP/1.1 200 OK -Date: Wed, 20 Jun %TESTNUMBER 14:49:00 GMT -Server: test-server/fake -Content-Length: 46 -Connection: close -Content-Type: text/html -Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange -Funny-head: yesyes - -Some contents delivered from an HTTP resource - - - -# -# Client-side - - -http - - -file -Metalink - - -Metalink local XML file, HTTP resource, without hash - - ---metalink file://%PWD/log/test%TESTNUMBER.metalink - -# local metalink file written before test command runs - - - - - - - - - http://%HOSTIP:%HTTPPORT/%TESTNUMBER - - - - - - -perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER log/name%TESTNUMBER - - - -# -# Verify data after the test has been "shot" - - -GET /%TESTNUMBER HTTP/1.1 -Host: %HOSTIP:%HTTPPORT -User-Agent: curl/%VERSION -Accept: */* - - - -Some contents delivered from an HTTP resource - - - - -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) metalink/XML... -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) WARNING (digest missing) -Metalink: fetching (log/download%TESTNUMBER) from (http://%HOSTIP:%HTTPPORT/%TESTNUMBER)... -Metalink: fetching (log/download%TESTNUMBER) from (http://%HOSTIP:%HTTPPORT/%TESTNUMBER) OK -Metalink: validating (log/download%TESTNUMBER)... -Metalink: validating (log/download%TESTNUMBER) FAILED (digest missing) - - -$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) - - - diff --git a/tests/data/test2013 b/tests/data/test2013 deleted file mode 100644 index 016a9a4b2..000000000 --- a/tests/data/test2013 +++ /dev/null @@ -1,78 +0,0 @@ - - - -Metalink -HTTP -HTTP GET - - - -# -# Server-side - - -HTTP/1.1 200 OK -Date: Wed, 20 Jun 2012 14:49:00 GMT -Server: test-server/fake -Content-Length: 56 -Connection: close -Content-Type: text/html -Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange -Funny-head: yesyes - -Data that should not be delivered from an HTTP resource - - - -# -# Client-side - - -http - - -file -Metalink - - -Metalink local XML file, attempt Unix absolute path - - ---metalink file://%PWD/log/test%TESTNUMBER.metalink - -# local metalink file written before test command runs - - - - - - - c7d03debe90ca29492203ea921d76941fa98640cf3b744f2a16c9b58465eab82 - - - http://%HOSTIP:%HTTPPORT/%TESTNUMBER - - - - - - -perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER log/name%TESTNUMBER /tmp/download%TESTNUMBER - - - -# -# Verify data after the test has been "shot" - - - - -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) metalink/XML... -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) WARNING (missing or invalid file name) -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) FAILED - - -$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) - - - diff --git a/tests/data/test2014 b/tests/data/test2014 deleted file mode 100644 index 895c9c9c8..000000000 --- a/tests/data/test2014 +++ /dev/null @@ -1,78 +0,0 @@ - - - -Metalink -HTTP -HTTP GET - - - -# -# Server-side - - -HTTP/1.1 200 OK -Date: Wed, 20 Jun 2012 14:49:00 GMT -Server: test-server/fake -Content-Length: 56 -Connection: close -Content-Type: text/html -Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange -Funny-head: yesyes - -Data that should not be delivered from an HTTP resource - - - -# -# Client-side - - -http - - -file -Metalink - - -Metalink local XML file, attempt Unix path relative to current - - ---metalink file://%PWD/log/test%TESTNUMBER.metalink - -# local metalink file written before test command runs - - - - - - - c7d03debe90ca29492203ea921d76941fa98640cf3b744f2a16c9b58465eab82 - - - http://%HOSTIP:%HTTPPORT/%TESTNUMBER - - - - - - -perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER log/name%TESTNUMBER log/download%TESTNUMBER - - - -# -# Verify data after the test has been "shot" - - - - -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) metalink/XML... -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) WARNING (missing or invalid file name) -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) FAILED - - -$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) - - - diff --git a/tests/data/test2015 b/tests/data/test2015 deleted file mode 100644 index a35564703..000000000 --- a/tests/data/test2015 +++ /dev/null @@ -1,78 +0,0 @@ - - - -Metalink -HTTP -HTTP GET - - - -# -# Server-side - - -HTTP/1.1 200 OK -Date: Wed, 20 Jun 2012 14:49:00 GMT -Server: test-server/fake -Content-Length: 56 -Connection: close -Content-Type: text/html -Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange -Funny-head: yesyes - -Data that should not be delivered from an HTTP resource - - - -# -# Client-side - - -http - - -file -Metalink - - -Metalink local XML file, attempt Unix path relative to upper - - ---metalink file://%PWD/log/test%TESTNUMBER.metalink - -# local metalink file written before test command runs - - - - - - - c7d03debe90ca29492203ea921d76941fa98640cf3b744f2a16c9b58465eab82 - - - http://%HOSTIP:%HTTPPORT/%TESTNUMBER - - - - - - -perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER log/name%TESTNUMBER log/download%TESTNUMBER - - - -# -# Verify data after the test has been "shot" - - - - -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) metalink/XML... -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) WARNING (missing or invalid file name) -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) FAILED - - -$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) - - - diff --git a/tests/data/test2016 b/tests/data/test2016 deleted file mode 100644 index 51b687f9a..000000000 --- a/tests/data/test2016 +++ /dev/null @@ -1,78 +0,0 @@ - - - -Metalink -HTTP -HTTP GET - - - -# -# Server-side - - -HTTP/1.1 200 OK -Date: Wed, 20 Jun 2012 14:49:00 GMT -Server: test-server/fake -Content-Length: 56 -Connection: close -Content-Type: text/html -Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange -Funny-head: yesyes - -Data that should not be delivered from an HTTP resource - - - -# -# Client-side - - -http - - -file -Metalink - - -Metalink local XML file, attempt Unix path traversal - - ---metalink file://%PWD/log/test%TESTNUMBER.metalink - -# local metalink file written before test command runs - - - - - - - c7d03debe90ca29492203ea921d76941fa98640cf3b744f2a16c9b58465eab82 - - - http://%HOSTIP:%HTTPPORT/%TESTNUMBER - - - - - - -perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER log/name%TESTNUMBER log/download%TESTNUMBER - - - -# -# Verify data after the test has been "shot" - - - - -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) metalink/XML... -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) WARNING (missing or invalid file name) -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) FAILED - - -$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) - - - diff --git a/tests/data/test2017 b/tests/data/test2017 deleted file mode 100644 index 4937c2802..000000000 --- a/tests/data/test2017 +++ /dev/null @@ -1,78 +0,0 @@ - - - -Metalink -HTTP -HTTP GET - - - -# -# Server-side - - -HTTP/1.1 200 OK -Date: Wed, 20 Jun 2012 14:49:00 GMT -Server: test-server/fake -Content-Length: 56 -Connection: close -Content-Type: text/html -Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange -Funny-head: yesyes - -Data that should not be delivered from an HTTP resource - - - -# -# Client-side - - -http - - -file -Metalink - - -Metalink local XML file, attempt Unix home path traversal - - ---metalink file://%PWD/log/test%TESTNUMBER.metalink - -# local metalink file written before test command runs - - - - - - - c7d03debe90ca29492203ea921d76941fa98640cf3b744f2a16c9b58465eab82 - - - http://%HOSTIP:%HTTPPORT/%TESTNUMBER - - - - - - -perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER log/name%TESTNUMBER - - - -# -# Verify data after the test has been "shot" - - - - -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) metalink/XML... -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) WARNING (missing or invalid file name) -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) FAILED - - -$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) - - - diff --git a/tests/data/test2018 b/tests/data/test2018 deleted file mode 100644 index f43f8c4b5..000000000 --- a/tests/data/test2018 +++ /dev/null @@ -1,78 +0,0 @@ - - - -Metalink -HTTP -HTTP GET - - - -# -# Server-side - - -HTTP/1.1 200 OK -Date: Wed, 20 Jun 2012 14:49:00 GMT -Server: test-server/fake -Content-Length: 56 -Connection: close -Content-Type: text/html -Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange -Funny-head: yesyes - -Data that should not be delivered from an HTTP resource - - - -# -# Client-side - - -http - - -file -Metalink - - -Metalink local XML file, attempt Unix questionable file name I - - ---metalink file://%PWD/log/test%TESTNUMBER.metalink - -# local metalink file written before test command runs - - - - - - - c7d03debe90ca29492203ea921d76941fa98640cf3b744f2a16c9b58465eab82 - - - http://%HOSTIP:%HTTPPORT/%TESTNUMBER - - - - - - -perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER log/name%TESTNUMBER log/.download%TESTNUMBER - - - -# -# Verify data after the test has been "shot" - - - - -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) metalink/XML... -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) WARNING (missing or invalid file name) -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) FAILED - - -$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) - - - diff --git a/tests/data/test2019 b/tests/data/test2019 deleted file mode 100644 index 7123ab376..000000000 --- a/tests/data/test2019 +++ /dev/null @@ -1,78 +0,0 @@ - - - -Metalink -HTTP -HTTP GET - - - -# -# Server-side - - -HTTP/1.1 200 OK -Date: Wed, 20 Jun 2012 14:49:00 GMT -Server: test-server/fake -Content-Length: 56 -Connection: close -Content-Type: text/html -Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange -Funny-head: yesyes - -Data that should not be delivered from an HTTP resource - - - -# -# Client-side - - -http - - -file -Metalink - - -Metalink local XML file, attempt Unix questionable file name II - - ---metalink file://%PWD/log/test%TESTNUMBER.metalink - -# local metalink file written before test command runs - - - - - - - c7d03debe90ca29492203ea921d76941fa98640cf3b744f2a16c9b58465eab82 - - - http://%HOSTIP:%HTTPPORT/%TESTNUMBER - - - - - - -perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER log/name%TESTNUMBER - - - -# -# Verify data after the test has been "shot" - - - - -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) metalink/XML... -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) WARNING (missing or invalid file name) -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) FAILED - - -$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) - - - diff --git a/tests/data/test2020 b/tests/data/test2020 deleted file mode 100644 index 8fd95543e..000000000 --- a/tests/data/test2020 +++ /dev/null @@ -1,78 +0,0 @@ - - - -Metalink -HTTP -HTTP GET - - - -# -# Server-side - - -HTTP/1.1 200 OK -Date: Wed, 20 Jun 2012 14:49:00 GMT -Server: test-server/fake -Content-Length: 56 -Connection: close -Content-Type: text/html -Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange -Funny-head: yesyes - -Data that should not be delivered from an HTTP resource - - - -# -# Client-side - - -http - - -file -Metalink - - -Metalink local XML file, attempt Unix questionable file name III - - ---metalink file://%PWD/log/test%TESTNUMBER.metalink - -# local metalink file written before test command runs - - - - - - - c7d03debe90ca29492203ea921d76941fa98640cf3b744f2a16c9b58465eab82 - - - http://%HOSTIP:%HTTPPORT/%TESTNUMBER - - - - - - -perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER log/name%TESTNUMBER - - - -# -# Verify data after the test has been "shot" - - - - -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) metalink/XML... -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) WARNING (missing or invalid file name) -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) FAILED - - -$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) - - - diff --git a/tests/data/test2021 b/tests/data/test2021 deleted file mode 100644 index 4919cab59..000000000 --- a/tests/data/test2021 +++ /dev/null @@ -1,78 +0,0 @@ - - - -Metalink -HTTP -HTTP GET - - - -# -# Server-side - - -HTTP/1.1 200 OK -Date: Wed, 20 Jun 2012 14:49:00 GMT -Server: test-server/fake -Content-Length: 56 -Connection: close -Content-Type: text/html -Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange -Funny-head: yesyes - -Data that should not be delivered from an HTTP resource - - - -# -# Client-side - - -http - - -file -Metalink - - -Metalink local XML file, attempt Unix questionable file name IV - - ---metalink file://%PWD/log/test%TESTNUMBER.metalink - -# local metalink file written before test command runs - - - - - - - c7d03debe90ca29492203ea921d76941fa98640cf3b744f2a16c9b58465eab82 - - - http://%HOSTIP:%HTTPPORT/%TESTNUMBER - - - - - - -perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER log/name%TESTNUMBER log/download%TESTNUMBER - - - -# -# Verify data after the test has been "shot" - - - - -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) metalink/XML... -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) WARNING (missing or invalid file name) -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) FAILED - - -$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) - - - diff --git a/tests/data/test2022 b/tests/data/test2022 deleted file mode 100644 index 84735c93c..000000000 --- a/tests/data/test2022 +++ /dev/null @@ -1,78 +0,0 @@ - - - -Metalink -HTTP -HTTP GET - - - -# -# Server-side - - -HTTP/1.1 200 OK -Date: Wed, 20 Jun 2012 14:49:00 GMT -Server: test-server/fake -Content-Length: 56 -Connection: close -Content-Type: text/html -Content-Disposition: filename=name%TESTNUMBER; charset=funny; option=strange -Funny-head: yesyes - -Data that should not be delivered from an HTTP resource - - - -# -# Client-side - - -http - - -file -Metalink - - -Metalink local XML file, attempt Unix questionable file name V - - ---metalink file://%PWD/log/test%TESTNUMBER.metalink - -# local metalink file written before test command runs - - - - - - - c7d03debe90ca29492203ea921d76941fa98640cf3b744f2a16c9b58465eab82 - - - http://%HOSTIP:%HTTPPORT/%TESTNUMBER - - - - - - -perl %SRCDIR/libtest/notexists.pl log/%TESTNUMBER log/name%TESTNUMBER log/download%TESTNUMBER - - - -# -# Verify data after the test has been "shot" - - - - -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) metalink/XML... -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) WARNING (missing or invalid file name) -Metalink: parsing (file://%PWD/log/test%TESTNUMBER.metalink) FAILED - - -$_ = '' if (($_ !~ /^Metalink: /) && ($_ !~ /error/i) && ($_ !~ /warn/i)) - - - diff --git a/tests/libtest/test1013.pl b/tests/libtest/test1013.pl index 4160ff923..58f7c9623 100755 --- a/tests/libtest/test1013.pl +++ b/tests/libtest/test1013.pl @@ -44,7 +44,7 @@ $curl_protocols =~ /\w+: (.*)$/; @curl = split / /,$1; # These features are not supported by curl-config -@curl = grep(!/^(Debug|TrackMemory|Metalink|CharConv)$/i, @curl); +@curl = grep(!/^(Debug|TrackMemory|CharConv)$/i, @curl); @curl = sort @curl; # Read the output of curl-config diff --git a/tests/runtests.pl b/tests/runtests.pl index 2a2b4ee1a..ab77c0ab7 100755 --- a/tests/runtests.pl +++ b/tests/runtests.pl @@ -253,7 +253,6 @@ my $has_kerberos; # set if libcurl is built with Kerberos support my $has_spnego; # set if libcurl is built with SPNEGO support my $has_charconv; # set if libcurl is built with CharConv support my $has_tls_srp; # set if libcurl is built with TLS-SRP support -my $has_metalink; # set if curl is built with Metalink support my $has_http2; # set if libcurl is built with HTTP2 support my $has_httpsproxy; # set if libcurl is built with HTTPS-proxy support my $has_crypto; # set if libcurl is built with cryptographic support @@ -2852,7 +2851,6 @@ sub setupfeatures { $feature{"ld_preload"} = ($has_ldpreload && !$debug_build); $feature{"libz"} = $has_libz; $feature{"manual"} = $has_manual; - $feature{"Metalink"} = $has_metalink; $feature{"MinGW"} = $has_mingw; $feature{"MultiSSL"} = $has_multissl; $feature{"NSS"} = $has_nss; @@ -3103,10 +3101,6 @@ sub checksystem { # TLS-SRP enabled $has_tls_srp=1; } - if($feat =~ /Metalink/i) { - # Metalink enabled - $has_metalink=1; - } if($feat =~ /PSL/i) { # PSL enabled $has_psl=1; diff --git a/tests/unit/Makefile.inc b/tests/unit/Makefile.inc index 854e3af38..3354f454d 100644 --- a/tests/unit/Makefile.inc +++ b/tests/unit/Makefile.inc @@ -71,9 +71,9 @@ unit1330_SOURCES = unit1330.c $(UNITFILES) unit1330_CPPFLAGS = $(AM_CPPFLAGS) unit1394_SOURCES = unit1394.c $(UNITFILES) -unit1394_CPPFLAGS = $(AM_CPPFLAGS) $(LIBMETALINK_CPPFLAGS) -unit1394_LDADD = @LIBMETALINK_LIBS@ $(top_builddir)/lib/libcurl.la @LIBCURL_LIBS@ -unit1394_LDFLAGS = @LIBMETALINK_LDFLAGS@ $(top_builddir)/src/libcurltool.la +unit1394_CPPFLAGS = $(AM_CPPFLAGS) +unit1394_LDADD = $(top_builddir)/lib/libcurl.la @LIBCURL_LIBS@ +unit1394_LDFLAGS = $(top_builddir)/src/libcurltool.la unit1394_LIBS = unit1395_SOURCES = unit1395.c $(UNITFILES) @@ -104,7 +104,7 @@ unit1603_SOURCES = unit1603.c $(UNITFILES) unit1603_CPPFLAGS = $(AM_CPPFLAGS) unit1604_SOURCES = unit1604.c $(UNITFILES) -unit1604_CPPFLAGS = $(AM_CPPFLAGS) $(LIBMETALINK_CPPFLAGS) +unit1604_CPPFLAGS = $(AM_CPPFLAGS) unit1605_SOURCES = unit1605.c $(UNITFILES) unit1605_CPPFLAGS = $(AM_CPPFLAGS)