From 24b9957402f17c422eeeb3386bf049feeb342e78 Mon Sep 17 00:00:00 2001 From: taesub kim Date: Thu, 23 Mar 2017 16:45:32 +0900 Subject: [PATCH] Imported Upstream version 7.53.1 Change-Id: Id0454e17b6cb083c803c5497d34964dd8fa0dbc6 --- CHANGES | 8113 ++++++------ CMake/CurlSymbolHiding.cmake | 61 + CMake/CurlTests.c | 16 + CMake/FindCARES.cmake | 42 + CMake/FindLibSSH2.cmake | 35 + CMake/FindNGHTTP2.cmake | 18 + CMake/OtherTests.cmake | 25 +- CMakeLists.txt | 62 +- COPYING | 2 +- Makefile | 449 +- Makefile.am | 16 +- Makefile.in | 29 +- RELEASE-NOTES | 111 +- acinclude.m4 | 48 +- config.guess | 28 +- config.sub | 22 +- configure | 319 +- configure.ac | 151 +- docs/BINDINGS | 260 - docs/BINDINGS.md | 106 + docs/BUGS | 105 +- docs/CHECKSRC.md | 4 +- docs/CODE_STYLE.md | 66 +- docs/CONTRIBUTE.md | 34 +- docs/FAQ | 129 +- docs/HISTORY.md | 93 +- docs/HTTP2.md | 29 +- docs/INSTALL | 1108 +- docs/INSTALL.devcpp | 302 - docs/INSTALL.md | 513 + docs/INTERNALS.md | 221 +- docs/KNOWN_BUGS | 92 +- docs/LICENSE-MIXING.md | 9 +- docs/MAIL-ETIQUETTE | 65 +- docs/Makefile.am | 21 +- docs/Makefile.in | 21 +- docs/README.netware | 9 +- docs/README.win32 | 7 +- docs/RELEASE-PROCEDURE | 7 +- docs/ROADMAP.md | 42 +- docs/SECURITY.md | 28 +- docs/THANKS | 70 +- docs/TODO | 256 +- docs/TheArtOfHttpScripting | 36 +- docs/cmdline-opts/MANPAGE.md | 52 + docs/cmdline-opts/Makefile.am | 76 + docs/cmdline-opts/Makefile.in | 598 + docs/cmdline-opts/abstract-unix-socket.d | 9 + docs/cmdline-opts/anyauth.d | 17 + docs/cmdline-opts/append.d | 8 + docs/cmdline-opts/basic.d | 11 + docs/cmdline-opts/cacert.d | 28 + docs/cmdline-opts/capath.d | 15 + docs/cmdline-opts/cert-status.d | 13 + docs/cmdline-opts/cert-type.d | 10 + docs/cmdline-opts/cert.d | 32 + docs/cmdline-opts/ciphers.d | 11 + docs/cmdline-opts/compressed.d | 7 + docs/cmdline-opts/config.d | 60 + docs/cmdline-opts/connect-timeout.d | 11 + docs/cmdline-opts/connect-to.d | 18 + docs/cmdline-opts/continue-at.d | 15 + docs/cmdline-opts/cookie-jar.d | 24 + docs/cmdline-opts/cookie.d | 36 + docs/cmdline-opts/create-dirs.d | 9 + docs/cmdline-opts/crlf.d | 7 + docs/cmdline-opts/crlfile.d | 10 + docs/cmdline-opts/data-ascii.d | 6 + docs/cmdline-opts/data-binary.d | 13 + docs/cmdline-opts/data-raw.d | 9 + docs/cmdline-opts/data-urlencode.d | 33 + docs/cmdline-opts/data.d | 30 + docs/cmdline-opts/delegation.d | 16 + docs/cmdline-opts/digest.d | 11 + docs/cmdline-opts/disable-eprt.d | 19 + docs/cmdline-opts/disable-epsv.d | 16 + docs/cmdline-opts/disable.d | 7 + docs/cmdline-opts/dns-interface.d | 11 + docs/cmdline-opts/dns-ipv4-addr.d | 11 + docs/cmdline-opts/dns-ipv6-addr.d | 11 + docs/cmdline-opts/dns-servers.d | 10 + docs/cmdline-opts/dump-header.d | 18 + docs/cmdline-opts/egd-file.d | 8 + docs/cmdline-opts/engine.d | 8 + docs/cmdline-opts/environment.d | 7 + docs/cmdline-opts/expect100-timeout.d | 11 + docs/cmdline-opts/fail-early.d | 18 + docs/cmdline-opts/fail.d | 14 + docs/cmdline-opts/false-start.d | 12 + docs/cmdline-opts/form-string.d | 11 + docs/cmdline-opts/form.d | 54 + docs/cmdline-opts/ftp-account.d | 10 + docs/cmdline-opts/ftp-alternative-to-user.d | 10 + docs/cmdline-opts/ftp-create-dirs.d | 8 + docs/cmdline-opts/ftp-method.d | 21 + docs/cmdline-opts/ftp-pasv.d | 16 + docs/cmdline-opts/ftp-port.d | 32 + docs/cmdline-opts/ftp-pret.d | 8 + docs/cmdline-opts/ftp-skip-pasv-ip.d | 12 + docs/cmdline-opts/ftp-ssl-ccc-mode.d | 11 + docs/cmdline-opts/ftp-ssl-ccc.d | 10 + docs/cmdline-opts/ftp-ssl-control.d | 8 + docs/cmdline-opts/gen.pl | 383 + docs/cmdline-opts/get.d | 15 + docs/cmdline-opts/globoff.d | 8 + docs/cmdline-opts/head.d | 8 + docs/cmdline-opts/header.d | 38 + docs/cmdline-opts/help.d | 6 + docs/cmdline-opts/hostpubmd5.d | 9 + docs/cmdline-opts/http1.0.d | 10 + docs/cmdline-opts/http1.1.d | 8 + docs/cmdline-opts/http2-prior-knowledge.d | 12 + docs/cmdline-opts/http2.d | 10 + docs/cmdline-opts/ignore-content-length.d | 10 + docs/cmdline-opts/include.d | 7 + docs/cmdline-opts/insecure.d | 12 + docs/cmdline-opts/interface.d | 12 + docs/cmdline-opts/ipv4.d | 12 + docs/cmdline-opts/ipv6.d | 12 + docs/cmdline-opts/junk-session-cookies.d | 10 + docs/cmdline-opts/keepalive-time.d | 13 + docs/cmdline-opts/key-type.d | 9 + docs/cmdline-opts/key.d | 10 + docs/cmdline-opts/krb.d | 11 + docs/cmdline-opts/libcurl.d | 11 + docs/cmdline-opts/limit-rate.d | 18 + docs/cmdline-opts/list-only.d | 24 + docs/cmdline-opts/local-port.d | 9 + docs/cmdline-opts/location-trusted.d | 9 + docs/cmdline-opts/location.d | 23 + docs/cmdline-opts/login-options.d | 14 + docs/cmdline-opts/mail-auth.d | 10 + docs/cmdline-opts/mail-from.d | 8 + docs/cmdline-opts/mail-rcpt.d | 19 + docs/cmdline-opts/manual.d | 5 + docs/cmdline-opts/max-filesize.d | 12 + docs/cmdline-opts/max-redirs.d | 11 + docs/cmdline-opts/max-time.d | 13 + docs/cmdline-opts/metalink.d | 27 + docs/cmdline-opts/negotiate.d | 15 + docs/cmdline-opts/netrc-file.d | 12 + docs/cmdline-opts/netrc-optional.d | 7 + docs/cmdline-opts/netrc.d | 17 + docs/cmdline-opts/next.d | 20 + docs/cmdline-opts/no-alpn.d | 11 + docs/cmdline-opts/no-buffer.d | 11 + docs/cmdline-opts/no-keepalive.d | 8 + docs/cmdline-opts/no-npn.d | 12 + docs/cmdline-opts/no-sessionid.d | 13 + docs/cmdline-opts/noproxy.d | 15 + docs/cmdline-opts/ntlm-wb.d | 7 + docs/cmdline-opts/ntlm.d | 18 + docs/cmdline-opts/oauth2-bearer.d | 11 + docs/cmdline-opts/output.d | 32 + docs/cmdline-opts/page-footer | 244 + docs/cmdline-opts/page-header | 141 + docs/cmdline-opts/pass.d | 8 + docs/cmdline-opts/path-as-is.d | 7 + docs/cmdline-opts/pinnedpubkey.d | 27 + docs/cmdline-opts/post301.d | 11 + docs/cmdline-opts/post302.d | 11 + docs/cmdline-opts/post303.d | 11 + docs/cmdline-opts/preproxy.d | 22 + docs/cmdline-opts/progress-bar.d | 11 + docs/cmdline-opts/proto-default.d | 18 + docs/cmdline-opts/proto-redir.d | 17 + docs/cmdline-opts/proto.d | 43 + docs/cmdline-opts/proxy-anyauth.d | 7 + docs/cmdline-opts/proxy-basic.d | 7 + docs/cmdline-opts/proxy-cacert.d | 7 + docs/cmdline-opts/proxy-capath.d | 7 + docs/cmdline-opts/proxy-cert-type.d | 6 + docs/cmdline-opts/proxy-cert.d | 6 + docs/cmdline-opts/proxy-ciphers.d | 6 + docs/cmdline-opts/proxy-crlfile.d | 6 + docs/cmdline-opts/proxy-digest.d | 6 + docs/cmdline-opts/proxy-header.d | 20 + docs/cmdline-opts/proxy-insecure.d | 5 + docs/cmdline-opts/proxy-key-type.d | 6 + docs/cmdline-opts/proxy-key.d | 5 + docs/cmdline-opts/proxy-negotiate.d | 8 + docs/cmdline-opts/proxy-ntlm.d | 6 + docs/cmdline-opts/proxy-pass.d | 6 + docs/cmdline-opts/proxy-service-name.d | 6 + docs/cmdline-opts/proxy-ssl-allow-beast.d | 5 + docs/cmdline-opts/proxy-tlsauthtype.d | 6 + docs/cmdline-opts/proxy-tlspassword.d | 6 + docs/cmdline-opts/proxy-tlsuser.d | 6 + docs/cmdline-opts/proxy-tlsv1.d | 5 + docs/cmdline-opts/proxy-user.d | 12 + docs/cmdline-opts/proxy.d | 39 + docs/cmdline-opts/proxy1.0.d | 10 + docs/cmdline-opts/proxytunnel.d | 10 + docs/cmdline-opts/pubkey.d | 14 + docs/cmdline-opts/quote.d | 56 + docs/cmdline-opts/random-file.d | 7 + docs/cmdline-opts/range.d | 46 + docs/cmdline-opts/raw.d | 7 + docs/cmdline-opts/referer.d | 14 + docs/cmdline-opts/remote-header-name.d | 19 + docs/cmdline-opts/remote-name-all.d | 8 + docs/cmdline-opts/remote-name.d | 21 + docs/cmdline-opts/remote-time.d | 7 + docs/cmdline-opts/request.d | 39 + docs/cmdline-opts/resolve.d | 17 + docs/cmdline-opts/retry-connrefused.d | 6 + docs/cmdline-opts/retry-delay.d | 11 + docs/cmdline-opts/retry-max-time.d | 13 + docs/cmdline-opts/retry.d | 17 + docs/cmdline-opts/sasl-ir.d | 5 + docs/cmdline-opts/service-name.d | 8 + docs/cmdline-opts/show-error.d | 5 + docs/cmdline-opts/silent.d | 11 + docs/cmdline-opts/socks4.d | 19 + docs/cmdline-opts/socks4a.d | 19 + docs/cmdline-opts/socks5-gssapi-nec.d | 8 + docs/cmdline-opts/socks5-gssapi-service.d | 12 + docs/cmdline-opts/socks5-hostname.d | 19 + docs/cmdline-opts/socks5.d | 21 + docs/cmdline-opts/speed-limit.d | 10 + docs/cmdline-opts/speed-time.d | 13 + docs/cmdline-opts/ssl-allow-beast.d | 9 + docs/cmdline-opts/ssl-no-revoke.d | 7 + docs/cmdline-opts/ssl-reqd.d | 9 + docs/cmdline-opts/ssl.d | 12 + docs/cmdline-opts/sslv2.d | 13 + docs/cmdline-opts/sslv3.d | 13 + docs/cmdline-opts/stderr.d | 8 + docs/cmdline-opts/tcp-fastopen.d | 5 + docs/cmdline-opts/tcp-nodelay.d | 9 + docs/cmdline-opts/telnet-option.d | 12 + docs/cmdline-opts/tftp-blksize.d | 11 + docs/cmdline-opts/tftp-no-options.d | 10 + docs/cmdline-opts/time-cond.d | 17 + docs/cmdline-opts/tlsauthtype.d | 8 + docs/cmdline-opts/tlspassword.d | 6 + docs/cmdline-opts/tlsuser.d | 7 + docs/cmdline-opts/tlsv1.0.d | 6 + docs/cmdline-opts/tlsv1.1.d | 6 + docs/cmdline-opts/tlsv1.2.d | 6 + docs/cmdline-opts/tlsv1.3.d | 9 + docs/cmdline-opts/tlsv1.d | 12 + docs/cmdline-opts/tr-encoding.d | 7 + docs/cmdline-opts/trace-ascii.d | 14 + docs/cmdline-opts/trace-time.d | 5 + docs/cmdline-opts/trace.d | 11 + docs/cmdline-opts/unix-socket.d | 7 + docs/cmdline-opts/upload-file.d | 33 + docs/cmdline-opts/url.d | 15 + docs/cmdline-opts/use-ascii.d | 8 + docs/cmdline-opts/user-agent.d | 12 + docs/cmdline-opts/user.d | 33 + docs/cmdline-opts/verbose.d | 19 + docs/cmdline-opts/version.d | 58 + docs/cmdline-opts/write-out.d | 141 + docs/cmdline-opts/xattr.d | 8 + docs/curl-config.html | 96 - docs/curl-config.pdf | Bin 17775 -> 0 bytes docs/curl.1 | 2824 ++-- docs/curl.html | 1107 -- docs/curl.pdf | Bin 139891 -> 0 bytes docs/examples/10-at-a-time.c | 2 +- docs/examples/Makefile.netware | 2 +- docs/examples/anyauthput.c | 4 +- docs/examples/asiohiper.cpp | 173 +- docs/examples/cacertinmem.c | 12 +- docs/examples/curlx.c | 76 +- docs/examples/debug.c | 2 +- docs/examples/evhiperfifo.c | 19 +- docs/examples/externalsocket.c | 11 +- docs/examples/fileupload.c | 11 +- docs/examples/fopen.c | 2 +- docs/examples/ftpupload.c | 2 +- docs/examples/ftpuploadresume.c | 6 +- docs/examples/ghiper.c | 24 +- docs/examples/hiperfifo.c | 19 +- docs/examples/htmltitle.cpp | 63 +- docs/examples/http2-download.c | 2 +- docs/examples/http2-serverpush.c | 2 +- docs/examples/http2-upload.c | 2 +- docs/examples/imap-append.c | 8 + docs/examples/multi-app.c | 2 +- docs/examples/multi-debugcallback.c | 2 +- docs/examples/multi-post.c | 2 +- docs/examples/multi-uv.c | 95 +- docs/examples/multithread.c | 8 +- docs/examples/opensslthreadlock.c | 2 +- docs/examples/postit2.c | 2 +- docs/examples/rtsp.c | 14 +- docs/examples/sendrecv.c | 91 +- docs/examples/sessioninfo.c | 2 +- docs/examples/smooth-gtk-thread.c | 12 +- docs/examples/synctime.c | 6 +- docs/examples/usercertinmem.c | 5 +- docs/index.html | 20 - docs/libcurl/Makefile.am | 4 +- docs/libcurl/Makefile.in | 4 +- docs/libcurl/curl_easy_cleanup.html | 76 - docs/libcurl/curl_easy_cleanup.pdf | Bin 19386 -> 0 bytes docs/libcurl/curl_easy_duphandle.html | 66 - docs/libcurl/curl_easy_duphandle.pdf | Bin 17775 -> 0 bytes docs/libcurl/curl_easy_escape.html | 77 - docs/libcurl/curl_easy_escape.pdf | Bin 19512 -> 0 bytes docs/libcurl/curl_easy_getinfo.3 | 9 + docs/libcurl/curl_easy_getinfo.html | 185 - docs/libcurl/curl_easy_getinfo.pdf | Bin 27286 -> 0 bytes docs/libcurl/curl_easy_init.html | 74 - docs/libcurl/curl_easy_init.pdf | Bin 19179 -> 0 bytes docs/libcurl/curl_easy_pause.html | 81 - docs/libcurl/curl_easy_pause.pdf | Bin 25043 -> 0 bytes docs/libcurl/curl_easy_perform.html | 78 - docs/libcurl/curl_easy_perform.pdf | Bin 21965 -> 0 bytes docs/libcurl/curl_easy_recv.3 | 29 +- docs/libcurl/curl_easy_recv.html | 71 - docs/libcurl/curl_easy_recv.pdf | Bin 24005 -> 0 bytes docs/libcurl/curl_easy_reset.html | 65 - docs/libcurl/curl_easy_reset.pdf | Bin 17118 -> 0 bytes docs/libcurl/curl_easy_send.3 | 23 +- docs/libcurl/curl_easy_send.html | 69 - docs/libcurl/curl_easy_send.pdf | Bin 23742 -> 0 bytes docs/libcurl/curl_easy_setopt.3 | 43 +- docs/libcurl/curl_easy_setopt.html | 544 - docs/libcurl/curl_easy_setopt.pdf | Bin 47592 -> 0 bytes docs/libcurl/curl_easy_strerror.html | 63 - docs/libcurl/curl_easy_strerror.pdf | Bin 17032 -> 0 bytes docs/libcurl/curl_easy_unescape.3 | 7 +- docs/libcurl/curl_easy_unescape.html | 66 - docs/libcurl/curl_easy_unescape.pdf | Bin 18857 -> 0 bytes docs/libcurl/curl_escape.html | 66 - docs/libcurl/curl_escape.pdf | Bin 18194 -> 0 bytes docs/libcurl/curl_formadd.3 | 8 +- docs/libcurl/curl_formadd.html | 188 - docs/libcurl/curl_formadd.pdf | Bin 32574 -> 0 bytes docs/libcurl/curl_formfree.html | 64 - docs/libcurl/curl_formfree.pdf | Bin 18145 -> 0 bytes docs/libcurl/curl_formget.html | 89 - docs/libcurl/curl_formget.pdf | Bin 20276 -> 0 bytes docs/libcurl/curl_free.html | 61 - docs/libcurl/curl_free.pdf | Bin 14470 -> 0 bytes docs/libcurl/curl_getdate.html | 98 - docs/libcurl/curl_getdate.pdf | Bin 22706 -> 0 bytes docs/libcurl/curl_getenv.html | 64 - docs/libcurl/curl_getenv.pdf | Bin 17145 -> 0 bytes docs/libcurl/curl_global_cleanup.3 | 10 +- docs/libcurl/curl_global_cleanup.html | 66 - docs/libcurl/curl_global_cleanup.pdf | Bin 16899 -> 0 bytes docs/libcurl/curl_global_init.html | 84 - docs/libcurl/curl_global_init.pdf | Bin 21818 -> 0 bytes docs/libcurl/curl_global_init_mem.html | 82 - docs/libcurl/curl_global_init_mem.pdf | Bin 17304 -> 0 bytes docs/libcurl/curl_mprintf.html | 76 - docs/libcurl/curl_mprintf.pdf | Bin 19586 -> 0 bytes docs/libcurl/curl_multi_add_handle.html | 71 - docs/libcurl/curl_multi_add_handle.pdf | Bin 21012 -> 0 bytes docs/libcurl/curl_multi_assign.html | 68 - docs/libcurl/curl_multi_assign.pdf | Bin 18580 -> 0 bytes docs/libcurl/curl_multi_cleanup.html | 65 - docs/libcurl/curl_multi_cleanup.pdf | Bin 17392 -> 0 bytes docs/libcurl/curl_multi_fdset.html | 75 - docs/libcurl/curl_multi_fdset.pdf | Bin 20399 -> 0 bytes docs/libcurl/curl_multi_info_read.html | 98 - docs/libcurl/curl_multi_info_read.pdf | Bin 22957 -> 0 bytes docs/libcurl/curl_multi_init.html | 63 - docs/libcurl/curl_multi_init.pdf | Bin 16317 -> 0 bytes docs/libcurl/curl_multi_perform.html | 118 - docs/libcurl/curl_multi_perform.pdf | Bin 25241 -> 0 bytes docs/libcurl/curl_multi_remove_handle.html | 64 - docs/libcurl/curl_multi_remove_handle.pdf | Bin 17178 -> 0 bytes docs/libcurl/curl_multi_setopt.html | 94 - docs/libcurl/curl_multi_setopt.pdf | Bin 23370 -> 0 bytes docs/libcurl/curl_multi_socket.3 | 2 +- docs/libcurl/curl_multi_socket.html | 116 - docs/libcurl/curl_multi_socket.pdf | Bin 28183 -> 0 bytes docs/libcurl/curl_multi_socket_action.html | 115 - docs/libcurl/curl_multi_socket_action.pdf | Bin 28351 -> 0 bytes docs/libcurl/curl_multi_socket_all.html | 56 - docs/libcurl/curl_multi_socket_all.pdf | Bin 2217 -> 0 bytes docs/libcurl/curl_multi_strerror.html | 65 - docs/libcurl/curl_multi_strerror.pdf | Bin 14734 -> 0 bytes docs/libcurl/curl_multi_timeout.html | 86 - docs/libcurl/curl_multi_timeout.pdf | Bin 21906 -> 0 bytes docs/libcurl/curl_multi_wait.html | 132 - docs/libcurl/curl_multi_wait.pdf | Bin 22327 -> 0 bytes docs/libcurl/curl_share_cleanup.html | 63 - docs/libcurl/curl_share_cleanup.pdf | Bin 16877 -> 0 bytes docs/libcurl/curl_share_init.html | 64 - docs/libcurl/curl_share_init.pdf | Bin 18397 -> 0 bytes docs/libcurl/curl_share_setopt.html | 88 - docs/libcurl/curl_share_setopt.pdf | Bin 21113 -> 0 bytes docs/libcurl/curl_share_strerror.html | 65 - docs/libcurl/curl_share_strerror.pdf | Bin 15076 -> 0 bytes docs/libcurl/curl_slist_append.html | 80 - docs/libcurl/curl_slist_append.pdf | Bin 17791 -> 0 bytes docs/libcurl/curl_slist_free_all.html | 63 - docs/libcurl/curl_slist_free_all.pdf | Bin 13664 -> 0 bytes docs/libcurl/curl_strequal.html | 65 - docs/libcurl/curl_strequal.pdf | Bin 16583 -> 0 bytes docs/libcurl/curl_unescape.html | 66 - docs/libcurl/curl_unescape.pdf | Bin 17960 -> 0 bytes docs/libcurl/curl_version.html | 63 - docs/libcurl/curl_version.pdf | Bin 15840 -> 0 bytes docs/libcurl/curl_version_info.3 | 3 + docs/libcurl/curl_version_info.html | 149 - docs/libcurl/curl_version_info.pdf | Bin 26144 -> 0 bytes docs/libcurl/libcurl-easy.html | 63 - docs/libcurl/libcurl-easy.pdf | Bin 19068 -> 0 bytes docs/libcurl/libcurl-errors.3 | 5 +- docs/libcurl/libcurl-errors.html | 262 - docs/libcurl/libcurl-errors.pdf | Bin 36983 -> 0 bytes docs/libcurl/libcurl-multi.3 | 3 +- docs/libcurl/libcurl-multi.html | 96 - docs/libcurl/libcurl-multi.pdf | Bin 27275 -> 0 bytes docs/libcurl/libcurl-share.html | 68 - docs/libcurl/libcurl-share.pdf | Bin 19958 -> 0 bytes docs/libcurl/libcurl-symbols.3 | 60 +- docs/libcurl/libcurl-symbols.html | 1640 --- docs/libcurl/libcurl-symbols.pdf | Bin 50443 -> 0 bytes docs/libcurl/libcurl-thread.html | 96 - docs/libcurl/libcurl-thread.pdf | Bin 24412 -> 0 bytes docs/libcurl/libcurl-tutorial.html | 565 - docs/libcurl/libcurl-tutorial.pdf | Bin 94723 -> 0 bytes docs/libcurl/libcurl.html | 110 - docs/libcurl/libcurl.pdf | Bin 30424 -> 0 bytes docs/libcurl/opts/CURLINFO_ACTIVESOCKET.html | 65 - docs/libcurl/opts/CURLINFO_ACTIVESOCKET.pdf | Bin 19969 -> 0 bytes docs/libcurl/opts/CURLINFO_APPCONNECT_TIME.html | 65 - docs/libcurl/opts/CURLINFO_APPCONNECT_TIME.pdf | Bin 20029 -> 0 bytes docs/libcurl/opts/CURLINFO_CERTINFO.html | 65 - docs/libcurl/opts/CURLINFO_CERTINFO.pdf | Bin 18142 -> 0 bytes docs/libcurl/opts/CURLINFO_CONDITION_UNMET.html | 64 - docs/libcurl/opts/CURLINFO_CONDITION_UNMET.pdf | Bin 17901 -> 0 bytes docs/libcurl/opts/CURLINFO_CONNECT_TIME.html | 65 - docs/libcurl/opts/CURLINFO_CONNECT_TIME.pdf | Bin 17844 -> 0 bytes .../opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD.html | 64 - .../opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD.pdf | Bin 15588 -> 0 bytes .../opts/CURLINFO_CONTENT_LENGTH_UPLOAD.html | 64 - .../opts/CURLINFO_CONTENT_LENGTH_UPLOAD.pdf | Bin 15068 -> 0 bytes docs/libcurl/opts/CURLINFO_CONTENT_TYPE.html | 65 - docs/libcurl/opts/CURLINFO_CONTENT_TYPE.pdf | Bin 17953 -> 0 bytes docs/libcurl/opts/CURLINFO_COOKIELIST.3 | 2 +- docs/libcurl/opts/CURLINFO_COOKIELIST.html | 65 - docs/libcurl/opts/CURLINFO_COOKIELIST.pdf | Bin 17764 -> 0 bytes docs/libcurl/opts/CURLINFO_EFFECTIVE_URL.html | 66 - docs/libcurl/opts/CURLINFO_EFFECTIVE_URL.pdf | Bin 18563 -> 0 bytes docs/libcurl/opts/CURLINFO_FILETIME.html | 65 - docs/libcurl/opts/CURLINFO_FILETIME.pdf | Bin 19522 -> 0 bytes docs/libcurl/opts/CURLINFO_FTP_ENTRY_PATH.html | 65 - docs/libcurl/opts/CURLINFO_FTP_ENTRY_PATH.pdf | Bin 17768 -> 0 bytes docs/libcurl/opts/CURLINFO_HEADER_SIZE.html | 64 - docs/libcurl/opts/CURLINFO_HEADER_SIZE.pdf | Bin 14935 -> 0 bytes docs/libcurl/opts/CURLINFO_HTTPAUTH_AVAIL.html | 64 - docs/libcurl/opts/CURLINFO_HTTPAUTH_AVAIL.pdf | Bin 18549 -> 0 bytes docs/libcurl/opts/CURLINFO_HTTP_CONNECTCODE.html | 64 - docs/libcurl/opts/CURLINFO_HTTP_CONNECTCODE.pdf | Bin 14684 -> 0 bytes docs/libcurl/opts/CURLINFO_LASTSOCKET.html | 66 - docs/libcurl/opts/CURLINFO_LASTSOCKET.pdf | Bin 18488 -> 0 bytes docs/libcurl/opts/CURLINFO_LOCAL_IP.html | 65 - docs/libcurl/opts/CURLINFO_LOCAL_IP.pdf | Bin 18028 -> 0 bytes docs/libcurl/opts/CURLINFO_LOCAL_PORT.html | 64 - docs/libcurl/opts/CURLINFO_LOCAL_PORT.pdf | Bin 14497 -> 0 bytes docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME.html | 65 - docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME.pdf | Bin 17859 -> 0 bytes docs/libcurl/opts/CURLINFO_NUM_CONNECTS.html | 64 - docs/libcurl/opts/CURLINFO_NUM_CONNECTS.pdf | Bin 18828 -> 0 bytes docs/libcurl/opts/CURLINFO_OS_ERRNO.html | 64 - docs/libcurl/opts/CURLINFO_OS_ERRNO.pdf | Bin 14402 -> 0 bytes docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME.html | 65 - docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME.pdf | Bin 18404 -> 0 bytes docs/libcurl/opts/CURLINFO_PRIMARY_IP.html | 65 - docs/libcurl/opts/CURLINFO_PRIMARY_IP.pdf | Bin 18283 -> 0 bytes docs/libcurl/opts/CURLINFO_PRIMARY_PORT.html | 64 - docs/libcurl/opts/CURLINFO_PRIMARY_PORT.pdf | Bin 14568 -> 0 bytes docs/libcurl/opts/CURLINFO_PRIVATE.html | 64 - docs/libcurl/opts/CURLINFO_PRIVATE.pdf | Bin 16977 -> 0 bytes docs/libcurl/opts/CURLINFO_PROTOCOL.3 | 55 + docs/libcurl/opts/CURLINFO_PROXYAUTH_AVAIL.html | 64 - docs/libcurl/opts/CURLINFO_PROXYAUTH_AVAIL.pdf | Bin 19100 -> 0 bytes .../libcurl/opts/CURLINFO_PROXY_SSL_VERIFYRESULT.3 | 43 + docs/libcurl/opts/CURLINFO_REDIRECT_COUNT.html | 64 - docs/libcurl/opts/CURLINFO_REDIRECT_COUNT.pdf | Bin 14643 -> 0 bytes docs/libcurl/opts/CURLINFO_REDIRECT_TIME.html | 65 - docs/libcurl/opts/CURLINFO_REDIRECT_TIME.pdf | Bin 18330 -> 0 bytes docs/libcurl/opts/CURLINFO_REDIRECT_URL.html | 64 - docs/libcurl/opts/CURLINFO_REDIRECT_URL.pdf | Bin 18468 -> 0 bytes docs/libcurl/opts/CURLINFO_REQUEST_SIZE.html | 64 - docs/libcurl/opts/CURLINFO_REQUEST_SIZE.pdf | Bin 17674 -> 0 bytes docs/libcurl/opts/CURLINFO_RESPONSE_CODE.html | 79 - docs/libcurl/opts/CURLINFO_RESPONSE_CODE.pdf | Bin 18845 -> 0 bytes docs/libcurl/opts/CURLINFO_RTSP_CLIENT_CSEQ.html | 64 - docs/libcurl/opts/CURLINFO_RTSP_CLIENT_CSEQ.pdf | Bin 14566 -> 0 bytes docs/libcurl/opts/CURLINFO_RTSP_CSEQ_RECV.html | 64 - docs/libcurl/opts/CURLINFO_RTSP_CSEQ_RECV.pdf | Bin 17427 -> 0 bytes docs/libcurl/opts/CURLINFO_RTSP_SERVER_CSEQ.html | 66 - docs/libcurl/opts/CURLINFO_RTSP_SERVER_CSEQ.pdf | Bin 15115 -> 0 bytes docs/libcurl/opts/CURLINFO_RTSP_SESSION_ID.html | 66 - docs/libcurl/opts/CURLINFO_RTSP_SESSION_ID.pdf | Bin 17424 -> 0 bytes docs/libcurl/opts/CURLINFO_SCHEME.3 | 59 + docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD.html | 64 - docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD.pdf | Bin 14991 -> 0 bytes docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.html | 64 - docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.pdf | Bin 14507 -> 0 bytes docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD.html | 64 - docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD.pdf | Bin 14713 -> 0 bytes docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.html | 64 - docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.pdf | Bin 14653 -> 0 bytes docs/libcurl/opts/CURLINFO_SSL_ENGINES.html | 64 - docs/libcurl/opts/CURLINFO_SSL_ENGINES.pdf | Bin 17685 -> 0 bytes docs/libcurl/opts/CURLINFO_SSL_VERIFYRESULT.3 | 6 +- docs/libcurl/opts/CURLINFO_SSL_VERIFYRESULT.html | 64 - docs/libcurl/opts/CURLINFO_SSL_VERIFYRESULT.pdf | Bin 17340 -> 0 bytes docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME.html | 65 - docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME.pdf | Bin 19801 -> 0 bytes docs/libcurl/opts/CURLINFO_TLS_SESSION.html | 73 - docs/libcurl/opts/CURLINFO_TLS_SESSION.pdf | Bin 20226 -> 0 bytes docs/libcurl/opts/CURLINFO_TLS_SSL_PTR.html | 119 - docs/libcurl/opts/CURLINFO_TLS_SSL_PTR.pdf | Bin 26151 -> 0 bytes docs/libcurl/opts/CURLINFO_TOTAL_TIME.html | 65 - docs/libcurl/opts/CURLINFO_TOTAL_TIME.pdf | Bin 17808 -> 0 bytes .../opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.html | 65 - .../opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.pdf | Bin 18177 -> 0 bytes .../opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.html | 65 - .../opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.pdf | Bin 17909 -> 0 bytes docs/libcurl/opts/CURLMOPT_MAXCONNECTS.html | 71 - docs/libcurl/opts/CURLMOPT_MAXCONNECTS.pdf | Bin 17717 -> 0 bytes .../opts/CURLMOPT_MAX_HOST_CONNECTIONS.html | 67 - .../libcurl/opts/CURLMOPT_MAX_HOST_CONNECTIONS.pdf | Bin 17724 -> 0 bytes docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.3 | 4 +- .../libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.html | 66 - docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.pdf | Bin 17813 -> 0 bytes .../opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.html | 65 - .../opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.pdf | Bin 17404 -> 0 bytes docs/libcurl/opts/CURLMOPT_PIPELINING.html | 77 - docs/libcurl/opts/CURLMOPT_PIPELINING.pdf | Bin 16572 -> 0 bytes .../opts/CURLMOPT_PIPELINING_SERVER_BL.html | 78 - .../libcurl/opts/CURLMOPT_PIPELINING_SERVER_BL.pdf | Bin 15559 -> 0 bytes docs/libcurl/opts/CURLMOPT_PIPELINING_SITE_BL.html | 77 - docs/libcurl/opts/CURLMOPT_PIPELINING_SITE_BL.pdf | Bin 14598 -> 0 bytes docs/libcurl/opts/CURLMOPT_PUSHDATA.html | 70 - docs/libcurl/opts/CURLMOPT_PUSHDATA.pdf | Bin 17036 -> 0 bytes docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.html | 131 - docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.pdf | Bin 22838 -> 0 bytes docs/libcurl/opts/CURLMOPT_SOCKETDATA.html | 70 - docs/libcurl/opts/CURLMOPT_SOCKETDATA.pdf | Bin 18367 -> 0 bytes docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.html | 86 - docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.pdf | Bin 20888 -> 0 bytes docs/libcurl/opts/CURLMOPT_TIMERDATA.html | 70 - docs/libcurl/opts/CURLMOPT_TIMERDATA.pdf | Bin 16692 -> 0 bytes docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.html | 113 - docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.pdf | Bin 22490 -> 0 bytes docs/libcurl/opts/CURLOPT_ABSTRACT_UNIX_SOCKET.3 | 58 + docs/libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.html | 77 - docs/libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.pdf | Bin 14110 -> 0 bytes docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.3 | 3 + docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.html | 85 - docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.pdf | Bin 20933 -> 0 bytes docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.html | 65 - docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.pdf | Bin 13014 -> 0 bytes docs/libcurl/opts/CURLOPT_APPEND.html | 77 - docs/libcurl/opts/CURLOPT_APPEND.pdf | Bin 13655 -> 0 bytes docs/libcurl/opts/CURLOPT_AUTOREFERER.html | 65 - docs/libcurl/opts/CURLOPT_AUTOREFERER.pdf | Bin 13058 -> 0 bytes docs/libcurl/opts/CURLOPT_BUFFERSIZE.3 | 18 +- docs/libcurl/opts/CURLOPT_BUFFERSIZE.html | 66 - docs/libcurl/opts/CURLOPT_BUFFERSIZE.pdf | Bin 17194 -> 0 bytes docs/libcurl/opts/CURLOPT_CAINFO.3 | 3 + docs/libcurl/opts/CURLOPT_CAINFO.html | 69 - docs/libcurl/opts/CURLOPT_CAINFO.pdf | Bin 17850 -> 0 bytes docs/libcurl/opts/CURLOPT_CAPATH.3 | 12 +- docs/libcurl/opts/CURLOPT_CAPATH.html | 66 - docs/libcurl/opts/CURLOPT_CAPATH.pdf | Bin 17182 -> 0 bytes docs/libcurl/opts/CURLOPT_CERTINFO.html | 65 - docs/libcurl/opts/CURLOPT_CERTINFO.pdf | Bin 18093 -> 0 bytes docs/libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.html | 78 - docs/libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.pdf | Bin 19912 -> 0 bytes docs/libcurl/opts/CURLOPT_CHUNK_DATA.html | 65 - docs/libcurl/opts/CURLOPT_CHUNK_DATA.pdf | Bin 17459 -> 0 bytes docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.html | 74 - docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.pdf | Bin 15904 -> 0 bytes docs/libcurl/opts/CURLOPT_CLOSESOCKETDATA.html | 65 - docs/libcurl/opts/CURLOPT_CLOSESOCKETDATA.pdf | Bin 17120 -> 0 bytes docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.html | 68 - docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.pdf | Bin 18336 -> 0 bytes docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT.html | 78 - docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT.pdf | Bin 16576 -> 0 bytes docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.html | 78 - docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.pdf | Bin 16549 -> 0 bytes docs/libcurl/opts/CURLOPT_CONNECT_ONLY.3 | 1 + docs/libcurl/opts/CURLOPT_CONNECT_ONLY.html | 66 - docs/libcurl/opts/CURLOPT_CONNECT_ONLY.pdf | Bin 18725 -> 0 bytes docs/libcurl/opts/CURLOPT_CONNECT_TO.html | 101 - docs/libcurl/opts/CURLOPT_CONNECT_TO.pdf | Bin 22668 -> 0 bytes .../opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.html | 82 - .../opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.pdf | Bin 20938 -> 0 bytes .../opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.html | 82 - .../opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.pdf | Bin 20947 -> 0 bytes .../opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.html | 82 - .../opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.pdf | Bin 20920 -> 0 bytes docs/libcurl/opts/CURLOPT_COOKIE.3 | 3 + docs/libcurl/opts/CURLOPT_COOKIE.html | 81 - docs/libcurl/opts/CURLOPT_COOKIE.pdf | Bin 18329 -> 0 bytes docs/libcurl/opts/CURLOPT_COOKIEFILE.3 | 3 + docs/libcurl/opts/CURLOPT_COOKIEFILE.html | 70 - docs/libcurl/opts/CURLOPT_COOKIEFILE.pdf | Bin 18296 -> 0 bytes docs/libcurl/opts/CURLOPT_COOKIEJAR.3 | 3 + docs/libcurl/opts/CURLOPT_COOKIEJAR.html | 68 - docs/libcurl/opts/CURLOPT_COOKIEJAR.pdf | Bin 19915 -> 0 bytes docs/libcurl/opts/CURLOPT_COOKIELIST.html | 129 - docs/libcurl/opts/CURLOPT_COOKIELIST.pdf | Bin 20645 -> 0 bytes docs/libcurl/opts/CURLOPT_COOKIESESSION.html | 66 - docs/libcurl/opts/CURLOPT_COOKIESESSION.pdf | Bin 13698 -> 0 bytes docs/libcurl/opts/CURLOPT_COPYPOSTFIELDS.html | 82 - docs/libcurl/opts/CURLOPT_COPYPOSTFIELDS.pdf | Bin 19069 -> 0 bytes docs/libcurl/opts/CURLOPT_CRLF.html | 66 - docs/libcurl/opts/CURLOPT_CRLF.pdf | Bin 13297 -> 0 bytes docs/libcurl/opts/CURLOPT_CRLFILE.3 | 3 + docs/libcurl/opts/CURLOPT_CRLFILE.html | 68 - docs/libcurl/opts/CURLOPT_CRLFILE.pdf | Bin 18909 -> 0 bytes docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.3 | 3 + docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.html | 86 - docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.pdf | Bin 20871 -> 0 bytes docs/libcurl/opts/CURLOPT_DEBUGDATA.html | 65 - docs/libcurl/opts/CURLOPT_DEBUGDATA.pdf | Bin 16921 -> 0 bytes docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.3 | 1 + docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.html | 204 - docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.pdf | Bin 24842 -> 0 bytes docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.3 | 3 + docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.html | 86 - docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.pdf | Bin 19352 -> 0 bytes docs/libcurl/opts/CURLOPT_DIRLISTONLY.html | 69 - docs/libcurl/opts/CURLOPT_DIRLISTONLY.pdf | Bin 17381 -> 0 bytes docs/libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.html | 67 - docs/libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.pdf | Bin 16490 -> 0 bytes docs/libcurl/opts/CURLOPT_DNS_INTERFACE.3 | 3 + docs/libcurl/opts/CURLOPT_DNS_INTERFACE.html | 65 - docs/libcurl/opts/CURLOPT_DNS_INTERFACE.pdf | Bin 13989 -> 0 bytes docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.3 | 3 + docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.html | 66 - docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.pdf | Bin 15707 -> 0 bytes docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.3 | 3 + docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.html | 66 - docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.pdf | Bin 15830 -> 0 bytes docs/libcurl/opts/CURLOPT_DNS_SERVERS.3 | 3 + docs/libcurl/opts/CURLOPT_DNS_SERVERS.html | 69 - docs/libcurl/opts/CURLOPT_DNS_SERVERS.pdf | Bin 15223 -> 0 bytes .../libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.html | 66 - docs/libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.pdf | Bin 18071 -> 0 bytes docs/libcurl/opts/CURLOPT_EGDSOCKET.3 | 3 + docs/libcurl/opts/CURLOPT_EGDSOCKET.html | 65 - docs/libcurl/opts/CURLOPT_EGDSOCKET.pdf | Bin 13637 -> 0 bytes docs/libcurl/opts/CURLOPT_ERRORBUFFER.html | 101 - docs/libcurl/opts/CURLOPT_ERRORBUFFER.pdf | Bin 23143 -> 0 bytes .../opts/CURLOPT_EXPECT_100_TIMEOUT_MS.html | 70 - .../libcurl/opts/CURLOPT_EXPECT_100_TIMEOUT_MS.pdf | Bin 15916 -> 0 bytes docs/libcurl/opts/CURLOPT_FAILONERROR.3 | 2 +- docs/libcurl/opts/CURLOPT_FAILONERROR.html | 68 - docs/libcurl/opts/CURLOPT_FAILONERROR.pdf | Bin 14183 -> 0 bytes docs/libcurl/opts/CURLOPT_FILETIME.html | 65 - docs/libcurl/opts/CURLOPT_FILETIME.pdf | Bin 19200 -> 0 bytes docs/libcurl/opts/CURLOPT_FNMATCH_DATA.html | 70 - docs/libcurl/opts/CURLOPT_FNMATCH_DATA.pdf | Bin 16022 -> 0 bytes docs/libcurl/opts/CURLOPT_FNMATCH_FUNCTION.html | 76 - docs/libcurl/opts/CURLOPT_FNMATCH_FUNCTION.pdf | Bin 15754 -> 0 bytes docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.html | 81 - docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.pdf | Bin 21130 -> 0 bytes docs/libcurl/opts/CURLOPT_FORBID_REUSE.html | 66 - docs/libcurl/opts/CURLOPT_FORBID_REUSE.pdf | Bin 14985 -> 0 bytes docs/libcurl/opts/CURLOPT_FRESH_CONNECT.html | 67 - docs/libcurl/opts/CURLOPT_FRESH_CONNECT.pdf | Bin 16911 -> 0 bytes docs/libcurl/opts/CURLOPT_FTPPORT.3 | 3 + docs/libcurl/opts/CURLOPT_FTPPORT.html | 77 - docs/libcurl/opts/CURLOPT_FTPPORT.pdf | Bin 15280 -> 0 bytes docs/libcurl/opts/CURLOPT_FTPSSLAUTH.html | 72 - docs/libcurl/opts/CURLOPT_FTPSSLAUTH.pdf | Bin 16427 -> 0 bytes docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.3 | 3 + docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.html | 65 - docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.pdf | Bin 13653 -> 0 bytes .../libcurl/opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.3 | 3 + .../opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.html | 70 - .../opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.pdf | Bin 14274 -> 0 bytes .../opts/CURLOPT_FTP_CREATE_MISSING_DIRS.html | 79 - .../opts/CURLOPT_FTP_CREATE_MISSING_DIRS.pdf | Bin 18206 -> 0 bytes docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.html | 78 - docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.pdf | Bin 16661 -> 0 bytes .../libcurl/opts/CURLOPT_FTP_RESPONSE_TIMEOUT.html | 65 - docs/libcurl/opts/CURLOPT_FTP_RESPONSE_TIMEOUT.pdf | Bin 17523 -> 0 bytes docs/libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.html | 67 - docs/libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.pdf | Bin 15324 -> 0 bytes docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.html | 71 - docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.pdf | Bin 13769 -> 0 bytes docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.html | 66 - docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.pdf | Bin 15471 -> 0 bytes docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.html | 66 - docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.pdf | Bin 14852 -> 0 bytes docs/libcurl/opts/CURLOPT_FTP_USE_PRET.html | 65 - docs/libcurl/opts/CURLOPT_FTP_USE_PRET.pdf | Bin 13369 -> 0 bytes docs/libcurl/opts/CURLOPT_GSSAPI_DELEGATION.html | 65 - docs/libcurl/opts/CURLOPT_GSSAPI_DELEGATION.pdf | Bin 15327 -> 0 bytes docs/libcurl/opts/CURLOPT_HEADER.html | 78 - docs/libcurl/opts/CURLOPT_HEADER.pdf | Bin 17872 -> 0 bytes docs/libcurl/opts/CURLOPT_HEADERDATA.html | 67 - docs/libcurl/opts/CURLOPT_HEADERDATA.pdf | Bin 16709 -> 0 bytes docs/libcurl/opts/CURLOPT_HEADERFUNCTION.html | 91 - docs/libcurl/opts/CURLOPT_HEADERFUNCTION.pdf | Bin 22417 -> 0 bytes docs/libcurl/opts/CURLOPT_HEADEROPT.html | 67 - docs/libcurl/opts/CURLOPT_HEADEROPT.pdf | Bin 17171 -> 0 bytes docs/libcurl/opts/CURLOPT_HTTP200ALIASES.html | 72 - docs/libcurl/opts/CURLOPT_HTTP200ALIASES.pdf | Bin 17184 -> 0 bytes docs/libcurl/opts/CURLOPT_HTTPAUTH.html | 96 - docs/libcurl/opts/CURLOPT_HTTPAUTH.pdf | Bin 22212 -> 0 bytes docs/libcurl/opts/CURLOPT_HTTPGET.html | 79 - docs/libcurl/opts/CURLOPT_HTTPGET.pdf | Bin 18443 -> 0 bytes docs/libcurl/opts/CURLOPT_HTTPHEADER.html | 94 - docs/libcurl/opts/CURLOPT_HTTPHEADER.pdf | Bin 24392 -> 0 bytes docs/libcurl/opts/CURLOPT_HTTPPOST.html | 96 - docs/libcurl/opts/CURLOPT_HTTPPOST.pdf | Bin 20307 -> 0 bytes docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.html | 67 - docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.pdf | Bin 16752 -> 0 bytes .../opts/CURLOPT_HTTP_CONTENT_DECODING.html | 70 - .../libcurl/opts/CURLOPT_HTTP_CONTENT_DECODING.pdf | Bin 15873 -> 0 bytes .../opts/CURLOPT_HTTP_TRANSFER_DECODING.html | 70 - .../opts/CURLOPT_HTTP_TRANSFER_DECODING.pdf | Bin 13449 -> 0 bytes docs/libcurl/opts/CURLOPT_HTTP_VERSION.html | 80 - docs/libcurl/opts/CURLOPT_HTTP_VERSION.pdf | Bin 19018 -> 0 bytes .../opts/CURLOPT_IGNORE_CONTENT_LENGTH.html | 85 - .../libcurl/opts/CURLOPT_IGNORE_CONTENT_LENGTH.pdf | Bin 16264 -> 0 bytes docs/libcurl/opts/CURLOPT_INFILESIZE.html | 84 - docs/libcurl/opts/CURLOPT_INFILESIZE.pdf | Bin 18647 -> 0 bytes docs/libcurl/opts/CURLOPT_INFILESIZE_LARGE.html | 89 - docs/libcurl/opts/CURLOPT_INFILESIZE_LARGE.pdf | Bin 18761 -> 0 bytes docs/libcurl/opts/CURLOPT_INTERFACE.3 | 3 + docs/libcurl/opts/CURLOPT_INTERFACE.html | 66 - docs/libcurl/opts/CURLOPT_INTERFACE.pdf | Bin 15957 -> 0 bytes docs/libcurl/opts/CURLOPT_INTERLEAVEDATA.html | 65 - docs/libcurl/opts/CURLOPT_INTERLEAVEDATA.pdf | Bin 16669 -> 0 bytes docs/libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.html | 75 - docs/libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.pdf | Bin 18907 -> 0 bytes docs/libcurl/opts/CURLOPT_IOCTLDATA.html | 65 - docs/libcurl/opts/CURLOPT_IOCTLDATA.pdf | Bin 16450 -> 0 bytes docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.html | 88 - docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.pdf | Bin 19390 -> 0 bytes docs/libcurl/opts/CURLOPT_IPRESOLVE.html | 71 - docs/libcurl/opts/CURLOPT_IPRESOLVE.pdf | Bin 13518 -> 0 bytes docs/libcurl/opts/CURLOPT_ISSUERCERT.3 | 3 + docs/libcurl/opts/CURLOPT_ISSUERCERT.html | 67 - docs/libcurl/opts/CURLOPT_ISSUERCERT.pdf | Bin 17510 -> 0 bytes docs/libcurl/opts/CURLOPT_KEEP_SENDING_ON_ERROR.3 | 52 + docs/libcurl/opts/CURLOPT_KEYPASSWD.3 | 3 + docs/libcurl/opts/CURLOPT_KEYPASSWD.html | 65 - docs/libcurl/opts/CURLOPT_KEYPASSWD.pdf | Bin 17509 -> 0 bytes docs/libcurl/opts/CURLOPT_KRBLEVEL.3 | 3 + docs/libcurl/opts/CURLOPT_KRBLEVEL.html | 65 - docs/libcurl/opts/CURLOPT_KRBLEVEL.pdf | Bin 14150 -> 0 bytes docs/libcurl/opts/CURLOPT_LOCALPORT.html | 65 - docs/libcurl/opts/CURLOPT_LOCALPORT.pdf | Bin 16000 -> 0 bytes docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.html | 65 - docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.pdf | Bin 16822 -> 0 bytes docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.3 | 3 + docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.html | 67 - docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.pdf | Bin 18290 -> 0 bytes docs/libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.html | 65 - docs/libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.pdf | Bin 15754 -> 0 bytes docs/libcurl/opts/CURLOPT_LOW_SPEED_TIME.html | 65 - docs/libcurl/opts/CURLOPT_LOW_SPEED_TIME.pdf | Bin 15606 -> 0 bytes docs/libcurl/opts/CURLOPT_MAIL_AUTH.3 | 3 + docs/libcurl/opts/CURLOPT_MAIL_AUTH.html | 67 - docs/libcurl/opts/CURLOPT_MAIL_AUTH.pdf | Bin 16884 -> 0 bytes docs/libcurl/opts/CURLOPT_MAIL_FROM.3 | 3 + docs/libcurl/opts/CURLOPT_MAIL_FROM.html | 67 - docs/libcurl/opts/CURLOPT_MAIL_FROM.pdf | Bin 14001 -> 0 bytes docs/libcurl/opts/CURLOPT_MAIL_RCPT.html | 73 - docs/libcurl/opts/CURLOPT_MAIL_RCPT.pdf | Bin 18312 -> 0 bytes docs/libcurl/opts/CURLOPT_MAXCONNECTS.html | 68 - docs/libcurl/opts/CURLOPT_MAXCONNECTS.pdf | Bin 18559 -> 0 bytes docs/libcurl/opts/CURLOPT_MAXFILESIZE.html | 67 - docs/libcurl/opts/CURLOPT_MAXFILESIZE.pdf | Bin 18237 -> 0 bytes docs/libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.html | 71 - docs/libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.pdf | Bin 17301 -> 0 bytes docs/libcurl/opts/CURLOPT_MAXREDIRS.html | 83 - docs/libcurl/opts/CURLOPT_MAXREDIRS.pdf | Bin 18584 -> 0 bytes .../libcurl/opts/CURLOPT_MAX_RECV_SPEED_LARGE.html | 71 - docs/libcurl/opts/CURLOPT_MAX_RECV_SPEED_LARGE.pdf | Bin 15677 -> 0 bytes .../libcurl/opts/CURLOPT_MAX_SEND_SPEED_LARGE.html | 71 - docs/libcurl/opts/CURLOPT_MAX_SEND_SPEED_LARGE.pdf | Bin 16199 -> 0 bytes docs/libcurl/opts/CURLOPT_NETRC.html | 78 - docs/libcurl/opts/CURLOPT_NETRC.pdf | Bin 19028 -> 0 bytes docs/libcurl/opts/CURLOPT_NETRC_FILE.3 | 3 + docs/libcurl/opts/CURLOPT_NETRC_FILE.html | 65 - docs/libcurl/opts/CURLOPT_NETRC_FILE.pdf | Bin 16226 -> 0 bytes docs/libcurl/opts/CURLOPT_NEW_DIRECTORY_PERMS.html | 70 - docs/libcurl/opts/CURLOPT_NEW_DIRECTORY_PERMS.pdf | Bin 16353 -> 0 bytes docs/libcurl/opts/CURLOPT_NEW_FILE_PERMS.html | 70 - docs/libcurl/opts/CURLOPT_NEW_FILE_PERMS.pdf | Bin 16205 -> 0 bytes docs/libcurl/opts/CURLOPT_NOBODY.html | 79 - docs/libcurl/opts/CURLOPT_NOBODY.pdf | Bin 14356 -> 0 bytes docs/libcurl/opts/CURLOPT_NOPROGRESS.html | 79 - docs/libcurl/opts/CURLOPT_NOPROGRESS.pdf | Bin 17786 -> 0 bytes docs/libcurl/opts/CURLOPT_NOPROXY.3 | 3 + docs/libcurl/opts/CURLOPT_NOPROXY.html | 65 - docs/libcurl/opts/CURLOPT_NOPROXY.pdf | Bin 14418 -> 0 bytes docs/libcurl/opts/CURLOPT_NOSIGNAL.html | 64 - docs/libcurl/opts/CURLOPT_NOSIGNAL.pdf | Bin 17528 -> 0 bytes docs/libcurl/opts/CURLOPT_OPENSOCKETDATA.html | 65 - docs/libcurl/opts/CURLOPT_OPENSOCKETDATA.pdf | Bin 16950 -> 0 bytes docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.html | 95 - docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.pdf | Bin 21609 -> 0 bytes docs/libcurl/opts/CURLOPT_PASSWORD.3 | 3 + docs/libcurl/opts/CURLOPT_PASSWORD.html | 67 - docs/libcurl/opts/CURLOPT_PASSWORD.pdf | Bin 16835 -> 0 bytes docs/libcurl/opts/CURLOPT_PATH_AS_IS.html | 80 - docs/libcurl/opts/CURLOPT_PATH_AS_IS.pdf | Bin 16343 -> 0 bytes docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.3 | 16 +- docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.html | 111 - docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.pdf | Bin 21339 -> 0 bytes docs/libcurl/opts/CURLOPT_PIPEWAIT.html | 69 - docs/libcurl/opts/CURLOPT_PIPEWAIT.pdf | Bin 17779 -> 0 bytes docs/libcurl/opts/CURLOPT_PORT.html | 67 - docs/libcurl/opts/CURLOPT_PORT.pdf | Bin 15340 -> 0 bytes docs/libcurl/opts/CURLOPT_POST.html | 72 - docs/libcurl/opts/CURLOPT_POST.pdf | Bin 18716 -> 0 bytes docs/libcurl/opts/CURLOPT_POSTFIELDS.html | 89 - docs/libcurl/opts/CURLOPT_POSTFIELDS.pdf | Bin 21085 -> 0 bytes docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.html | 82 - docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.pdf | Bin 17195 -> 0 bytes docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.html | 87 - docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.pdf | Bin 14174 -> 0 bytes docs/libcurl/opts/CURLOPT_POSTQUOTE.html | 66 - docs/libcurl/opts/CURLOPT_POSTQUOTE.pdf | Bin 15882 -> 0 bytes docs/libcurl/opts/CURLOPT_POSTREDIR.html | 87 - docs/libcurl/opts/CURLOPT_POSTREDIR.pdf | Bin 18145 -> 0 bytes docs/libcurl/opts/CURLOPT_PREQUOTE.3 | 3 +- docs/libcurl/opts/CURLOPT_PREQUOTE.html | 65 - docs/libcurl/opts/CURLOPT_PREQUOTE.pdf | Bin 15860 -> 0 bytes docs/libcurl/opts/CURLOPT_PRE_PROXY.3 | 72 + docs/libcurl/opts/CURLOPT_PRIVATE.html | 82 - docs/libcurl/opts/CURLOPT_PRIVATE.pdf | Bin 16942 -> 0 bytes docs/libcurl/opts/CURLOPT_PROGRESSDATA.html | 65 - docs/libcurl/opts/CURLOPT_PROGRESSDATA.pdf | Bin 16921 -> 0 bytes docs/libcurl/opts/CURLOPT_PROGRESSFUNCTION.html | 74 - docs/libcurl/opts/CURLOPT_PROGRESSFUNCTION.pdf | Bin 21117 -> 0 bytes docs/libcurl/opts/CURLOPT_PROTOCOLS.html | 112 - docs/libcurl/opts/CURLOPT_PROTOCOLS.pdf | Bin 18467 -> 0 bytes docs/libcurl/opts/CURLOPT_PROXY.3 | 23 +- docs/libcurl/opts/CURLOPT_PROXY.html | 75 - docs/libcurl/opts/CURLOPT_PROXY.pdf | Bin 22666 -> 0 bytes docs/libcurl/opts/CURLOPT_PROXYAUTH.html | 66 - docs/libcurl/opts/CURLOPT_PROXYAUTH.pdf | Bin 17721 -> 0 bytes docs/libcurl/opts/CURLOPT_PROXYHEADER.html | 73 - docs/libcurl/opts/CURLOPT_PROXYHEADER.pdf | Bin 16922 -> 0 bytes docs/libcurl/opts/CURLOPT_PROXYPASSWORD.3 | 3 + docs/libcurl/opts/CURLOPT_PROXYPASSWORD.html | 66 - docs/libcurl/opts/CURLOPT_PROXYPASSWORD.pdf | Bin 17502 -> 0 bytes docs/libcurl/opts/CURLOPT_PROXYPORT.3 | 3 +- docs/libcurl/opts/CURLOPT_PROXYPORT.html | 66 - docs/libcurl/opts/CURLOPT_PROXYPORT.pdf | Bin 15748 -> 0 bytes docs/libcurl/opts/CURLOPT_PROXYTYPE.3 | 27 +- docs/libcurl/opts/CURLOPT_PROXYTYPE.html | 67 - docs/libcurl/opts/CURLOPT_PROXYTYPE.pdf | Bin 17486 -> 0 bytes docs/libcurl/opts/CURLOPT_PROXYUSERNAME.3 | 3 + docs/libcurl/opts/CURLOPT_PROXYUSERNAME.html | 72 - docs/libcurl/opts/CURLOPT_PROXYUSERNAME.pdf | Bin 17367 -> 0 bytes docs/libcurl/opts/CURLOPT_PROXYUSERPWD.3 | 3 + docs/libcurl/opts/CURLOPT_PROXYUSERPWD.html | 66 - docs/libcurl/opts/CURLOPT_PROXYUSERPWD.pdf | Bin 17169 -> 0 bytes docs/libcurl/opts/CURLOPT_PROXY_CAINFO.3 | 73 + docs/libcurl/opts/CURLOPT_PROXY_CAPATH.3 | 60 + docs/libcurl/opts/CURLOPT_PROXY_CRLFILE.3 | 66 + docs/libcurl/opts/CURLOPT_PROXY_KEYPASSWD.3 | 53 + docs/libcurl/opts/CURLOPT_PROXY_PINNEDPUBLICKEY.3 | 102 + docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.3 | 3 + docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.html | 65 - docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.pdf | Bin 15660 -> 0 bytes docs/libcurl/opts/CURLOPT_PROXY_SSLCERT.3 | 61 + docs/libcurl/opts/CURLOPT_PROXY_SSLCERTTYPE.3 | 55 + docs/libcurl/opts/CURLOPT_PROXY_SSLKEY.3 | 57 + docs/libcurl/opts/CURLOPT_PROXY_SSLKEYTYPE.3 | 49 + docs/libcurl/opts/CURLOPT_PROXY_SSLVERSION.3 | 74 + docs/libcurl/opts/CURLOPT_PROXY_SSL_CIPHER_LIST.3 | 71 + docs/libcurl/opts/CURLOPT_PROXY_SSL_OPTIONS.3 | 61 + docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYHOST.3 | 82 + docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYPEER.3 | 89 + docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_PASSWORD.3 | 51 + docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_TYPE.3 | 59 + docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_USERNAME.3 | 51 + docs/libcurl/opts/CURLOPT_PROXY_TRANSFER_MODE.html | 65 - docs/libcurl/opts/CURLOPT_PROXY_TRANSFER_MODE.pdf | Bin 17092 -> 0 bytes docs/libcurl/opts/CURLOPT_PUT.html | 66 - docs/libcurl/opts/CURLOPT_PUT.pdf | Bin 16970 -> 0 bytes docs/libcurl/opts/CURLOPT_QUOTE.html | 91 - docs/libcurl/opts/CURLOPT_QUOTE.pdf | Bin 18989 -> 0 bytes docs/libcurl/opts/CURLOPT_RANDOM_FILE.3 | 3 + docs/libcurl/opts/CURLOPT_RANDOM_FILE.html | 65 - docs/libcurl/opts/CURLOPT_RANDOM_FILE.pdf | Bin 13165 -> 0 bytes docs/libcurl/opts/CURLOPT_RANGE.3 | 3 + docs/libcurl/opts/CURLOPT_RANGE.html | 81 - docs/libcurl/opts/CURLOPT_RANGE.pdf | Bin 18655 -> 0 bytes docs/libcurl/opts/CURLOPT_READDATA.html | 81 - docs/libcurl/opts/CURLOPT_READDATA.pdf | Bin 18359 -> 0 bytes docs/libcurl/opts/CURLOPT_READFUNCTION.html | 74 - docs/libcurl/opts/CURLOPT_READFUNCTION.pdf | Bin 21242 -> 0 bytes docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.3 | 3 + docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.html | 113 - docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.pdf | Bin 18567 -> 0 bytes docs/libcurl/opts/CURLOPT_REFERER.3 | 3 + docs/libcurl/opts/CURLOPT_REFERER.html | 77 - docs/libcurl/opts/CURLOPT_REFERER.pdf | Bin 16611 -> 0 bytes docs/libcurl/opts/CURLOPT_RESOLVE.html | 93 - docs/libcurl/opts/CURLOPT_RESOLVE.pdf | Bin 21183 -> 0 bytes docs/libcurl/opts/CURLOPT_RESUME_FROM.html | 86 - docs/libcurl/opts/CURLOPT_RESUME_FROM.pdf | Bin 17885 -> 0 bytes docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.html | 93 - docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.pdf | Bin 15126 -> 0 bytes docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.html | 65 - docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.pdf | Bin 13595 -> 0 bytes docs/libcurl/opts/CURLOPT_RTSP_REQUEST.html | 87 - docs/libcurl/opts/CURLOPT_RTSP_REQUEST.pdf | Bin 25671 -> 0 bytes docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.html | 65 - docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.pdf | Bin 13499 -> 0 bytes docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.3 | 3 + docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.html | 65 - docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.pdf | Bin 15854 -> 0 bytes docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.3 | 3 + docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.html | 65 - docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.pdf | Bin 18869 -> 0 bytes docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.3 | 3 + docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.html | 70 - docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.pdf | Bin 13800 -> 0 bytes docs/libcurl/opts/CURLOPT_SASL_IR.html | 67 - docs/libcurl/opts/CURLOPT_SASL_IR.pdf | Bin 14295 -> 0 bytes docs/libcurl/opts/CURLOPT_SEEKDATA.html | 65 - docs/libcurl/opts/CURLOPT_SEEKDATA.pdf | Bin 16781 -> 0 bytes docs/libcurl/opts/CURLOPT_SEEKFUNCTION.html | 81 - docs/libcurl/opts/CURLOPT_SEEKFUNCTION.pdf | Bin 19738 -> 0 bytes docs/libcurl/opts/CURLOPT_SERVICE_NAME.3 | 3 + docs/libcurl/opts/CURLOPT_SERVICE_NAME.html | 65 - docs/libcurl/opts/CURLOPT_SERVICE_NAME.pdf | Bin 15498 -> 0 bytes docs/libcurl/opts/CURLOPT_SHARE.html | 68 - docs/libcurl/opts/CURLOPT_SHARE.pdf | Bin 16529 -> 0 bytes docs/libcurl/opts/CURLOPT_SOCKOPTDATA.html | 65 - docs/libcurl/opts/CURLOPT_SOCKOPTDATA.pdf | Bin 16846 -> 0 bytes docs/libcurl/opts/CURLOPT_SOCKOPTFUNCTION.html | 89 - docs/libcurl/opts/CURLOPT_SOCKOPTFUNCTION.pdf | Bin 21841 -> 0 bytes docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.html | 65 - docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.pdf | Bin 14143 -> 0 bytes docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.3 | 3 + .../opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.html | 66 - .../libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.pdf | Bin 17845 -> 0 bytes docs/libcurl/opts/CURLOPT_SSH_AUTH_TYPES.html | 66 - docs/libcurl/opts/CURLOPT_SSH_AUTH_TYPES.pdf | Bin 16391 -> 0 bytes .../libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.3 | 3 + .../opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.html | 70 - .../opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.pdf | Bin 14610 -> 0 bytes docs/libcurl/opts/CURLOPT_SSH_KEYDATA.html | 65 - docs/libcurl/opts/CURLOPT_SSH_KEYDATA.pdf | Bin 17663 -> 0 bytes docs/libcurl/opts/CURLOPT_SSH_KEYFUNCTION.html | 111 - docs/libcurl/opts/CURLOPT_SSH_KEYFUNCTION.pdf | Bin 22147 -> 0 bytes docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.3 | 3 + docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.html | 65 - docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.pdf | Bin 17302 -> 0 bytes docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.3 | 3 + docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.html | 71 - docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.pdf | Bin 19521 -> 0 bytes docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.3 | 3 + docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.html | 71 - docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.pdf | Bin 17690 -> 0 bytes docs/libcurl/opts/CURLOPT_SSLCERT.3 | 3 + docs/libcurl/opts/CURLOPT_SSLCERT.html | 67 - docs/libcurl/opts/CURLOPT_SSLCERT.pdf | Bin 17042 -> 0 bytes docs/libcurl/opts/CURLOPT_SSLCERTTYPE.3 | 3 + docs/libcurl/opts/CURLOPT_SSLCERTTYPE.html | 65 - docs/libcurl/opts/CURLOPT_SSLCERTTYPE.pdf | Bin 14376 -> 0 bytes docs/libcurl/opts/CURLOPT_SSLENGINE.3 | 3 + docs/libcurl/opts/CURLOPT_SSLENGINE.html | 70 - docs/libcurl/opts/CURLOPT_SSLENGINE.pdf | Bin 14272 -> 0 bytes docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.html | 70 - docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.pdf | Bin 16804 -> 0 bytes docs/libcurl/opts/CURLOPT_SSLKEY.3 | 3 + docs/libcurl/opts/CURLOPT_SSLKEY.html | 66 - docs/libcurl/opts/CURLOPT_SSLKEY.pdf | Bin 16985 -> 0 bytes docs/libcurl/opts/CURLOPT_SSLKEYTYPE.3 | 3 + docs/libcurl/opts/CURLOPT_SSLKEYTYPE.html | 66 - docs/libcurl/opts/CURLOPT_SSLKEYTYPE.pdf | Bin 17153 -> 0 bytes docs/libcurl/opts/CURLOPT_SSLVERSION.3 | 2 + docs/libcurl/opts/CURLOPT_SSLVERSION.html | 96 - docs/libcurl/opts/CURLOPT_SSLVERSION.pdf | Bin 15424 -> 0 bytes docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.3 | 10 +- docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.html | 71 - docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.pdf | Bin 15130 -> 0 bytes docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.html | 65 - docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.pdf | Bin 17229 -> 0 bytes docs/libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.html | 150 - docs/libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.pdf | Bin 23471 -> 0 bytes docs/libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.html | 65 - docs/libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.pdf | Bin 13349 -> 0 bytes docs/libcurl/opts/CURLOPT_SSL_ENABLE_NPN.html | 65 - docs/libcurl/opts/CURLOPT_SSL_ENABLE_NPN.pdf | Bin 13348 -> 0 bytes docs/libcurl/opts/CURLOPT_SSL_FALSESTART.html | 65 - docs/libcurl/opts/CURLOPT_SSL_FALSESTART.pdf | Bin 13864 -> 0 bytes docs/libcurl/opts/CURLOPT_SSL_OPTIONS.html | 70 - docs/libcurl/opts/CURLOPT_SSL_OPTIONS.pdf | Bin 20269 -> 0 bytes docs/libcurl/opts/CURLOPT_SSL_SESSIONID_CACHE.html | 70 - docs/libcurl/opts/CURLOPT_SSL_SESSIONID_CACHE.pdf | Bin 13924 -> 0 bytes docs/libcurl/opts/CURLOPT_SSL_VERIFYHOST.html | 86 - docs/libcurl/opts/CURLOPT_SSL_VERIFYHOST.pdf | Bin 21755 -> 0 bytes docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.3 | 4 +- docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.html | 82 - docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.pdf | Bin 19439 -> 0 bytes docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.html | 67 - docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.pdf | Bin 14414 -> 0 bytes docs/libcurl/opts/CURLOPT_STDERR.html | 76 - docs/libcurl/opts/CURLOPT_STDERR.pdf | Bin 16652 -> 0 bytes docs/libcurl/opts/CURLOPT_STREAM_DEPENDS.html | 68 - docs/libcurl/opts/CURLOPT_STREAM_DEPENDS.pdf | Bin 17979 -> 0 bytes docs/libcurl/opts/CURLOPT_STREAM_DEPENDS_E.html | 69 - docs/libcurl/opts/CURLOPT_STREAM_DEPENDS_E.pdf | Bin 16308 -> 0 bytes docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.html | 69 - docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.pdf | Bin 19108 -> 0 bytes docs/libcurl/opts/CURLOPT_TCP_FASTOPEN.html | 65 - docs/libcurl/opts/CURLOPT_TCP_FASTOPEN.pdf | Bin 13667 -> 0 bytes docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.html | 83 - docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.pdf | Bin 17113 -> 0 bytes docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.3 | 2 +- docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.html | 83 - docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.pdf | Bin 15902 -> 0 bytes docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.3 | 4 +- docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.html | 83 - docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.pdf | Bin 14191 -> 0 bytes docs/libcurl/opts/CURLOPT_TCP_NODELAY.html | 67 - docs/libcurl/opts/CURLOPT_TCP_NODELAY.pdf | Bin 14424 -> 0 bytes docs/libcurl/opts/CURLOPT_TELNETOPTIONS.html | 65 - docs/libcurl/opts/CURLOPT_TELNETOPTIONS.pdf | Bin 13482 -> 0 bytes docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.html | 65 - docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.pdf | Bin 15997 -> 0 bytes docs/libcurl/opts/CURLOPT_TFTP_NO_OPTIONS.html | 92 - docs/libcurl/opts/CURLOPT_TFTP_NO_OPTIONS.pdf | Bin 17804 -> 0 bytes docs/libcurl/opts/CURLOPT_TIMECONDITION.html | 82 - docs/libcurl/opts/CURLOPT_TIMECONDITION.pdf | Bin 19688 -> 0 bytes docs/libcurl/opts/CURLOPT_TIMEOUT.html | 80 - docs/libcurl/opts/CURLOPT_TIMEOUT.pdf | Bin 18825 -> 0 bytes docs/libcurl/opts/CURLOPT_TIMEOUT_MS.html | 81 - docs/libcurl/opts/CURLOPT_TIMEOUT_MS.pdf | Bin 18943 -> 0 bytes docs/libcurl/opts/CURLOPT_TIMEVALUE.html | 81 - docs/libcurl/opts/CURLOPT_TIMEVALUE.pdf | Bin 17237 -> 0 bytes docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.3 | 3 + docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.html | 65 - docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.pdf | Bin 16462 -> 0 bytes docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.3 | 3 + docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.html | 68 - docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.pdf | Bin 17402 -> 0 bytes docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.3 | 3 + docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.html | 65 - docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.pdf | Bin 16580 -> 0 bytes docs/libcurl/opts/CURLOPT_TRANSFERTEXT.html | 66 - docs/libcurl/opts/CURLOPT_TRANSFERTEXT.pdf | Bin 13995 -> 0 bytes docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING.html | 67 - docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING.pdf | Bin 17594 -> 0 bytes docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.3 | 9 +- docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.html | 84 - docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.pdf | Bin 18048 -> 0 bytes docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.html | 70 - docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.pdf | Bin 15653 -> 0 bytes docs/libcurl/opts/CURLOPT_UPLOAD.html | 90 - docs/libcurl/opts/CURLOPT_UPLOAD.pdf | Bin 19528 -> 0 bytes docs/libcurl/opts/CURLOPT_URL.3 | 3 + docs/libcurl/opts/CURLOPT_URL.html | 167 - docs/libcurl/opts/CURLOPT_URL.pdf | Bin 34969 -> 0 bytes docs/libcurl/opts/CURLOPT_USERAGENT.3 | 3 + docs/libcurl/opts/CURLOPT_USERAGENT.html | 76 - docs/libcurl/opts/CURLOPT_USERAGENT.pdf | Bin 17247 -> 0 bytes docs/libcurl/opts/CURLOPT_USERNAME.3 | 3 + docs/libcurl/opts/CURLOPT_USERNAME.html | 76 - docs/libcurl/opts/CURLOPT_USERNAME.pdf | Bin 18851 -> 0 bytes docs/libcurl/opts/CURLOPT_USERPWD.3 | 3 + docs/libcurl/opts/CURLOPT_USERPWD.html | 72 - docs/libcurl/opts/CURLOPT_USERPWD.pdf | Bin 19426 -> 0 bytes docs/libcurl/opts/CURLOPT_USE_SSL.html | 88 - docs/libcurl/opts/CURLOPT_USE_SSL.pdf | Bin 17222 -> 0 bytes docs/libcurl/opts/CURLOPT_VERBOSE.html | 80 - docs/libcurl/opts/CURLOPT_VERBOSE.pdf | Bin 18237 -> 0 bytes docs/libcurl/opts/CURLOPT_WILDCARDMATCH.html | 88 - docs/libcurl/opts/CURLOPT_WILDCARDMATCH.pdf | Bin 24154 -> 0 bytes docs/libcurl/opts/CURLOPT_WRITEDATA.html | 67 - docs/libcurl/opts/CURLOPT_WRITEDATA.pdf | Bin 18525 -> 0 bytes docs/libcurl/opts/CURLOPT_WRITEFUNCTION.html | 79 - docs/libcurl/opts/CURLOPT_WRITEFUNCTION.pdf | Bin 20749 -> 0 bytes docs/libcurl/opts/CURLOPT_XFERINFODATA.html | 66 - docs/libcurl/opts/CURLOPT_XFERINFODATA.pdf | Bin 17147 -> 0 bytes docs/libcurl/opts/CURLOPT_XFERINFOFUNCTION.html | 73 - docs/libcurl/opts/CURLOPT_XFERINFOFUNCTION.pdf | Bin 20188 -> 0 bytes docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.3 | 3 + docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.html | 66 - docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.pdf | Bin 16959 -> 0 bytes docs/libcurl/opts/Makefile.am | 79 +- docs/libcurl/opts/Makefile.in | 79 +- docs/libcurl/symbols-in-versions | 28 + docs/mk-ca-bundle.html | 107 - docs/mk-ca-bundle.pdf | Bin 21710 -> 0 bytes include/README | 2 +- include/curl/Makefile.in | 4 +- include/curl/curl.h | 103 +- include/curl/curlver.h | 14 +- include/curl/easy.h | 4 +- include/curl/stdcheaders.h | 6 +- include/curl/typecheck-gcc.h | 58 +- lib/CMakeLists.txt | 5 + lib/Makefile.am | 4 +- lib/Makefile.in | 109 +- lib/Makefile.inc | 12 +- lib/Makefile.netware | 2 +- lib/Makefile.vc10 | 4 +- lib/Makefile.vc11 | 4 +- lib/Makefile.vc12 | 4 +- lib/Makefile.vc14 | 4 +- lib/Makefile.vc6 | 691 - lib/Makefile.vc7 | 4 +- lib/Makefile.vc8 | 4 +- lib/Makefile.vc9 | 4 +- lib/amigaos.c | 2 +- lib/asyn-ares.c | 4 +- lib/asyn-thread.c | 24 +- lib/base64.c | 5 + lib/checksrc.pl | 59 +- lib/config-amigaos.h | 4 +- lib/config-symbian.h | 6 +- lib/conncache.c | 9 +- lib/connect.c | 103 +- lib/connect.h | 13 +- lib/content_encoding.c | 25 +- lib/cookie.c | 161 +- lib/cookie.h | 4 +- lib/curl_addrinfo.c | 60 +- lib/curl_addrinfo.h | 2 +- lib/curl_config.h.cmake | 14 +- lib/curl_config.h.in | 40 +- lib/curl_des.c | 2 +- lib/curl_endian.c | 18 +- lib/curl_endian.h | 18 +- lib/curl_gethostname.c | 8 +- lib/curl_gssapi.c | 2 +- lib/curl_hmac.h | 26 +- lib/curl_ntlm_core.c | 10 +- lib/curl_ntlm_wb.c | 15 +- lib/curl_sasl.c | 24 +- lib/curl_sec.h | 16 +- lib/curl_setup.h | 23 +- lib/curl_threads.c | 5 +- lib/curl_threads.h | 5 +- lib/curlx.h | 13 +- lib/dict.c | 25 +- lib/easy.c | 46 +- lib/escape.c | 43 +- lib/file.c | 15 +- lib/formdata.c | 114 +- lib/formdata.h | 3 +- lib/ftp.c | 302 +- lib/ftp.h | 6 +- lib/ftplistparser.c | 11 +- lib/getinfo.c | 44 +- lib/gopher.c | 37 +- lib/hash.c | 6 +- lib/hash.h | 15 +- lib/hmac.c | 10 +- lib/hostcheck.c | 23 +- lib/hostip.c | 11 +- lib/hostip.h | 8 +- lib/hostip4.c | 2 +- lib/http.c | 214 +- lib/http.h | 4 + lib/http2.c | 306 +- lib/http2.h | 8 + lib/http_chunks.c | 14 +- lib/http_digest.c | 22 +- lib/http_negotiate.c | 17 +- lib/http_ntlm.c | 8 +- lib/http_proxy.c | 544 +- lib/http_proxy.h | 4 +- lib/if2ip.c | 10 +- lib/imap.c | 38 +- lib/inet_ntop.c | 6 +- lib/inet_pton.c | 8 +- lib/krb5.c | 14 +- lib/ldap.c | 101 +- lib/libcurl.plist | 6 +- lib/libcurl.rc | 8 +- lib/md4.c | 3 +- lib/md5.c | 7 +- lib/memdebug.c | 2 +- lib/mk-ca-bundle.pl | 153 +- lib/mk-ca-bundle.vbs | 261 +- lib/mprintf.c | 51 +- lib/multi.c | 142 +- lib/multihandle.h | 4 +- lib/multiif.h | 4 +- lib/netrc.c | 18 +- lib/non-ascii.c | 4 +- lib/nwlib.c | 10 +- lib/nwos.c | 8 +- lib/parsedate.c | 20 +- lib/pingpong.c | 17 +- lib/pingpong.h | 2 +- lib/pipeline.c | 6 +- lib/pop3.c | 27 +- lib/progress.c | 40 +- lib/rand.c | 132 + lib/rand.h | 43 + lib/rawstr.c | 148 - lib/rawstr.h | 47 - lib/rtsp.c | 28 +- lib/security.c | 28 +- lib/select.c | 37 +- lib/select.h | 11 +- lib/sendf.c | 21 +- lib/sendf.h | 2 + lib/setup-os400.h | 52 +- lib/setup-vms.h | 139 +- lib/share.h | 8 +- lib/smb.c | 55 +- lib/smtp.c | 23 +- lib/socks.c | 50 +- lib/socks.h | 5 +- lib/socks_gssapi.c | 24 +- lib/socks_sspi.c | 11 +- lib/speedcheck.c | 6 +- lib/ssh.c | 112 +- lib/strcase.c | 176 + lib/strcase.h | 51 + lib/strdup.c | 27 +- lib/strdup.h | 5 +- lib/strequal.c | 79 - lib/strequal.h | 31 - lib/strerror.c | 119 +- lib/strerror.h | 4 +- lib/strtoofft.c | 4 +- lib/system_win32.c | 34 +- lib/telnet.c | 47 +- lib/tftp.c | 21 +- lib/timeval.c | 6 +- lib/timeval.h | 6 +- lib/transfer.c | 43 +- lib/url.c | 1380 +- lib/url.h | 13 + lib/urldata.h | 165 +- lib/vauth/cleartext.c | 26 +- lib/vauth/digest.c | 51 +- lib/vauth/digest_sspi.c | 288 +- lib/vauth/ntlm.c | 16 +- lib/vauth/ntlm.h | 2 +- lib/vauth/spnego_sspi.c | 2 +- lib/version.c | 17 +- lib/vtls/axtls.c | 102 +- lib/vtls/axtls.h | 8 +- lib/vtls/cyassl.c | 148 +- lib/vtls/cyassl.h | 10 +- lib/vtls/darwinssl.c | 484 +- lib/vtls/darwinssl.h | 6 +- lib/vtls/gskit.c | 364 +- lib/vtls/gskit.h | 7 +- lib/vtls/gtls.c | 329 +- lib/vtls/gtls.h | 15 +- lib/vtls/mbedtls.c | 156 +- lib/vtls/mbedtls.h | 9 +- lib/vtls/nss.c | 290 +- lib/vtls/nssg.h | 11 +- lib/vtls/openssl.c | 473 +- lib/vtls/openssl.h | 9 +- lib/vtls/polarssl.c | 167 +- lib/vtls/polarssl.h | 3 +- lib/vtls/polarssl_threadlock.c | 4 +- lib/vtls/schannel.c | 170 +- lib/vtls/schannel.h | 4 +- lib/vtls/vtls.c | 309 +- lib/vtls/vtls.h | 48 +- lib/x509asn1.c | 206 +- lib/x509asn1.h | 26 +- ltmain.sh | 6 +- m4/curl-compilers.m4 | 2 +- m4/curl-functions.m4 | 27 +- maketgz | 57 +- packages/AIX/Makefile.in | 4 +- packages/AIX/RPM/Makefile.in | 4 +- packages/AIX/RPM/README | 2 +- packages/DOS/common.dj | 2 +- packages/Linux/Makefile.in | 4 +- packages/Linux/RPM/Makefile.in | 4 +- packages/Makefile.in | 4 +- packages/OS400/README.OS400 | 22 +- packages/OS400/ccsidcurl.c | 25 +- packages/OS400/curl.inc.in | 54 + packages/Solaris/Makefile.in | 4 +- packages/Symbian/group/curl.mmp | 4 +- packages/Symbian/group/libcurl.mmp | 4 +- packages/Win32/Makefile.in | 4 +- packages/Win32/cygwin/Makefile.in | 4 +- packages/Win32/cygwin/README | 10 +- packages/vms/Makefile.in | 4 +- packages/vms/curlmsg.h | 3 +- packages/vms/curlmsg.msg | 2 +- packages/vms/curlmsg.sdl | 1 + packages/vms/curlmsg_vms.h | 2 +- packages/vms/gnv_link_curl.com | 8 +- packages/vms/readme | 10 +- packages/vms/vms_eco_level.h | 2 +- projects/Windows/VC10/lib/libcurl.vcxproj | 8 +- projects/Windows/VC10/src/curl.vcxproj | 2 - projects/Windows/VC11/lib/libcurl.vcxproj | 8 +- projects/Windows/VC11/src/curl.vcxproj | 2 - projects/Windows/VC12/lib/libcurl.vcxproj | 8 +- projects/Windows/VC12/src/curl.vcxproj | 2 - projects/Windows/VC14/lib/libcurl.vcxproj | 8 +- projects/Windows/VC14/src/curl.vcxproj | 2 - projects/Windows/VC6/lib/libcurl.dsp | 12 +- projects/Windows/VC6/src/curl.dsp | 8 - projects/Windows/VC7.1/lib/libcurl.vcproj | 12 +- projects/Windows/VC7.1/src/curl.vcproj | 6 - projects/Windows/VC7/lib/libcurl.vcproj | 12 +- projects/Windows/VC7/src/curl.vcproj | 6 - projects/Windows/VC8/lib/libcurl.vcproj | 12 +- projects/Windows/VC8/src/curl.vcproj | 8 - projects/Windows/VC9/lib/libcurl.vcproj | 12 +- projects/Windows/VC9/src/curl.vcproj | 8 - scripts/Makefile.in | 4 +- src/CMakeLists.txt | 8 +- src/Makefile.Watcom | 4 +- src/Makefile.am | 9 +- src/Makefile.in | 66 +- src/Makefile.inc | 2 - src/Makefile.netware | 2 +- src/Makefile.vc10 | 12 +- src/Makefile.vc11 | 12 +- src/Makefile.vc12 | 12 +- src/Makefile.vc14 | 12 +- src/Makefile.vc6 | 550 - src/Makefile.vc7 | 12 +- src/Makefile.vc8 | 12 +- src/Makefile.vc9 | 12 +- src/curl.rc | 10 +- src/macos/MACINSTALL.TXT | 2 +- src/makefile.amiga | 6 +- src/makefile.dj | 2 +- src/tool_cb_dbg.c | 8 +- src/tool_cb_hdr.c | 6 +- src/tool_cfgable.c | 14 +- src/tool_cfgable.h | 26 +- src/tool_dirhie.c | 19 +- src/tool_doswin.c | 6 +- src/tool_formparse.c | 2 +- src/tool_getparam.c | 226 +- src/tool_getpass.h | 4 +- src/tool_help.c | 34 +- src/tool_helpers.c | 4 +- src/tool_homedir.c | 4 +- src/tool_hugehelp.c | 13024 ++++++++++--------- src/tool_libinfo.c | 6 +- src/tool_metalink.c | 36 +- src/tool_operate.c | 206 +- src/tool_operhlp.c | 8 +- src/tool_paramhlp.c | 43 +- src/tool_parsecfg.c | 14 +- src/tool_setopt.c | 12 + src/tool_setopt.h | 2 + src/tool_urlglob.c | 94 +- src/tool_urlglob.h | 6 +- src/tool_version.h | 2 +- src/tool_writeenv.c | 8 +- src/tool_writeout.c | 39 +- tests/Makefile.am | 5 + tests/Makefile.in | 16 +- tests/README | 4 +- tests/data/Makefile.in | 24 +- tests/data/Makefile.inc | 20 +- tests/data/test1 | 2 +- tests/data/test1021 | 2 +- tests/data/test1035 | 3 +- tests/data/test1060 | 1 - tests/data/test1061 | 1 - tests/data/test1097 | 12 +- tests/data/test1109 | 2 +- tests/data/test1110 | 2 +- tests/data/test1111 | 2 +- tests/data/test1135 | 2 +- tests/data/test1139 | 3 +- tests/data/test1144 | 7 + tests/data/test1145 | 40 + tests/data/test1146 | 45 + tests/data/test1205 | 2 +- tests/data/test1230 | 2 - tests/data/test1231 | 2 +- tests/data/test1232 | 2 +- tests/data/test1245 | 63 + tests/data/test1246 | 64 + tests/data/test1247 | 38 + tests/data/test1248 | 49 + tests/data/test1249 | 52 + tests/data/test1250 | 53 + tests/data/test1251 | 54 + tests/data/test1252 | 52 + tests/data/test1253 | 53 + tests/data/test1254 | 53 + tests/data/test1255 | 53 + tests/data/test1256 | 54 + tests/data/test1257 | 54 + tests/data/test1258 | 54 + tests/data/test1259 | 47 + tests/data/test1280 | 58 + tests/data/test1281 | 38 + tests/data/test1282 | 45 + tests/data/test1283 | 57 + tests/data/test1284 | 89 + tests/data/test1285 | 97 + tests/data/test1286 | 110 + tests/data/test1301 | 4 +- tests/data/test1400 | 1 + tests/data/test1401 | 1 + tests/data/test1402 | 1 + tests/data/test1403 | 1 + tests/data/test1404 | 1 + tests/data/test1405 | 1 + tests/data/test1406 | 1 + tests/data/test1407 | 1 + tests/data/test1420 | 1 + tests/data/test1438 | 58 + tests/data/test1439 | 58 + tests/data/test1525 | 2 - tests/data/test1532 | 49 + tests/data/test1533 | 74 + tests/data/test1534 | 50 + tests/data/test1535 | 50 + tests/data/test1536 | 50 + tests/data/test1605 | 25 + tests/data/test165 | 10 +- tests/data/test1800 | 2 +- tests/data/test1801 | 2 +- tests/data/test199 | 2 +- tests/data/test2032 | 1 + tests/data/test2045 | 4 +- tests/data/test2046 | 1 + tests/data/test2047 | 1 + tests/data/test2048 | 2 +- tests/data/test2053 | 56 + tests/data/test2054 | 64 + tests/data/test2055 | 80 + tests/data/test209 | 2 + tests/data/test213 | 2 + tests/data/test265 | 2 +- tests/data/test47 | 2 +- tests/data/test500 | 2 +- tests/data/test501 | 2 +- tests/data/test506 | 54 +- tests/data/test517 | 6 + tests/data/test552 | Bin 142985 -> 142985 bytes tests/data/test556 | 2 +- tests/data/test557 | 1 + tests/data/test558 | 4 +- tests/data/test578 | 2 +- tests/data/test59 | 2 +- tests/data/test700 | 2 +- tests/data/test701 | 2 +- tests/data/test708 | 2 +- tests/data/test71 | 4 +- tests/data/test712 | 1 - tests/data/test713 | 49 + tests/data/test714 | 64 + tests/data/test715 | 66 + tests/data/test864 | 2 +- tests/ftpserver.pl | 10 +- tests/libtest/CMakeLists.txt | 4 + tests/libtest/Makefile.in | 992 +- tests/libtest/Makefile.inc | 23 +- tests/libtest/lib1500.c | 4 +- tests/libtest/lib1502.c | 4 +- tests/libtest/lib1507.c | 2 +- tests/libtest/lib1511.c | 4 +- tests/libtest/lib1515.c | 5 +- tests/libtest/lib1520.c | 3 +- tests/libtest/lib1525.c | 3 +- tests/libtest/lib1526.c | 3 +- tests/libtest/lib1527.c | 3 +- tests/libtest/lib1528.c | 3 +- tests/libtest/lib1529.c | 5 +- tests/libtest/lib1530.c | 5 +- tests/libtest/lib1532.c | 80 + tests/libtest/lib1533.c | 200 + tests/libtest/lib1534.c | 129 + tests/libtest/lib1535.c | 128 + tests/libtest/lib1536.c | 129 + tests/libtest/lib500.c | 3 +- tests/libtest/lib501.c | 3 +- tests/libtest/lib506.c | 28 +- tests/libtest/lib507.c | 6 +- tests/libtest/lib508.c | 3 +- tests/libtest/lib509.c | 3 +- tests/libtest/lib510.c | 3 +- tests/libtest/lib511.c | 3 +- tests/libtest/lib513.c | 3 +- tests/libtest/lib514.c | 3 +- tests/libtest/lib515.c | 3 +- tests/libtest/lib516.c | 3 +- tests/libtest/lib517.c | 8 +- tests/libtest/lib518.c | 3 +- tests/libtest/lib519.c | 3 +- tests/libtest/lib520.c | 3 +- tests/libtest/lib521.c | 3 +- tests/libtest/lib523.c | 3 +- tests/libtest/lib524.c | 3 +- tests/libtest/lib537.c | 3 +- tests/libtest/lib539.c | 9 +- tests/libtest/lib540.c | 4 +- tests/libtest/lib541.c | 3 +- tests/libtest/lib542.c | 3 +- tests/libtest/lib543.c | 5 +- tests/libtest/lib544.c | 3 +- tests/libtest/lib547.c | 3 +- tests/libtest/lib549.c | 3 +- tests/libtest/lib552.c | 9 +- tests/libtest/lib553.c | 3 +- tests/libtest/lib554.c | 3 +- tests/libtest/lib556.c | 12 +- tests/libtest/lib557.c | 241 +- tests/libtest/lib562.c | 3 +- tests/libtest/lib566.c | 3 +- tests/libtest/lib567.c | 3 +- tests/libtest/lib568.c | 15 +- tests/libtest/lib569.c | 9 +- tests/libtest/lib570.c | 12 +- tests/libtest/lib571.c | 18 +- tests/libtest/lib572.c | 18 +- tests/libtest/lib574.c | 3 +- tests/libtest/lib578.c | 3 +- tests/libtest/lib579.c | 3 +- tests/libtest/lib582.c | 4 +- tests/libtest/lib583.c | 6 +- tests/libtest/lib586.c | 13 +- tests/libtest/lib590.c | 3 +- tests/libtest/lib598.c | 3 +- tests/libtest/lib599.c | 3 +- tests/libtest/libauthretry.c | 16 +- tests/libtest/libntlmconnect.c | 4 +- tests/libtest/test.h | 2 + tests/libtest/testtrace.c | 4 +- tests/manpage-scan.pl | 13 +- tests/pathhelp.pm | 2 +- tests/runtests.pdf | Bin 21980 -> 7639 bytes tests/runtests.pl | 4 +- tests/server/Makefile.in | 128 - tests/server/Makefile.inc | 2 - tests/server/getpart.c | 9 +- tests/server/rtspd.c | 24 +- tests/server/sockfilt.c | 20 +- tests/server/sws.c | 39 +- tests/server/tftpd.c | 33 +- tests/server/util.c | 86 +- tests/server/util.h | 6 +- tests/testcurl.1 | 10 +- tests/testcurl.html | 6 +- tests/testcurl.pdf | Bin 22145 -> 7238 bytes tests/unit/CMakeLists.txt | 54 + tests/unit/Makefile.am | 2 +- tests/unit/Makefile.in | 55 +- tests/unit/Makefile.inc | 4 +- tests/unit/unit1301.c | 2 +- tests/unit/unit1303.c | 41 +- tests/unit/unit1304.c | 2 +- tests/unit/unit1305.c | 11 +- tests/unit/unit1308.c | 6 +- tests/unit/unit1602.c | 2 +- tests/unit/unit1604.c | 6 +- tests/unit/unit1605.c | 49 + tests/valgrind.pm | 85 +- winbuild/Makefile.msvc.names | 81 - winbuild/Makefile.vc | 16 + winbuild/MakefileBuild.vc | 18 +- 1570 files changed, 33742 insertions(+), 51437 deletions(-) create mode 100644 CMake/CurlSymbolHiding.cmake create mode 100644 CMake/FindCARES.cmake create mode 100644 CMake/FindLibSSH2.cmake create mode 100644 CMake/FindNGHTTP2.cmake delete mode 100644 docs/BINDINGS create mode 100644 docs/BINDINGS.md delete mode 100644 docs/INSTALL.devcpp create mode 100644 docs/INSTALL.md create mode 100644 docs/cmdline-opts/MANPAGE.md create mode 100644 docs/cmdline-opts/Makefile.am create mode 100644 docs/cmdline-opts/Makefile.in create mode 100644 docs/cmdline-opts/abstract-unix-socket.d create mode 100644 docs/cmdline-opts/anyauth.d create mode 100644 docs/cmdline-opts/append.d create mode 100644 docs/cmdline-opts/basic.d create mode 100644 docs/cmdline-opts/cacert.d create mode 100644 docs/cmdline-opts/capath.d create mode 100644 docs/cmdline-opts/cert-status.d create mode 100644 docs/cmdline-opts/cert-type.d create mode 100644 docs/cmdline-opts/cert.d create mode 100644 docs/cmdline-opts/ciphers.d create mode 100644 docs/cmdline-opts/compressed.d create mode 100644 docs/cmdline-opts/config.d create mode 100644 docs/cmdline-opts/connect-timeout.d create mode 100644 docs/cmdline-opts/connect-to.d create mode 100644 docs/cmdline-opts/continue-at.d create mode 100644 docs/cmdline-opts/cookie-jar.d create mode 100644 docs/cmdline-opts/cookie.d create mode 100644 docs/cmdline-opts/create-dirs.d create mode 100644 docs/cmdline-opts/crlf.d create mode 100644 docs/cmdline-opts/crlfile.d create mode 100644 docs/cmdline-opts/data-ascii.d create mode 100644 docs/cmdline-opts/data-binary.d create mode 100644 docs/cmdline-opts/data-raw.d create mode 100644 docs/cmdline-opts/data-urlencode.d create mode 100644 docs/cmdline-opts/data.d create mode 100644 docs/cmdline-opts/delegation.d create mode 100644 docs/cmdline-opts/digest.d create mode 100644 docs/cmdline-opts/disable-eprt.d create mode 100644 docs/cmdline-opts/disable-epsv.d create mode 100644 docs/cmdline-opts/disable.d create mode 100644 docs/cmdline-opts/dns-interface.d create mode 100644 docs/cmdline-opts/dns-ipv4-addr.d create mode 100644 docs/cmdline-opts/dns-ipv6-addr.d create mode 100644 docs/cmdline-opts/dns-servers.d create mode 100644 docs/cmdline-opts/dump-header.d create mode 100644 docs/cmdline-opts/egd-file.d create mode 100644 docs/cmdline-opts/engine.d create mode 100644 docs/cmdline-opts/environment.d create mode 100644 docs/cmdline-opts/expect100-timeout.d create mode 100644 docs/cmdline-opts/fail-early.d create mode 100644 docs/cmdline-opts/fail.d create mode 100644 docs/cmdline-opts/false-start.d create mode 100644 docs/cmdline-opts/form-string.d create mode 100644 docs/cmdline-opts/form.d create mode 100644 docs/cmdline-opts/ftp-account.d create mode 100644 docs/cmdline-opts/ftp-alternative-to-user.d create mode 100644 docs/cmdline-opts/ftp-create-dirs.d create mode 100644 docs/cmdline-opts/ftp-method.d create mode 100644 docs/cmdline-opts/ftp-pasv.d create mode 100644 docs/cmdline-opts/ftp-port.d create mode 100644 docs/cmdline-opts/ftp-pret.d create mode 100644 docs/cmdline-opts/ftp-skip-pasv-ip.d create mode 100644 docs/cmdline-opts/ftp-ssl-ccc-mode.d create mode 100644 docs/cmdline-opts/ftp-ssl-ccc.d create mode 100644 docs/cmdline-opts/ftp-ssl-control.d create mode 100755 docs/cmdline-opts/gen.pl create mode 100644 docs/cmdline-opts/get.d create mode 100644 docs/cmdline-opts/globoff.d create mode 100644 docs/cmdline-opts/head.d create mode 100644 docs/cmdline-opts/header.d create mode 100644 docs/cmdline-opts/help.d create mode 100644 docs/cmdline-opts/hostpubmd5.d create mode 100644 docs/cmdline-opts/http1.0.d create mode 100644 docs/cmdline-opts/http1.1.d create mode 100644 docs/cmdline-opts/http2-prior-knowledge.d create mode 100644 docs/cmdline-opts/http2.d create mode 100644 docs/cmdline-opts/ignore-content-length.d create mode 100644 docs/cmdline-opts/include.d create mode 100644 docs/cmdline-opts/insecure.d create mode 100644 docs/cmdline-opts/interface.d create mode 100644 docs/cmdline-opts/ipv4.d create mode 100644 docs/cmdline-opts/ipv6.d create mode 100644 docs/cmdline-opts/junk-session-cookies.d create mode 100644 docs/cmdline-opts/keepalive-time.d create mode 100644 docs/cmdline-opts/key-type.d create mode 100644 docs/cmdline-opts/key.d create mode 100644 docs/cmdline-opts/krb.d create mode 100644 docs/cmdline-opts/libcurl.d create mode 100644 docs/cmdline-opts/limit-rate.d create mode 100644 docs/cmdline-opts/list-only.d create mode 100644 docs/cmdline-opts/local-port.d create mode 100644 docs/cmdline-opts/location-trusted.d create mode 100644 docs/cmdline-opts/location.d create mode 100644 docs/cmdline-opts/login-options.d create mode 100644 docs/cmdline-opts/mail-auth.d create mode 100644 docs/cmdline-opts/mail-from.d create mode 100644 docs/cmdline-opts/mail-rcpt.d create mode 100644 docs/cmdline-opts/manual.d create mode 100644 docs/cmdline-opts/max-filesize.d create mode 100644 docs/cmdline-opts/max-redirs.d create mode 100644 docs/cmdline-opts/max-time.d create mode 100644 docs/cmdline-opts/metalink.d create mode 100644 docs/cmdline-opts/negotiate.d create mode 100644 docs/cmdline-opts/netrc-file.d create mode 100644 docs/cmdline-opts/netrc-optional.d create mode 100644 docs/cmdline-opts/netrc.d create mode 100644 docs/cmdline-opts/next.d create mode 100644 docs/cmdline-opts/no-alpn.d create mode 100644 docs/cmdline-opts/no-buffer.d create mode 100644 docs/cmdline-opts/no-keepalive.d create mode 100644 docs/cmdline-opts/no-npn.d create mode 100644 docs/cmdline-opts/no-sessionid.d create mode 100644 docs/cmdline-opts/noproxy.d create mode 100644 docs/cmdline-opts/ntlm-wb.d create mode 100644 docs/cmdline-opts/ntlm.d create mode 100644 docs/cmdline-opts/oauth2-bearer.d create mode 100644 docs/cmdline-opts/output.d create mode 100644 docs/cmdline-opts/page-footer create mode 100644 docs/cmdline-opts/page-header create mode 100644 docs/cmdline-opts/pass.d create mode 100644 docs/cmdline-opts/path-as-is.d create mode 100644 docs/cmdline-opts/pinnedpubkey.d create mode 100644 docs/cmdline-opts/post301.d create mode 100644 docs/cmdline-opts/post302.d create mode 100644 docs/cmdline-opts/post303.d create mode 100644 docs/cmdline-opts/preproxy.d create mode 100644 docs/cmdline-opts/progress-bar.d create mode 100644 docs/cmdline-opts/proto-default.d create mode 100644 docs/cmdline-opts/proto-redir.d create mode 100644 docs/cmdline-opts/proto.d create mode 100644 docs/cmdline-opts/proxy-anyauth.d create mode 100644 docs/cmdline-opts/proxy-basic.d create mode 100644 docs/cmdline-opts/proxy-cacert.d create mode 100644 docs/cmdline-opts/proxy-capath.d create mode 100644 docs/cmdline-opts/proxy-cert-type.d create mode 100644 docs/cmdline-opts/proxy-cert.d create mode 100644 docs/cmdline-opts/proxy-ciphers.d create mode 100644 docs/cmdline-opts/proxy-crlfile.d create mode 100644 docs/cmdline-opts/proxy-digest.d create mode 100644 docs/cmdline-opts/proxy-header.d create mode 100644 docs/cmdline-opts/proxy-insecure.d create mode 100644 docs/cmdline-opts/proxy-key-type.d create mode 100644 docs/cmdline-opts/proxy-key.d create mode 100644 docs/cmdline-opts/proxy-negotiate.d create mode 100644 docs/cmdline-opts/proxy-ntlm.d create mode 100644 docs/cmdline-opts/proxy-pass.d create mode 100644 docs/cmdline-opts/proxy-service-name.d create mode 100644 docs/cmdline-opts/proxy-ssl-allow-beast.d create mode 100644 docs/cmdline-opts/proxy-tlsauthtype.d create mode 100644 docs/cmdline-opts/proxy-tlspassword.d create mode 100644 docs/cmdline-opts/proxy-tlsuser.d create mode 100644 docs/cmdline-opts/proxy-tlsv1.d create mode 100644 docs/cmdline-opts/proxy-user.d create mode 100644 docs/cmdline-opts/proxy.d create mode 100644 docs/cmdline-opts/proxy1.0.d create mode 100644 docs/cmdline-opts/proxytunnel.d create mode 100644 docs/cmdline-opts/pubkey.d create mode 100644 docs/cmdline-opts/quote.d create mode 100644 docs/cmdline-opts/random-file.d create mode 100644 docs/cmdline-opts/range.d create mode 100644 docs/cmdline-opts/raw.d create mode 100644 docs/cmdline-opts/referer.d create mode 100644 docs/cmdline-opts/remote-header-name.d create mode 100644 docs/cmdline-opts/remote-name-all.d create mode 100644 docs/cmdline-opts/remote-name.d create mode 100644 docs/cmdline-opts/remote-time.d create mode 100644 docs/cmdline-opts/request.d create mode 100644 docs/cmdline-opts/resolve.d create mode 100644 docs/cmdline-opts/retry-connrefused.d create mode 100644 docs/cmdline-opts/retry-delay.d create mode 100644 docs/cmdline-opts/retry-max-time.d create mode 100644 docs/cmdline-opts/retry.d create mode 100644 docs/cmdline-opts/sasl-ir.d create mode 100644 docs/cmdline-opts/service-name.d create mode 100644 docs/cmdline-opts/show-error.d create mode 100644 docs/cmdline-opts/silent.d create mode 100644 docs/cmdline-opts/socks4.d create mode 100644 docs/cmdline-opts/socks4a.d create mode 100644 docs/cmdline-opts/socks5-gssapi-nec.d create mode 100644 docs/cmdline-opts/socks5-gssapi-service.d create mode 100644 docs/cmdline-opts/socks5-hostname.d create mode 100644 docs/cmdline-opts/socks5.d create mode 100644 docs/cmdline-opts/speed-limit.d create mode 100644 docs/cmdline-opts/speed-time.d create mode 100644 docs/cmdline-opts/ssl-allow-beast.d create mode 100644 docs/cmdline-opts/ssl-no-revoke.d create mode 100644 docs/cmdline-opts/ssl-reqd.d create mode 100644 docs/cmdline-opts/ssl.d create mode 100644 docs/cmdline-opts/sslv2.d create mode 100644 docs/cmdline-opts/sslv3.d create mode 100644 docs/cmdline-opts/stderr.d create mode 100644 docs/cmdline-opts/tcp-fastopen.d create mode 100644 docs/cmdline-opts/tcp-nodelay.d create mode 100644 docs/cmdline-opts/telnet-option.d create mode 100644 docs/cmdline-opts/tftp-blksize.d create mode 100644 docs/cmdline-opts/tftp-no-options.d create mode 100644 docs/cmdline-opts/time-cond.d create mode 100644 docs/cmdline-opts/tlsauthtype.d create mode 100644 docs/cmdline-opts/tlspassword.d create mode 100644 docs/cmdline-opts/tlsuser.d create mode 100644 docs/cmdline-opts/tlsv1.0.d create mode 100644 docs/cmdline-opts/tlsv1.1.d create mode 100644 docs/cmdline-opts/tlsv1.2.d create mode 100644 docs/cmdline-opts/tlsv1.3.d create mode 100644 docs/cmdline-opts/tlsv1.d create mode 100644 docs/cmdline-opts/tr-encoding.d create mode 100644 docs/cmdline-opts/trace-ascii.d create mode 100644 docs/cmdline-opts/trace-time.d create mode 100644 docs/cmdline-opts/trace.d create mode 100644 docs/cmdline-opts/unix-socket.d create mode 100644 docs/cmdline-opts/upload-file.d create mode 100644 docs/cmdline-opts/url.d create mode 100644 docs/cmdline-opts/use-ascii.d create mode 100644 docs/cmdline-opts/user-agent.d create mode 100644 docs/cmdline-opts/user.d create mode 100644 docs/cmdline-opts/verbose.d create mode 100644 docs/cmdline-opts/version.d create mode 100644 docs/cmdline-opts/write-out.d create mode 100644 docs/cmdline-opts/xattr.d delete mode 100644 docs/curl-config.html delete mode 100644 docs/curl-config.pdf delete mode 100644 docs/curl.html delete mode 100644 docs/curl.pdf delete mode 100644 docs/index.html delete mode 100644 docs/libcurl/curl_easy_cleanup.html delete mode 100644 docs/libcurl/curl_easy_cleanup.pdf delete mode 100644 docs/libcurl/curl_easy_duphandle.html delete mode 100644 docs/libcurl/curl_easy_duphandle.pdf delete mode 100644 docs/libcurl/curl_easy_escape.html delete mode 100644 docs/libcurl/curl_easy_escape.pdf delete mode 100644 docs/libcurl/curl_easy_getinfo.html delete mode 100644 docs/libcurl/curl_easy_getinfo.pdf delete mode 100644 docs/libcurl/curl_easy_init.html delete mode 100644 docs/libcurl/curl_easy_init.pdf delete mode 100644 docs/libcurl/curl_easy_pause.html delete mode 100644 docs/libcurl/curl_easy_pause.pdf delete mode 100644 docs/libcurl/curl_easy_perform.html delete mode 100644 docs/libcurl/curl_easy_perform.pdf delete mode 100644 docs/libcurl/curl_easy_recv.html delete mode 100644 docs/libcurl/curl_easy_recv.pdf delete mode 100644 docs/libcurl/curl_easy_reset.html delete mode 100644 docs/libcurl/curl_easy_reset.pdf delete mode 100644 docs/libcurl/curl_easy_send.html delete mode 100644 docs/libcurl/curl_easy_send.pdf delete mode 100644 docs/libcurl/curl_easy_setopt.html delete mode 100644 docs/libcurl/curl_easy_setopt.pdf delete mode 100644 docs/libcurl/curl_easy_strerror.html delete mode 100644 docs/libcurl/curl_easy_strerror.pdf delete mode 100644 docs/libcurl/curl_easy_unescape.html delete mode 100644 docs/libcurl/curl_easy_unescape.pdf delete mode 100644 docs/libcurl/curl_escape.html delete mode 100644 docs/libcurl/curl_escape.pdf delete mode 100644 docs/libcurl/curl_formadd.html delete mode 100644 docs/libcurl/curl_formadd.pdf delete mode 100644 docs/libcurl/curl_formfree.html delete mode 100644 docs/libcurl/curl_formfree.pdf delete mode 100644 docs/libcurl/curl_formget.html delete mode 100644 docs/libcurl/curl_formget.pdf delete mode 100644 docs/libcurl/curl_free.html delete mode 100644 docs/libcurl/curl_free.pdf delete mode 100644 docs/libcurl/curl_getdate.html delete mode 100644 docs/libcurl/curl_getdate.pdf delete mode 100644 docs/libcurl/curl_getenv.html delete mode 100644 docs/libcurl/curl_getenv.pdf delete mode 100644 docs/libcurl/curl_global_cleanup.html delete mode 100644 docs/libcurl/curl_global_cleanup.pdf delete mode 100644 docs/libcurl/curl_global_init.html delete mode 100644 docs/libcurl/curl_global_init.pdf delete mode 100644 docs/libcurl/curl_global_init_mem.html delete mode 100644 docs/libcurl/curl_global_init_mem.pdf delete mode 100644 docs/libcurl/curl_mprintf.html delete mode 100644 docs/libcurl/curl_mprintf.pdf delete mode 100644 docs/libcurl/curl_multi_add_handle.html delete mode 100644 docs/libcurl/curl_multi_add_handle.pdf delete mode 100644 docs/libcurl/curl_multi_assign.html delete mode 100644 docs/libcurl/curl_multi_assign.pdf delete mode 100644 docs/libcurl/curl_multi_cleanup.html delete mode 100644 docs/libcurl/curl_multi_cleanup.pdf delete mode 100644 docs/libcurl/curl_multi_fdset.html delete mode 100644 docs/libcurl/curl_multi_fdset.pdf delete mode 100644 docs/libcurl/curl_multi_info_read.html delete mode 100644 docs/libcurl/curl_multi_info_read.pdf delete mode 100644 docs/libcurl/curl_multi_init.html delete mode 100644 docs/libcurl/curl_multi_init.pdf delete mode 100644 docs/libcurl/curl_multi_perform.html delete mode 100644 docs/libcurl/curl_multi_perform.pdf delete mode 100644 docs/libcurl/curl_multi_remove_handle.html delete mode 100644 docs/libcurl/curl_multi_remove_handle.pdf delete mode 100644 docs/libcurl/curl_multi_setopt.html delete mode 100644 docs/libcurl/curl_multi_setopt.pdf delete mode 100644 docs/libcurl/curl_multi_socket.html delete mode 100644 docs/libcurl/curl_multi_socket.pdf delete mode 100644 docs/libcurl/curl_multi_socket_action.html delete mode 100644 docs/libcurl/curl_multi_socket_action.pdf delete mode 100644 docs/libcurl/curl_multi_socket_all.html delete mode 100644 docs/libcurl/curl_multi_socket_all.pdf delete mode 100644 docs/libcurl/curl_multi_strerror.html delete mode 100644 docs/libcurl/curl_multi_strerror.pdf delete mode 100644 docs/libcurl/curl_multi_timeout.html delete mode 100644 docs/libcurl/curl_multi_timeout.pdf delete mode 100644 docs/libcurl/curl_multi_wait.html delete mode 100644 docs/libcurl/curl_multi_wait.pdf delete mode 100644 docs/libcurl/curl_share_cleanup.html delete mode 100644 docs/libcurl/curl_share_cleanup.pdf delete mode 100644 docs/libcurl/curl_share_init.html delete mode 100644 docs/libcurl/curl_share_init.pdf delete mode 100644 docs/libcurl/curl_share_setopt.html delete mode 100644 docs/libcurl/curl_share_setopt.pdf delete mode 100644 docs/libcurl/curl_share_strerror.html delete mode 100644 docs/libcurl/curl_share_strerror.pdf delete mode 100644 docs/libcurl/curl_slist_append.html delete mode 100644 docs/libcurl/curl_slist_append.pdf delete mode 100644 docs/libcurl/curl_slist_free_all.html delete mode 100644 docs/libcurl/curl_slist_free_all.pdf delete mode 100644 docs/libcurl/curl_strequal.html delete mode 100644 docs/libcurl/curl_strequal.pdf delete mode 100644 docs/libcurl/curl_unescape.html delete mode 100644 docs/libcurl/curl_unescape.pdf delete mode 100644 docs/libcurl/curl_version.html delete mode 100644 docs/libcurl/curl_version.pdf delete mode 100644 docs/libcurl/curl_version_info.html delete mode 100644 docs/libcurl/curl_version_info.pdf delete mode 100644 docs/libcurl/libcurl-easy.html delete mode 100644 docs/libcurl/libcurl-easy.pdf delete mode 100644 docs/libcurl/libcurl-errors.html delete mode 100644 docs/libcurl/libcurl-errors.pdf delete mode 100644 docs/libcurl/libcurl-multi.html delete mode 100644 docs/libcurl/libcurl-multi.pdf delete mode 100644 docs/libcurl/libcurl-share.html delete mode 100644 docs/libcurl/libcurl-share.pdf delete mode 100644 docs/libcurl/libcurl-symbols.html delete mode 100644 docs/libcurl/libcurl-symbols.pdf delete mode 100644 docs/libcurl/libcurl-thread.html delete mode 100644 docs/libcurl/libcurl-thread.pdf delete mode 100644 docs/libcurl/libcurl-tutorial.html delete mode 100644 docs/libcurl/libcurl-tutorial.pdf delete mode 100644 docs/libcurl/libcurl.html delete mode 100644 docs/libcurl/libcurl.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_ACTIVESOCKET.html delete mode 100644 docs/libcurl/opts/CURLINFO_ACTIVESOCKET.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_APPCONNECT_TIME.html delete mode 100644 docs/libcurl/opts/CURLINFO_APPCONNECT_TIME.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_CERTINFO.html delete mode 100644 docs/libcurl/opts/CURLINFO_CERTINFO.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_CONDITION_UNMET.html delete mode 100644 docs/libcurl/opts/CURLINFO_CONDITION_UNMET.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_CONNECT_TIME.html delete mode 100644 docs/libcurl/opts/CURLINFO_CONNECT_TIME.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD.html delete mode 100644 docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD.html delete mode 100644 docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_CONTENT_TYPE.html delete mode 100644 docs/libcurl/opts/CURLINFO_CONTENT_TYPE.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_COOKIELIST.html delete mode 100644 docs/libcurl/opts/CURLINFO_COOKIELIST.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_EFFECTIVE_URL.html delete mode 100644 docs/libcurl/opts/CURLINFO_EFFECTIVE_URL.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_FILETIME.html delete mode 100644 docs/libcurl/opts/CURLINFO_FILETIME.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_FTP_ENTRY_PATH.html delete mode 100644 docs/libcurl/opts/CURLINFO_FTP_ENTRY_PATH.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_HEADER_SIZE.html delete mode 100644 docs/libcurl/opts/CURLINFO_HEADER_SIZE.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_HTTPAUTH_AVAIL.html delete mode 100644 docs/libcurl/opts/CURLINFO_HTTPAUTH_AVAIL.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_HTTP_CONNECTCODE.html delete mode 100644 docs/libcurl/opts/CURLINFO_HTTP_CONNECTCODE.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_LASTSOCKET.html delete mode 100644 docs/libcurl/opts/CURLINFO_LASTSOCKET.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_LOCAL_IP.html delete mode 100644 docs/libcurl/opts/CURLINFO_LOCAL_IP.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_LOCAL_PORT.html delete mode 100644 docs/libcurl/opts/CURLINFO_LOCAL_PORT.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME.html delete mode 100644 docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_NUM_CONNECTS.html delete mode 100644 docs/libcurl/opts/CURLINFO_NUM_CONNECTS.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_OS_ERRNO.html delete mode 100644 docs/libcurl/opts/CURLINFO_OS_ERRNO.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME.html delete mode 100644 docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_PRIMARY_IP.html delete mode 100644 docs/libcurl/opts/CURLINFO_PRIMARY_IP.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_PRIMARY_PORT.html delete mode 100644 docs/libcurl/opts/CURLINFO_PRIMARY_PORT.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_PRIVATE.html delete mode 100644 docs/libcurl/opts/CURLINFO_PRIVATE.pdf create mode 100644 docs/libcurl/opts/CURLINFO_PROTOCOL.3 delete mode 100644 docs/libcurl/opts/CURLINFO_PROXYAUTH_AVAIL.html delete mode 100644 docs/libcurl/opts/CURLINFO_PROXYAUTH_AVAIL.pdf create mode 100644 docs/libcurl/opts/CURLINFO_PROXY_SSL_VERIFYRESULT.3 delete mode 100644 docs/libcurl/opts/CURLINFO_REDIRECT_COUNT.html delete mode 100644 docs/libcurl/opts/CURLINFO_REDIRECT_COUNT.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_REDIRECT_TIME.html delete mode 100644 docs/libcurl/opts/CURLINFO_REDIRECT_TIME.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_REDIRECT_URL.html delete mode 100644 docs/libcurl/opts/CURLINFO_REDIRECT_URL.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_REQUEST_SIZE.html delete mode 100644 docs/libcurl/opts/CURLINFO_REQUEST_SIZE.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_RESPONSE_CODE.html delete mode 100644 docs/libcurl/opts/CURLINFO_RESPONSE_CODE.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_RTSP_CLIENT_CSEQ.html delete mode 100644 docs/libcurl/opts/CURLINFO_RTSP_CLIENT_CSEQ.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_RTSP_CSEQ_RECV.html delete mode 100644 docs/libcurl/opts/CURLINFO_RTSP_CSEQ_RECV.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_RTSP_SERVER_CSEQ.html delete mode 100644 docs/libcurl/opts/CURLINFO_RTSP_SERVER_CSEQ.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_RTSP_SESSION_ID.html delete mode 100644 docs/libcurl/opts/CURLINFO_RTSP_SESSION_ID.pdf create mode 100644 docs/libcurl/opts/CURLINFO_SCHEME.3 delete mode 100644 docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD.html delete mode 100644 docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.html delete mode 100644 docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD.html delete mode 100644 docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.html delete mode 100644 docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_SSL_ENGINES.html delete mode 100644 docs/libcurl/opts/CURLINFO_SSL_ENGINES.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_SSL_VERIFYRESULT.html delete mode 100644 docs/libcurl/opts/CURLINFO_SSL_VERIFYRESULT.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME.html delete mode 100644 docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_TLS_SESSION.html delete mode 100644 docs/libcurl/opts/CURLINFO_TLS_SESSION.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_TLS_SSL_PTR.html delete mode 100644 docs/libcurl/opts/CURLINFO_TLS_SSL_PTR.pdf delete mode 100644 docs/libcurl/opts/CURLINFO_TOTAL_TIME.html delete mode 100644 docs/libcurl/opts/CURLINFO_TOTAL_TIME.pdf delete mode 100644 docs/libcurl/opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.html delete mode 100644 docs/libcurl/opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.pdf delete mode 100644 docs/libcurl/opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.html delete mode 100644 docs/libcurl/opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.pdf delete mode 100644 docs/libcurl/opts/CURLMOPT_MAXCONNECTS.html delete mode 100644 docs/libcurl/opts/CURLMOPT_MAXCONNECTS.pdf delete mode 100644 docs/libcurl/opts/CURLMOPT_MAX_HOST_CONNECTIONS.html delete mode 100644 docs/libcurl/opts/CURLMOPT_MAX_HOST_CONNECTIONS.pdf delete mode 100644 docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.html delete mode 100644 docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.pdf delete mode 100644 docs/libcurl/opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.html delete mode 100644 docs/libcurl/opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.pdf delete mode 100644 docs/libcurl/opts/CURLMOPT_PIPELINING.html delete mode 100644 docs/libcurl/opts/CURLMOPT_PIPELINING.pdf delete mode 100644 docs/libcurl/opts/CURLMOPT_PIPELINING_SERVER_BL.html delete mode 100644 docs/libcurl/opts/CURLMOPT_PIPELINING_SERVER_BL.pdf delete mode 100644 docs/libcurl/opts/CURLMOPT_PIPELINING_SITE_BL.html delete mode 100644 docs/libcurl/opts/CURLMOPT_PIPELINING_SITE_BL.pdf delete mode 100644 docs/libcurl/opts/CURLMOPT_PUSHDATA.html delete mode 100644 docs/libcurl/opts/CURLMOPT_PUSHDATA.pdf delete mode 100644 docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.html delete mode 100644 docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.pdf delete mode 100644 docs/libcurl/opts/CURLMOPT_SOCKETDATA.html delete mode 100644 docs/libcurl/opts/CURLMOPT_SOCKETDATA.pdf delete mode 100644 docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.html delete mode 100644 docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.pdf delete mode 100644 docs/libcurl/opts/CURLMOPT_TIMERDATA.html delete mode 100644 docs/libcurl/opts/CURLMOPT_TIMERDATA.pdf delete mode 100644 docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.html delete mode 100644 docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.pdf create mode 100644 docs/libcurl/opts/CURLOPT_ABSTRACT_UNIX_SOCKET.3 delete mode 100644 docs/libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.html delete mode 100644 docs/libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.html delete mode 100644 docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.html delete mode 100644 docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_APPEND.html delete mode 100644 docs/libcurl/opts/CURLOPT_APPEND.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_AUTOREFERER.html delete mode 100644 docs/libcurl/opts/CURLOPT_AUTOREFERER.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_BUFFERSIZE.html delete mode 100644 docs/libcurl/opts/CURLOPT_BUFFERSIZE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_CAINFO.html delete mode 100644 docs/libcurl/opts/CURLOPT_CAINFO.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_CAPATH.html delete mode 100644 docs/libcurl/opts/CURLOPT_CAPATH.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_CERTINFO.html delete mode 100644 docs/libcurl/opts/CURLOPT_CERTINFO.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.html delete mode 100644 docs/libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_CHUNK_DATA.html delete mode 100644 docs/libcurl/opts/CURLOPT_CHUNK_DATA.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.html delete mode 100644 docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_CLOSESOCKETDATA.html delete mode 100644 docs/libcurl/opts/CURLOPT_CLOSESOCKETDATA.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.html delete mode 100644 docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT.html delete mode 100644 docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.html delete mode 100644 docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_CONNECT_ONLY.html delete mode 100644 docs/libcurl/opts/CURLOPT_CONNECT_ONLY.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_CONNECT_TO.html delete mode 100644 docs/libcurl/opts/CURLOPT_CONNECT_TO.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.html delete mode 100644 docs/libcurl/opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.html delete mode 100644 docs/libcurl/opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.html delete mode 100644 docs/libcurl/opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_COOKIE.html delete mode 100644 docs/libcurl/opts/CURLOPT_COOKIE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_COOKIEFILE.html delete mode 100644 docs/libcurl/opts/CURLOPT_COOKIEFILE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_COOKIEJAR.html delete mode 100644 docs/libcurl/opts/CURLOPT_COOKIEJAR.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_COOKIELIST.html delete mode 100644 docs/libcurl/opts/CURLOPT_COOKIELIST.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_COOKIESESSION.html delete mode 100644 docs/libcurl/opts/CURLOPT_COOKIESESSION.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_COPYPOSTFIELDS.html delete mode 100644 docs/libcurl/opts/CURLOPT_COPYPOSTFIELDS.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_CRLF.html delete mode 100644 docs/libcurl/opts/CURLOPT_CRLF.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_CRLFILE.html delete mode 100644 docs/libcurl/opts/CURLOPT_CRLFILE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.html delete mode 100644 docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_DEBUGDATA.html delete mode 100644 docs/libcurl/opts/CURLOPT_DEBUGDATA.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.html delete mode 100644 docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.html delete mode 100644 docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_DIRLISTONLY.html delete mode 100644 docs/libcurl/opts/CURLOPT_DIRLISTONLY.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.html delete mode 100644 docs/libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_DNS_INTERFACE.html delete mode 100644 docs/libcurl/opts/CURLOPT_DNS_INTERFACE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.html delete mode 100644 docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.html delete mode 100644 docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_DNS_SERVERS.html delete mode 100644 docs/libcurl/opts/CURLOPT_DNS_SERVERS.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.html delete mode 100644 docs/libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_EGDSOCKET.html delete mode 100644 docs/libcurl/opts/CURLOPT_EGDSOCKET.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_ERRORBUFFER.html delete mode 100644 docs/libcurl/opts/CURLOPT_ERRORBUFFER.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_EXPECT_100_TIMEOUT_MS.html delete mode 100644 docs/libcurl/opts/CURLOPT_EXPECT_100_TIMEOUT_MS.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_FAILONERROR.html delete mode 100644 docs/libcurl/opts/CURLOPT_FAILONERROR.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_FILETIME.html delete mode 100644 docs/libcurl/opts/CURLOPT_FILETIME.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_FNMATCH_DATA.html delete mode 100644 docs/libcurl/opts/CURLOPT_FNMATCH_DATA.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_FNMATCH_FUNCTION.html delete mode 100644 docs/libcurl/opts/CURLOPT_FNMATCH_FUNCTION.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.html delete mode 100644 docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_FORBID_REUSE.html delete mode 100644 docs/libcurl/opts/CURLOPT_FORBID_REUSE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_FRESH_CONNECT.html delete mode 100644 docs/libcurl/opts/CURLOPT_FRESH_CONNECT.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_FTPPORT.html delete mode 100644 docs/libcurl/opts/CURLOPT_FTPPORT.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_FTPSSLAUTH.html delete mode 100644 docs/libcurl/opts/CURLOPT_FTPSSLAUTH.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.html delete mode 100644 docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.html delete mode 100644 docs/libcurl/opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_FTP_CREATE_MISSING_DIRS.html delete mode 100644 docs/libcurl/opts/CURLOPT_FTP_CREATE_MISSING_DIRS.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.html delete mode 100644 docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_FTP_RESPONSE_TIMEOUT.html delete mode 100644 docs/libcurl/opts/CURLOPT_FTP_RESPONSE_TIMEOUT.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.html delete mode 100644 docs/libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.html delete mode 100644 docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.html delete mode 100644 docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.html delete mode 100644 docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_FTP_USE_PRET.html delete mode 100644 docs/libcurl/opts/CURLOPT_FTP_USE_PRET.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_GSSAPI_DELEGATION.html delete mode 100644 docs/libcurl/opts/CURLOPT_GSSAPI_DELEGATION.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_HEADER.html delete mode 100644 docs/libcurl/opts/CURLOPT_HEADER.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_HEADERDATA.html delete mode 100644 docs/libcurl/opts/CURLOPT_HEADERDATA.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_HEADERFUNCTION.html delete mode 100644 docs/libcurl/opts/CURLOPT_HEADERFUNCTION.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_HEADEROPT.html delete mode 100644 docs/libcurl/opts/CURLOPT_HEADEROPT.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_HTTP200ALIASES.html delete mode 100644 docs/libcurl/opts/CURLOPT_HTTP200ALIASES.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_HTTPAUTH.html delete mode 100644 docs/libcurl/opts/CURLOPT_HTTPAUTH.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_HTTPGET.html delete mode 100644 docs/libcurl/opts/CURLOPT_HTTPGET.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_HTTPHEADER.html delete mode 100644 docs/libcurl/opts/CURLOPT_HTTPHEADER.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_HTTPPOST.html delete mode 100644 docs/libcurl/opts/CURLOPT_HTTPPOST.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.html delete mode 100644 docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_HTTP_CONTENT_DECODING.html delete mode 100644 docs/libcurl/opts/CURLOPT_HTTP_CONTENT_DECODING.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_HTTP_TRANSFER_DECODING.html delete mode 100644 docs/libcurl/opts/CURLOPT_HTTP_TRANSFER_DECODING.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_HTTP_VERSION.html delete mode 100644 docs/libcurl/opts/CURLOPT_HTTP_VERSION.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_IGNORE_CONTENT_LENGTH.html delete mode 100644 docs/libcurl/opts/CURLOPT_IGNORE_CONTENT_LENGTH.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_INFILESIZE.html delete mode 100644 docs/libcurl/opts/CURLOPT_INFILESIZE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_INFILESIZE_LARGE.html delete mode 100644 docs/libcurl/opts/CURLOPT_INFILESIZE_LARGE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_INTERFACE.html delete mode 100644 docs/libcurl/opts/CURLOPT_INTERFACE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_INTERLEAVEDATA.html delete mode 100644 docs/libcurl/opts/CURLOPT_INTERLEAVEDATA.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.html delete mode 100644 docs/libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_IOCTLDATA.html delete mode 100644 docs/libcurl/opts/CURLOPT_IOCTLDATA.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.html delete mode 100644 docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_IPRESOLVE.html delete mode 100644 docs/libcurl/opts/CURLOPT_IPRESOLVE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_ISSUERCERT.html delete mode 100644 docs/libcurl/opts/CURLOPT_ISSUERCERT.pdf create mode 100644 docs/libcurl/opts/CURLOPT_KEEP_SENDING_ON_ERROR.3 delete mode 100644 docs/libcurl/opts/CURLOPT_KEYPASSWD.html delete mode 100644 docs/libcurl/opts/CURLOPT_KEYPASSWD.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_KRBLEVEL.html delete mode 100644 docs/libcurl/opts/CURLOPT_KRBLEVEL.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_LOCALPORT.html delete mode 100644 docs/libcurl/opts/CURLOPT_LOCALPORT.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.html delete mode 100644 docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.html delete mode 100644 docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.html delete mode 100644 docs/libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_LOW_SPEED_TIME.html delete mode 100644 docs/libcurl/opts/CURLOPT_LOW_SPEED_TIME.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_MAIL_AUTH.html delete mode 100644 docs/libcurl/opts/CURLOPT_MAIL_AUTH.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_MAIL_FROM.html delete mode 100644 docs/libcurl/opts/CURLOPT_MAIL_FROM.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_MAIL_RCPT.html delete mode 100644 docs/libcurl/opts/CURLOPT_MAIL_RCPT.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_MAXCONNECTS.html delete mode 100644 docs/libcurl/opts/CURLOPT_MAXCONNECTS.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_MAXFILESIZE.html delete mode 100644 docs/libcurl/opts/CURLOPT_MAXFILESIZE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.html delete mode 100644 docs/libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_MAXREDIRS.html delete mode 100644 docs/libcurl/opts/CURLOPT_MAXREDIRS.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_MAX_RECV_SPEED_LARGE.html delete mode 100644 docs/libcurl/opts/CURLOPT_MAX_RECV_SPEED_LARGE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_MAX_SEND_SPEED_LARGE.html delete mode 100644 docs/libcurl/opts/CURLOPT_MAX_SEND_SPEED_LARGE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_NETRC.html delete mode 100644 docs/libcurl/opts/CURLOPT_NETRC.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_NETRC_FILE.html delete mode 100644 docs/libcurl/opts/CURLOPT_NETRC_FILE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_NEW_DIRECTORY_PERMS.html delete mode 100644 docs/libcurl/opts/CURLOPT_NEW_DIRECTORY_PERMS.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_NEW_FILE_PERMS.html delete mode 100644 docs/libcurl/opts/CURLOPT_NEW_FILE_PERMS.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_NOBODY.html delete mode 100644 docs/libcurl/opts/CURLOPT_NOBODY.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_NOPROGRESS.html delete mode 100644 docs/libcurl/opts/CURLOPT_NOPROGRESS.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_NOPROXY.html delete mode 100644 docs/libcurl/opts/CURLOPT_NOPROXY.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_NOSIGNAL.html delete mode 100644 docs/libcurl/opts/CURLOPT_NOSIGNAL.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_OPENSOCKETDATA.html delete mode 100644 docs/libcurl/opts/CURLOPT_OPENSOCKETDATA.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.html delete mode 100644 docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_PASSWORD.html delete mode 100644 docs/libcurl/opts/CURLOPT_PASSWORD.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_PATH_AS_IS.html delete mode 100644 docs/libcurl/opts/CURLOPT_PATH_AS_IS.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.html delete mode 100644 docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_PIPEWAIT.html delete mode 100644 docs/libcurl/opts/CURLOPT_PIPEWAIT.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_PORT.html delete mode 100644 docs/libcurl/opts/CURLOPT_PORT.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_POST.html delete mode 100644 docs/libcurl/opts/CURLOPT_POST.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_POSTFIELDS.html delete mode 100644 docs/libcurl/opts/CURLOPT_POSTFIELDS.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.html delete mode 100644 docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.html delete mode 100644 docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_POSTQUOTE.html delete mode 100644 docs/libcurl/opts/CURLOPT_POSTQUOTE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_POSTREDIR.html delete mode 100644 docs/libcurl/opts/CURLOPT_POSTREDIR.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_PREQUOTE.html delete mode 100644 docs/libcurl/opts/CURLOPT_PREQUOTE.pdf create mode 100644 docs/libcurl/opts/CURLOPT_PRE_PROXY.3 delete mode 100644 docs/libcurl/opts/CURLOPT_PRIVATE.html delete mode 100644 docs/libcurl/opts/CURLOPT_PRIVATE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_PROGRESSDATA.html delete mode 100644 docs/libcurl/opts/CURLOPT_PROGRESSDATA.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_PROGRESSFUNCTION.html delete mode 100644 docs/libcurl/opts/CURLOPT_PROGRESSFUNCTION.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_PROTOCOLS.html delete mode 100644 docs/libcurl/opts/CURLOPT_PROTOCOLS.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_PROXY.html delete mode 100644 docs/libcurl/opts/CURLOPT_PROXY.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_PROXYAUTH.html delete mode 100644 docs/libcurl/opts/CURLOPT_PROXYAUTH.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_PROXYHEADER.html delete mode 100644 docs/libcurl/opts/CURLOPT_PROXYHEADER.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_PROXYPASSWORD.html delete mode 100644 docs/libcurl/opts/CURLOPT_PROXYPASSWORD.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_PROXYPORT.html delete mode 100644 docs/libcurl/opts/CURLOPT_PROXYPORT.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_PROXYTYPE.html delete mode 100644 docs/libcurl/opts/CURLOPT_PROXYTYPE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_PROXYUSERNAME.html delete mode 100644 docs/libcurl/opts/CURLOPT_PROXYUSERNAME.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_PROXYUSERPWD.html delete mode 100644 docs/libcurl/opts/CURLOPT_PROXYUSERPWD.pdf create mode 100644 docs/libcurl/opts/CURLOPT_PROXY_CAINFO.3 create mode 100644 docs/libcurl/opts/CURLOPT_PROXY_CAPATH.3 create mode 100644 docs/libcurl/opts/CURLOPT_PROXY_CRLFILE.3 create mode 100644 docs/libcurl/opts/CURLOPT_PROXY_KEYPASSWD.3 create mode 100644 docs/libcurl/opts/CURLOPT_PROXY_PINNEDPUBLICKEY.3 delete mode 100644 docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.html delete mode 100644 docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.pdf create mode 100644 docs/libcurl/opts/CURLOPT_PROXY_SSLCERT.3 create mode 100644 docs/libcurl/opts/CURLOPT_PROXY_SSLCERTTYPE.3 create mode 100644 docs/libcurl/opts/CURLOPT_PROXY_SSLKEY.3 create mode 100644 docs/libcurl/opts/CURLOPT_PROXY_SSLKEYTYPE.3 create mode 100644 docs/libcurl/opts/CURLOPT_PROXY_SSLVERSION.3 create mode 100644 docs/libcurl/opts/CURLOPT_PROXY_SSL_CIPHER_LIST.3 create mode 100644 docs/libcurl/opts/CURLOPT_PROXY_SSL_OPTIONS.3 create mode 100644 docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYHOST.3 create mode 100644 docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYPEER.3 create mode 100644 docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_PASSWORD.3 create mode 100644 docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_TYPE.3 create mode 100644 docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_USERNAME.3 delete mode 100644 docs/libcurl/opts/CURLOPT_PROXY_TRANSFER_MODE.html delete mode 100644 docs/libcurl/opts/CURLOPT_PROXY_TRANSFER_MODE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_PUT.html delete mode 100644 docs/libcurl/opts/CURLOPT_PUT.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_QUOTE.html delete mode 100644 docs/libcurl/opts/CURLOPT_QUOTE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_RANDOM_FILE.html delete mode 100644 docs/libcurl/opts/CURLOPT_RANDOM_FILE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_RANGE.html delete mode 100644 docs/libcurl/opts/CURLOPT_RANGE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_READDATA.html delete mode 100644 docs/libcurl/opts/CURLOPT_READDATA.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_READFUNCTION.html delete mode 100644 docs/libcurl/opts/CURLOPT_READFUNCTION.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.html delete mode 100644 docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_REFERER.html delete mode 100644 docs/libcurl/opts/CURLOPT_REFERER.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_RESOLVE.html delete mode 100644 docs/libcurl/opts/CURLOPT_RESOLVE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_RESUME_FROM.html delete mode 100644 docs/libcurl/opts/CURLOPT_RESUME_FROM.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.html delete mode 100644 docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.html delete mode 100644 docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_RTSP_REQUEST.html delete mode 100644 docs/libcurl/opts/CURLOPT_RTSP_REQUEST.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.html delete mode 100644 docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.html delete mode 100644 docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.html delete mode 100644 docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.html delete mode 100644 docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SASL_IR.html delete mode 100644 docs/libcurl/opts/CURLOPT_SASL_IR.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SEEKDATA.html delete mode 100644 docs/libcurl/opts/CURLOPT_SEEKDATA.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SEEKFUNCTION.html delete mode 100644 docs/libcurl/opts/CURLOPT_SEEKFUNCTION.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SERVICE_NAME.html delete mode 100644 docs/libcurl/opts/CURLOPT_SERVICE_NAME.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SHARE.html delete mode 100644 docs/libcurl/opts/CURLOPT_SHARE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SOCKOPTDATA.html delete mode 100644 docs/libcurl/opts/CURLOPT_SOCKOPTDATA.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SOCKOPTFUNCTION.html delete mode 100644 docs/libcurl/opts/CURLOPT_SOCKOPTFUNCTION.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.html delete mode 100644 docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.html delete mode 100644 docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SSH_AUTH_TYPES.html delete mode 100644 docs/libcurl/opts/CURLOPT_SSH_AUTH_TYPES.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.html delete mode 100644 docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SSH_KEYDATA.html delete mode 100644 docs/libcurl/opts/CURLOPT_SSH_KEYDATA.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SSH_KEYFUNCTION.html delete mode 100644 docs/libcurl/opts/CURLOPT_SSH_KEYFUNCTION.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.html delete mode 100644 docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.html delete mode 100644 docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.html delete mode 100644 docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SSLCERT.html delete mode 100644 docs/libcurl/opts/CURLOPT_SSLCERT.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SSLCERTTYPE.html delete mode 100644 docs/libcurl/opts/CURLOPT_SSLCERTTYPE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SSLENGINE.html delete mode 100644 docs/libcurl/opts/CURLOPT_SSLENGINE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.html delete mode 100644 docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SSLKEY.html delete mode 100644 docs/libcurl/opts/CURLOPT_SSLKEY.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SSLKEYTYPE.html delete mode 100644 docs/libcurl/opts/CURLOPT_SSLKEYTYPE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SSLVERSION.html delete mode 100644 docs/libcurl/opts/CURLOPT_SSLVERSION.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.html delete mode 100644 docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.html delete mode 100644 docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.html delete mode 100644 docs/libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.html delete mode 100644 docs/libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SSL_ENABLE_NPN.html delete mode 100644 docs/libcurl/opts/CURLOPT_SSL_ENABLE_NPN.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SSL_FALSESTART.html delete mode 100644 docs/libcurl/opts/CURLOPT_SSL_FALSESTART.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SSL_OPTIONS.html delete mode 100644 docs/libcurl/opts/CURLOPT_SSL_OPTIONS.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SSL_SESSIONID_CACHE.html delete mode 100644 docs/libcurl/opts/CURLOPT_SSL_SESSIONID_CACHE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SSL_VERIFYHOST.html delete mode 100644 docs/libcurl/opts/CURLOPT_SSL_VERIFYHOST.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.html delete mode 100644 docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.html delete mode 100644 docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_STDERR.html delete mode 100644 docs/libcurl/opts/CURLOPT_STDERR.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_STREAM_DEPENDS.html delete mode 100644 docs/libcurl/opts/CURLOPT_STREAM_DEPENDS.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_STREAM_DEPENDS_E.html delete mode 100644 docs/libcurl/opts/CURLOPT_STREAM_DEPENDS_E.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.html delete mode 100644 docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_TCP_FASTOPEN.html delete mode 100644 docs/libcurl/opts/CURLOPT_TCP_FASTOPEN.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.html delete mode 100644 docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.html delete mode 100644 docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.html delete mode 100644 docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_TCP_NODELAY.html delete mode 100644 docs/libcurl/opts/CURLOPT_TCP_NODELAY.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_TELNETOPTIONS.html delete mode 100644 docs/libcurl/opts/CURLOPT_TELNETOPTIONS.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.html delete mode 100644 docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_TFTP_NO_OPTIONS.html delete mode 100644 docs/libcurl/opts/CURLOPT_TFTP_NO_OPTIONS.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_TIMECONDITION.html delete mode 100644 docs/libcurl/opts/CURLOPT_TIMECONDITION.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_TIMEOUT.html delete mode 100644 docs/libcurl/opts/CURLOPT_TIMEOUT.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_TIMEOUT_MS.html delete mode 100644 docs/libcurl/opts/CURLOPT_TIMEOUT_MS.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_TIMEVALUE.html delete mode 100644 docs/libcurl/opts/CURLOPT_TIMEVALUE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.html delete mode 100644 docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.html delete mode 100644 docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.html delete mode 100644 docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_TRANSFERTEXT.html delete mode 100644 docs/libcurl/opts/CURLOPT_TRANSFERTEXT.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING.html delete mode 100644 docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.html delete mode 100644 docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.html delete mode 100644 docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_UPLOAD.html delete mode 100644 docs/libcurl/opts/CURLOPT_UPLOAD.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_URL.html delete mode 100644 docs/libcurl/opts/CURLOPT_URL.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_USERAGENT.html delete mode 100644 docs/libcurl/opts/CURLOPT_USERAGENT.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_USERNAME.html delete mode 100644 docs/libcurl/opts/CURLOPT_USERNAME.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_USERPWD.html delete mode 100644 docs/libcurl/opts/CURLOPT_USERPWD.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_USE_SSL.html delete mode 100644 docs/libcurl/opts/CURLOPT_USE_SSL.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_VERBOSE.html delete mode 100644 docs/libcurl/opts/CURLOPT_VERBOSE.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_WILDCARDMATCH.html delete mode 100644 docs/libcurl/opts/CURLOPT_WILDCARDMATCH.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_WRITEDATA.html delete mode 100644 docs/libcurl/opts/CURLOPT_WRITEDATA.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_WRITEFUNCTION.html delete mode 100644 docs/libcurl/opts/CURLOPT_WRITEFUNCTION.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_XFERINFODATA.html delete mode 100644 docs/libcurl/opts/CURLOPT_XFERINFODATA.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_XFERINFOFUNCTION.html delete mode 100644 docs/libcurl/opts/CURLOPT_XFERINFOFUNCTION.pdf delete mode 100644 docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.html delete mode 100644 docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.pdf delete mode 100644 docs/mk-ca-bundle.html delete mode 100644 docs/mk-ca-bundle.pdf delete mode 100644 lib/Makefile.vc6 create mode 100644 lib/rand.c create mode 100644 lib/rand.h delete mode 100644 lib/rawstr.c delete mode 100644 lib/rawstr.h create mode 100644 lib/strcase.c create mode 100644 lib/strcase.h delete mode 100644 lib/strequal.c delete mode 100644 lib/strequal.h delete mode 100644 src/Makefile.vc6 create mode 100644 tests/data/test1145 create mode 100644 tests/data/test1146 create mode 100644 tests/data/test1245 create mode 100644 tests/data/test1246 create mode 100644 tests/data/test1247 create mode 100644 tests/data/test1248 create mode 100644 tests/data/test1249 create mode 100644 tests/data/test1250 create mode 100644 tests/data/test1251 create mode 100644 tests/data/test1252 create mode 100644 tests/data/test1253 create mode 100644 tests/data/test1254 create mode 100644 tests/data/test1255 create mode 100644 tests/data/test1256 create mode 100644 tests/data/test1257 create mode 100644 tests/data/test1258 create mode 100644 tests/data/test1259 create mode 100644 tests/data/test1280 create mode 100644 tests/data/test1281 create mode 100644 tests/data/test1282 create mode 100644 tests/data/test1283 create mode 100644 tests/data/test1284 create mode 100644 tests/data/test1285 create mode 100644 tests/data/test1286 create mode 100644 tests/data/test1438 create mode 100644 tests/data/test1439 create mode 100644 tests/data/test1532 create mode 100644 tests/data/test1533 create mode 100644 tests/data/test1534 create mode 100644 tests/data/test1535 create mode 100644 tests/data/test1536 create mode 100644 tests/data/test1605 create mode 100644 tests/data/test2053 create mode 100644 tests/data/test2054 create mode 100755 tests/data/test2055 create mode 100755 tests/data/test713 create mode 100755 tests/data/test714 create mode 100755 tests/data/test715 create mode 100644 tests/libtest/lib1532.c create mode 100644 tests/libtest/lib1533.c create mode 100644 tests/libtest/lib1534.c create mode 100644 tests/libtest/lib1535.c create mode 100644 tests/libtest/lib1536.c create mode 100644 tests/unit/CMakeLists.txt create mode 100644 tests/unit/unit1605.c delete mode 100644 winbuild/Makefile.msvc.names diff --git a/CHANGES b/CHANGES index b08f71d..45b9588 100644 --- a/CHANGES +++ b/CHANGES @@ -6,5683 +6,6052 @@ Changelog -Version 7.50.2 (7 Sep 2016) - -Daniel Stenberg (7 Sep 2016) -- RELEASE-NOTES: curl 7.50.2 release +Version 7.53.1 (24 Feb 2017) -- THANKS: updated for 7.50.2 +Daniel Stenberg (24 Feb 2017) +- release: 7.53.1 -Jay Satiro (6 Sep 2016) -- [Gaurav Malhotra brought this change] +- Revert "tests: use consistent environment variables for setting charset" + + This reverts commit ecd1d020abdae3c3ce3643ddab3106501e62e7c0. + + That commit caused test failures on my Debian Linux machine for all + changed test cases. We need to reconsider how that should get done. - openssl: fix CURLINFO_SSL_VERIFYRESULT +Dan Fandrich (23 Feb 2017) +- tests: use consistent environment variables for setting charset - CURLINFO_SSL_VERIFYRESULT does not get the certificate verification - result when SSL_connect fails because of a certificate verification - error. + Character set in POSIX is set by the locale defined (in decreasing order + of precedence) by the LC_ALL, LC_CTYPE and LANG environment variables (I + believe CHARSET is only historic). LC_ALL is cleared to ensure that + LC_CTYPE takes effect, but LC_ALL is not used to set the locale to + ensure that other parts of the locale aren't overriden, if set. Since + there doesn't seem to be a cross-platform way of specifying a UTF-8 + locale, and not all systems may support UTF-8, a is used + (where relevant) to skip the test if UTF-8 isn't in use. Test 1035 was + also converted to UTF-8 for consistency, as the actual character set + used there is irrelevant to the test. + +Jay Satiro (23 Feb 2017) +- url: Default the CA proxy bundle location to CURL_CA_BUNDLE - This fix saves the result of SSL_get_verify_result so that it is - returned by CURLINFO_SSL_VERIFYRESULT. + If the compile-time CURL_CA_BUNDLE location is defined use it as the + default value for the proxy CA bundle location, which is the same as + what we already do for the regular CA bundle location. - Closes https://github.com/curl/curl/pull/995 + Ref: https://github.com/curl/curl/pull/1257 -Daniel Stenberg (6 Sep 2016) -- [Daniel Gustafsson brought this change] +Daniel Stenberg (23 Feb 2017) +- [Sergii Pylypenko brought this change] - darwinssl: test for errSecSuccess in PKCS12 import rather than noErr (#993) + rand: added missing #ifdef HAVE_FCNTL_H around fcntl.h header - While noErr and errSecSuccess are defined as the same value, the API - documentation states that SecPKCS12Import() returns errSecSuccess if - there were no errors in importing. Ensure that a future change of the - defined value doesn't break (however unlikely) and be consistent with - the API docs. + Closes #1285 -- [Daniel Gustafsson brought this change] +- TODO: "OPTIONS *" + + Closes #1280 - docs: Fix link to CONTRIBUTE in Github contribution guidelines (#994) +- RELEASE-NOTES: synced with 443e5b03a7d441 -- [Marcel Raad brought this change] +- THANKS-filter: shachaf - openssl: Fix compilation with OPENSSL_API_COMPAT=0x10100000L - - With OPENSSL_API_COMPAT=0x10100000L (OpenSSL 1.1 API), the cleanup - functions are unavailable (they're no-ops anyway in OpenSSL 1.1). The - replacements for SSL_load_error_strings, SSLeay_add_ssl_algorithms, and - OpenSSL_add_all_algorithms are called automatically [1][2]. SSLeay() is - now called OpenSSL_version_num(). - - [1]: https://www.openssl.org/docs/man1.1.0/ssl/OPENSSL_init_ssl.html - [2]: https://www.openssl.org/docs/man1.1.0/crypto/OPENSSL_init_crypto.html +- [İsmail Dönmez brought this change] + + tests: Set CHARSET & LANG to UTF-8 in 1035, 2046 and 2047 - Closes #992 + Closes #1283 + Fixes #1277 -- RELEASE-NOTES: synced with 3d4c0c8b9bc1d +- bump: 7.53.1 coming up + + synced with df665f4df0f7a352 -- http2: return EOF when done uploading without known size +- formdata: check for EOF when reading from stdin - Fixes #982 + Reported-by: shachaf@users.noreply.github.com + + Fixes #1281 -- http2: skip the content-length parsing, detect unknown size +Jay Satiro (22 Feb 2017) +- docs: gitignore curl.1 + + curl.1 is generated by the cmdline-opts script since 4c49b83. -- http2: minor white space edit +Daniel Stenberg (22 Feb 2017) +- TODO: HTTP Digest using SHA-256 -- http2: use named define instead of magic constant in read callback +- TODO: brotli is deployed widely now -- [Craig Davison brought this change] +Jay Satiro (21 Feb 2017) +- [Viktor Szakats brought this change] - configure: make the cpp -P detection not clobber CPPFLAGS + urldata: include curl_sspi.h when Windows SSPI is enabled - CPPPFLAGS is now CPPPFLAG. Fixes CURL_CHECK_DEF. + f77dabe broke builds in Windows using Windows SSPI but not Windows SSL. - Fixes #958 - -- [Olivier Brunel brought this change] + Bug: https://github.com/curl/curl/issues/1276 + Reported-by: jveazey@users.noreply.github.com - speed caps: not based on average speeds anymore +- url: Improve CURLOPT_PROXY_CAPATH error handling - Speed limits (from CURLOPT_MAX_RECV_SPEED_LARGE & - CURLOPT_MAX_SEND_SPEED_LARGE) were applied simply by comparing limits - with the cumulative average speed of the entire transfer; While this - might work at times with good/constant connections, in other cases it - can result to the limits simply being "ignored" for more than "short - bursts" (as told in man page). + - Change CURLOPT_PROXY_CAPATH to return CURLE_NOT_BUILT_IN if the option + is not supported, which is the same as what we already do for + CURLOPT_CAPATH. - Consider a download that goes on much slower than the limit for some - time (because bandwidth is used elsewhere, server is slow, whatever the - reason), then once things get better, curl would simply ignore the limit - up until the average speed (since the beginning of the transfer) reached - the limit. This could prove the limit useless to effectively avoid - using the entire bandwidth (at least for quite some time). + - Change the curl tool to handle CURLOPT_PROXY_CAPATH error + CURLE_NOT_BUILT_IN as a warning instead of as an error, which is the + same as what we already do for CURLOPT_CAPATH. - So instead, we now use a "moving starting point" as reference, and every - time at least as much as the limit as been transferred, we can reset - this starting point to the current position. This gets a good limiting - effect that applies to the "current speed" with instant reactivity (in - case of sudden speed burst). + - Fix CAPATH docs to show that CURLE_NOT_BUILT_IN is returned when the + respective CAPATH option is not supported by the SSL library. - Closes #971 - -- HISTORY.md: the multi socket was put in the wrong year! + Ref: https://github.com/curl/curl/pull/1257 -- [Mark Hamilton brought this change] +- cyassl: fix typo - tool_helpers.c: fix comment typo (#989) +Version 7.53.0 (22 Feb 2017) -- [Mark Hamilton brought this change] +Daniel Stenberg (22 Feb 2017) +- release: 7.53.0 - libtest/test.h: fix typo (#988) +- cookie: fix declaration of 'dup' shadows a global declaration -- CURLMOPT_PIPELINING.3: language +- TLS: make SSL_VERIFYSTATUS work again + + The CURLOPT_SSL_VERIFYSTATUS option was not properly handled by libcurl + and thus even if the status couldn't be verified, the connection would + be allowed and the user would not be told about the failed verification. + + Regression since cb4e2be7c6d42ca + + CVE-2017-2629 + Bug: https://curl.haxx.se/docs/adv_20170222.html + + Reported-by: Marcus Hoffmann -- CURLMOPT_PIPELINING.3: extended and clarified +Jay Satiro (21 Feb 2017) +- digest_sspi: Handle 'stale=TRUE' directive in HTTP digest - Especially in regards to the multiplexing part. + - If the server has provided another challenge use it as the replacement + input token if stale=TRUE. Otherwise previous credentials have failed + so return CURLE_LOGIN_DENIED. + + Prior to this change the stale directive was ignored and if another + challenge was received it would cause error CURLE_BAD_CONTENT_ENCODING. + + Ref: https://tools.ietf.org/html/rfc2617#page-10 + + Bug: https://github.com/curl/curl/issues/928 + Reported-by: tarek112@users.noreply.github.com -Steve Holme (31 Aug 2016) -- curl_sspi.c: Updated function description comments +Daniel Stenberg (20 Feb 2017) +- smb: use getpid replacement for windows UWP builds - * Added description to Curl_sspi_free_identity() - * Added parameter and return explanations to Curl_sspi_global_init() - * Added parameter explaination to Curl_sspi_global_cleanup() + Source: https://github.com/Microsoft/vcpkg/blob/7676b8780db1e1e591c4fc7eba4f96f73c428cb4/ports/curl/0002_fix_uwp.patch -- README: Corrected the supported Visual Studio versions +- TODO: CURLOPT_RESOLVE for any port number - Missed from commit 8356022d17. + Closes #1264 -- KNOWN_BUGS: Move the Visual Studio project shortcomings from local README +- RELEASE-NOTES: synced with af30f1152d43dcdb -- KNOWN_BUGS: Expand 6.4 to include Kerberos V5 - - ...and discuss a possible solution. +- [Jean Gressmann brought this change] -Daniel Stenberg (30 Aug 2016) -- connect: fix #ifdefs for debug versions of conn/streamclose() macros - - CURLDEBUG is for the memory debugging + sftp: improved checks for create dir failures - DEBUGBUILD is for the extra debug stuff + Since negative values are errors and not only -1. This makes SFTP upload + with --create-dirs work (again). - Pointed-out-by: Steve Holme + Closes #1269 -- KNOWN_BUGS: mention some cmake "support gaps" +Jay Satiro (20 Feb 2017) +- [Max Khon brought this change] -Nick Zitzmann (28 Aug 2016) -- darwinssl: add documentation stating that the --cainfo option is intended for backward compatibility only + digest_sspi: Fix nonce-count generation in HTTP digest - In other news, I changed one other reference to "Mac OS X" in the documentation (that I previously wrote) to say "macOS" instead. - -Daniel Stenberg (28 Aug 2016) -- http2: return CURLE_HTTP2_STREAM for unexpected stream close + - on the first invocation: keep security context returned by + InitializeSecurityContext() - Follow-up to c3e906e9cd0f, seems like a more appropriate error code + - on subsequent invocations: use MakeSignature() instead of + InitializeSecurityContext() to generate HTTP digest response - Suggested-by: Jay Satiro + Bug: https://github.com/curl/curl/issues/870 + Reported-by: Andreas Roth + + Closes https://github.com/curl/curl/pull/1251 -- [Tatsuhiro Tsujikawa brought this change] +- examples/multi-uv: checksrc compliance - http2: handle closed streams when uploading - - Fixes #986 +Michael Kaufmann (19 Feb 2017) +- string formatting: fix 4 printf-style format strings -- http2: make sure stream errors don't needlessly close the connection +Dan Fandrich (18 Feb 2017) +- tests: removed the obsolete name parameter + +Michael Kaufmann (18 Feb 2017) +- speed caps: update the timeouts if the speed is too low/high - With HTTP/2 each transfer is made in an indivial logical stream over the - connection, making most previous errors that caused the connection to get - forced-closed now instead just kill the stream and not the connection. + Follow-up to 4b86113 - Fixes #941 + Fixes https://github.com/curl/curl/issues/793 + Fixes https://github.com/curl/curl/issues/942 -- Curl_verify_windows_version: minor edit to avoid compiler warnings +- docs: fix timeout handling in multi-uv example + +- proxy: fix hostname resolution and IDN conversion - ... instead of if() before the switch(), add a default to the switch so - that the compilers don't warn on "warning: enumeration value - 'PLATFORM_DONT_CARE' not handled in switch" anymore. + Properly resolve, convert and log the proxy host names. + Support the "--connect-to" feature for SOCKS proxies and for passive FTP + data transfers. + + Follow-up to cb4e2be + + Reported-by: Jay Satiro + Fixes https://github.com/curl/curl/issues/1248 -Steve Holme (27 Aug 2016) -- RELEASE-NOTES: Added missing fix from commit 15592143f +Jay Satiro (17 Feb 2017) +- [Isaac Boukris brought this change] -Jay Satiro (26 Aug 2016) -- schannel: Disable ALPN for Wine since it is causing problems + http: fix missing 'Content-Length: 0' while negotiating auth - - Disable ALPN on Wine. + - While negotiating auth during PUT/POST if a user-specified + Content-Length header is set send 'Content-Length: 0'. - - Don't pass input secbuffer when ALPN is disabled. + This is what we do already in HTTPREQ_POST_FORM and what we did in the + HTTPREQ_POST case (regression since afd288b). - When ALPN support was added a change was made to pass an input secbuffer - to initialize the context. When ALPN is enabled the buffer contains the - ALPN information, and when it's disabled the buffer is empty. In either - case this input buffer caused problems with Wine and connections would - not complete. + Prior to this change no Content-Length header would be sent in such a + case. - Bug: https://github.com/curl/curl/issues/983 - Reported-by: Christian Fillion + Bug: https://curl.haxx.se/mail/lib-2017-02/0006.html + Reported-by: Dominik Hölzl + + Closes https://github.com/curl/curl/pull/1242 -Kamil Dudka (26 Aug 2016) -- [Peter Wang brought this change] +Daniel Stenberg (16 Feb 2017) +- [Simon Warta brought this change] - nss: work around race condition in PK11_FindSlotByName() + winbuild: add note on auto-detection of MACHINE in Makefile.vc - Serialise the call to PK11_FindSlotByName() to avoid spurious errors in - a multi-threaded environment. The underlying cause is a race condition - in nssSlot_IsTokenPresent(). + Closes #1265 + +- RELEASE-PROCEDURE: update the upcoming release calendar + +- TODO: consider file name from the redirected URL with -O ? - Bug: https://bugzilla.mozilla.org/1297397 + It isn't easily solved, but with some thinking someone could probably + come up with a working approach? - Closes #985 + Closes #1241 -- nss: refuse previously loaded certificate from file +Jay Satiro (15 Feb 2017) +- tool_urlglob: Allow a glob range with the same start and stop - ... when we are not asked to use a certificate from file + For example allow ranges like [1-1] and [a-a] etc. + + Regression since 5ca96cb. + + Bug: https://github.com/curl/curl/issues/1238 + Reported-by: R. Dennis Steed -Daniel Stenberg (26 Aug 2016) -- ftp_done: remove dead code +Daniel Stenberg (15 Feb 2017) +- axtls: adapt to API changes + + Builds with axTLS 2.1.2. This then also breaks compatibility with axTLS + < 2.1.0 (the older API) + + ... and fix the session_id mixup brought in 04b4ee549 + + Fixes #1220 -- TLS: random file/egd doesn't have to match for conn reuse +- RELEASE-NOTES: synced with 690935390c29c -- test161: add comment for the exit code +- [Nick Draffen brought this change] -Dan Fandrich (26 Aug 2016) -- test219: Add http as a required feature + curl: fix typo in time condition warning message + + The warning message had a typo. The argument long form is --time-cond + not --timecond + + Closes #1263 -Daniel Stenberg (25 Aug 2016) -- [Michael Kaufmann brought this change] +- smb: code indent - HTTP: stop parsing headers when switching to unknown protocols +Jay Satiro (14 Feb 2017) +- configure: Allow disabling pthreads, fall back on Win32 threads - - unknown protocols probably won't send more headers (e.g. WebSocket) - - improved comments and moved them to the correct case statements + When the threaded resolver option is specified for configure the default + thread library is pthreads. This change makes it possible to + --disable-pthreads and then configure can fall back on Win32 threads for + native Windows builds. - Closes #899 + Closes https://github.com/curl/curl/pull/1260 -- openssl: make build with 1.1.0 again +Daniel Stenberg (13 Feb 2017) +- http2: fix memory-leak when denying push streams - synced with OpenSSL git master commit cc06906707 - -- INTERNALS: fix title + Reported-by: zelinchen@users.noreply.github.com + Fixes #1229 -- configure: detect zlib with our pkg-config macros +Jay Satiro (11 Feb 2017) +- tool_operate: Show HTTPS-Proxy options on CURLE_SSL_CACERT - ... instead of relying on the pkg-config autoconf macros to be present. + When CURLE_SSL_CACERT occurs the tool shows a lengthy error message to + the user explaining possible solutions such as --cacert and --insecure. - Fixes #972 (again...) - -Jay Satiro (25 Aug 2016) -- http2: Remove incorrect comments + This change appends to that message similar options --proxy-cacert and + --proxy-insecure when there's a specified HTTPS proxy. - .. also remove same from scp + Closes https://github.com/curl/curl/issues/1258 -Daniel Stenberg (23 Aug 2016) -- [Ales Novak brought this change] +Daniel Stenberg (10 Feb 2017) +- cmdline-opts/page-footer: ftp.sunet.se is no longer an FTP mirror - ftp: fix wrong poll on the secondary socket +- URL: only accept ";options" in SMTP/POP3/IMAP URL schemes - When we're uploading using FTP and the server issues a tiny pause - between opening the connection to the client's secondary socket, the - client's initial poll() times out, which leads to second poll() which - does not wait for POLLIN on the secondary socket. So that poll() also - has to time out, creating a long (200ms) pause. + Fixes #1252 + +Jay Satiro (9 Feb 2017) +- cmdline-opts/socks*: Mention --preproxy in --socks* opts - This patch adds the correct flag to the secondary socket, making the - second poll() correctly wait for the connection there too. + - Document in --socks* opts they're still mutually exclusive of --proxy. - Signed-off-by: Ales Novak + Partial revert of 423a93c; I had misinterpreted the SOCKS proxy + + HTTP/HTTPS proxy combination. - Closes #978 + - Document in --socks* opts that --preproxy can be used to specify a + SOCKS proxy at the same time --proxy is used with an HTTP/HTTPS proxy. -- RELEASE-NOTES: synced with 95ded2c56 +Daniel Stenberg (9 Feb 2017) +- CURLOPT_SSL_VERIFYPEER.3: also the https proxy version -- configure: make it work without PKG_CHECK_MODULES +Kamil Dudka (9 Feb 2017) +- nss: make FTPS work with --proxytunnel - With commit c2f9b78 we added a new dependency on pkg-config for - developers which may be unwanted. This change make the configure script - still work as before if pkg-config isn't installed, it'll just use the - old zlib detection logic without pkg-config. + If the NSS code was in the middle of a non-blocking handshake and it + was asked to finish the handshake in blocking mode, it unexpectedly + continued in the non-blocking mode, which caused a FTPS connection + over CONNECT to fail with "(81) Socket not ready for send/recv". - Reported-by: Marc Hörsken + Bug: https://bugzilla.redhat.com/1420327 + +Daniel Stenberg (9 Feb 2017) +- examples/multithread.c: link to our multi-thread docs - Fixes #972 + ... instead of the OpenSSL mutex page. -Marc Hoersken (21 Aug 2016) -- Revert "KNOWN_BUGS: SOCKS proxy not working via IPv6" +- http_proxy: avoid freeing static memory - This reverts commit 9cb1059f92286a6eb5d28c477fdd3f26aed1d554. + Follow up to 7fe81ec298e0: make sure 'host' is either NULL or malloced. + +- [Cameron MacMinn brought this change] + + http_proxy: Fix tiny memory leak upon edge case connecting to proxy - As discussed in #835 SOCKS5 supports IPv6 proxies and destinations. + Fixes #1255 -Daniel Stenberg (21 Aug 2016) -- [Marco Deckel brought this change] +Michael Kaufmann (8 Feb 2017) +- polarssl, mbedtls: Fix detection of pending data + + Reported-by: Dan Fandrich + Bug: https://curl.haxx.se/mail/lib-2017-02/0032.html - win: Basic support for Universal Windows Platform apps +Dan Fandrich (7 Feb 2017) +- test1139: Added the --manual keyword since the manual is required + +Daniel Stenberg (7 Feb 2017) +- RELEASE-NOTES: synced with 102454459dd688c + +- THANKS-filter: polish some recent contributors + +- http2: reset push header counter fixes crash - Closes #820 + When removing an easy handler from a multi before it completed its + transfer, and it had pushed streams, it would segfault due to the pushed + counted not being cleared. + + Fixed-by: zelinchen@users.noreply.github.com + Fixes #1249 -Steve Holme (21 Aug 2016) -- sasl: Don't use GSSAPI authentication when domain name not specified +- [Markus Westerlind brought this change] + + transfer: only retry nobody-requests for HTTP - Only choose the GSSAPI authentication mechanism when the user name - contains a Windows domain name or the user is a valid UPN. + Using sftp to delete a file with CURLOPT_NOBODY set with a reused + connection would fail as curl expected to get some data. Thus it would + retry the command again which fails as the file has already been + deleted. - Fixes #718 + Fixes #1243 -- vauth: Added check for supported SSPI based authentication mechanisms +Jay Satiro (7 Feb 2017) +- [Daniel Gustafsson brought this change] + + telnet: Fix typos - Completing commit 00417fd66c and 2708d4259b. + Ref: https://github.com/curl/curl/pull/1245 -- http.c: Remove duplicate (authp->avail & CURLAUTH_DIGEST) check +- [Daniel Gustafsson brought this change] + + test552: Fix typos - From commit 2708d4259b. + Closes https://github.com/curl/curl/pull/1245 -Marc Hoersken (20 Aug 2016) -- socks.c: display the hostname returned by the SOCKS5 proxy server +- [Daniel Gustafsson brought this change] + + darwinssl: Avoid parsing certificates when not in verbose mode - Instead of displaying the requested hostname the one returned - by the SOCKS5 proxy server is used in case of connection error. - The requested hostname is displayed earlier in the connection sequence. + The information extracted from the server certificates in step 3 is only + used when in verbose mode, and there is no error handling or validation + performed as that has already been done. Only run the certificate + information extraction when in verbose mode and libcurl was built with + verbose strings. - The upper-value of the port is moved to a temporary variable and - replaced with a 0-byte to make sure the hostname is 0-terminated. + Closes https://github.com/curl/curl/pull/1246 -Steve Holme (20 Aug 2016) -- urldata.h: Corrected comment for httpcode which is also populated by SMTP - - As of 7.25.0 and commit 5430007222. +- [JDepooter brought this change] -Marc Hoersken (20 Aug 2016) -- socks.c: use Curl_printable_address in SOCKS5 connection sequence + schannel: Remove incorrect SNI disabled message - Replace custom string formatting with Curl_printable_address. - Add additional debug and error output in case of failures. + - Remove the SNI disabled when host verification disabled message + since that is incorrect. + + - Show a message for legacy versions of Windows <= XP that connections + may fail since those versions of WinSSL lack SNI, algorithms, etc. + + Bug: https://github.com/curl/curl/pull/1240 -- socks.c: align SOCKS4 connection sequence with SOCKS5 +Daniel Stenberg (7 Feb 2017) +- CHANGES: spell fix, use correct path to script + +- CHANGES.0: removed - Calling sscanf is not required since the raw IPv4 address is - available and the protocol can be detected using ai_family. + This is the previously manually edited changelog, not touched since Aug + 2015. Still present in git for those who wants it. -Steve Holme (20 Aug 2016) -- http.c: Corrected indentation change from commit 2708d4259b +Dan Fandrich (6 Feb 2017) +- cmdline-opts: Fixed build and test in out of source tree builds + +Viktor Szakats (6 Feb 2017) +- use *.sourceforge.io and misc URL updates - Made by Visual Studio's auto-correct feature and missed by me in my own - code reviews! + Ref: https://sourceforge.net/blog/introducing-https-for-project-websites/ + Closes: https://github.com/curl/curl/pull/1247 -- http: Added calls to Curl_auth_is__supported() +Jay Satiro (6 Feb 2017) +- docs: Add more HTTPS proxy documentation - Hooked up the HTTP authentication layer to query the new 'is mechanism - supported' functions when deciding what mechanism to use. + - Document HTTPS proxy type. - As per commit 00417fd66c existing functionality is maintained for now. + - Document --write-out %{proxy_ssl_verify_result}. + + - Document SOCKS proxy + HTTP/HTTPS proxy combination. + + HTTPS proxy support was added in 7.52.0 for OpenSSL, GnuTLS and NSS. + + Ref: https://github.com/curl/curl/commit/cb4e2be -Marc Hoersken (20 Aug 2016) -- socks.c: improve verbose output of SOCKS5 connection sequence +- OS400: Fix symbols + + - s/CURLOPT_SOCKS_PROXY/CURLOPT_PRE_PROXY + Follow-up to 7907a2b and 845522c. + + - Fix incorrect id for CURLOPT_PROXY_PINNEDPUBLICKEY. + + - Add id for CURLOPT_ABSTRACT_UNIX_SOCKET. + + Bug: https://github.com/curl/curl/issues/1237 + Reported-by: jonrumsey@users.noreply.github.com -- configure.ac: add missing quotes to PKG_CHECK_MODULES +- [Sean Burford brought this change] -Steve Holme (20 Aug 2016) -- sasl: Added calls to Curl_auth_is__supported() + cmake: Support curl --xattr when built with cmake - Hooked up the SASL authentication layer to query the new 'is mechanism - supported' functions when deciding what mechanism to use. + - Test for and set HAVE_FSETXATTR when support for extended file + attributes is present. - For now existing functionality is maintained. + Closes https://github.com/curl/curl/pull/1176 -Daniel Stenberg (19 Aug 2016) -- [Miroslav Franc brought this change] +- [Adam Langley brought this change] - spnego_sspi: fix memory leak in case *outlen is zero (#970) + openssl: Don't use certificate after transferring ownership + + SSL_CTX_add_extra_chain_cert takes ownership of the given certificate + while, despite the similar name, SSL_CTX_add_client_CA does not. Thus + it's best to call SSL_CTX_add_client_CA before + SSL_CTX_add_extra_chain_cert, while the code still has ownership of the + argument. + + Closes https://github.com/curl/curl/pull/1236 -- CURLMOPT_MAX_TOTAL_CONNECTIONS.3: mention it can also multiplex +Daniel Stenberg (29 Jan 2017) +- [Antoine Aubert brought this change] -Steve Holme (18 Aug 2016) -- vauth: Introduced Curl_auth_is__supported() functions + mbedtls: implement CTR-DRBG and HAVEGE random generators - As Windows SSPI authentication calls fail when a particular mechanism - isn't available, introduced these functions for DIGEST, NTLM, Kerberos 5 - and Negotiate to allow both HTTP and SASL authentication the opportunity - to query support for a supported mechanism before selecting it. + closes #1227 + +- docs: we no longer ship HTML versions of man pages - For now each function returns TRUE to maintain compatability with the - existing code when called. + ... refer to the web site for the web versions. -Daniel Stenberg (18 Aug 2016) -- test1144: verify HEAD with body-only response +- [railsnewbie257 brought this change] -Steve Holme (17 Aug 2016) -- RELEASE-PROCEDURE: Added some more future release dates + docs: proofread README.netware README.win32 - ...and removed some old ones + Closes #1231 -Daniel Stenberg (17 Aug 2016) -- [David Woodhouse brought this change] +- RELEASE-NOTES; synced with ab08d82648 - curl: allow "pkcs11:" prefix for client certificates +Michael Kaufmann (28 Jan 2017) +- mbedtls: disable TLS session tickets - RFC7512 provides a standard method to reference certificates in PKCS#11 - tokens, by means of a URI starting 'pkcs11:'. + SSL session reuse with TLS session tickets is not supported yet. + Use SSL session IDs instead. - We're working on fixing various applications so that whenever they would - have been able to use certificates from a file, users can simply insert - a PKCS#11 URI instead and expect it to work. This expectation is now a - part of the Fedora packaging guidelines, for example. + See https://github.com/curl/curl/issues/1109 + +- gnutls: disable TLS session tickets - This doesn't work with cURL because of the way that the colon is used - to separate the certificate argument from the passphrase. So instead of + SSL session reuse with TLS session tickets is not supported yet. + Use SSL session IDs instead. - curl -E 'pkcs11:manufacturer=piv_II;id=%01' … + Fixes https://github.com/curl/curl/issues/1109 + +- polarssl: fix hangs - I instead need to invoke cURL with the colon escaped, like this: + This bugfix is similar to commit c111178bd4. + +Daniel Stenberg (27 Jan 2017) +- cookies: do not assume a valid domain has a dot - curl -E 'pkcs11\:manufacturer=piv_II;id=%01' … + This repairs cookies for localhost. - This is suboptimal because we want *consistency* — the URI should be - usable in place of a filename anywhere, without having strange - differences for different applications. + Non-PSL builds will now only accept "localhost" without dots, while PSL + builds okeys everything not listed as PSL. - This patch therefore disables the processing in parse_cert_parameter() - when the string starts with 'pkcs11:'. It means you can't pass a - passphrase with an unescaped PKCS#11 URI, but there's no need to do so - because RFC7512 allows a PIN to be given as a 'pin-value' attribute in - the URI itself. + Added test 1258 to verify. - Also, if users are already using RFC7512 URIs with the colon escaped as - in the above example — even providing a passphrase for cURL to handling - instead of using a pin-value attribute, that will continue to work - because their string will start 'pkcs11\:' and won't match the check. + This was a regression brought in a76825a5efa6b4 + +- TODO: remove "Support TLS v1.3" - What *does* break with this patch is the extremely unlikely case that a - user has a file which is in the local directory and literally named - just "pkcs11", and they have a passphrase on it. If that ever happened, - the user would need to refer to it as './pkcs11:' instead. + Support is trickling in already. -- nss: make the global variables static +- [railsnewbie257 brought this change] -- openssl: use regular malloc instead of OPENSSL_malloc + INTERNALS.md: language improvements - This allows for better memmory debugging and torture tests. + Closes #1226 -- proxy: fix tests as follow-up to 93b0d907d5 +- telnet: fix windows compiler warnings - This fixes tests that were added after 113f04e664b as the tests would - fail otherwise. + Thumbs-up-by: Jay Satiro - We bring back "Proxy-Connection: Keep-Alive" now unconditionally to fix - regressions with old and stupid proxies, but we could possibly switch to - using it only for CONNECT or only for NTLM in a future if we want to - gradually reduce it. + Closes #1225 + +- VC: remove the makefile.vc6 build infra - Fixes #954 + The winbuild/ build files is now the single MSVC makefile build choice. - Reported-by: János Fekete + Closes #1215 -- Revert "Proxy-Connection: stop sending this header by default" - - This reverts commit 113f04e664b16b944e64498a73a4dab990fe9a68. +- [Jay Satiro brought this change] -- CURLOPT_PROXY.3: unsupported schemes cause errors now + cmdline-opts/gen.pl: Open input files in CRLF mode - Follow-up to a96319ebb9 (document the new behavior) + On Windows it's possible to have input files with CRLF line endings and + a perl that defaults to LF line endings (eg msysgit). Currently that + results in generator output of mixed line endings of CR, LF and CRLF. + + This change fixes that issue in the most succinct way by opening the + files in :crlf text mode even when the perl being used does not default + to that mode. (On operating systems that don't have a separate text mode + it's essentially a no-op.) The output continues to be in the perl's + native line ending. -- tests/README: mention nghttpx for HTTP/2 tests +- docs/curl.1: generate from the cmdline-opts script -- README.md: add our CII Best Practices badge +- vtls: source indentation fix -- proxy: polished the error message for unsupported schemes - - Follow up to a96319ebb93 +- contri*.sh: cut off parentheses from names too -- test219: verify unsupported scheme for proxies get rejected +- RELEASE-NOTES: synced with 01ab7c30bba6f -- proxy: reject attempts to use unsupported proxy schemes +- vtls: fix PolarSSL non-blocking handling - I discovered some people have been using "https://example.com" style - strings as proxy and it "works" (curl doesn't complain) because curl - ignores unknown schemes and then assumes plain HTTP instead. + A regression brought in cb4e2be - I think this misleads users into believing curl uses HTTPS to proxies - when it doesn't. Now curl rejects proxy strings using unsupported - schemes instead of just ignoring and defaulting to HTTP. + Reported-by: Michael Kaufmann + Bug: https://github.com/curl/curl/issues/1174#issuecomment-274018791 -- RELEASE-NOTES: synced with b7ee5316c2fd5b +- [Antoine Aubert brought this change] -Marc Hoersken (14 Aug 2016) -- socks.c: Correctly calculate position of port in response packet + vtls: fix mbedtls multi non blocking handshake. - Third commit to fix issue #944 regarding SOCKS5 error handling. + When using multi, mbedtls handshake is in non blocking mode. vtls must + set wait for read/write flags for the socket. - Reported-by: David Kalnischkies + Closes #1223 -- socks.c: Do not modify and invalidate calculated response length +- [Richy Kim brought this change] + + CURLOPT_BUFFERSIZE: support enlarging receive buffer - Second commit to fix issue #944 regarding SOCKS5 error handling. + Replace use of fixed macro BUFSIZE to define the size of the receive + buffer. Reappropriate CURLOPT_BUFFERSIZE to include enlarging receive + buffer size. Upon setting, resize buffer if larger than the current + default size up to a MAX_BUFSIZE (512KB). This can benefit protocols + like SFTP. - Reported-by: David Kalnischkies + Closes #1222 -- socks.c: Move error output after reading the whole response packet - - First commit to fix issue #944 regarding SOCKS5 error handling. +- sws: use SOCKERRNO, not errno - Reported-by: David Kalnischkies + Reported-by: Gisle Vanem -Daniel Stenberg (13 Aug 2016) -- [Ronnie Mose brought this change] +Michael Kaufmann (19 Jan 2017) +- KNOWN_BUGS: HTTP/2 server push enabled when no pushes can be accepted + + This has been implemented with commit 9ad034e. - MANUAL: Remove invalid link to LDAP documentation (#962) +Viktor Szakats (19 Jan 2017) +- *.rc: escape non-ASCII/non-UTF-8 character for clarity - The server developer.netscape.com does not resolve into any - ip address and can be removed. + Closes https://github.com/curl/curl/pull/1217 -Jay Satiro (13 Aug 2016) -- openssl: accept subjectAltName iPAddress if no dNSName match +Kamil Dudka (19 Jan 2017) +- docs: non-blocking SSL handshake is now supported with NSS - Undo change introduced in d4643d6 which caused iPAddress match to be - ignored if dNSName was present but did not match. + Implemented since curl-7_36_0-130-g8868a22 - Also, if iPAddress is present but does not match, and dNSName is not - present, fail as no-match. Prior to this change in such a case the CN - would be checked for a match. + Reported-by: Fahim Chandurwala + +Michael Kaufmann (18 Jan 2017) +- CURLOPT_CONNECT_TO: Fix compile warnings - Bug: https://github.com/curl/curl/issues/959 - Reported-by: wmsch@users.noreply.github.com + Fix compile warnings that appeared only when curl has been configured + with '--disable-verbose'. -Daniel Stenberg (12 Aug 2016) -- [Dambaev Alexander brought this change] +Daniel Stenberg (18 Jan 2017) +- usercertinmem.c: improve the short description - configure.ac: add zlib search with pkg-config +- parseurl: move back buffer to function scope - Closes #956 + Regression since 1d4202ad, which moved the buffer into a more narrow + scope, but the data in that buffer was used outside of that more narrow + scope. + + Reported-by: Dan Fandrich + Bug: https://curl.haxx.se/mail/lib-2017-01/0093.html -- rtsp: ignore whitespace in session id +Jay Satiro (17 Jan 2017) +- openssl: Fix random generation - Follow-up to e577c43bb to fix test case 569 brekage: stop the parser at - whitespace as well. + - Fix logic error in Curl_ossl_random. - Help-by: Erik Janssen + Broken a few days ago in 807698d. -- HTTP: retry failed HEAD requests too - - Mark's new document about HTTP Retries - (https://mnot.github.io/I-D/httpbis-retry/) made me check our code and I - spotted that we don't retry failed HEAD requests which seems totally - inconsistent and I can't see any reason for that separate treatment. +Daniel Stenberg (17 Jan 2017) +- TODO: share OpenSSL contexts - So, no separate treatment for HEAD starting now. A HTTP request sent - over a reused connection that gets cut off before a single byte is - received will be retried on a fresh connection. + By supporting this, subsequent connects would load a lot less data from + disk. - Made-aware-by: Mark Nottingham + Closes #1110 -- mk-ca-bundle.1: document -m, added in 1.26 - -- RELEASE-NOTES: synced with e577c43bb5 +- bump: next release will be 7.53.0 -- [Erik Janssen brought this change] +Kamil Dudka (15 Jan 2017) +- nss: use the correct lock in nss_find_slot_by_name() - rtsp: accept any RTSP session id - - Makes libcurl work in communication with gstreamer-based RTSP - servers. The original code validates the session id to be in accordance - with the RFC. I think it is better not to do that: +Alessandro Ghedini (15 Jan 2017) +- http2: disable server push if not requested - - For curl the actual content is a don't care. + Ref: https://github.com/curl/curl/pull/1160 + +Daniel Stenberg (14 Jan 2017) +- [railsnewbie257 brought this change] + + docs: improved language in README.md HISTORY.md CONTRIBUTE.md - - The clarity of the RFC is debatable, is $ allowed or only as \$, that - is imho not clear + Closes #1211 + +Alessandro Ghedini (14 Jan 2017) +- http: print correct HTTP string in verbose output when using HTTP/2 - - Gstreamer seems to url-encode the session id but % is not allowed by - the RFC + Before: + ``` + % src/curl https://sigsegv.ninja/ -v --http2 + ... + > GET / HTTP/1.1 + > Host: sigsegv.ninja + > User-Agent: curl/7.52.2-DEV + > Accept: */* + > + ... + ``` - - less code + After: + ``` + % src/curl https://sigsegv.ninja/ -v --http2 + ... + > GET / HTTP/2 + > Host: sigsegv.ninja + > User-Agent: curl/7.52.2-DEV + > Accept: */* + > + ``` + +Daniel Stenberg (14 Jan 2017) +- TODO: send only part of --data - With this patch curl will correctly handle real-life lines like: - Session: biTN4Kc.8%2B1w-AF.; timeout=60 + Closes #1200 + +- TODO: implemened "--fail-fast to exit on first transfer fail" - Bug: https://curl.haxx.se/mail/lib-2016-08/0076.html + Even though it is called --fail-early -- symbols-in-versions: add CURL_STRICTER +- TODO: Chunked transfer multipart formpost - Added in 5fce88aa8c12564 + Closes #1139 -- [Simon Warta brought this change] +- TODO: Improve formpost API, not just add an easy argument - winbuild: Allow changing C compiler via environment variable CC (#952) +- addrinfo: fix compiler warning on offsetof() use - This makes it possible to use specific compilers or a cache. + curl_addrinfo.c:519:20: error: conversion to ‘curl_socklen_t {aka + unsigned int}’ from ‘long unsigned int’ may alter its value + [-Werror=conversion] - Sample use for clcache: - set CC=clcache.bat - nmake /f Makefile.vc DEBUG=no MODE=static VC=14 GEN_PDB=no + Follow-up to 1d786faee1046f -- LICENSE-MIXING.md: switched to markdown +- THANKS-filter: Jiri Malak -- docs-make: have markdown files use .md +- RELEASE-NOTES: synced with a7c73ae309c -- curl.h: make CURL_NO_OLDIES define CURL_STRICTER +Peter Wu (13 Jan 2017) +- [Isaac Boukris brought this change] -- HISTORY.md: use markdown extension + unix_socket: add support for abstract unix domain socket + + In addition to unix domain sockets, Linux also supports an + abstract namespace which is independent of the filesystem. + + In order to support it, add new CURLOPT_ABSTRACT_UNIX_SOCKET + option which uses the same storage as CURLOPT_UNIX_SOCKET_PATH + internally, along with a flag to specify abstract socket. + + On non-supporting platforms, the abstract address will be + interpreted as an empty string and fail gracefully. + + Also add new --abstract-unix-socket tool parameter. + + Signed-off-by: Isaac Boukris + Reported-by: Chungtsun Li (typeless) + Reviewed-by: Daniel Stenberg + Reviewed-by: Peter Wu + Closes #1197 + Fixes #1061 -- SSLCERTS.md: renamed to markdown extension +Daniel Stenberg (13 Jan 2017) +- write-out.d: 'time_total' is not always shown with ms precision + + We have higher resolution since 7.52.0 -- INTERNALS.md: use markdown extension for markdown content +- next.d: --trace and --trace-ascii are also global -- CONTRIBUTE.md: markdown extension +- [Isaac Boukris brought this change] -- CONTRIBUTE: changed to markdown + curl: reset the easy handle at --next + + So that only "global" options (verbose mostly) survive into the next + transfer, and the others have to be set again unless default is fine. -- CONTRIBUTE: refreshed +- [Frank Gevaerts brought this change] -- TODO: added an SSH section and two SFTP things to do + docs: Add note about libcurl copying strings to CURLOPT_* manpages + + Closes #1169 -- TODO: remove the 1.22 duplicated item +- [Frank Gevaerts brought this change] -- TODO: move "CURLOPT_MAIL_CLIENT" to SMTP section + CURLOPT_PREQUOTE.3: takes a struct curl_slist*, not a char* -- TODO: API for URL parsing/splitting +- IDN: Use TR46 non-transitional + + Assisted-by: Tim Rühsen -- TODO: move QUIC to the HTTP section +- IDN: revert use of the transitional option + + It made the german ß get converted to ss, IDNA2003 style, and we can't + have that for the .de TLD - a primary reason for our switch to IDNA2008. + + Test 165 verifies. -- [Simon Warta brought this change] +- [Tim Rühsen brought this change] - winbuild: Free name $(CC) in Makefile (#950) + IDN: Fix compile time detection of linidn2 TR46 - In the old line number 290, CC and CURL_CC had the same value. After - that, /DCURL_STATICLIB was added to CC but not CURL_CC (intended?). + Follow-up to f30cbcac1 - This gets rid of the CC variable entirely. It is a first step to make it - possible to manualyl set a CC variable in order to be able to change the - compiler. + Closes #1207 -- TODO: Use huge HTTP/2 windows - -- [Simon Warta brought this change] +- [ERAMOTO Masaya brought this change] - winbuild: Avoid setting redundant CFLAGS to compile commands (#949) + url: --noproxy option overrides NO_PROXY environment variable - $(CURL_CC) is always used with $(CURL_CFLAGS) appended, so before this, - all arguments in CURL_CFLAGS have been added twice. + Under condition using http_proxy env var, noproxy list was the + combination of --noproxy option and NO_PROXY env var previously. Since + this commit, --noproxy option overrides NO_PROXY environment variable + even if use http_proxy env var. + + Closes #1140 -Jay Satiro (8 Aug 2016) -- cmake: Enable win32 threaded resolver by default +- [ERAMOTO Masaya brought this change] + + url: Refactor detect_proxy() - - Turn on USE_THREADS_WIN32 in Windows if ares isn't on + If defined CURL_DISABLE_HTTP, detect_proxy() returned NULL. If not + defined CURL_DISABLE_HTTP, detect_proxy() checked noproxy list. - This change is similar to what we already do in the autotools build. + Thus refactor to set proxy to NULL instead of calling detect_proxy() if + define CURL_DISABLE_HTTP, and refactor to call detect_proxy() if not + define CURL_DISABLE_HTTP and the host is not in the noproxy list. -- cmake: Enable win32 large file support by default +- [ERAMOTO Masaya brought this change] + + url: Fix NO_PROXY env var to work properly with --proxy option. - All compilers used by cmake in Windows should support large files. + The combination of --noproxy option and http_proxy env var works well + both for proxied hosts and non-proxied hosts. - - Add test SIZEOF_OFF_T - - Remove outdated test SIZEOF_CURL_OFF_T - - Turn on USE_WIN32_LARGE_FILES in Windows - - Check for 'Largefile' during the features output + However, when combining NO_PROXY env var with --proxy option, + non-proxied hosts are not reachable while proxied host is OK. + + This patch allows us to access non-proxied hosts even if using NO_PROXY + env var with --proxy option. -Daniel Stenberg (7 Aug 2016) -- TODO: added several ideas, removed SPDY +- [Tim Rühsen brought this change] -- http2: always wait for readable socket + IDN: Use TR46 'transitional' for toASCII translations - Since the server can at any time send a HTTP/2 frame to us, we need to - wait for the socket to be readable during all transfers so that we can - act on incoming frames even when uploading etc. + References: http://unicode.org/faq/idn.html + http://unicode.org/reports/tr46 - Reminded-by: Tatsuhiro Tsujikawa + Closes #1206 -- RELEASE-NOTES: synced with 7b4bf37a44791 - -- [Thomas Glanzmann brought this change] +- [railsnewbie257 brought this change] - mbedtls: set debug threshold to 4 (verbose) when MBEDTLS_DEBUG is defined + docs: FAQ MAIL-ETIQUETTE language fixes - In order to make MBEDTLS_DEBUG work, the debug threshold must be unequal - to 0. This patch also adds a comment how mbedtls must be compiled in - order to make debugging work, and explains the possible debug levels. + Closes #1194 -- CURLOPT_TCP_NODELAY: now enabled by default +- [Marcus Hoffmann brought this change] + + gnutls: check for alpn and ocsp in configure - After a few wasted hours hunting down the reason for slowness during a - TLS handshake that turned out to be because of TCP_NODELAY not being - set, I think we have enough motivation to toggle the default for this - option. We now enable TCP_NODELAY by default and allow applications to - switch it off. + Check for presence of gnutls_alpn_* and gnutls_ocsp_* functions during + configure instead of relying on the version number. GnuTLS has options + to turn these features off and we ca just work with with such builds + like we work with older versions. - This also makes --tcp-nodelay unnecessary, but --no-tcp-nodelay can be - used to disable it. + Signed-off-by: Marcus Hoffmann - Thanks-to: Tim Rühsen - Bug: https://curl.haxx.se/mail/lib-2016-06/0143.html - -- [Serj Kalichev brought this change] + Closes #1204 - TFTP: Fix upload problem with piped input +Jay Satiro (12 Jan 2017) +- url: Fix parsing for when 'file' is the default protocol - When input stream for curl is stdin and input stream is not a file but - generated by a script then curl can truncate data transfer to arbitrary - size since a partial packet is treated as end of transfer by TFTP. + Follow-up to 3463408. - Fixes #857 - -- mk-ca-bundle.pl: -m keeps ca cert meta data in output + Prior to 3463408 file:// hostnames were silently stripped. - Makes the script pass on comments holding meta data to the output - file. Like fingerprinters, issuer, date ranges etc. + Prior to this commit it did not work when a schemeless url was used with + file as the default protocol. - Closes #937 + Ref: https://curl.haxx.se/mail/lib-2016-11/0081.html + Closes https://github.com/curl/curl/pull/1124 + + Also fix for drive letters: + + - Support --proto-default file c:/foo/bar.txt + + - Support file://c:/foo/bar.txt + + - Fail when a file:// drive letter is detected and not MSDOS/Windows. + + Bug: https://github.com/curl/curl/issues/1187 + Reported-by: Anatol Belski + Assisted-by: Anatol Belski -- multi: make Curl_expire() work with 0 ms timeouts +Daniel Stenberg (12 Jan 2017) +- rand: make it work without TLS backing - Previously, passing a timeout of zero to Curl_expire() was a magic code - for clearing all timeouts for the handle. That is now instead made with - the new Curl_expire_clear() function and thus a 0 timeout is fine to set - and will trigger a timeout ASAP. + Regression introduced in commit f682156a4fc6c4 - This will help removing short delays, in particular notable when doing - HTTP/2. + Reported-by: John Kohl + Bug: https://curl.haxx.se/mail/lib-2017-01/0055.html -- transfer: return without select when the read loop reached maxcount +Jay Satiro (12 Jan 2017) +- STARTTLS: Don't print response character in denied messages - Regression added in 790d6de48515. The was then added to avoid one - particular transfer to starve out others. But when aborting due to - reading the maxcount, the connection must be marked to be read from - again without first doing a select as for some protocols (like SFTP/SCP) - the data may already have been read off the socket. + Both IMAP and POP3 response characters are used internally, but when + appended to the STARTTLS denial message likely could confuse the user. - Reported-by: Dan Donahue - Bug: https://curl.haxx.se/mail/lib-2016-07/0057.html + Closes https://github.com/curl/curl/pull/1203 -Steve Holme (3 Aug 2016) -- [Bill Nagel brought this change] +- smtp: Fix STARTTLS denied error message + + - Format the numeric denial code as an integer instead of a character. - mbedtls: Added support for NTLM +Daniel Stenberg (11 Jan 2017) +- http2_send: avoid unsigned integer wrap around + + ... when checking for a too large request. -Daniel Stenberg (3 Aug 2016) -- [Sergei Nikulov brought this change] +Jay Satiro (9 Jan 2017) +- [Jiri Malak brought this change] - travis: removed option to rebuild autotool from source + cmake: Fix passing _WINSOCKAPI_ macro to compiler - Fixes #943 + Define _WINSOCKAPI_ blank rather than to 1 in order to match the value + used by Microsoft's winsock header files. + + Closes https://github.com/curl/curl/pull/1195 -- bump: start working toward 7.50.2 +Daniel Stenberg (9 Jan 2017) +- sws: retry send() on EWOULDBLOCK + + Fixes spurious test 1060 and 1061 failures on OpenBSD, Solaris and more. + + Bug: https://curl.haxx.se/mail/lib-2017-01/0009.html + Reported-by: Christian Weisgerber -Version 7.50.1 (3 Aug 2016) +- RELEASE-NOTES: synced with a41e8592d6b3e58 -Daniel Stenberg (3 Aug 2016) -- THANKS: 7 new contributors from the 7.50.1 release +- examples: make the C++ examples follow our code style too + + At least mostly, not counting // comments. -- RELEASE-NOTES: 7.50.1 +- [Aulddays brought this change] -- TLS: only reuse connections with the same client cert + asiohiper: improved socket handling - CVE-2016-5420 - Bug: https://curl.haxx.se/docs/adv_20160803B.html - -- TLS: switch off SSL session id when client cert is used + libcurl requires CURLMOPT_SOCKETFUNCTION to KEEP watching socket events + and notify back. Modify event_cb() to continue watching events when + fired. - CVE-2016-5419 - Bug: https://curl.haxx.se/docs/adv_20160803A.html - Reported-by: Bru Rom - Contributions-by: Eric Rescorla and Ray Satiro + Fixes #1191 + Closes #1192 + Fixed-by: Mingliang Zhu -- curl_multi_cleanup: clear connection pointer for easy handles - - CVE-2016-5421 - Bug: https://curl.haxx.se/docs/adv_20160803C.html - Reported-by: Marcelo Echeverria and Fernando Muñoz +- [Jiří Malák brought this change] -- KNOWN_BUGS: SOCKS proxy not working via IPv6 + lib506: fix build for Open Watcom - Closes #835 + Rename symbol lock to locks to not clash with OW CRTL function name. + + Closes #1196 -- KNOWN_BUGS: CURLOPT_SEEKFUNCTION not called with CURLFORM_STREAM +- ROADMAP: 2017 cleanup - Closes #768 + Removed items already fixed, clarified a few others. -- KNOWN_BUGS: transfer-encoding: chunked in HTTP/2 +- COPYING: update the generic copyright year range + +- docs/silent: mention --show-error in --silent description - Closes #662 + Reported in #1190 + Reported-by: Dan Jacobson -- TODO: Provide cmake config-file +- docs/page-header: mention how to disable the progress meter - Closes #885 + curl.1 is regenerated + + Fixes #1190 -Patrick Monnerat (2 Aug 2016) -- os400: define BUILDING_LIBCURL in make script. +Dan Fandrich (7 Jan 2017) +- wolfssl: display negotiated SSL version and cipher -Daniel Stenberg (1 Aug 2016) -- RELEASE-NOTES: synced with aa9f536a18b +- wolfssl: support setting cipher list -Jay Satiro (1 Aug 2016) -- [Thomas Glanzmann brought this change] +Patrick Monnerat (6 Jan 2017) +- CIPHERS.md: document GSKit ciphers - mbedtls: Fix debug function name - - This patch is necessary so that curl compiles if MBEDTLS_DEBUG is - defined. +Jay Satiro (5 Jan 2017) +- [peterpih brought this change] + + TheArtOfHttpScripting: grammar + +Nick Zitzmann (3 Jan 2017) +- darwinssl: --insecure overrides --cacert if both settings are in use - Bug: https://curl.haxx.se/mail/lib-2016-08/0001.html + Fixes #1184 -Daniel Stenberg (1 Aug 2016) -- [Sergei Nikulov brought this change] +Jay Satiro (2 Jan 2017) +- docs/libcurl: TCP_KEEPALIVE start and interval default to 60 + + Since the TCP keep-alive options were added in 705f0f7 the start and + interval default values have been 60, but that wasn't documented. + + Bug: https://curl.haxx.se/mail/lib-2017-01/0000.html + Reported-by: Praveen Pvs - travis: fix OSX build by re-installing libtool +Daniel Stenberg (29 Dec 2016) +- curl.h: CURLE_FUNCTION_NOT_FOUND is no longer in use - Apparently due to a broken homebrew install + This error code was once introduced when some library was dynamically + loaded and a funciton within said library couldn't be found. + +- content_encoding: change return code on a failure - fixes #934 - Closes #939 + Failure to decompress is now a write error instead of the weird + "function not found". -- [Martin Vejnár brought this change] +- page-footer: error 36 is protocol agnostic! - win32: fix a potential memory leak in Curl_load_library +Jay Satiro (28 Dec 2016) +- tool_operate: Fix --remote-time incorrect times on Windows - If a call to GetSystemDirectory fails, the `path` pointer that was - previously allocated would be leaked. This makes sure that `path` is - always freed. + - Use Windows API SetFileTime to set the file time instead of utime. - Closes #938 - -- include: revert 9adf3c4 and make public types void * again + Avoid utime on Windows if possible because it may apply a daylight + saving time offset to our UTC file time. - Many applications assume the actual contents of the public types and use - that do for example forward declarations (saving them from including our - public header) which then breaks when we switch from void * to a struct - *. + Bug: https://curl.haxx.se/mail/archive-2016-11/0033.html + Reported-by: Tim - I'm not convinced we were wrong, but since this practise seems - widespread enough I'm willing to (partly) step down. + Closes https://github.com/curl/curl/pull/1121 + +Daniel Stenberg (29 Dec 2016) +- [Max Khon brought this change] + + digest_sspi: copy terminating NUL as well - Now libcurl uses the struct itself when it is built and it allows - applications to use the struct type if CURL_STRICTER is defined at the - time of the #include. + Curl_auth_decode_digest_http_message(): copy terminating NUL as later + Curl_override_sspi_http_realm() expects a NUL-terminated string. - Reported-by: Peter Frühberger - Fixes #926 + Fixes #1180 -Jay Satiro (28 Jul 2016) -- [Yonggang Luo brought this change] +- curl_formadd.3: CURLFORM_CONTENTSLENGTH not needed when chunked + + Mentioned in #1013 - cmake: Fix for schannel support +- [Kyselgov E.N brought this change] + + cmake: use crypt32.lib when building with OpenSSL on windows - The check_library_exists_concat do not check crypt32 library properly. - So include it directly. + Reviewed-by: Peter Wu + Closes #1149 + Fixes #1147 + +- [Chris Araman brought this change] + + darwinssl: fix CFArrayRef leak - Bug: https://github.com/curl/curl/pull/917 - Reported-by: Yonggang Luo + Reviewed-by: Nick Zitzmann + Closes #1173 + +- [Chris Araman brought this change] + + darwinssl: fix iOS build - Bug: https://github.com/curl/curl/issues/935 - Reported-by: Alain Danteny + Reviewed-by: Nick Zitzmann + Fixes #1172 -- Revert "travis: Install libtool for OS X builds" +- curl: remove superfluous include file - Didn't work. + The is a leftover from the past when TCP socket options + were set in this file. This include causes build issues on AIX 4.3. - This reverts commit 50723585ed380744358de054e2a55dccee65dfd7. + Reported-by: Kim Minjoong + + Closes #1178 -- travis: Install libtool for OS X builds +- RELEASE-NOTES: synced with a7b38c9dc98481e + +- vtls: s/SSLEAY/OPENSSL - CI is failing due to missing libtoolize, so I'm trying this. + Fixed an old leftover use of the USE_SSLEAY define which would make a + socket get removed from the applications sockets to monitor when the + multi_socket API was used, leading to timeouts. + + Bug: #1174 -Daniel Stenberg (26 Jul 2016) -- [Viktor Szakats brought this change] +- docs/ciphers: link to our own new page about ciphers + + ... as the former ones always go stale! - TODO: minor typo in last commit +- cmdline-opts/page-footer: add three more exit codes - merged #931 + ... and regenerated curl.1 -- TODO: Timeout idle connections from the pool +- formdata: use NULL, not 0, when returning pointers -Patrick Monnerat (25 Jul 2016) -- os400: minimum supported OS version: V6R1M0. - Do not log compilation informational messages. +- ftp: failure to resolve proxy should return that error code -Jay Satiro (24 Jul 2016) -- tests: Fix for http/2 feature +- configure: accept --with-libidn2 instead - Bug: https://curl.haxx.se/mail/lib-2016-07/0070.html - Reported-by: Paul Howarth + ... which the help text already implied since we switched to libidn2 + from libidn in commit 9c91ec778104ae3b back in October 2016. + + Reported-by: Christian Weisgerber + Bug: https://curl.haxx.se/mail/lib-2016-12/0110.html -Steve Holme (23 Jul 2016) -- README: Mention wolfSSL in the 'Dependencies' section +- test1282: verify the ftp-gss check -- vauth.h: No need to query HAVE_GSSAPI || USE_WINDOWS_SSPI for SPNEGO +- ftp-gss: check for init before use - As SPNEGO is only defined when these pre-processor variables are defined - there is no need to query them explicitly. - -- spnego: Corrected miss-placed * in Curl_auth_spnego_cleanup() declaration + To avoid dereferencing a NULL pointer. - Typo introduced in commit ad5e9bfd5d. + Reported-by: Daniel Romero -Daniel Stenberg (22 Jul 2016) -- SECURITY: mention how to get windows-specific CVEs +Jay Satiro (24 Dec 2016) +- build-wolfssl: Sync config with wolfSSL 3.10 - ... and make the distros link a proper link + wolfSSL configure script relevant changes from 3.9 to 3.10: + + - DES3 no longer enabled by default + - Shamir no longer enabled by default + - Extended master secret enabled by default + - RSA and ECC timing protections enabled by default + + For backwards compatibility I enabled DES3 and ECC shamir config options + (ie no change from 3.9), and the other changes are included. -Dan Fandrich (21 Jul 2016) -- test558: fix test by stripping file paths from FD lines +- cyassl: use time_t instead of long for timeout -Kamil Dudka (21 Jul 2016) -- tests: distribute the http2-server.pl script, too +Daniel Stenberg (23 Dec 2016) +- bump: toward next release -- docs: distribute the CURLINFO_HTTP_VERSION(3) man page, too +- http: remove "Curl_http_done: called premature" message + + ... it only confuses people. -Daniel Stenberg (21 Jul 2016) -- bump: start working on 7.50.1 +- openssl-random: check return code when asking for random + + and fail appropriately if it returns error -Version 7.50.0 (21 Jul 2016) +- gnutls-random: check return code for failed random -Daniel Stenberg (21 Jul 2016) -- RELEASE-NOTES: version 7.50.0 ready +Version 7.52.1 (22 Dec 2016) -- THANKS: 13 new contributors from the 7.50.0 release +Daniel Stenberg (22 Dec 2016) +- RELEASE-NOTES: curl 7.52.1 -Jay Satiro (21 Jul 2016) -- winbuild: fix embedded manifest option +- lib557.c: use a shorter MAXIMIZE representation - Embedded manifest option didn't work due to typo. + Since several compilers had problems with the previous one - Reported-by: Stefan Kanthak + Reported-by: Ray Satiro + Bug: https://curl.haxx.se/mail/lib-2016-12/0098.html -- vauth: Fix memleak by freeing credentials if out of memory +- runtests: remove the valgrind parser - This is a follow up to the parent commit dcdd4be which fixes one leak - but creates another by failing to free the credentials handle if out of - memory. Also there's a second location a few lines down where we fail to - do same. This commit fixes both of those issues. + Old legacy parsing that 1) hid problems for us and 2) probably isn't + needed anymore. -Daniel Stenberg (20 Jul 2016) -- [Saurav Babu brought this change] +- [Kamil Dudka brought this change] - vauth: Fixed memory leak due to function returning without free - - This patch allocates memory to "output_token" only when it is required - so that memory is not leaked if function returns. + randit: store the value in the buffer -- test558: updated after ipv6-check move +- tests/Makefile: run checksrc on debug builds - Follow-up commit to c50980807c5 to make this test pass. + ... just like we already do in src/ and lib/ -Jay Satiro (20 Jul 2016) -- connect: disable TFO on Linux when using SSL +- lib557: move the "enable LONGLINE" to allow more long lines - - Linux TFO + TLS is not implemented yet. + This file is riddled with them... + +- bump: toward next release + +Marcel Raad (21 Dec 2016) +- lib: fix MSVC compiler warnings - Bug: https://github.com/curl/curl/issues/907 + Visual C++ complained: + warning C4267: '=': conversion from 'size_t' to 'long', possible loss of data + warning C4701: potentially uninitialized local variable 'path' used -Daniel Stenberg (19 Jul 2016) -- ROADMAP: QUIC and TLS 1.3 +Version 7.52.0 (20 Dec 2016) -- RELEASE-NOTES: synced with c50980807c5 +Daniel Stenberg (20 Dec 2016) +- THANKS: 13 new contributors from 7.52.0 -Jay Satiro (18 Jul 2016) -- [Brian Prodoehl brought this change] +- RELEASE-NOTES: 7.52.0 - curl_global_init: Check if IPv6 works +- ssh: inhibit coverity warning with (void) - - Curl_ipv6works() is not thread-safe until after the first call, so - call it once during global init to avoid a possible race condition. + CID 1397391 (#1 of 1): Unchecked return value (CHECKED_RETURN) + +- Curl_recv_has_postponed_data: silence compiler warnings - Bug: https://github.com/curl/curl/issues/915 - PR: https://github.com/curl/curl/pull/918 + Follow-up to d00f2a8f2 -- [Timothy Polich brought this change] +Jay Satiro (19 Dec 2016) +- tests: checksrc compliance - CURLMOPT_SOCKETFUNCTION.3: fix typo +- http_proxy: Fix proxy CONNECT hang on pending data - Closes https://github.com/curl/curl/pull/914 + - Check for pending data before waiting on the socket. + + Bug: https://github.com/curl/curl/issues/1156 + Reported-by: Adam Langley -- [Miroslav Franc brought this change] +Daniel Stenberg (19 Dec 2016) +- cmdline-opts/tlsv1.d: rephrased - library: Fix memory leaks found during static analysis - - Closes https://github.com/curl/curl/pull/913 +- [Dan McNulty brought this change] -- [Viktor Szakats brought this change] + schannel: fix wildcard cert name validation on Win CE + + Fixes a few issues in manual wildcard cert name validation in + schannel support code for Win32 CE: + - when comparing the wildcard name to the hostname, the wildcard + character was removed from the cert name and the hostname + was checked to see if it ended with the modified cert name. + This allowed cert names like *.com to match the connection + hostname. This violates recommendations from RFC 6125. + - when the wildcard name in the certificate is longer than the + connection hostname, a buffer overread of the connection + hostname buffer would occur during the comparison of the + certificate name and the connection hostname. - cookie.c: Fix misleading indentation +- printf: fix floating point buffer overflow issues - Closes https://github.com/curl/curl/pull/911 + ... and add a bunch of floating point printf tests -- FAQ: Update FTP directory listing section for MLSD command +- config-amigaos.h: (embarrassed) made the line shorter + +- config-amigaos.h: fix bug report email reference + +- RELEASE-NOTES: synced with 4517158abfeba + +- CIPHERS.md: backtick the names to show underscores fine + +- form-string.d: fix format mistake - Explain how some FTP servers support the machine readable listing - format MLSD from RFC 3659 and compare it to LIST. + and regenerated curl.1 - Ref: https://github.com/curl/curl/issues/906 + Reported-by: Gisle Vanem -Daniel Stenberg (1 Jul 2016) -- [Sergei Nikulov brought this change] +Michael Kaufmann (18 Dec 2016) +- openssl: simplify expression in Curl_ossl_version - Appveyor: Updates for options - CURL_STATICLIB/BUILD_TESTING +- curl_easy_recv: Improve documentation and example program - Closes #892 + Follow-up to 82245ea: Fix the example program sendrecv.c (handle + CURLE_AGAIN, handle incomplete send). Improve the documentation + for curl_easy_recv() and curl_easy_send(). + + Reviewed-by: Frank Meier + Assisted-by: Jay Satiro + + See https://github.com/curl/curl/pull/1134 -- TODO: 17.4 also brings more HTTP/2 support +- [Isaac Boukris brought this change] -- TODO: try next proxy if one doesn't work + Curl_getconnectinfo: avoid checking if the connection is closed - Closes #896 + It doesn't benefit us much as the connection could get closed at + any time, and also by checking we lose the ability to determine + if the socket was closed by reading zero bytes. + + Reported-by: Michael Kaufmann + + Closes https://github.com/curl/curl/pull/1134 -- conn: don't free easy handle data in handler->disconnect +Daniel Stenberg (18 Dec 2016) +- CIPHERS.md: attempt to document TLS cipher names - Reported-by: Gou Lingfeng - Bug: https://curl.haxx.se/mail/lib-2016-06/0139.html + As the official docs seems really hard to keep track of and link to over + time -- test1244: test different proxy ports same URL +- curl.1: generated after 6cce4dbf830 -- curl_global_init.3: improved formatting of the flags +- cmdline-opts/post30X.d: fix the RFC references -- curl_global_init.3: expand on the SSL and WIN32 bits purpose +- curl.1: regenerated - Reported-by: Richard Gray - Bug: https://curl.haxx.se/mail/lib-2016-06/0136.html + Fixed trailing whitespace and numerous formatting glitches -- [Michael Kaufmann brought this change] +- cmdline-opts: formatting fixes - cleanup: minor code cleanup in Curl_http_readwrite_headers() - - - the expression of an 'if' was always true - - a 'while' contained a condition that was always true - - use 'if(k->exp100 > EXP100_SEND_DATA)' instead of 'if(k->exp100)' - - fixed a typo - - Closes #889 +- curl_easy_setopt.3: removed CURLOPT_SOCKS_PROXYTYPE -- SFTP: set a generic error when no SFTP one exists... - - ... as otherwise we could get a 0 which would count as no error and we'd - wrongly continue and could end up segfaulting. +- tool_getparam.c: make comments use the up-to-date option names + +- manpage-scan.pl: allow deprecated options to get removed from curl.1 - Bug: https://curl.haxx.se/mail/lib-2016-06/0052.html - Reported-by: 暖和的和暖 + --krb4, --ftp-ssl and --ftp-ssl-reqd no longer need to be documented in the + man page -- ROADMAP: http2 tests are merged, mention http2 perf +- cmdline-opts/gen.pl: trim off trailing spaces -- docs/README.md: to render nicer pages on github - - ... as previously the README.cmake would be picked and put at the bottom - of the docs page there and it wasn't very representative! +- cmdline-opts/proxy-tlsuser.d: remove trailing .d -- README.md: change host name for the svg logo +- curl_easy_setopt.3: CURLOPT_PRE_PROXY instead of CURLOPT_SOCKS_PROXY + +- symbols: removed two, added one + +- cmdline-opts: include the man page split up files in the dist + +- curl.1: generated with gen.pl - rawgit.com asks to use the domain cdn.rawgit.com for production + This is the first time we replace the manually edited curt.1 with the + generated one created by gen.pl and the individual option documentation + pages. - See #900 + Do not edit this file, edit the individual pages and regenerate this + output. + + This file will be generated by the build system soon and then removed + from git. -- [Viktor Szakats brought this change] +- cmdline-opts: added some missing info - README.md: use the SVG logo +- CURLINFO_SSL_VERIFYRESULT.3: language -- README.md: logo on top! +- HTTPS-PROXY docs: update/polish -- KNOWN_BUGS: 3.4 POP3 expects "CRLF.CRLF" eob for some +- cmdline-opts/page-header: mention it is generated - Closes #740 - -- RELEASE-NOTES: synced with d61c80515aa8 + ... to avoid people from trying to edit the pending curl.1 version that + gets generated by gen.pl -- [Michael Osipov brought this change] +- preproxy: renamed what was added as SOCKS_PROXY + + CURLOPT_SOCKS_PROXY -> CURLOPT_PRE_PROXY + + Added the corresponding --preroxy command line option. Sets a SOCKS + proxy to connect to _before_ connecting to a HTTP(S) proxy. - acinclude.m4: improve autodetection of CA bundle on FreeBSD +- curl: normal socks proxies still use CURLOPT_PROXY - The FreeBSD Port security/ca_root_nss installs the Mozilla NSS CA bundle - to /usr/local/share/certs/ca-root-nss.crt. Use this bundle in the - discovery process. + ... the newly introduced CURLOPT_SOCKS_PROXY is special and should be + asked for specially. (Needs new code.) - This change also removes the former FreeBSD path that has been obsolete - for 8 years since this FreeBSD ports commit: - https://svnweb.freebsd.org/ports/head/security/?view=revision&revision=215953 + Unified proxy type to a single variable in the config struct. + +- CURLOPT_SOCKS_PROXYTYPE: removed - Closes #894 + This was added as part of the SOCKS+HTTPS proxy merge but there's no + need to support this as we prefer to have the protocol specified as a + prefix instead. -- configure: don't specify .lib for libs on windows +- curl_multi_socket.3: fix typo + +- checksrc: warn for assignments within if() expressions - Another follow up for crypt32.lib linking with winssl + ... they're already frowned upon in our source code style guide, this + now enforces the rule harder. -- configure: fix winssl LIBS change typo +- checksrc: stricter no-space-before-paren enforcement - follow-up from 120bf29e + In order to make the code style more uniform everywhere -- TODO: "TCP Fast Open" is done, add monitor pool connections +- ISSUE_TEMPLATE: try mentioning known bugs/todo in new issue template -- configure: add crypt32.lib for winssl builds - - Necessary since 6cabd78531f +- RELEASE-NOTES: synced with 71a55534fa6 -- Makefile.vc: link with crypt32.lib for winssl builds +- [Adam Langley brought this change] + + openssl: don't use OpenSSL's ERR_PACK. - Necessary since 6cabd78531f + ERR_PACK is an internal detail of OpenSSL. Also, when using it, a + function name must be specified which is overly specific: the test will + break whenever OpenSSL internally change things so that a different + function creates the error. - Fixes #853 + Closes #1157 -- [Joel Depooter brought this change] +Dan Fandrich (5 Dec 2016) +- test2032: Mark test as flaky - VC: Add crypt32.lib to Visual Sudio project template files +Jay Satiro (3 Dec 2016) +- [Jeremy Pearson brought this change] + + libcurl-multi.3: typo - Closes #854 + Closes https://github.com/curl/curl/pull/1153 -- vc: fix the build for schannel certinfo support +Dan Fandrich (2 Dec 2016) +- test1281: added http as a required feature + +Daniel Stenberg (2 Dec 2016) +- curl: support zero-length argument strings in config files - Broken since 6cabd785, which adds use of the Curl_extract_certinfo - function from the x509asn1.c file. + ... like 'user-agent = ""' + + Adjusted test 71 to verify. -- typedefs: use the full structs in internal code... +- http_proxy: simplify CONNECT response reading - ... and save the typedef'ed names for headers and external APIs. + Since it now reads responses one byte a time, a loop could be removed + and it is no longer limited to get the whole response within 16K, it is + now instead only limited to 16K maximum header line lengths. -- internals: rename the SessionHandle struct to Curl_easy +- tests: fix CONNECT test cases to be more strict + + ... as they broke with the cleaned up CONNECT handling -- headers: forward declare CURL, CURLM and CURLSH as structs +- CONNECT: read responses one byte at a time - Instead of typedef'ing to void, typedef to their corresponding actual - struct names to allow compilers to type-check. + ... so that it doesn't read data that is actually coming from the + remote. 2xx responses have no body from the proxy, that data is from the + peer. - Assisted-by: Reinhard Max + Fixes #1132 -Jay Satiro (22 Jun 2016) -- vtls: Only call add/getsession if session id is enabled +- CONNECT: reject TE or CL in 2xx responses - Prior to this change we called Curl_ssl_getsessionid and - Curl_ssl_addsessionid regardless of whether session ID reusing was - enabled. According to comments that is in case session ID reuse was - disabled but then later enabled. + A server MUST NOT send any Transfer-Encoding or Content-Length header + fields in a 2xx (Successful) response to CONNECT. (RFC 7231 section + 4.3.6) - The old way was not intuitive and probably not something users expected. - When a user disables session ID caching I'd guess they don't expect the - session ID to be cached anyway in case the caching is later enabled. + Also fixes the three test cases that did this. -Daniel Stenberg (22 Jun 2016) -- curl.1: the used progress meter suffix is k in lower case +- URL parser: reject non-numerical port numbers - Closes #883 + Test 1281 added to verify -- [Sergei Nikulov brought this change] +Dan Fandrich (30 Nov 2016) +- runtests: made Servers: output be more consistent by removing OFF - cmake: now using BUILD_TESTING=ON/OFF +- cyassl: fixed typo introduced in 4f8b1774 + +Michael Kaufmann (30 Nov 2016) +- CURLOPT_CONNECT_TO: Skip non-matching "connect-to" entries properly - CMake build now using BUILD_TESTING=ON/OFF (default is OFF) to build - tests and enabling CTest integration. Options BUILD_CURL_TESTS and - BUILD_DASHBOARD_REPORTS was removed. + If a port number in a "connect-to" entry does not match, skip this + entry instead of connecting to port 0. - Closes #882 + If a port number in a "connect-to" entry matches, use this entry + and look no further. - Reviewed-by: Brad King + Reported-by: Jay Satiro + Assisted-by: Jay Satiro, Daniel Stenberg + + Closes #1148 -- [Michael Kaufmann brought this change] +Daniel Stenberg (29 Nov 2016) +- BUGS: describe bug handling process - cleanup: fix method names in code comments +- RELEASE-NOTES: synced with 19613fb3 + +Jay Satiro (28 Nov 2016) +- http2: check nghttp2_session_set_local_window_size exists - Closes #887 + The function only exists since nghttp2 1.12.0. + + Bug: https://github.com/curl/curl/commit/a4d8888#commitcomment-19985676 + Reported-by: Michael Kaufmann -Kamil Dudka (21 Jun 2016) -- curl-compilers.m4: improve detection of GCC's -fvisibility= flag +Daniel Stenberg (28 Nov 2016) +- [Anders Bakken brought this change] + + http2: Fix crashes when parent stream gets aborted - Some builds of GCC produce output on both stdout and stderr when --help - --verbose is used. The 2>&1 redirection caused them to be arbitrarily - interleaved with each other because of stream buffering. Consequently, - grep failed to match the fvisibility= string in the mixed output, even - though the string was present in GCC's standard output. + Closes #1125 + +- cmdline-docs: more options converted and fixed - This led to silently disabling symbol hiding in some builds of curl. + Now all options are in the new system. -Daniel Stenberg (19 Jun 2016) -- tests: fix the HTTP/2 tests +- gen: include footer in mainpage output + +Jay Satiro (28 Nov 2016) +- lib1536: checksrc compliance + +Daniel Stenberg (28 Nov 2016) +- cmdline-opts: more command line options documented - The HTTP/2 tests brought with commit bf05606ef1f were using the internal - name 'http2' for the HTTP/2 server, while in fact that name was already - used for the second instance of the HTTP server. This made tests using - the second instance (like test 2050) fail after a HTTP/2 test had run. + Moved over to the new format + +- curl: remove --proxy-ssl* options - The server is now known as HTTP/2 internally and within the - section in test cases. 1700, 1701 and 1702 were updated accordingly. + There's mostly likely no need to allow setting SSLv2/3 version for HTTPS + proxy. Those protocols are insecure by design and deprecated. -- openssl: use more 'const' to fix build warnings with 1.1.0 branch +- CURLOPT_PROXY_*.3: polished some proxy option man pages -- curl.1: missed 'T' in the progress unit suffixes +Patrick Monnerat (26 Nov 2016) +- os400: support CURLOPT_PROXY_PINNEDPUBLICKEY + + Also define it in ILE/RPG binding. -- curl.1: mention the unix for the progress meter +Daniel Stenberg (26 Nov 2016) +- [Okhin Vasilij brought this change] -Patrick Monnerat (16 Jun 2016) -- os400: add new definitions to ILE/RPG binding. + curl_version_info: add CURL_VERSION_HTTPS_PROXY + + Closes #1142 -Daniel Stenberg (16 Jun 2016) -- openssl: fix cert check with non-DNS name fields present +- [Frank Gevaerts brought this change] + + tests: Add some testcases for recent new features. - Regression introduced in 5f5b62635 (released in 7.48.0) + Add missing tests for CURLINFO_SCHEME, CURLINFO_PROTOCOL, %{scheme}, + and %{http_version} - Reported-by: Fabian Ruff - Fixes #875 + closes #1143 -Dan Fandrich (16 Jun 2016) -- axtls: Use Curl_wait_ms instead of the less-portable usleep +- [Frank Gevaerts brought this change] -- axtls: Fixed compile after compile 31c521b0 + curl_easy_reset: clear info for CULRINFO_PROTOCOL and CURLINFO_SCHEME -- tests: Added HTTP proxy keywords to tests 1141 & 1142 +- CURLOPT_PROXY_CAINFO.3: clarify proxy use -Jay Satiro (15 Jun 2016) -- [Sergei Nikulov brought this change] +- CURLOPT_PROXY_CRLFILE.3: clarify https proxy and availability - cmake: Fix build with winldap +- curl_easy_setopt.3: add CURLOPT_PROXY_PINNEDPUBLICKEY - Bug: https://github.com/curl/curl/pull/874 - Reported-by: Sergei Nikulov + Follow-up to 4f8b17743d7c55a -- CURLOPT_POSTFIELDS.3: Clarify what happens when set empty - - When CURLOPT_POSTFIELDS is set to an empty string libcurl will send a - zero-byte POST. Prior to this change it was documented as sending data - from the read callback. +- docs: include all opts man pages in dist - This also changes the wording of what happens when empty or NULL so that - it's hopefully easier to understand for people whose primary language - isn't English. + Sorted the lists too. - Bug: https://github.com/curl/curl/issues/862 - Reported-by: Askar Safin + ... and include the new ones in the PDF and HTML generation targets -- [Michael Wallner brought this change] +- [Thomas Glanzmann brought this change] - curl_multi_socket_action.3: Fix rewording - - - Remove some erroneous text. - - Closes https://github.com/curl/curl/pull/865 + HTTPS Proxy: Implement CURLOPT_PROXY_PINNEDPUBLICKEY -- [Luo Jinghua brought this change] +- [Thomas Glanzmann brought this change] - resolve: enable protocol family logic for synthesized IPv6 - - - Enable protocol family logic for IPv6 resolves even when support - for synthesized addresses is enabled. - - This is a follow up to the parent commit that added support for - synthesized IPv6 addresses from IPv4 on iOS/OS X. The protocol family - logic needed for IPv6 was inadvertently excluded if support for - synthesized addresses was enabled. - - Bug: https://github.com/curl/curl/issues/863 - Ref: https://github.com/curl/curl/pull/866 - Ref: https://github.com/curl/curl/pull/867 + url: proxy: Use 443 as default port for https proxies -Daniel Stenberg (7 Jun 2016) -- [Luo Jinghua brought this change] +- TODO: removed "HTTPS proxy" - resolve: add support for IPv6 DNS64/NAT64 Networks on OS X + iOS +- [Jan-E brought this change] + + winbuild: add config option ENABLE_NGHTTP2 - Use getaddrinfo() to resolve the IPv4 address literal on iOS/Mac OS X. - If the current network interface doesn’t support IPv4, but supports - IPv6, NAT64, and DNS64. + Closes #1141 + +Jay Satiro (24 Nov 2016) +- tool_urlglob: Improve sanity check in glob_range - Closes #866 - Fixes #863 + Prior to this change we depended on errno if strtol could not perform a + conversion. POSIX says EINVAL *may* be set. Some implementations like + Microsoft's will not set it if there's no conversion. + + Ref: https://github.com/curl/curl/commit/ee4f7660#commitcomment-19658189 -- tests: two more HTTP/2 tests +- tool_help: Change description for --retry-connrefused - 1701 and 1702 + Ref: https://github.com/curl/curl/pull/1064#issuecomment-260052409 -- runtests: don't display logs when http2 server fails to start +Patrick Monnerat (25 Nov 2016) +- os400: sync ILE/RPG binding -- runtests: make stripfile work on stdout as well +Jay Satiro (24 Nov 2016) +- test1135: Fix curl_easy_duphandle prototype for code style - ... and have test 1700 use that to strip out the nghttpx server: headers + Follow-up to dbadaeb which changed the style. -- http2-tests: test1700 is the first real HTTP/2 test - - It requires that 'nghttpx' is in the PATH, and it will run the tests - using nghttpx as a front-end proxy in front of the standard HTTP/1 test - server. This uses HTTP/2 over plain TCP. +- x509asn1: Restore the parameter check in Curl_getASN1Element - If you like me have nghttpx installed in a custom path, you can run test 1700 - like this: + - Restore the removed parts of the parameter check. - $ PATH=$PATH:$HOME/build-nghttp2/bin/ ./runtests.pl 1700 + Follow-up to 945f60e which altered the parameter check. -- RELEASE-NOTES: synced with 34855feeb4c299 +Daniel Stenberg (25 Nov 2016) +- RELEASE-NOTES: update option counters -Steve Holme (6 Jun 2016) -- schannel: Disable ALPN on Windows < 8.1 +- [Frank Gevaerts brought this change] + + add CURLINFO_SCHEME, CURLINFO_PROTOCOL, and %{scheme} - Calling QueryContextAttributes with SECPKG_ATTR_APPLICATION_PROTOCOL - fails on Windows < 8.1 so we need to disable ALPN on these OS versions. + Adds access to the effectively used protocol/scheme to both libcurl and + curl, both in string and numeric (CURLPROTO_*) form. - Inspiration provide by: Daniel Seither + Note that the string form will be uppercase, as it is just the internal + string. - Closes #848 - Fixes #840 - -Jay Satiro (5 Jun 2016) -- checksrc: Add LoadLibrary to the banned functions list + As these strings are declared internally as const, and all other strings + returned by curl_easy_getinfo() are de-facto const as well, string + handling in getinfo.c got const-ified. - LoadLibrary was supplanted by Curl_load_library for security - reasons in 6df916d. + Closes #1137 -- http: Fix HTTP/2 connection reuse - - - Change the parser to not require a minor version for HTTP/2. - - HTTP/2 connection reuse broke when we changed from HTTP/2.0 to HTTP/2 - in 8243a95 because the parser still expected a minor version. - - Bug: https://github.com/curl/curl/issues/855 - Reported-by: Andrew Robbins, Frank Gevaerts +- RELEASE-NOTES: synced with 63198a4750aeb -Steve Holme (4 Jun 2016) -- connect.c: Fixed compilation warning from commit 332e8d6164 - - connect.c:952:5: warning: suggest explicit braces to avoid ambiguous 'else' +- curl.1: the new --proxy options ship in 7.52.0 -- win32: Used centralised verify windows version function - - Closes #845 +- checksrc: move open braces to comply with function declaration style -- win32: Added verify windows version functionality +- checksrc: detect wrongly placed open braces in func declarations -- win32: Introduced centralised verify windows version function +- checksrc: white space edits to comply to stricter checksrc -Kamil Dudka (3 Jun 2016) -- tool_urlglob: fix off-by-one error in glob_parse() - - ... causing SIGSEGV while parsing URL with too many globs. - Minimal example: +- checksrc: verify ASTERISKNOSPACE - $ curl $(for i in $(seq 101); do printf '{a}'; done) - - Reported-by: Romain Coltel - Bug: https://bugzilla.redhat.com/1340757 + Detects (char*) and 'char*foo' uses. -Daniel Stenberg (1 Jun 2016) -- [Benjamin Kircher brought this change] +- checksrc: code style: use 'char *name' style - libcurl-multi.3: fix small typo +- checksrc: add ASTERISKSPACE - Closes #850 + Verifies a 'char *name' style, with no space after the asterisk. -- [Viktor Szakats brought this change] - - makefile.m32: add crypt32 for winssl builds - - Dependency added by 6cabd78 +- openssl: remove dead code - Closes #849 + Coverity CID 1394666 -- [Ivan Avdeev brought this change] +- [Okhin Vasilij brought this change] - vtls: fix ssl session cache race condition - - Sessionid cache management is inseparable from managing individual - session lifetimes. E.g. for reference-counted sessions (like those in - SChannel and OpenSSL engines) every session addition and removal - should be accompanied with refcount increment and decrement - respectively. Failing to do so synchronously leads to a race condition - that causes symptoms like use-after-free and memory corruption. - This commit: - - makes existing session cache locking explicit, thus allowing - individual engines to manage lock's scope. - - fixes OpenSSL and SChannel engines by putting refcount management - inside this lock's scope in relevant places. - - adds these explicit locking calls to other engines that use - sessionid cache to accommodate for this change. Note, however, - that it is unknown whether any of these engines could also have - this race. - - Bug: https://github.com/curl/curl/issues/815 - Fixes #815 - Closes #847 + HTTPS-proxy: fixed mbedtls and polishing -- [Andrew Kurushin brought this change] +- darwinssl: adopted to the HTTPS proxy changes + + It builds and runs all test cases. No adaptations for actual HTTPS proxy + support has been made. - schannel: add CURLOPT_CERTINFO support +- gtls: fix indent to silence compiler warning - Closes #822 + vtls/gtls.c: In function ‘Curl_gtls_data_pending’: + vtls/gtls.c:1429:3: error: this ‘if’ clause does not guard... [-Werror=misleading-indentation] + if(conn->proxy_ssl[connindex].session && + ^~ + vtls/gtls.c:1433:5: note: ...this statement, but the latter is misleadingly indented as if it is guarded by the ‘if’ + return res; -- RELEASE-NOTES: synced with 142ee9fa15002315 +- [Thomas Glanzmann brought this change] -- openssl: rename the private SSL_strerror - - ... to make it not look like an OpenSSL function + mbedtls: Fix compile errors -- [Michael Kaufmann brought this change] +- [Alex Rousskov brought this change] - openssl: Use correct buffer sizes for error messages + proxy: Support HTTPS proxy and SOCKS+HTTP(s) - Closes #844 - -- curl: fix -q [regression] + * HTTPS proxies: - This broke in 7.49.0 with commit e200034425a7625 + An HTTPS proxy receives all transactions over an SSL/TLS connection. + Once a secure connection with the proxy is established, the user agent + uses the proxy as usual, including sending CONNECT requests to instruct + the proxy to establish a [usually secure] TCP tunnel with an origin + server. HTTPS proxies protect nearly all aspects of user-proxy + communications as opposed to HTTP proxies that receive all requests + (including CONNECT requests) in vulnerable clear text. - Fixes #842 - -- URL parser: allow URLs to use one, two or three slashes + With HTTPS proxies, it is possible to have two concurrent _nested_ + SSL/TLS sessions: the "outer" one between the user agent and the proxy + and the "inner" one between the user agent and the origin server + (through the proxy). This change adds supports for such nested sessions + as well. - Mostly in order to support broken web sites that redirect to broken URLs - that are accepted by browsers. + A secure connection with a proxy requires its own set of the usual SSL + options (their actual descriptions differ and need polishing, see TODO): - Browsers are typically even more leniant than this as the WHATWG URL - spec they should allow an _infinite_ amount. I tested 8000 slashes with - Firefox and it just worked. + --proxy-cacert FILE CA certificate to verify peer against + --proxy-capath DIR CA directory to verify peer against + --proxy-cert CERT[:PASSWD] Client certificate file and password + --proxy-cert-type TYPE Certificate file type (DER/PEM/ENG) + --proxy-ciphers LIST SSL ciphers to use + --proxy-crlfile FILE Get a CRL list in PEM format from the file + --proxy-insecure Allow connections to proxies with bad certs + --proxy-key KEY Private key file name + --proxy-key-type TYPE Private key file type (DER/PEM/ENG) + --proxy-pass PASS Pass phrase for the private key + --proxy-ssl-allow-beast Allow security flaw to improve interop + --proxy-sslv2 Use SSLv2 + --proxy-sslv3 Use SSLv3 + --proxy-tlsv1 Use TLSv1 + --proxy-tlsuser USER TLS username + --proxy-tlspassword STRING TLS password + --proxy-tlsauthtype STRING TLS authentication type (default SRP) - Added test case 1141, 1142 and 1143 to verify the new parser. + All --proxy-foo options are independent from their --foo counterparts, + except --proxy-crlfile which defaults to --crlfile and --proxy-capath + which defaults to --capath. - Closes #791 - -- [Renaud Lehoux brought this change] - - cmake: Added missing mbedTLS support + Curl now also supports %{proxy_ssl_verify_result} --write-out variable, + similar to the existing %{ssl_verify_result} variable. - Closes #837 + Supported backends: OpenSSL, GnuTLS, and NSS. + + * A SOCKS proxy + HTTP/HTTPS proxy combination: + + If both --socks* and --proxy options are given, Curl first connects to + the SOCKS proxy and then connects (through SOCKS) to the HTTP or HTTPS + proxy. + + TODO: Update documentation for the new APIs and --proxy-* options. + Look for "Added in 7.XXX" marks. -- [Renaud Lehoux brought this change] +Patrick Monnerat (24 Nov 2016) +- Declare endian read functions argument as a const pointer. + This is done for all functions of the form Curl_read[136][624]_[lb]e. - mbedtls: removed unused variables +- Limit ASN.1 structure sizes to 256K. Prevent some allocation size overflows. + See CRL-01-006. + +Jay Satiro (22 Nov 2016) +- url: Fix conn reuse for local ports and interfaces - Closes #838 + - Fix connection reuse for when the proposed new conn 'needle' has a + specified local port but does not have a specified device interface. + + Bug: https://curl.haxx.se/mail/lib-2016-11/0137.html + Reported-by: bjt3[at]hotmail.com -- [Frank Gevaerts brought this change] +Daniel Stenberg (21 Nov 2016) +- rand: pass in number of randoms as an unsigned argument - http: add CURLINFO_HTTP_VERSION and %{http_version} +Jay Satiro (20 Nov 2016) +- rand: Fix potentially uninitialized result warning + +Marcel Raad (19 Nov 2016) +- vtls: fix build warnings - Adds access to the effectively used http version to both libcurl and - curl. + Fix warnings about conversions from long to time_t in openssl.c and + schannel.c. - Closes #799 - -- bump: start the journey toward 7.50.0 + Follow-up to de4de4e3c7c +Daniel Stenberg (18 Nov 2016) - [Marcel Raad brought this change] - openssl: fix build with OPENSSL_NO_COMP + lib: fix compiler warnings after de4de4e3c7c - With OPENSSL_NO_COMP defined, there is no function - SSL_COMP_free_compression_methods + Visual C++ now complains about implicitly casting time_t (64-bit) to + long (32-bit). Fix this by changing some variables from long to time_t, + or explicitly casting to long where the public interface would be + affected. - Closes #836 + Closes #1131 -- [Gisle Vanem brought this change] +Peter Wu (17 Nov 2016) +- [Isaac Boukris brought this change] - memdebug: fix MSVC crash with -DMEMDEBUG_LOG_SYNC + Don't mix unix domain sockets with regular ones - Fixes #828 + When reusing a connection, make sure the unix domain + socket option matches. -- [Jonathan brought this change] +Jay Satiro (17 Nov 2016) +- tests: Fix HTTP2-Settings header for huge window size + + Follow-up to a4d8888. Changing the window size in that commit resulted + in a different HTTP2-Settings upgrade header, causing test 1800 to fail. - README.md: polish +- http2: Use huge HTTP/2 windows - Closes #834 + - Improve performance by using a huge HTTP/2 window size. + + Bug: https://github.com/curl/curl/issues/1102 + Reported-by: afrind@users.noreply.github.com + Assisted-by: Tatsuhiro Tsujikawa -- RELEASE-NOTES: fix vuln link +Daniel Stenberg (16 Nov 2016) +- cmdline-docs: more conversion -Version 7.49.1 (30 May 2016) +- gen: support 'protos' + + and warn on unrecognized lines -Daniel Stenberg (30 May 2016) -- RELEASE-NOTES: 7.49.1 +- gen: support 'single' to make an individual page man page -- [Steve Holme brought this change] +- cmdline-docs: more options converted over - loadlibrary: Only load system DLLs from the system directory - - Inspiration provided by: Daniel Stenberg and Ray Satiro +- gen: support 'redirect' - Bug: https://curl.haxx.se/docs/adv_20160530.html - - Ref: Windows DLL hijacking with curl, CVE-2016-4802 + ... and warn for too long --help lines -- ssh: fix version number check typo +- cmdline/gen: replace options in texts better -Jay Satiro (29 May 2016) -- curl_share_setopt.3: Add min ver needed for ssl session lock +Jay Satiro (16 Nov 2016) +- http2: Fix address sanitizer memcpy warning - Bug: https://github.com/curl/curl/issues/826 - Reported-by: Michael Wallner - -Daniel Stenberg (29 May 2016) -- ssh: fix build for libssh2 before 1.2.6 + - In Curl_http2_switched don't call memcpy when src is NULL. - The statvfs functionality was added to libssh2 in that version, so we - switch off that functionality when built with older libraries. + Curl_http2_switched can be called like: - Fixes #831 - -- mbedtls: fix includes so snprintf() works + Curl_http2_switched(conn, NULL, 0); - Regression from the previous *printf() rearrangements, this file missed to - include the correct header to make sure snprintf() works universally. + .. and prior to this change memcpy was then called like: - Reported-by: Moti Avrahami - Bug: https://curl.haxx.se/mail/lib-2016-05/0196.html - -Steve Holme (23 May 2016) -- checksrc.pl: Added variants of strcat() & strncat() to banned function list + memcpy(dest, NULL, 0) - Added support for checking the tchar, unicode and mbcs variants of - strcat() and strncat() in the banned function list. + .. causing address sanitizer to warn: + + http2.c:2057:3: runtime error: null pointer passed as argument 2, which + is declared to never be null -Daniel Stenberg (23 May 2016) -- smtp: minor ident (white space) fixes +- tool_help: Clarify --dump-header only writes received headers -- THANKS: updated after script fixes - - Now giving credit properly to github user names, fixed some UTF-8 issues - and added names discovered when contrithanks was improved. +- curl.1: Clarify --dump-header only writes received headers -- THANKS-filter: more name cleanups +Daniel Stenberg (15 Nov 2016) +- [Alex Chan brought this change] -- contrithanks.sh: exclude existing names case insensitively + docs: Spelling fixes -- contrithanks.sh: use same grep pattern and -a flag as contributors.sh +Kamil Dudka (15 Nov 2016) +- docs: the next release will be 7.52.0 -- contributors.sh: better grep pattern, use grep -a +Daniel Stenberg (15 Nov 2016) +- cmdline-opts: support generating the --help output -- THANKS-filter: fix more names +- [David Schweikert brought this change] -- contrithanks.sh: do the same github fix as contributors.sh + darwinssl: fix SSL client certificate not found on MacOS Sierra - from 1577bfa35ba + Reviewed-by: Nick Zitzmann + + Closes #1105 -Jay Satiro (23 May 2016) -- contributors: Show GitHub username if real name unknown +- curl: add --fail-early to help output - Prior to this change if a GitHub contributor's real name was unknown - they would be omitted from the list. + Fixes test 1139 failures - Bug: https://github.com/curl/curl/issues/824 - -Daniel Stenberg (21 May 2016) -- RELEASE-NOTES: synced with 3caaeffbe8ded4 + Follow-up to f82bbe01c8835 -Jay Satiro (20 May 2016) -- openssl: cleanup must free compression methods +- glob: fix [a-c] globbing regression - - Free compression methods if OpenSSL 1.0.2 to avoid a memory leak. + Brought in ee4f76606cf - Bug: https://github.com/curl/curl/issues/817 - Reported-by: jveazey@users.noreply.github.com + Added test case 1280 to verify + + Reported-by: Dave Reisner + + Bug: https://github.com/curl/curl/commit/ee4f76606cfa4ee068bf28edd37c8dae7e8db317#commitcomment-19823146 -Daniel Stenberg (20 May 2016) -- [Gisle Vanem brought this change] +- curl: add --fail-early + + Exit with an error on the first transfer error instead of continuing to + do the rest of the URLs. + + Discussion: https://curl.haxx.se/mail/archive-2016-11/0038.html - curl_multibyte: fix compiler error +- Curl_rand: fixed and moved to rand.c - While compiling lib/curl_multibyte.c with '-DUSE_WIN32_IDN' etc. I was - getting: + Now Curl_rand() is made to fail if it cannot get the necessary random + level. - f:\mingw32\src\inet\curl\lib\memdebug.h(38): error C2054: expected '(' - to follow 'CURL_EXTERN' + Changed the proto of Curl_rand() slightly to provide a number of ints at + once. - f:\mingw32\src\inet\curl\lib\memdebug.h(38): error C2085: - 'curl_domalloc': not in formal parameter list - -- THANKS-filter: make Jan-E get proper credit + Moved out from vtls, since it isn't a TLS function and vtls provides + Curl_ssl_random() for this to use. + + Discussion: https://curl.haxx.se/mail/lib-2016-11/0119.html -- [Jan-E brought this change] +- cmdline-opts: first test version of a new man page generator kit + + See MANPAGE.md for the description of how this works. Each command line + option is now described in a separate .d file. - winbuild/Makefile.vc: Fix check on SSL, MBEDTLS, WINSSL exclusivity +- time_t fix: follow-up to de4de4e3c7c - Closes #818 + Blah, I accidentally wrote size_t instead of time_t for two variables. + + Reported-by: Dave Reisner -- [Alexander Traud brought this change] +- timeval: prefer time_t to hold seconds instead of long + + ... as long is still 32bit on modern 64bit windows machines, while + time_t is generally 64bit. - libcurl.m4: Avoid obsolete warning +Dan Fandrich (12 Nov 2016) +- tests: fixed variable might be clobbered warning - Closes #821 + This stops the compiler from potentially making invalid assumptions + about the immutability of sdp and sap across the longjmp boundary. -Jay Satiro (20 May 2016) -- [Michael Kaufmann brought this change] +Daniel Stenberg (12 Nov 2016) +- RELEASE-NOTES: synced with 346340808c - CURLOPT_CONNECT_TO.3: user must not free the list prematurely +- URL-parser: for file://[host]/ URLs, the [host] must be localhost - The connect-to list isn't copied so as long as the handle may be used - for a transfer the list must be valid. + Previously, the [host] part was just ignored which made libcurl accept + strange URLs misleading users. like "file://etc/passwd" which might've + looked like it refers to "/etc/passwd" but is just "/passwd" since the + "etc" is an ignored host name. - Bug: https://github.com/curl/curl/pull/819 - Reported-by: Michael Kaufmann + Reported-by: Mike Crowe + Assisted-by: Kamil Dudka -Daniel Stenberg (19 May 2016) -- RELEASE-NOTES: synced with 48114a8634242c +- test558: adapt to 0649433da -- openssl: ERR_remove_thread_state() is deprecated in latest 1.1.0 - - See OpenSSL commit 21e001747d4a +- openssl: make sure to fail in the unlikely event that PRNG seeding fails -- http2: use HTTP/2 in the HTTP/1.1-alike header +- openssl: avoid unnecessary seeding if already done - ... when generating them, not "2.0" as the protocol is called just - HTTP/2 and nothing else. + 1.1.0+ does more of this by itself so we can avoid extra processing this + way. -Jay Satiro (19 May 2016) -- dist: include curl_multi_socket_all.3 +- openssl: RAND_status always exists in OpenSSL >= 0.9.7 - Closes https://github.com/curl/curl/pull/816 + and remove RAND_screen from configure since nothing is using that + function -Steve Holme (18 May 2016) -- bump: Start work on 7.49.1 +- Curl_pgrsUpdate: use dedicated function for time passed -Daniel Stenberg (18 May 2016) -- curlbuild.h.dist: check __LP64__ as well to fix MIPS build +- realloc: use Curl_saferealloc to avoid common mistakes - The preprocessor check that sets up the 32bit defines for non-configure - builds didn't work properly for MIPS systems as __mips__ is defined for - both 32bit and 64bit. Now __LP64__ is also checked and indicates 64bit. - - Reported-by: Tomas Jakobsson - Fixes #813 + Discussed: https://curl.haxx.se/mail/lib-2016-11/0087.html -- [Marcel Raad brought this change] +- [Daniel Hwang brought this change] - schannel: fix compile break with MSVC XP toolset + curl: Add --retry-connrefused - For the Windows XP toolset of Visual C++ 2013/2015, the old Windows SDK - 7.1 is used. In this case, _USING_V110_SDK71_ is defined. + to consider ECONNREFUSED as a transient error. - Closes #812 + Closes #1064 -- dist: include CHECKSRC.md +- openssl: raise the max_version to 1.3 if asked for - Reported-by: Paul Howarth - Bug: https://curl.haxx.se/mail/lib-2016-05/0116.html + Now I've managed to negotiate TLS 1.3 with https://enabled.tls13.com/ when + using boringssl. -- test/Makefile.am: include manpage-scan.pl and nroff-scan.pl in dist +Jay Satiro (9 Nov 2016) +- vtls: Fail on unrecognized param for CURLOPT_SSLVERSION - Reported-by: Ray Satiro - Bug: https://curl.haxx.se/mail/lib-2016-05/0113.html + - Fix GnuTLS code for CURL_SSLVERSION_TLSv1_2 that broke when the + TLS 1.3 support was added in 6ad3add. + + - Homogenize across code for all backends the error message when TLS 1.3 + is not available to ": TLS 1.3 is not yet supported". + + - Return an error when a user-specified ssl version is unrecognized. + + --- + + Prior to this change our code for some of the backends used the + 'default' label in the switch statement (ie ver unrecognized) for + ssl.version and treated it the same as CURL_SSLVERSION_DEFAULT. + + Bug: https://curl.haxx.se/mail/lib-2016-11/0048.html + Reported-by: Kamil Dudka -Version 7.49.0 (17 May 2016) +Daniel Stenberg (9 Nov 2016) +- [Isaac Boukris brought this change] -Daniel Stenberg (17 May 2016) -- THANKS: 24 new names from 7.49.0 release notes + SPNEGO: Fix memory leak when authentication fails + + If SPNEGO fails, cleanup the negotiate handle right away. + + Fixes #1115 + + Signed-off-by: Isaac Boukris + Reported-by: ashman-p -- RELEASE-NOTES: 7.49.0 +- CODE_STYLE.md: link to INTERNALS.md correctly -- mbedtls/polarssl: set "hostname" unconditionally +- bump: next version will be 7.52.0 + +- RELEASE-NOTES: synced with dfcdaaba371e9a3 + +- examples/fileupload.c: fclose the file as well + +- printf: fix ".*f" handling - ...as otherwise the TLS libs will skip the CN/SAN check and just allow - connection to any server. curl previously skipped this function when SNI - wasn't used or when connecting to an IP address specified host. + It would always use precision 1 instead of reading it from the argument + list as intended. - CVE-2016-3739 + Reported-by: Ray Satiro - Bug: https://curl.haxx.se/docs/adv_20160518A.html - Reported-by: Moti Avrahami - -- [Frank Gevaerts brought this change] + Bug: #1113 - CURLOPT_RESOLVE.3: fix typo +- curl_formadd.3: *_FILECONTENT and *_FILE need the file to be kept - Closes #811 + Reported-by: Frank Gevaerts -- docs: CURLOPT_RESOLVE overrides CURLOPT_IPRESOLVE +Kamil Dudka (7 Nov 2016) +- nss: silence warning 'SSL_NEXT_PROTO_EARLY_VALUE not handled in switch' + + ... with nss-3.26.0 and newer + + Reported-by: Daniel Stenberg -- KNOWN_BUGS: GnuTLS backend skips really long certificate fields +Daniel Stenberg (7 Nov 2016) +- openssl: initial TLS 1.3 adaptions - Closes #762 + BoringSSL supports TLSv1.3 already, but these changes don't seem to be anough + to get it working. -- CURLOPT_HTTPPOST.3: the data needs to be around while in use +- ssh: check md5 fingerprints case insensitively (regression) + + Revert the change from ce8d09483eea but use the new function + + Reported-by: Kamil Dudka + Bug: https://github.com/curl/curl/commit/ce8d09483eea2fcb1b50e323e1a8ed1f3613b2e3#commitcomment-19666146 -- openssl: get_cert_chain: fix NULL dereference +Kamil Dudka (7 Nov 2016) +- curl: introduce the --tlsv1.3 option to force TLS 1.3 - CID 1361815: Explicit null dereferenced (FORWARD_NULL) + Fully implemented with the NSS backend only for now. + + Reviewed-by: Ray Satiro -- openssl: get_cert_chain: avoid NULL dereference +- vtls: support TLS 1.3 via CURL_SSLVERSION_TLSv1_3 - CID 1361811: Explicit null dereferenced (FORWARD_NULL) + Fully implemented with the NSS backend only for now. + + Reviewed-by: Ray Satiro -- dprintf_formatf: fix (false?) Coverity warning +- nss: map CURL_SSLVERSION_DEFAULT to NSS default - CID 1024412: Memory - illegal accesses (OVERRUN). Claimed to happen when - we run over 'workend' but the condition says <= workend and for all I - can see it should be safe. Compensating for the warning by adding a byte - margin in the buffer. + ... but make sure we use at least TLSv1.0 according to libcurl API - Also, removed the extra brace level indentation in the code and made it - so that 'workend' is only assigned once within the function. + Reported-by: Cure53 + Reviewed-by: Ray Satiro -- RELEASE-NOTES: synced with 2dcb5adc72d6 +Daniel Stenberg (7 Nov 2016) +- s/cURL/curl + + We're mostly saying just "curl" in lower case these days so here's a big + cleanup to adapt to this reality. A few instances are left as the + project could still formally be considered called cURL. -- THANKS-filter: fixed Jonathan Cardoso +Jay Satiro (7 Nov 2016) +- [Tatsuhiro Tsujikawa brought this change] -Jay Satiro (15 May 2016) -- ftp: fix incorrect out-of-memory code in Curl_pretransfer + http2: Don't send header fields prohibited by HTTP/2 spec - - Return value type must match function type. + Previously, we just ignored "Connection" header field. But HTTP/2 + specification actually prohibits few more header fields. This commit + ignores all of them so that we don't send these bad header fields. - s/CURLM_OUT_OF_MEMORY/CURLE_OUT_OF_MEMORY/ + Bug: https://curl.haxx.se/mail/archive-2016-10/0033.html + Reported-by: Ricki Hirner - Caught by Travis CI + Closes https://github.com/curl/curl/pull/1092 -Daniel Stenberg (15 May 2016) -- ftp wildcard: segfault due to init only in multi_perform - - The proper FTP wildcard init is now more properly done in Curl_pretransfer() - and the corresponding cleanup in Curl_close(). +Daniel Stenberg (7 Nov 2016) +- curl.1: explain the SMTP data expected for -T - The previous place of init/cleanup code made the internal pointer to be NULL - when this feature was used with the multi_socket() API, as it was made within - the curl_multi_perform() function. + Fixes #1107 - Reported-by: Jonathan Cardoso Machado - Fixes #800 + Reported-by: Adam Piggott -Jay Satiro (13 May 2016) -- libcurl-tlibcurl-thread: Update OpenSSL links +Peter Wu (6 Nov 2016) +- cmake: disable poll for macOS - Because the old OpenSSL link now redirects to their master documentation - (currently 1.1.0), which does not document the required actions for - OpenSSL <= 1.0.2. + Mirrors the autotools behavior introduced with curl-7_50_3-83-ga34c7ce. + + Fixes #1089 -Daniel Stenberg (13 May 2016) -- [Viktor Szakats brought this change] +Jay Satiro (5 Nov 2016) +- easy: Initialize info variables on easy init and duphandle + + - Call Curl_initinfo on init and duphandle. + + Prior to this change the statistical and informational variables were + simply zeroed by calloc on easy init and duphandle. While zero is the + correct default value for almost all info variables, there is one where + it isn't (filetime initializes to -1). + + Bug: https://github.com/curl/curl/issues/1103 + Reported-by: Neal Poole - darwinssl.c: fix OS X codename typo in comment +Daniel Stenberg (5 Nov 2016) +- [Mauro Rappa brought this change] -- RELEASE-NOTES: synced with 68701e51c1f7 + curl -w: added more decimal digits to timing counters - Added 8 bug fixes and 5 more contrbutors + Now showing microsecond resolution. + + Closes #1106 -- [Jay Satiro brought this change] +Jakub Zakrzewski (4 Nov 2016) +- dist: add CMakeLists.txt to the tarball - mprintf: Fix processing of width and prec args +Daniel Stenberg (4 Nov 2016) +- mbedtls: fix build with mbedtls versions < 2.4.0 - Prior to this change a width arg could be erroneously output, and also - width and precision args could not be used together without crashing. + Regression added in 62a8095e714 - "%0*d%s", 2, 9, "foo" + Reported-by: Tony Kelman - Before: "092" - After: "09foo" + Discussed in #1087 + +- configure: verify that compiler groks -Werror=partial-availability - "%*.*s", 5, 2, "foo" + Reported-by: bemoody - Before: crash - After: " fo" + Fixes #1104 + +- docs: shorten and simplify the top comment in multi-uv.c - Test 557 is updated to verify this and more + and change URL to use https -- [Michael Kaufmann brought this change] +- [Andrei Sedoi brought this change] - ConnectionExists: follow-up fix for proxy re-use - - Follow-up commit to 5823179 - - Closes #648 + docs: handle CURL_POLL_INOUT in multi-uv example -- [Per Malmberg brought this change] +- [Andrei Sedoi brought this change] - darwinssl: fix certificate verification disable on OS X 10.8 - - The new way of disabling certificate verification doesn't work on - Mountain Lion (OS X 10.8) so we need to use the old way in that version - too. I've tested this solution on versions 10.7.5, 10.8, 10.9, 10.10.2 - and 10.11. - - Closes #802 + docs: multi-uv: don't use CURLMsg after cleanup -- [Cory Benfield brought this change] +- [Andrei Sedoi brought this change] - http2: Add space between colon and header value - - curl's representation of HTTP/2 responses involves transforming the - response to a format that is similar to HTTP/1.1. Prior to this change, - curl would do this by separating header names and values with only a - colon, without introducing a space after the colon. - - While this is technically a valid way to represent a HTTP/1.1 header - block, it is much more common to see a space following the colon. This - change introduces that space, to ensure that incautious tools are safely - able to parse the header block. + docs: remove unused variables in multi-uv example + +- bump: start working on 7.51.1 + +- winbuild: remove strcase.obj from curl build - This also ensures that the difference between the HTTP/1.1 and HTTP/2 - response layout is as minimal as possible. + Reported-by: Bruce Stephens - Bug: https://github.com/curl/curl/issues/797 + Fixes #1098 + +Dan Fandrich (2 Nov 2016) +- msvc: removed a straggling reference to strequal.c - Closes #798 - Fixes #797 + Follow-up to 502acba2 -Kamil Dudka (12 May 2016) -- openssl: fix compile-time warning in Curl_ossl_check_cxn() +Version 7.51.0 (2 Nov 2016) + +Daniel Stenberg (2 Nov 2016) +- THANKS: synced with 7.51.0 + +- RELEASE-NOTES: 7.51.0 + +- ftp_done: don't clobber the passed in error code - ... introduced in curl-7_48_0-293-g2968c83: + Coverity CID 1374359 pointed out the unused result value. + +- ftp: remove dead code in ftp_done - Error: COMPILER_WARNING: - lib/vtls/openssl.c: scope_hint: In function ‘Curl_ossl_check_cxn’ - lib/vtls/openssl.c:767:15: warning: conversion to ‘int’ from ‘ssize_t’ - may alter its value [-Wconversion] + Coverity CID 1374358 -Jay Satiro (11 May 2016) -- openssl: stricter connection check function +Jay Satiro (1 Nov 2016) +- generate.bat: Include include/curl in libcurl VS projects - - In the case of recv error, limit returning 'connection still in place' - to EINPROGRESS, EAGAIN and EWOULDBLOCK. + .. because including those headers helps Visual Studio's Intellisense. + +- generate.bat: Remove strcase.[ch] from curl tool VS projects - This is an improvement on the parent commit which changed the openssl - connection check to use recv MSG_PEEK instead of SSL_peek. + ..because they're no longer needed in the tool build. strcase is still + built by the libcurl project and exports curl_str(n)equal which is used + by the curl tool. - Ref: https://github.com/curl/curl/commit/856baf5#comments + Bug: https://github.com/curl/curl/commit/9363f1a#all_commit_comments -Daniel Stenberg (11 May 2016) -- [Anders Bakken brought this change] +Daniel Stenberg (2 Nov 2016) +- metalink: simplify the hex parsing function + + ... and now it avoids using the libcurl toupper() function - TLS: SSL_peek is not a const operation +Michael Kaufmann (1 Nov 2016) +- file: fix compiler warning - Calling SSL_peek can cause bytes to be read from the raw socket which in - turn can upset the select machinery that determines whether there's data - available on the socket. + follow-up to 46133aa5 + +Dan Fandrich (1 Nov 2016) +- strcase: fixed Metalink builds by redefining checkprefix() - Since Curl_ossl_check_cxn only tries to determine whether the socket is - alive and doesn't actually need to see the bytes SSL_peek seems like - the wrong function to call. + ...to use the public function curl_strnequal(). This isn't ideal because + it adds extra overhead to any internal calls to checkprefix. - We're able to occasionally reproduce a connect timeout due to this - bug. What happens is that Curl doesn't know to call SSL_connect again - after the peek happens since data is buffered in the SSL buffer and thus - select won't fire for this socket. + follow-up to 95bd2b3e + +Daniel Stenberg (1 Nov 2016) +- curl.1: typo + +- curl.1: expand on how multiple uses of -o looks - Closes #795 + Suggested-by: Dan Jacobson + Issue: https://github.com/curl/curl/issues/1097 -Jay Satiro (9 May 2016) -- [Daniel Stenberg brought this change] +- tests/util: get a private strncasecompare clone + + ... since the curlx_* code no longer provides one and we don't link + libcurl to these test servers. - TLS: move the ALPN/NPN enable bits to the connection +- strcase: make the tool use curl_str[n]equal instead - Only protocols that actually have a protocol registered for ALPN and NPN - should try to get that negotiated in the TLS handshake. That is only - HTTPS (well, http/1.1 and http/2) right now. Previously ALPN and NPN - would wrongly be used in all handshakes if libcurl was built with it - enabled. + As they are after all part of the public API. Saves space and reduces + complexity. Remove the strcase defines from the curlx_ family. - Reported-by: Jay Satiro + Suggested-by: Dan Fandrich + Idea: https://curl.haxx.se/mail/lib-2016-10/0136.html + +Kamil Dudka (31 Oct 2016) +- gskit, nss: do not include strequal.h - Fixes #789 + follow-up to 811a693b80 -Daniel Stenberg (8 May 2016) -- libcurl-thread.3: openssl 1.1.0 is safe, and so is boringssl +Dan Fandrich (31 Oct 2016) +- strcasecompare: include curl.h in strcase.c + + This should fix the "warning: 'curl_strequal' redeclared without + dllimport attribute: previous dllimport ignored" message and subsequent + link error on Windows because of the missing CURL_EXTERN on the + prototype. -- [Antonio Larrosa brought this change] +Daniel Stenberg (31 Oct 2016) +- strcase: fix the remaining rawstr users - connect: fix invalid "Network is unreachable" errors +- msvc builds: s/rawstr/strcase - Sometimes, in systems with both ipv4 and ipv6 addresses but where the - network doesn't support ipv6, Curl_is_connected returns an error - (intermittently) even if the ipv4 socket connects successfully. + Follow-up to 811a693b + +Dan Fandrich (31 Oct 2016) +- strcasecompare: replaced remaining rawstr.h with strcase.h - This happens because there's a for-loop that iterates on the sockets but - the error variable is not resetted when the ipv4 is checked and is ok. + This is a followup to commit 811a693b + +Marcel Raad (31 Oct 2016) +- digest_sspi: fix include - This patch fixes this problem by setting error to 0 when checking the - second socket and not having a result yet. + Fix compile break from 811a693b80 + +Dan Fandrich (31 Oct 2016) +- libauthretry: use the external function curl_strequal - Fixes #794 + The internal version strcasecompare isn't available outside libcurl -Jay Satiro (5 May 2016) -- FAQ: refer to thread safety guidelines +Daniel Stenberg (31 Oct 2016) +- RELEASE-NOTES: synced with d14538d2501ef0da -Daniel Stenberg (3 May 2016) -- connections: non-HTTP proxies on different ports aren't reused either - - Reported-by: Oleg Pudeyev and fuchaoqun +- configure: raise the default minimum version for macos to 10.8 - Fixes #648 + follow-up to 4f8d0b6f02aa7043. Since the darwinssl code breaks + otherwise. If you build without darwinssl 10.5 works fine. -- http: make sure a blank header overrides accept_decoding +- unit1301: keep testing curl_strequal - Reported-by: rcanavan - Assisted-by: Isaac Boukris - Closes #785 + as that is still part of the API, fix from 8fe4bd084412f30 -- CHECKSRC.md: clarified, explained the whitelist file +- ldap: fix include + + Fix bug from 811a693b80 -- nroff-scan.pl: verify that references are made with \fI +- url: remove unconditional idn2.h include + + Mistake brought by 9c91ec778104a -- docs: unified man page references to use \fI +- curl_strequal: part of public API/ABI, needs to be kept + + These two public functions have been mentioned as deprecated since a + very long time but since they are still part of the API and ABI we need + to keep them around. -- TODO: 17.14 --fail without --location should treat 3xx as a failure +- strcase: s/strequal/strcasecompare - Closes #727 + some more follow-ups to 811a693b80 -- RELEASE-NOTES: synced with 7987f5cb14d +- ldap: fix strcase use + + follow-up to 811a693b80 -- [Isaac Boukris brought this change] +- test165: adapted to the libidn2 use and IDNA2008 fix - CURLOPT_ACCEPT_ENCODING.3: Follow-up clarification +- cookie: replace use of fgets() with custom version - Mention possible content-length mismatch with sum of bytes reported - by write callbacks when auto decoding is enabled. + ... that will ignore lines that are too long to fit in the buffer. - See #785 - -- test1140: run nroff-scan to verify man pages + CVE-2016-8615 + + Bug: https://curl.haxx.se/docs/adv_20161102A.html + Reported-by: Cure53 -- nroff-scan.pl: verify the .BR references as well +- strcasecompare: all case insensitive string compares ignore locale now + + We had some confusions on when each function was used. We should not act + differently on different locales anyway. -- CURLOPT_CONV_TO_NETWORK_FUNCTION.3: fix bad man page reference +- strcasecompare: is the new name for strequal() + + ... to make it less likely that we forget that the function actually + does case insentive compares. Also replaced several invokes of the + function with a plain strcmp when case sensitivity is not an issue (like + comparing with "-"). -- CURLOPT_BUFFERSIZE.3: fix reference to CURLOPT_MAX_RECV_SPEED_LARGE +- ftp: check for previous patch must be case sensitive! + + ... otherwise example.com/PATH and example.com/path would be assumed to + be the same and they usually aren't! -- curl_easy_pause.3: fix man page reference +- SSH: check md5 fingerprint case sensitively -Jay Satiro (1 May 2016) -- tool_cb_hdr: Fix --remote-header-name with schemeless URL +- connectionexists: use case sensitive user/password comparisons - - Move the existing scheme check from tool_operate. + CVE-2016-8616 - In the case of --remote-header-name we want to parse Content-disposition - for a filename, but only if the scheme is http or https. A recent - adjustment 0dc4d8e was made to account for schemeless URLs however it's - not 100% accurate. To remedy that I've moved the scheme check to the - header callback, since at that point the library has already determined - the scheme. + Bug: https://curl.haxx.se/docs/adv_20161102B.html + Reported-by: Cure53 + +- base64: check for integer overflow on large input - Bug: https://github.com/curl/curl/issues/760 - Reported-by: Kai Noda + CVE-2016-8617 + + Bug: https://curl.haxx.se/docs/adv_20161102C.html + Reported-by: Cure53 -Daniel Stenberg (1 May 2016) -- tls: make setting pinnedkey option fail if not supported +- krb5: avoid realloc(0) - to make it obvious to users trying to use the feature with TLS backends - not supporting it. + If the requested size is zero, bail out with error instead of doing a + realloc() that would cause a double-free: realloc(0) acts as a free() + and then there's a second free in the cleanup path. - Discussed in #781 - Reported-by: Travis Burtrum + CVE-2016-8619 + + Bug: https://curl.haxx.se/docs/adv_20161102E.html + Reported-by: Cure53 -- nroff-scan.pl: verifies nroff pages +- aprintf: detect wrap-around when growing allocation - ... not used by any test yet but can be used stand-alone. + On 32bit systems we could otherwise wrap around after 2GB and allocate 0 + bytes and crash. + + CVE-2016-8618 + + Bug: https://curl.haxx.se/docs/adv_20161102D.html + Reported-by: Cure53 -- opts: fix broken/bad references +- range: reject char globs with missing end like '[L-]' + + ... which previously would lead to out of boundary reads. + + Reported-by: Luật Nguyễn -- [Michael Kaufmann brought this change] +- glob_next_url: make sure to stay within the given output buffer - docs: fix bugs in CURLOPT_HTTP_VERSION.3 and CURLOPT_PIPEWAIT.3 +- range: prevent negative end number in a glob range - Closes #786 + CVE-2016-8620 + + Bug: https://curl.haxx.se/docs/adv_20161102F.html + Reported-by: Luật Nguyễn -- CURLOPT_ACCEPT_ENCODING.3: clarified +- parsedate: handle cut off numbers better - As discussed in #785 + ... and don't read outside of the given buffer! + + CVE-2016-8621 + + bug: https://curl.haxx.se/docs/adv_20161102G.html + Reported-by: Luật Nguyễn -- curl.1: --mail-rcpt can be used multiple times +- escape: avoid using curl_easy_unescape() internally - Reported-by: mgendre - Closes #784 + Since the internal Curl_urldecode() function has a better API. -- [Karlson2k brought this change] +- unescape: avoid integer overflow + + CVE-2016-8622 + + Bug: https://curl.haxx.se/docs/adv_20161102H.html + Reported-by: Cure53 - tests: Use 'pathhelp' for paths conversions in secureserver.pl +- cookies: getlist() now holds deep copies of all cookies - Closes #675 + Previously it only held references to them, which was reckless as the + thread lock was released so the cookies could get modified by other + handles that share the same cookie jar over the share interface. + + CVE-2016-8623 + + Bug: https://curl.haxx.se/docs/adv_20161102I.html + Reported-by: Cure53 -- [Karlson2k brought this change] +- TODO: remove IDNA2008 - tests: Use 'pathhelp' for paths conversions in sshserver.pl +- idn: switch to libidn2 use and IDNA2008 support + + CVE-2016-8625 + + Bug: https://curl.haxx.se/docs/adv_20161102K.html + Reported-by: Christian Heimes -- [Karlson2k brought this change] +- test1246: verify URL parsing with host name ending with '#' - tests: Use 'pathhelp' for current path in runtests.pl +- urlparse: accept '#' as end of host name + + 'http://example.com#@127.0.0.1/x.txt' equals a request to example.com + for the '/' document with the rest of the URL being a fragment. + + CVE-2016-8624 + + Bug: https://curl.haxx.se/docs/adv_20161102J.html + Reported-by: Fernando Muñoz -- [Karlson2k brought this change] +Jay Satiro (31 Oct 2016) +- INTERNALS: better markdown (follow-up) + + - Wrap more words with underscores in backticks. + + Follow-up to 13f4913. - tests: pathhelp.pm to process paths on Msys/Cygwin +Daniel Stenberg (30 Oct 2016) +- INTERNALS: better markdown + + words with underscore need to be within `these` + + Bug: https://github.com/curl/curl-www/issues/19 + Reported-by : Jay Satiro -- lib: include curl_printf.h as one of the last headers +Jay Satiro (30 Oct 2016) +- mk-ca-bundle.vbs: Fix UTF-8 output - curl_printf.h defines printf to curl_mprintf, etc. This can cause - problems with external headers which may use - __attribute__((format(printf, ...))) markers etc. + - Change initial message box to mention delay when downloading/parsing. - To avoid that they cause problems with system includes, we include - curl_printf.h after any system headers. That makes the three last - headers to always be, and we keep them in this order: + Since there is no progress meter it was somewhat unexpected that after + choosing a filename nothing appears to happen, when actually the cert + data is in the process of being downloaded and parsed. - curl_printf.h - curl_memory.h - memdebug.h + - Warn if OpenSSL is not present. - None of them include system headers, they all do funny #defines. + - Use a UTF-8 stream to make the ca-bundle data. - Reported-by: David Benjamin + - Save the UTF-8 ca-bundle stream as binary so that no BOM is added. - Fixes #743 - -- memdebug.h: remove inclusion of other headers + --- - Mostly because they're not needed, because memdebug.h is always included - last of all headers so the others already included the correct ones. + This is a follow-up to d2c6d15 which switched mk-ca-bundle.vbs output to + ANSI due to corrupt UTF-8 output, now fixed. - But also, starting now we don't want this to accidentally include any - system headers, as the header included _before_ this header may add - defines and other fun stuff that we won't want used in system includes. + This change completes making the default certificate bundle output of + mk-ca-bundle.vbs as close as possible to that of mk-ca-bundle.pl, which + should make it easier to review any difference between their output. + + Ref: https://github.com/curl/curl/pull/1012 -- [Jay Satiro brought this change] +Daniel Stenberg (28 Oct 2016) +- BINDINGS: converted to markdown + + To make it render better on the web site, at the price of it becoming + slightly less readable as text. - curl -J: make it work even without http:// scheme on URL +Jay Satiro (27 Oct 2016) +- CURLMOPT_MAX_PIPELINE_LENGTH.3: Clarify it's not for HTTP/2 - It does open up a miniscule risk that one of the other protocols that - libcurl could use would send back a Content-Disposition header and then - curl would act on it even if not HTTP. + - Clarify that this option is only for HTTP/1.1 pipelining. - A future mitigation for this risk would be to allow the callback to ask - libcurl which protocol is being used. + Bug: https://github.com/curl/curl/issues/1059 + Reported-by: Jeroen Ooms - Verified with test 1312 + Assisted-by: Daniel Stenberg + +Daniel Stenberg (27 Oct 2016) +- KNOWN_BUGS: HTTP/2 server push enabled when no pushes can be accepted - Closes #760 + Closes #927 -- manpage-scan.pl: also verify the command line option docs +- KNOWN_BUGS: c-ares deviates from stock resolver on http://1346569778 - This script now also scans src/tool_getparam.c, docs/curl.1 and - src/tool_help.c and will warn if any of them lists a command line option - not mentioned in one of the other places. + Closes #893 -- curl: show the long option version of -q in the -h list +Michael Osipov (27 Oct 2016) +- configure.in: Fix test syntax + + Some versions of test allow == for equality, but others (such as the HP-UX + version) do not. Use a single = for correctness. + + Error output: + checking for monotonic clock_gettime... ./configure[20445]: ==: A test command parameter is not valid. -- curl: remove "--socks" as "--socks5" turned 8 +Daniel Stenberg (27 Oct 2016) +- SECURITY: minor updates - In commit 2e42b0a2524 (Jan 2008) we made the option "--socks" deprecated - and it has not been documented since. The more explicit socks options - (like --socks4 or --socks5) should be used. + - we allow the security push up to 48 hours before the release + + - add a mention about possible pre-notifications + + - lower case the 'curl-security' title -- curl.1: document the deprecated --ftp-ssl option +- [Andrei Sedoi brought this change] -- curl: remove --http-request + docs: fix req->data in multi-uv example - It was mentioned as deprecated already in commit ae1912cb0d4 from - 1999. It has not been documented in this millennium. + Closes #1088 -- curl: mention --ntlm-wb in -h list +- mbedtls: stop using deprecated include file + + Reported-by: wyattoday + Fixes #1087 -- curl: -h output lacked --proxy-header +Kamil Dudka (25 Oct 2016) +- [Martin Frodl brought this change] -- curl.1: document --ntlm-wb + nss: fix tight loop in non-blocking TLS handhsake over proxy + + ... in case the handshake completes before entering + CURLM_STATE_PROTOCONNECT + + Bug: https://bugzilla.redhat.com/1388162 -- curl.1: document the long format of -q: --disable +Jay Satiro (25 Oct 2016) +- mk-ca-bundle: Update the vbscript version + + Bring the VBScript version more in line with the perl version: + + - Change timestamp to UTC. + + - Change URL retrieval to HTTPS-only by default. + + - Comment out the options that disabled SSL cert checking by default. + + - Assume OpenSSL is present, get SHA256. And add a flag to toggle it. + + - Fix cert issuer name output. + + The cert issuer output is now ansi, converted from UTF-8. Prior to this + it was corrupt UTF-8. It turns out though we can work with UTF-8 the + FSO object that writes ca-bundle can't write UTF-8, so there will have + to be some alternative if UTF-8 is needed (like an ADODB.Stream). + + - Disable the certificate text info feature. + + The certificate text info doesn't work properly with any recent OpenSSL. -- curl.1: mention the deprecated --krb4 option +Daniel Stenberg (24 Oct 2016) +- TODO: indent code to make it render properly -- curl.1: document --ftp-ssl-reqd - - Even if deprecated, document it so that people will find it as old - scripts may still use it. +- TODO: Remove the generated include file -- curl: use --telnet-option as documented +- TODO: add "--retry should resume" - The code said "telnet-options" but no documentation ever said so. It - worked fine since the code is fine with a unique match of the first - part. + See #1084 -- getparam: remove support for --ftpport +- mk-ca-bundle.1: document -k - It has been deprecated and undocumented since commit ad5ead8bed7 (Dec - 2003). --ftp-port is the proper long option name. + Brought in 1ad2bdcf110266c. Now does HTTPS by default and needs -k to + fall back to plain HTTP. -- curl: make --disable work as long form of -q +- [Jay Satiro brought this change] + + mk-ca-bundle: Change URL retrieval to HTTPS-only by default - To make the aliases list reflect reality. + - Change all predefined Mozilla URLs to HTTPS (Gregory Szorc). + + - New option -k to allow URLs other than HTTPS and enable HTTP fallback. + + Prior to this change the default URL retrieval mode was to fall back to + HTTP if HTTPS didn't work. + + Reported-by: Gregory Szorc + + Closes #1012 -- aliases: remove trailing space from capath string +- RELEASE-NOTES: synced with 50ee3aaf1a9b22d -- cmdline parse: only single letter options have single-letter strings - - ... moved around options so that parsing the code to find all - single-letter options easier. +Dan Fandrich (23 Oct 2016) +- INSTALL.md: Updated minimum file sizes for 7.50.3 -Jay Satiro (28 Apr 2016) -- CURLINFO_TLS_SSL_PTR.3: Clarify SSL pointer availability +Daniel Stenberg (22 Oct 2016) +- multi: force connections to get closed in close_all_connections - Bug: https://curl.haxx.se/mail/lib-2016-04/0126.html - Reported-by: Bru Rom + Several independent reports on infinite loops hanging in the + close_all_connections() function when closing a multi handle, can be + fixed by first marking the connection to get closed before calling + Curl_disconnect. + + This is more fixing-the-symptom rather than the underlying problem + though. + + Bug: https://curl.haxx.se/mail/lib-2016-10/0011.html + Bug: https://curl.haxx.se/mail/lib-2016-10/0059.html + + Reported-by: Dan Fandrich, Valentin David, Miloš Ljumović -Daniel Stenberg (28 Apr 2016) -- curl_easy_getinfo.3: remove superfluous blank lines +- [Anders Bakken brought this change] -- test1139: verifies libcurl option man page presence - - - checks that each option has its own man page present + curl_multi_remove_handle: fix a double-free + + In short the easy handle needs to be disconnected from its connection at + this point since the connection still is serving other easy handles. + + In our app we can reliably reproduce a crash in our http2 stress test + that is fixed by this change. I can't easily reproduce the same test in + a small example. + + This is the gdb/asan output: + + ==11785==ERROR: AddressSanitizer: heap-use-after-free on address 0xe9f4fb80 at pc 0x09f41f19 bp 0xf27be688 sp 0xf27be67c + READ of size 4 at 0xe9f4fb80 thread T13 (RESOURCE_HTTP) + #0 0x9f41f18 in curl_multi_remove_handle /path/to/source/3rdparty/curl/lib/multi.c:666 + + 0xe9f4fb80 is located 0 bytes inside of 1128-byte region [0xe9f4fb80,0xe9f4ffe8) + freed by thread T13 (RESOURCE_HTTP) here: + #0 0xf7b1b5c2 in __interceptor_free /opt/toolchain/src/gcc-6.2.0/libsanitizer/asan/asan_malloc_linux.cc:45 + #1 0x9f7862d in conn_free /path/to/source/3rdparty/curl/lib/url.c:2808 + #2 0x9f78c6a in Curl_disconnect /path/to/source/3rdparty/curl/lib/url.c:2876 + #3 0x9f41b09 in multi_done /path/to/source/3rdparty/curl/lib/multi.c:615 + #4 0x9f48017 in multi_runsingle /path/to/source/3rdparty/curl/lib/multi.c:1896 + #5 0x9f490f1 in curl_multi_perform /path/to/source/3rdparty/curl/lib/multi.c:2123 + #6 0x9c4443c in perform /path/to/source/src/net/resourcemanager/ResourceManagerCurlThread.cpp:854 + #7 0x9c445e0 in ... + #8 0x9c4cf1d in ... + #9 0xa2be6b5 in ... + #10 0xf7aa5780 in asan_thread_start /opt/toolchain/src/gcc-6.2.0/libsanitizer/asan/asan_interceptors.cc:226 + #11 0xf4d3a16d in __clone (/lib/i386-linux-gnu/libc.so.6+0xe716d) + + previously allocated by thread T13 (RESOURCE_HTTP) here: + #0 0xf7b1ba27 in __interceptor_calloc /opt/toolchain/src/gcc-6.2.0/libsanitizer/asan/asan_malloc_linux.cc:70 + #1 0x9f7dfa6 in allocate_conn /path/to/source/3rdparty/curl/lib/url.c:3904 + #2 0x9f88ca0 in create_conn /path/to/source/3rdparty/curl/lib/url.c:5797 + #3 0x9f8c928 in Curl_connect /path/to/source/3rdparty/curl/lib/url.c:6438 + #4 0x9f45a8c in multi_runsingle /path/to/source/3rdparty/curl/lib/multi.c:1411 + #5 0x9f490f1 in curl_multi_perform /path/to/source/3rdparty/curl/lib/multi.c:2123 + #6 0x9c4443c in perform /path/to/source/src/net/resourcemanager/ResourceManagerCurlThread.cpp:854 + #7 0x9c445e0 in ... + #8 0x9c4cf1d in ... + #9 0xa2be6b5 in ... + #10 0xf7aa5780 in asan_thread_start /opt/toolchain/src/gcc-6.2.0/libsanitizer/asan/asan_interceptors.cc:226 + #11 0xf4d3a16d in __clone (/lib/i386-linux-gnu/libc.so.6+0xe716d) + + SUMMARY: AddressSanitizer: heap-use-after-free /path/to/source/3rdparty/curl/lib/multi.c:666 in curl_multi_remove_handle + Shadow bytes around the buggy address: + 0x3d3e9f20: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd + 0x3d3e9f30: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd + 0x3d3e9f40: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd + 0x3d3e9f50: fd fd fd fd fd fd fd fd fd fd fd fd fd fa fa fa + 0x3d3e9f60: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa + =>0x3d3e9f70:[fd]fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd + 0x3d3e9f80: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd + 0x3d3e9f90: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd + 0x3d3e9fa0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd + 0x3d3e9fb0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd + 0x3d3e9fc0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd + Shadow byte legend (one shadow byte represents 8 application bytes): + Addressable: 00 + Partially addressable: 01 02 03 04 05 06 07 + Heap left redzone: fa + Heap right redzone: fb + Freed heap region: fd + Stack left redzone: f1 + Stack mid redzone: f2 + Stack right redzone: f3 + Stack partial redzone: f4 + Stack after return: f5 + Stack use after scope: f8 + Global redzone: f9 + Global init order: f6 + Poisoned by user: f7 + Container overflow: fc + Array cookie: ac + Intra object redzone: bb + ASan internal: fe + Left alloca redzone: ca + Right alloca redzone: cb + ==11785==ABORTING + + Thread 14 "RESOURCE_HTTP" received signal SIGABRT, Aborted. + [Switching to Thread 0xf27bfb40 (LWP 12324)] + 0xf7fd8be9 in __kernel_vsyscall () + (gdb) bt + #0 0xf7fd8be9 in __kernel_vsyscall () + #1 0xf4c7ee89 in __GI_raise (sig=6) at ../sysdeps/unix/sysv/linux/raise.c:54 + #2 0xf4c803e7 in __GI_abort () at abort.c:89 + #3 0xf7b2ef2e in __sanitizer::Abort () at /opt/toolchain/src/gcc-6.2.0/libsanitizer/sanitizer_common/sanitizer_posix_libcdep.cc:122 + #4 0xf7b262fa in __sanitizer::Die () at /opt/toolchain/src/gcc-6.2.0/libsanitizer/sanitizer_common/sanitizer_common.cc:145 + #5 0xf7b21ab3 in __asan::ScopedInErrorReport::~ScopedInErrorReport (this=0xf27be171, __in_chrg=) at /opt/toolchain/src/gcc-6.2.0/libsanitizer/asan/asan_report.cc:689 + #6 0xf7b214a5 in __asan::ReportGenericError (pc=166993689, bp=4068206216, sp=4068206204, addr=3925146496, is_write=false, access_size=4, exp=0, fatal=true) at /opt/toolchain/src/gcc-6.2.0/libsanitizer/asan/asan_report.cc:1074 + #7 0xf7b21fce in __asan::__asan_report_load4 (addr=3925146496) at /opt/toolchain/src/gcc-6.2.0/libsanitizer/asan/asan_rtl.cc:129 + #8 0x09f41f19 in curl_multi_remove_handle (multi=0xf3406080, data=0xde582400) at /path/to/source3rdparty/curl/lib/multi.c:666 + #9 0x09f6b277 in Curl_close (data=0xde582400) at /path/to/source3rdparty/curl/lib/url.c:415 + #10 0x09f3354e in curl_easy_cleanup (data=0xde582400) at /path/to/source3rdparty/curl/lib/easy.c:860 + #11 0x09c6de3f in ... + #12 0x09c378c5 in ... + #13 0x09c48133 in ... + #14 0x09c4d092 in ... + #15 0x0a2be6b6 in ... + #16 0xf7aa5781 in asan_thread_start (arg=0xf2d22938) at /opt/toolchain/src/gcc-6.2.0/libsanitizer/asan/asan_interceptors.cc:226 + #17 0xf5de52b5 in start_thread (arg=0xf27bfb40) at pthread_create.c:333 + #18 0xf4d3a16e in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:114 + + Fixes #1083 + +- testcurl.1: fix the URL to the autobuild summary + +- testcurl.1: update URLs + +- INSTALL: converted to markdown => INSTALL.md + + Also heavily edited for content. Removed lots of old cruft that we added + like 10+ years ago that is likely incorrect by now. + + Also removed INSTALL.devcpp for same reason. + +- [Martin Storsjo brought this change] + + configure: Check for other variants of the -m*os*-version-min flags - - checks that each option is mentioned in its corresponding index man - page + In addition to -miphoneos-version-min, the same version can be set + using -mios-version-min. And for WatchOS and TvOS, there's + -mwatchos-version-min and -mtvos-version-min. -- curl_easy_getinfo.3: added missing mention of CURLINFO_TLS_SESSION +- configure: set min version flags for builds on mac - ... although it is deprecated. + This helps building binaries that can work on multiple macOS versions. + + Help-by: Martin Storsjö + + Fixes #1069 -Jay Satiro (28 Apr 2016) -- mbedtls: Fix session resume +- curl_multi_add_handle: set timeouts in closure handles - This also fixes PolarSSL session resume. + The closure handle only ever has default timeouts set. To improve the + state somewhat we clone the timeouts from each added handle so that the + closure handle always has the same timeouts as the most recently added + easy handle. - Prior to this change the TLS session information wasn't properly - saved and restored for PolarSSL and mbedTLS. + Fixes #739 + +- configure/CURL_CHECK_FUNC_POLL: disable poll completely on mac - Bug: https://curl.haxx.se/mail/lib-2016-01/0070.html - Reported-by: Thomas Glanzmann + ... so that the same libcurl build easier can run on any version. - Bug: https://curl.haxx.se/mail/lib-2016-04/0095.html - Reported-by: Moti Avrahami + Follow-up to issue #1057 -Daniel Stenberg (27 Apr 2016) -- RELEASE-NOTES: synced with f4298fcc6d2 +- RELEASE-NOTES: synced with f36f8c14551efc6772 -- [Michael Kaufmann brought this change] +- test14xx: fixed --libcurl output tests again after 8e8afa82cbb - opts: Fix some syntax errors in example code fragments +- s/cURL/curl - Fixes #779 + The tool was never called cURL, only the project. But even so, we have + more and more over time switched to just use lower case. -- openssl: avoid BN_print a NULL bignum +- polarssl: indented code, removed unused variables + +- polarssl: reduce #ifdef madness with a macro + +- polarssl: fix unaligned SSL session-id lock + +- Curl_polarsslthreadlock_thread_setup: clear array at init - OpenSSL 1.1.0-pre seems to return NULL(?) for a whole lot of those - numbers so make sure the function handles this. + ... since if it fails to init the entire array and then tries to clean + it up, it would attempt to work on an uninitialized pointer. + +- curl: set INTERLEAVEDATA too - Reported-by: Linus Nordberg + As otherwise the callback could be called with a NULL pointer when RTSP + data is provided. -- [Marcel Raad brought this change] +- gopher: properly return error for poll failures - CONNECT_ONLY: don't close connection on GSS 401/407 reponses - - Previously, connections were closed immediately before the user had a - chance to extract the socket when the proxy required Negotiate - authentication. +- select: switch to macros in uppercase - This regression was brought in with the security fix in commit - 79b9d5f1a42578f + Curl_select_ready() was the former API that was replaced with + Curl_select_check() a while back and the former arg setup was provided + with a define (in order to leave existing code unmodified). - Closes #655 + Now we instead offer SOCKET_READABLE and SOCKET_WRITABLE for the most + common shortcuts where only one socket is checked. They're also more + visibly macros. -- CURLINFO_TLS_SESSION.3: clarify TLS library support before 7.48.0 +- select: use more proper macro-looking names + + ... so that it becomes more obvious in the code what is what. Also added + a typecast for one of the calculations. -- mbedtls.c: silly spellfix of a comment +- Curl_socket_check: add extra check to avoid integer overflow -- KNOWN_BUGS: 1.10 Strips trailing dot from host name +- maketgz: make it support "only" generating version info - Closes #716 + ... to allow you to update the local repository with the given version + number data. -- test1322: verify stripping of trailing dot from host name +Jay Satiro (17 Oct 2016) +- url: skip to-be-closed connections when pipelining (follow-up) - While being debated (in #716) and a violation of RFC 7230 section 5.4, - this test verifies that the existing functionality works as intended. It - strips the dot from the host name and uses the host without dot - throughout the internals. + - Change back behavior so that pipelining is considered possible for + connections that have not yet reached the protocol level. + + This is a follow-up to e5f0b1a which had changed the behavior of + checking if pipelining is possible to ignore connections that had + 'bits.close' set. Connections that have not yet reached the protocol + level also have that bit set, and we need to consider pipelining + possible on those connections. -- multi: accidentally used resolved host name instead of proxy +Daniel Stenberg (17 Oct 2016) +- HTTP2: mention the tool's limited support + +- RELEASE-NOTES: synced with a1a5cd04877fd6fd + +- [David Woodhouse brought this change] + + curl: do not set CURLOPT_SSLENGINEDEFAULT automatically - Regression introduced in 09b5a998 + There were bugs in the PKCS#11 engine, and fixing them triggers bugs in + OpenSSL. Just don't get involved; there's no need to be making the + engine methods the default anyway. - Bug: https://curl.haxx.se/mail/lib-2016-04/0084.html - Reported-by: BoBo + https://github.com/OpenSC/libp11/pull/108 + https://github.com/openssl/openssl/pull/1639 + + Merges #1042 -- symbols-in-versions: added new CURLSSLBACKEND_ symbols +- KNOWN_BUGS: two more existing problems -- test148: fixed after the --ftp-create-dirs retry change +Marcel Raad (16 Oct 2016) +- win: fix Universal Windows Platform build - follow-up commit to 3c1e84f569 as it made curl try a little harder + This fixes a merge error in commit 7f3df80 caused by commit 332e8d6. + + Additionally, this changes Curl_verify_windows_version for Windows App + builds to assume to always be running on the target Windows version. + There seems to be no way to determine the Windows version from a + UWP app. Neither GetVersion(Ex), nor VerifyVersionInfo, nor the + Version Helper functions are supported. + + Bug: https://github.com/curl/curl/pull/820#issuecomment-250889878 + Reported-by: Paul Joyce + + Closes https://github.com/curl/curl/pull/1048 -- curl.h: clarify curl_sslbackend for openssl clones and renames +Daniel Stenberg (16 Oct 2016) +- KNOWN_BUGS: minor formatting edit -- [Karlson2k brought this change] +Jay Satiro (14 Oct 2016) +- [Rider Linden brought this change] - url.c: fixed DEBUGASSERT() for WinSock workaround + url: skip to-be-closed connections when pipelining - If buffer is allocated, but nothing is received during prereceive - stage, than number of processed bytes must be zero. + No longer attempt to use "doomed" to-be-closed connections when + pipelining. Prior to this change connections marked for deletion (e.g. + timeout) would be erroneously used, resulting in sporadic crashes. - Closes #778 - -- KNOWN_BUGS: --interface for ipv6 binds to unusable IP address + As originally reported and fixed by Carlo Wood (origin unknown). - Closes #686 for now. + Bug: https://github.com/curl/curl/issues/627 + Reported-by: Rider Linden + + Closes https://github.com/curl/curl/pull/1075 + Participation-by: nopjmp@users.noreply.github.com -- TODO: 1.17 Add support for IRIs +Daniel Stenberg (13 Oct 2016) +- vtls: only re-use session-ids using the same scheme - Adding support for IRIs is a mouthful, but is probably interesting at - least for areas and countries where the use of such "URLs" are growing - popularity. + To make it harder to do cross-protocol mistakes + +Jay Satiro (11 Oct 2016) +- [Torben Dannhauer brought this change] + + dist: add missing cmake modules to the tarball - Closes #776 + Closes https://github.com/curl/curl/pull/1070 -- THANKS-filter: Travis Burtrum +Daniel Stenberg (11 Oct 2016) +- configure: detect the broken poll() in macOS 10.12 + + Fixes #1057 -- lib1517: checksrc compliance +- dist: remove PDF and HTML converted docs from the releases -- [moparisthebest brought this change] +- [Remo E brought this change] - PolarSSL: Implement public key pinning + cmake: add nghttp2 support + + Closes #922 -Patrick Monnerat (22 Apr 2016) -- os400: upgrade ILE/RPG binding +- [Andreas Streichardt brought this change] -- curl.h: CURLOPT_CONNECT_TO sets a struct slist *, not a string + resolve: add error message when resolving using SIGALRM + + Closes #1066 -Daniel Stenberg (22 Apr 2016) -- contributors.sh: make --releasenotes implied +- GIT-INFO: remove the Mac 10.1-specific details - It got too annoying to type =) + There shouldn't be many devs out there anymore using such outdated macOS + versions. And it removes the dead link. + + Closes #1049 -- RELEASE-NOTES: synced with 3c1e84f5693d8093 +- RELEASE-NOTES: spellfix -- curl: make --ftp-create-dirs retry on failure +- RELEASE-NOTES: synced with 82720490628cb53a - The underlying libcurl option used for this feature is - CURLOPT_FTP_CREATE_MISSING_DIRS which has the ability to retry the dir - creation, but it was never set to do that by the command line tool. + 5 more fixes, 2 more contributors + +- [Tobias Stoeckmann brought this change] + + smb: properly check incoming packet boundaries - Now it does. + Not all reply messages were properly checked for their lengths, which + made it possible to access uninitialized memory (but this does not lead + to out of boundary accesses). - Bug: https://curl.haxx.se/mail/archive-2016-04/0021.html - Reported-by: John Wanghui - Help-by: Leif W + Closes #1052 -- [Henrik Gaßmann brought this change] +- test557: verify printf() with 128 and 129 arguments - winbuild: add mbedtls support +- mprintf: return error on too many arguments - Add WITH_MBEDTLS option. Make WITH_SSL, WITH_MBEDTLS and ENABLE_WINSSL - options mutual exclusive. + 128 arguments should be enough for everyone + +- ftp: fix Curl_ftpsendf() - Closes #606 + ... it no longer takes printf() arguments since it was only really taken + advantage by one user and it was not written and used in a safe + way. Thus the 'f' is removed from the function name and the proto is + changed. + + Although the current code wouldn't end up in badness, it was a risk that + future changes could end up springf()ing too large data or passing in a + format string inadvertently. -- KNOWN_BUGS: fixed "5.6 Improper use of Autoconf cache variables" +- formpost: avoid silent snprintf() truncation - As of commit d9f3b365a3 + The previous use of snprintf() could make libcurl silently truncate some + input data and not report that back on overly large input, which could + make data get sent over the network in a bad format. + + Example: + + $ curl --form 'a=b' -H "Content-Type: $(perl -e 'print "A"x4100')" -- [Irfan Adilovic brought this change] +- TODO: build: Enable PIE and RELRO by default - configure: ac_cv_ -> curl_cv_ for write-only vars +- TODO: Support better than MD5 hostkey hash (for ssh) + +- [Daniel Gustafsson brought this change] + + tests: Fix a small typo in the tests README (#1060) - These configure vars are modified in a curl-specific way but never - evaluated or loaded from cache, even though they are designated as - _cv_. We could either implement proper AC_CACHE_CHECKs for them, or - remove them completely. - - Fixes #603 as ac_cv_func_gethostbyname is no longer clobbered, and - AC_CHECK_FUNC(gethostbyname...) will no longer spuriously succeed after - the first configure run with caching. - - `ac_cv_func_strcasecmp` is curious, see #770. + The subdirectory for logs in tests/ is named log/ without an 's' + at the end. + +- TODO: Introduce --fail-fast to exit on first transfer fail - `eval "ac_cv_func_$func=yes"` can still cause problems as it works in - tandem with AC_CHECK_FUNCS and then potentially modifies its result. It - would be best to rewrite this test to use a new CURL_CHECK_FUNCS macro, - which works the same as AC_CHECK_FUNCS but relies on caching the values - of curl_cv_func_* variables, without modifiying ac_cv_func_*. + See #1054 -- [Irfan Adilovic brought this change] +- TODO: Leave secure cookies alone - configure: ac_cv_ -> curl_cv_ for r/w vars +- [Rainer Müller brought this change] + + CURLOPT_DEBUGFUNCTION.3: unused argument warning (#1056) - These configure vars are modified in a curl-specific way and modified by - the configure process, but are never loaded from cache, even though they - are designated as _cv_. We should implement proper AC_CACHE_CHECKs for - them eventually. + The 'userp' argument is unused in this example code. -- [Irfan Adilovic brought this change] +- TODO: TCP Fast Open for windows - configure: ac_cv_func_clock_gettime -> curl_... - - This variable must not be cached in its current form, as any cached - information will prevent the next configure run from determining the - correct LIBS needed for the function. Thus, rename prefix `ac_cv_` to - just `curl_`. +- RELEASE-NOTES: synced with 8fd2a754f0de -- [Irfan Adilovic brought this change] +- CURLOPT_KEEP_SENDING_ON_ERROR.3: mention when it is added - configure: ac_cv_ -> curl_cv_ for all cached vars +- memdup: use 'void *' as return and source type + +- TODO: Add easy argument to formpost functions + +- formpost: trying to attach a directory no longer crashes - This was automated by: + The error path would previously add a freed entry to the linked list. - sed -b -i -f <(ack -A1 AC_CACHE_CHECK | \ - ack -o 'ac_cv_.*?\b' | \ - sort -u | xargs -n1 bash -c \ - 'echo "s/$0/curl_cv_${0#ac_cv_}/g"') \ - $(git ls-files) + Reported-by: Toby Peterson - This only changed the prefix for 16 variables actually checked with - AC_CACHE_CHECK. + Fixes #1053 -- openssl: builds with OpenSSL 1.1.0-pre5 +- [Sergei Kuzmin brought this change] + + cookies: same domain handling changed to match browser behavior - The RSA, DSA and DH structs are now opaque and require use of new APIs + Cokie with the same domain but different tailmatching property are now + considered different and do not replace each other. If header contains + following lines then two cookies will be set: Set-Cookie: foo=bar; + domain=.foo.com; expires=Thu Mar 3 GMT 8:56:27 2033 Set-Cookie: foo=baz; + domain=foo.com; expires=Thu Mar 3 GMT 8:56:27 2033 - Fixes #763 - -Steve Holme (20 Apr 2016) -- url.c: Prefer we don't use explicit NULLs in conditions + This matches Chrome, Opera, Safari, and Firefox behavior. When sending + stored tokens to foo.com Chrome, Opera, Firefox store send them in the + stored order, while Safari pre-sort the cookies. - Fixed commit fa5fa65a30 to not use NULLs in if condition. + Closes #1050 -Daniel Stenberg (20 Apr 2016) -- [Isaac Boukris brought this change] +- [Stephen Brokenshire brought this change] - NTLM: check for NULL pointer before deferencing + FAQ: Fix typos in section 5.14 (#1047) - At ConnectionExists, both check->proxyuser and check->proxypasswd - could be NULL, so make sure to check first. - - Fixes #765 + Type required for YourClass::func C++ function (using size_t in line + with the documentation for CURLOPT_WRITEFUNCTION) and missing second + colon when specifying the static function for CURLOPT_WRITEFUNCTION. -- [Karlson2k brought this change] +- [Sebastian Mundry brought this change] - tests: added test1517 - - ... for checking ability to receive full HTTP response when POST request - is used with slow read callback function. + KNOWN_BUGS: Fix typos in section 5.8. - This test checks for bug #657 and verifies the work-around from - 72d5e144fbc6. + Closes #1046 + +- [mundry brought this change] + + CONTRIBUTE.md: Fix typo in 'About pull requests' section. (#1045) + +- curl.1: --trace supports % for sending to stderr! + +- KNOWN_BUGS: 5.8 configure finding libs in wrong directory + +Dan Fandrich (24 Sep 2016) +- configure: Fixed builds with libssh2 in a custom location - Closes #720 + A libssh2 library in the standard system location was being used in + preference to the desired one while linking. -- [Karlson2k brought this change] +Daniel Stenberg (23 Sep 2016) +- SECURITY: remove the top ascii logo - sendf.c: added ability to call recv() before send() as workaround +Michael Kaufmann (22 Sep 2016) +- New libcurl option to keep sending on error - WinSock destroys recv() buffer if send() is failed. As result - server - response may be lost if server sent it while curl is still sending - request. This behavior noticeable on HTTP server short replies if - libcurl use several send() for request (usually for POST request). - To workaround this problem, libcurl use recv() before every send() and - keeps received data in intermediate buffer for further processing. + Add the new option CURLOPT_KEEP_SENDING_ON_ERROR to control whether + sending the request body shall be completed when the server responds + early with an error status code. - Fixes: #657 - Closes: #668 - -Kamil Dudka (19 Apr 2016) -- connect: make sure that rc is initialized in singleipconnect() + This is suitable for manual NTLM authentication. - This commit fixes a Clang warning introduced in curl-7_48_0-190-g8f72b13: + Reviewed-by: Jay Satiro - Error: CLANG_WARNING: - lib/connect.c:1120:11: warning: The right operand of '==' is a garbage value - 1118| } - 1119| - 1120|-> if(-1 == rc) - 1121| error = SOCKERRNO; - 1122| } - -Daniel Stenberg (19 Apr 2016) -- make/checksrc: use $srcdir, not $top_srcdir + Closes https://github.com/curl/curl/pull/904 -- src/checksrc.whitelist: removed +Kamil Dudka (22 Sep 2016) +- nss: add chacha20-poly1305 cipher suites if supported by NSS -- tool_operate: switch to inline checksrc ignore +- nss: add cipher suites using SHA384 if supported by NSS -- lib/checksrc.whitelist: not needed anymore +- nss: fix typo in ecdhe_rsa_null cipher suite string - ... as checksrc now skips comments + As it seems to be a rarely used cipher suite (for securely established + but _unencrypted_ connections), I believe it is fine not to provide an + alias for the misspelled variant. -- vtls.h: remove a space before semicolon +Jay Satiro (21 Sep 2016) +- docs: Remove that --proto is just used for initial retrieval - ... that the new checksrc detected + .. and add that --proto-redir and CURLOPT_REDIR_PROTOCOLS do not + override protocols denied by --proto and CURLOPT_PROTOCOLS. + + - Add a test to enforce: --proto deny must override --proto-redir allow + + Closes https://github.com/curl/curl/pull/1031 -- darwinssl: removed commented out code +Daniel Stenberg (21 Sep 2016) +- dist: add CurlSymbolHiding.cmake to the tarball + + Follow-up to 6140dfcf3e784 + + Reported-by: Alexander Sinditskiy -- http_chunks: removed checksrc disable +- curl_global_cleanup.3: don't unload the lib with sub threads running - ... since checksrc now skips comments + Discussed in #997 + + Assisted-by: Jay Satiro -- imap: inlined checksrc disable instead of whitelist edit +- MAIL-ETIQUETTE: language -- checksrc: taught to skip comments +Jay Satiro (20 Sep 2016) +- easy: Reset all statistical session info in curl_easy_reset - ... but output non-stripped version of the line, even if that then can - make the script identify the wrong position in the line at - times. Showing the line stripped (ie without comments) is just too - surprising. + Bug: https://github.com/curl/curl/issues/1017 + Reported-by: Jeroen Ooms -- opts/Makefile.am: list all docs file one by one +Daniel Stenberg (19 Sep 2016) +- RELEASE-NOTES: synced with 79607eec51055 + +Jay Satiro (19 Sep 2016) +- [Daniel Gustafsson brought this change] + + darwinssl: Fix typo in comment - ... to make it easier to add lines in patches that won't just break all - other patches trying to add lines too. + Closes https://github.com/curl/curl/pull/1028 -- curl_easy_setopt.3: mention CURLOPT_TCP_FASTOPEN +Daniel Stenberg (19 Sep 2016) +- [Bernard Spil brought this change] -- RELEASE-NOTES: synced with 03de4e4b219 + libressl: fix version output - (since we just merged two major features) + LibreSSL defines `OPENSSL_VERSION_NUMBER` as `0x20000000L` for all + versions returning `LibreSSL/2.0.0` for any LibreSSL version. + + This change provides a local OpenSSL_version_num function replacement + returning LIBRESSL_VERSION_NUMBER instead. + + Closes #1029 -- [Alessandro Ghedini brought this change] +- [rugk brought this change] - connect: implement TCP Fast Open for Linux + TODO: Add PINNEDPUBLICKEY - HPKP compatibility, HSTS & HPKP - Closes #660 + Closes #1025 + Closes #1026 + Closes #1027 -- [Alessandro Ghedini brought this change] +- openssl: don't call ERR_remote_thread_state on >= 1.1.0 + + Follow-up fix to d9321562 - tool: add --tcp-fastopen option +- openssl: don’t call CRYTPO_cleanup_all_ex_data + + The OpenSSL function CRYTPO_cleanup_all_ex_data() cannot be called + multiple times without crashing - and other libs might call it! We + basically cannot call it without risking a crash. The function is a + no-op since OpenSSL 1.1.0. + + Not calling this function only risks a small memory leak with OpenSSL < + 1.1.0. + + Bug: https://curl.haxx.se/mail/lib-2016-09/0045.html + Reported-by: Todd Short -- [Alessandro Ghedini brought this change] +- TODO: Support SSLKEYLOGFILE - connect: implement TCP Fast Open for OS X +Jay Satiro (18 Sep 2016) +- CURLOPT_PINNEDPUBLICKEY.3: fix the AVAILABILITY formatting -- [Alessandro Ghedini brought this change] +Nick Zitzmann (18 Sep 2016) +- darwinssl: disable RC4 cipher-suite support + + RC4 was a nice alternative to CBC back in the days of BEAST, but it's insecure and obsolete now. - url: add CURLOPT_TCP_FASTOPEN option +- configure: change "iOS/Mac OS X native" to "Apple OS native" + + Since I first wrote that text, Apple introduced tvOS and watchOS, and renamed "Mac OS X" to "macOS." Let's make the text a little more inclusive, since curl can be built for all four operating systems. -- checksrc: pass on -D so the whitelists are found correctly +Jay Satiro (18 Sep 2016) +- test2048: fix url -- configure: remove check for libresolve +- examples/imap-append: Set size of data to be uploaded - 'strncasecmp' was once provided by libresolv (no trailing e) for SunOS, - but this check is broken and most likely adds nothing useful. Removing - now. + Prior to this commit this example failed with error + 'Cannot APPEND with unknown input file size'. - Reported-by: Irfan Adilovic + Bug: https://github.com/curl/curl/issues/1008 + Reported-by: lukaszgn@users.noreply.github.com - Discussed in #770 + Closes https://github.com/curl/curl/pull/1011 -- scripts/make: use $(EXEEXT) for executables +Daniel Stenberg (16 Sep 2016) +- [Tony Kelman brought this change] + + LICENSE-MIXING.md: update with mbedTLS dual licensing - Reported-by: bodop + Recent versions of mbedTLS are available under either Apache 2.0 or GPL + 2.0, see https://tls.mbed.org/how-to-get - Fixes #771 + Closes #1019 -- includes: avoid duplicate memory callback typdefs even harder +- KNOWN_BUGS: chunked-encoded requests with HTTP/2 is fixed -- checksrc/makefile.am: use $top_srcdir to find source files +- http2: debug ouput sent HTTP/2 request headers + +- http: accept "Transfer-Encoding: chunked" for HTTP/2 as well - ... to properly support out of source tree builds. + ... but don't send the actual header over the wire as it isn't accepted. + Chunked uploading is still triggered using this method. + + Fixes #1013 + Fixes #662 -- RELEASE-NOTES: synced with 26ec93dd6aeba8dfb5 +- openssl: fix per-thread memory leak usiong 1.0.1 or 1.0.2 + + OpenSSL 1.0.1 and 1.0.2 build an error queue that is stored per-thread + so we need to clean it when easy handles are freed, in case the thread + will be killed in which the easy handle was used. All OpenSSL code in + libcurl should extract the error in association with the error already + so clearing this queue here should be harmless at worst. + + Fixes #964 -- opts: fix option references missing (section) +- RELEASE-NOTES: reset and go toward 7.51.0 (again) -- [Michael Kaufmann brought this change] +Version 7.50.3 (14 Sep 2016) - news: CURLOPT_CONNECT_TO and --connect-to - - Makes curl connect to the given host+port instead of the host+port found - in the URL. +Daniel Stenberg (14 Sep 2016) +- THANKS: updated with curl 7.50.3 contributors -- makefile.vc6: use d suffix on debug object - - To allow both release and debug builds in parallel. - - Reported-by: Rod Widdowson - - Fixes #769 +- RELEASE-NOTES: curl 7.50.3 -Jay Satiro (12 Apr 2016) -- http2: Use size_t type for data drain count - - Ref: https://github.com/curl/curl/issues/659 - Ref: https://github.com/curl/curl/pull/663 +- test1605: verify negative input lengths to (un)escape functions -- http2: Improve header parsing +- curl_easy_unescape: deny negative string lengths as input - - Error if a header line is larger than supported. + CVE-2016-7167 - - Warn if cumulative header line length may be larger than supported. + Bug: https://curl.haxx.se/docs/adv_20160914.html + +- curl_easy_escape: deny negative string lengths as input - - Allow spaces when parsing the path component. + CVE-2016-7167 - - Make sure each header line ends in \r\n. This fixes an out of bounds. + Bug: https://curl.haxx.se/docs/adv_20160914.html + +- curl: make --create-dirs on windows grok both forward and backward slashes - - Disallow header continuation lines until we decide what to do. + Reported-by: Ryan Scott - Ref: https://github.com/curl/curl/issues/659 - Ref: https://github.com/curl/curl/pull/663 + Fixes #1007 -- http2: Add Curl_http2_strerror for HTTP/2 error codes - - Ref: https://github.com/curl/curl/issues/659 - Ref: https://github.com/curl/curl/pull/663 +- RELEASE-NOTES: synced with 665694979b6 -- [Tatsuhiro Tsujikawa brought this change] +- [Tony Kelman brought this change] - http2: Don't increment drain when one header field is received + mbedtls: switch off NTLM in build if md4 isn't available - Sicne we write header field in temporary location, not in the memory - that upper layer provides, incrementing drain should not happen. + NTLM support with mbedTLS was added in 497e7c9 but requires that mbedTLS + is built with the MD4 functions available, which it isn't in default + builds. This now adapts if the funtion isn't there and builds libcurl + without NTLM support if so. - Ref: https://github.com/curl/curl/issues/659 - Ref: https://github.com/curl/curl/pull/663 + Fixes #1004 -- [Tatsuhiro Tsujikawa brought this change] +Jay Satiro (12 Sep 2016) +- CODE_STYLE: fix long-line guideline + + - Change maximum allowed line length from 80 to 79. - http2: Ensure that http2_handle_stream_close is called +- CODE_STYLE: add column alignment section - This commit ensures that streams which was closed in on_stream_close - callback gets passed to http2_handle_stream_close. Previously, this - might not happen. To achieve this, we increment drain property to - forcibly call recv function for that stream. + Note that since the added examples are for column alignment I had to + encapsulate with ~~~c markdown to preserve their alignment. + +Peter Wu (11 Sep 2016) +- cmake: fix curl-config --static-libs - To more accurately check that we have no pending event before shutting - down HTTP/2 session, we sum up drain property into - http_conn.drain_total. We only shutdown session if that value is 0. + The `curl-config --static-libs` command should not output paths like + -l/usr/lib/libssl.so, instead print the absolute path without `-l`. - With this commit, when stream was closed before reading response - header fields, error code CURLE_HTTP2_STREAM is returned even if - HTTP/2 level error is NO_ERROR. This signals the upper layer that - stream was closed by error just like TCP connection close in HTTP/1. + This also removes the confusing message "Static linking is broken" which + was printed because curl-config --static-libs was disfunctional even + though the static libcurl.a library works properly. - Ref: https://github.com/curl/curl/issues/659 - Ref: https://github.com/curl/curl/pull/663 - -- [Tatsuhiro Tsujikawa brought this change] + Fixes https://github.com/curl/curl/issues/841 - http2: Process paused data first before tear down http2 session +Daniel Stenberg (11 Sep 2016) +- http: refuse to pass on response body with NO_NODY was set - This commit ensures that data from network are processed before HTTP/2 - session is terminated. This is achieved by pausing nghttp2 whenever - different stream than current easy handle receives data. + ... like when a HTTP/0.9 response comes back without any headers at all + and just a body this now prevents that body from being sent to the + callback etc. - This commit also fixes the bug that sometimes processing hangs when - multiple HTTP/2 streams are multiplexed. + Adapted test 1144 to verify. - Ref: https://github.com/curl/curl/issues/659 - Ref: https://github.com/curl/curl/pull/663 + Fixes #973 + + Assisted-by: Ray Satiro -- [Tatsuhiro Tsujikawa brought this change] +- RELEASE-NOTES: synced with 257bf3ac67eb6 - http2: Check session closure early in http2_recv +Jakub Zakrzewski (10 Sep 2016) +- CMake: Don't build unit tests if private symbols are hidden - Ref: https://github.com/curl/curl/issues/659 - Ref: https://github.com/curl/curl/pull/663 + This only excludes building unit tests from default build ( 'all' Make + target or "Build Solution" in VisualStudio). The projects and Make + targets will still be generated and shown in supporting IDEs. + + Fixes https://github.com/curl/curl/issues/981 + Reported-by: Randy Armstrong + + Closes https://github.com/curl/curl/pull/990 -- [Tatsuhiro Tsujikawa brought this change] +- CMake: Try to (un-)hide private library symbols + + Detect support for compiler symbol visibility flags and apply those + according to CURL_HIDDEN_SYMBOLS option. + It should work true to the autotools build except it tries to unhide + symbols on Windows when requested and prints warning if it fails. + + Ref: https://github.com/curl/curl/issues/981#issuecomment-242665951 + Reported-by: Daniel Stenberg - http2: Add handling stream level error +Daniel Stenberg (9 Sep 2016) +- openssl: fix bad memory free (regression) - Previously, when a stream was closed with other than NGHTTP2_NO_ERROR - by RST_STREAM, underlying TCP connection was dropped. This is - undesirable since there may be other streams multiplexed and they are - very much fine. This change introduce new error code - CURLE_HTTP2_STREAM, which indicates stream error that only affects the - relevant stream, and connection should be kept open. The existing - CURLE_HTTP2 means connection error in general. + ... by partially reverting f975f06033b1. The allocation could be made by + OpenSSL so the free must be made with OPENSSL_free() to avoid problems. - Ref: https://github.com/curl/curl/issues/659 - Ref: https://github.com/curl/curl/pull/663 + Reported-by: Harold Stuart + Fixes #1005 -Daniel Stenberg (11 Apr 2016) -- http2: drain the socket better... +- http2: support > 64bit sized uploads - ... but ignore EAGAIN if the stream has ended so that we don't end up in - a loop. This is a follow-up to c8ab613 in order to avoid the problem - d261652 was made to fix. + ... by making sure we don't count down the "upload left" counter when the + uploaded size is unknown and then it can be allowed to continue forever. - Reported-by: Jay Satiro - Clues-provided-by: Tatsuhiro Tsujikawa + Fixes #996 + +Jay Satiro (7 Sep 2016) +- errors: new alias CURLE_WEIRD_SERVER_REPLY (8) - Discussed in #750 + Since we're using CURLE_FTP_WEIRD_SERVER_REPLY in imap, pop3 and smtp as + more of a generic "failed to parse" introduce an alias without FTP in + the name. + + Closes https://github.com/curl/curl/pull/975 -- KNOWN_BUGS: added info for "Hangs with PolarSSL" +Daniel Stenberg (7 Sep 2016) +- bump: toward 7.51.0 -- KNOWN_BUGS: 1.9 HTTP/2 frames while in the connection pool kill reuse - - Closes #750 +- HISTORY: remove ascii logo to render nicer on web -- build: include scripts/ in the dist +- curl: whitelist use of strtok() in non-threaded context -Steve Holme (9 Apr 2016) -- CURLOPT_SOCKS5_GSSAPI_SERVICE: Merged with CURLOPT_PROXY_SERVICE_NAME +- checksrc: detect strtok() use - As these two options provide identical functionality, the former for - SOCK5 proxies and the latter for HTTP proxies, merged the two options - together. + ... as that function slipped through once before. + +GitHub (7 Sep 2016) +- [Viktor Szakats brought this change] + + mk-ca-bundle.pl: use SHA256 instead of SHA1 - As such CURLOPT_SOCKS5_GSSAPI_SERVICE is marked as deprecated as of - 7.49.0. + This hash is used to verify the original downloaded certificate bundle + and also included in the generated bundle's comment header. Also + rename related internal symbols to algorithm-agnostic names. -- urldata: Use bool for socks5_gssapi_nec as it is a flag +Version 7.50.2 (7 Sep 2016) + +Daniel Stenberg (7 Sep 2016) +- RELEASE-NOTES: curl 7.50.2 release + +- THANKS: updated for 7.50.2 + +Jay Satiro (6 Sep 2016) +- [Gaurav Malhotra brought this change] + + openssl: fix CURLINFO_SSL_VERIFYRESULT - This value is set to TRUE or FALSE so should be a bool and not a long. + CURLINFO_SSL_VERIFYRESULT does not get the certificate verification + result when SSL_connect fails because of a certificate verification + error. + + This fix saves the result of SSL_get_verify_result so that it is + returned by CURLINFO_SSL_VERIFYRESULT. + + Closes https://github.com/curl/curl/pull/995 -- url: Ternary operator code style changes +Daniel Stenberg (6 Sep 2016) +- [Daniel Gustafsson brought this change] -- CODE_STYLE: Added ternary operator example to 'Space around operators' + darwinssl: test for errSecSuccess in PKCS12 import rather than noErr (#993) - Following conversation on the libcurl mailing list. + While noErr and errSecSuccess are defined as the same value, the API + documentation states that SecPKCS12Import() returns errSecSuccess if + there were no errors in importing. Ensure that a future change of the + defined value doesn't break (however unlikely) and be consistent with + the API docs. -- sasl: Fixed compilation errors from commit 9d89a0387 +- [Daniel Gustafsson brought this change] + + docs: Fix link to CONTRIBUTE in Github contribution guidelines (#994) + +- [Marcel Raad brought this change] + + openssl: Fix compilation with OPENSSL_API_COMPAT=0x10100000L - ...when GSS-API or Windows SSPI are not used. + With OPENSSL_API_COMPAT=0x10100000L (OpenSSL 1.1 API), the cleanup + functions are unavailable (they're no-ops anyway in OpenSSL 1.1). The + replacements for SSL_load_error_strings, SSLeay_add_ssl_algorithms, and + OpenSSL_add_all_algorithms are called automatically [1][2]. SSLeay() is + now called OpenSSL_version_num(). + + [1]: https://www.openssl.org/docs/man1.1.0/ssl/OPENSSL_init_ssl.html + [2]: https://www.openssl.org/docs/man1.1.0/crypto/OPENSSL_init_crypto.html + + Closes #992 -- url: Corrected comments following 9d89a0387 +- RELEASE-NOTES: synced with 3d4c0c8b9bc1d -- docs: Added clarification following commit 9d89a0387 +- http2: return EOF when done uploading without known size + + Fixes #982 -- Makefile: Fixed echo of checksrc check +- http2: skip the content-length parsing, detect unknown size -- checksrc: Fix issue with the autobuilds not picking up the whitelist +- http2: minor white space edit -- checksrc: Added missing vauth and vtls directories +- http2: use named define instead of magic constant in read callback -- ftp/imap/pop3/smtp: Allow the service name to be overridden +- [Craig Davison brought this change] + + configure: make the cpp -P detection not clobber CPPFLAGS - Allow the service name to be overridden for DIGIST-MD5 and Kerberos 5 - authentication in FTP, IMAP, POP3 and SMTP. + CPPPFLAGS is now CPPPFLAG. Fixes CURL_CHECK_DEF. + + Fixes #958 -- http_negotiate: Calculate service name and proxy service name locally +- [Olivier Brunel brought this change] + + speed caps: not based on average speeds anymore - Calculate the service name and proxy service names locally, rather than - in url.c which will allow for us to support overriding the service name - for other protocols such as FTP, IMAP, POP3 and SMTP. + Speed limits (from CURLOPT_MAX_RECV_SPEED_LARGE & + CURLOPT_MAX_SEND_SPEED_LARGE) were applied simply by comparing limits + with the cumulative average speed of the entire transfer; While this + might work at times with good/constant connections, in other cases it + can result to the limits simply being "ignored" for more than "short + bursts" (as told in man page). + + Consider a download that goes on much slower than the limit for some + time (because bandwidth is used elsewhere, server is slow, whatever the + reason), then once things get better, curl would simply ignore the limit + up until the average speed (since the beginning of the transfer) reached + the limit. This could prove the limit useless to effectively avoid + using the entire bandwidth (at least for quite some time). + + So instead, we now use a "moving starting point" as reference, and every + time at least as much as the limit as been transferred, we can reset + this starting point to the current position. This gets a good limiting + effect that applies to the "current speed" with instant reactivity (in + case of sudden speed burst). + + Closes #971 -- ROADMAP: Updated following the move of the authentication code +- HISTORY.md: the multi socket was put in the wrong year! -Patrick Monnerat (8 Apr 2016) -- KNOWN_BUGS: openldap hangs. TODO: binary SASL. +- [Mark Hamilton brought this change] -Daniel Stenberg (8 Apr 2016) -- KNOWN_BUGS: 5.6 Improper use of Autoconf cache variables + tool_helpers.c: fix comment typo (#989) + +- [Mark Hamilton brought this change] + + libtest/test.h: fix typo (#988) + +- CURLMOPT_PIPELINING.3: language + +- CURLMOPT_PIPELINING.3: extended and clarified - Closes #603 + Especially in regards to the multiplexing part. -- KNOWN_BUGS: 11.2 error buffer not set... +Steve Holme (31 Aug 2016) +- curl_sspi.c: Updated function description comments - Closes #544 + * Added description to Curl_sspi_free_identity() + * Added parameter and return explanations to Curl_sspi_global_init() + * Added parameter explaination to Curl_sspi_global_cleanup() -- KNOWN_BUGS: 11.1 Curl leaks .onion hostnames in DNS +- README: Corrected the supported Visual Studio versions - Closes #543 + Missed from commit 8356022d17. -- KNOWN_BUGS: 1.8 DNS timing is wrong for HTTP redirects +- KNOWN_BUGS: Move the Visual Studio project shortcomings from local README + +- KNOWN_BUGS: Expand 6.4 to include Kerberos V5 - Closes #522 + ...and discuss a possible solution. -- TODO: HTTP/2 "prior knowledge" is implemented! +Daniel Stenberg (30 Aug 2016) +- connect: fix #ifdefs for debug versions of conn/streamclose() macros + + CURLDEBUG is for the memory debugging + + DEBUGBUILD is for the extra debug stuff + + Pointed-out-by: Steve Holme -- [Damien Vielpeau brought this change] +- KNOWN_BUGS: mention some cmake "support gaps" - mbedtls: fix MBEDTLS_DEBUG builds +Nick Zitzmann (28 Aug 2016) +- darwinssl: add documentation stating that the --cainfo option is intended for backward compatibility only + + In other news, I changed one other reference to "Mac OS X" in the documentation (that I previously wrote) to say "macOS" instead. -- mbedtls: implement and provide *_data_pending() +Daniel Stenberg (28 Aug 2016) +- http2: return CURLE_HTTP2_STREAM for unexpected stream close - ... as otherwise we might get stuck thinking there's no more data to - handle. + Follow-up to c3e906e9cd0f, seems like a more appropriate error code - Reported-by: Damien Vielpeau + Suggested-by: Jay Satiro + +- [Tatsuhiro Tsujikawa brought this change] + + http2: handle closed streams when uploading - Fixes #737 + Fixes #986 -- mbedtls: follow-up for the previous commit +- http2: make sure stream errors don't needlessly close the connection + + With HTTP/2 each transfer is made in an indivial logical stream over the + connection, making most previous errors that caused the connection to get + forced-closed now instead just kill the stream and not the connection. + + Fixes #941 -- mbedtls.c: name space pollution fix, Use 'Curl_' +- Curl_verify_windows_version: minor edit to avoid compiler warnings + + ... instead of if() before the switch(), add a default to the switch so + that the compilers don't warn on "warning: enumeration value + 'PLATFORM_DONT_CARE' not handled in switch" anymore. -- mbedtls.c: changed private prefix to mbed_ +Steve Holme (27 Aug 2016) +- RELEASE-NOTES: Added missing fix from commit 15592143f + +Jay Satiro (26 Aug 2016) +- schannel: Disable ALPN for Wine since it is causing problems - mbedtls_ is the prefix used by the mbedTLS library itself so we should - avoid using that for our private functions. + - Disable ALPN on Wine. + + - Don't pass input secbuffer when ALPN is disabled. + + When ALPN support was added a change was made to pass an input secbuffer + to initialize the context. When ALPN is enabled the buffer contains the + ALPN information, and when it's disabled the buffer is empty. In either + case this input buffer caused problems with Wine and connections would + not complete. + + Bug: https://github.com/curl/curl/issues/983 + Reported-by: Christian Fillion -- mbedtls.h: fix compiler warnings +Kamil Dudka (26 Aug 2016) +- [Peter Wang brought this change] -- Revert "winbuild: trying to set some files eol=crlf for git" + nss: work around race condition in PK11_FindSlotByName() - This reverts commit 9c08b4f1e7eced5a4d3782a3e0daa484c9d77d21. + Serialise the call to PK11_FindSlotByName() to avoid spurious errors in + a multi-threaded environment. The underlying cause is a race condition + in nssSlot_IsTokenPresent(). - Didn't help. Caused problems. + Bug: https://bugzilla.mozilla.org/1297397 - Fixes #756 + Closes #985 -- curl.1: use example.com more +- nss: refuse previously loaded certificate from file - Make (most) example snippets use the example.com domain instead of the - random ones picked and used before. Some of those were probably - legitimate sites and some not. example.com is designed for this purpose. + ... when we are not asked to use a certificate from file + +Daniel Stenberg (26 Aug 2016) +- ftp_done: remove dead code + +- TLS: random file/egd doesn't have to match for conn reuse +- test161: add comment for the exit code + +Dan Fandrich (26 Aug 2016) +- test219: Add http as a required feature + +Daniel Stenberg (25 Aug 2016) - [Michael Kaufmann brought this change] - HTTP2: Add a space character after the status code + HTTP: stop parsing headers when switching to unknown protocols + + - unknown protocols probably won't send more headers (e.g. WebSocket) + - improved comments and moved them to the correct case statements + + Closes #899 + +- openssl: make build with 1.1.0 again + + synced with OpenSSL git master commit cc06906707 + +- INTERNALS: fix title + +- configure: detect zlib with our pkg-config macros + + ... instead of relying on the pkg-config autoconf macros to be present. + + Fixes #972 (again...) + +Jay Satiro (25 Aug 2016) +- http2: Remove incorrect comments + + .. also remove same from scp + +Daniel Stenberg (23 Aug 2016) +- [Ales Novak brought this change] + + ftp: fix wrong poll on the secondary socket + + When we're uploading using FTP and the server issues a tiny pause + between opening the connection to the client's secondary socket, the + client's initial poll() times out, which leads to second poll() which + does not wait for POLLIN on the secondary socket. So that poll() also + has to time out, creating a long (200ms) pause. + + This patch adds the correct flag to the secondary socket, making the + second poll() correctly wait for the connection there too. + + Signed-off-by: Ales Novak + + Closes #978 + +- RELEASE-NOTES: synced with 95ded2c56 + +- configure: make it work without PKG_CHECK_MODULES + + With commit c2f9b78 we added a new dependency on pkg-config for + developers which may be unwanted. This change make the configure script + still work as before if pkg-config isn't installed, it'll just use the + old zlib detection logic without pkg-config. + + Reported-by: Marc Hörsken + + Fixes #972 + +Marc Hoersken (21 Aug 2016) +- Revert "KNOWN_BUGS: SOCKS proxy not working via IPv6" + + This reverts commit 9cb1059f92286a6eb5d28c477fdd3f26aed1d554. + + As discussed in #835 SOCKS5 supports IPv6 proxies and destinations. + +Daniel Stenberg (21 Aug 2016) +- [Marco Deckel brought this change] + + win: Basic support for Universal Windows Platform apps + + Closes #820 + +Steve Holme (21 Aug 2016) +- sasl: Don't use GSSAPI authentication when domain name not specified + + Only choose the GSSAPI authentication mechanism when the user name + contains a Windows domain name or the user is a valid UPN. + + Fixes #718 + +- vauth: Added check for supported SSPI based authentication mechanisms + + Completing commit 00417fd66c and 2708d4259b. + +- http.c: Remove duplicate (authp->avail & CURLAUTH_DIGEST) check + + From commit 2708d4259b. + +Marc Hoersken (20 Aug 2016) +- socks.c: display the hostname returned by the SOCKS5 proxy server - The space character after the status code is mandatory, even if the - reason phrase is empty (see RFC 7230 section 3.1.2) + Instead of displaying the requested hostname the one returned + by the SOCKS5 proxy server is used in case of connection error. + The requested hostname is displayed earlier in the connection sequence. - Closes #755 + The upper-value of the port is moved to a temporary variable and + replaced with a 0-byte to make sure the hostname is 0-terminated. -- [Viktor Szakats brought this change] +Steve Holme (20 Aug 2016) +- urldata.h: Corrected comment for httpcode which is also populated by SMTP + + As of 7.25.0 and commit 5430007222. - URLs: change http to https in many places +Marc Hoersken (20 Aug 2016) +- socks.c: use Curl_printable_address in SOCKS5 connection sequence - Closes #754 + Replace custom string formatting with Curl_printable_address. + Add additional debug and error output in case of failures. -- winbuild: trying to set some files eol=crlf for git +- socks.c: align SOCKS4 connection sequence with SOCKS5 - Thinking it might help to apply patches etc with git. + Calling sscanf is not required since the raw IPv4 address is + available and the protocol can be detected using ai_family. -- [Theodore Dubois brought this change] +Steve Holme (20 Aug 2016) +- http.c: Corrected indentation change from commit 2708d4259b + + Made by Visual Studio's auto-correct feature and missed by me in my own + code reviews! - curl.1: change example for -F +- http: Added calls to Curl_auth_is__supported() - It's a bad idea to send your passwords anywhere, especially over HTTP. - Modified example to send a picture instead. + Hooked up the HTTP authentication layer to query the new 'is mechanism + supported' functions when deciding what mechanism to use. - Fixes #752 + As per commit 00417fd66c existing functionality is maintained for now. -- KNOWN_BUGS: reorganized and cleaned up +Marc Hoersken (20 Aug 2016) +- socks.c: improve verbose output of SOCKS5 connection sequence + +- configure.ac: add missing quotes to PKG_CHECK_MODULES + +Steve Holme (20 Aug 2016) +- sasl: Added calls to Curl_auth_is__supported() - Now sorted into categories and organized in the same style we do the - TODO document. It will make each issue linked properly on the - https://curl.haxx.se/docs/knownbugs.html web page. + Hooked up the SASL authentication layer to query the new 'is mechanism + supported' functions when deciding what mechanism to use. - The sections should make it easier to find issues and issues related to - areas of the reader's specific interest. + For now existing functionality is maintained. -Jay Satiro (6 Apr 2016) -- KNOWN_BUGS: #95 curl in Windows can't handle Unicode arguments +Daniel Stenberg (19 Aug 2016) +- [Miroslav Franc brought this change] -Steve Holme (6 Apr 2016) -- KNOWN_BUGS: Use https://curl.haxx.se URL for github based issues + spnego_sspi: fix memory leak in case *outlen is zero (#970) -- CHECKSRC.md: Corrected some typos +- CURLMOPT_MAX_TOTAL_CONNECTIONS.3: mention it can also multiplex -- RELEASE-NOTES: Corrected last updated +Steve Holme (18 Aug 2016) +- vauth: Introduced Curl_auth_is__supported() functions - Included a summary of the checksrc.bat updates and combined two krb5 - changes as they should have been implemented at the same time. - -- vauth: Corrected a number of typos in comments + As Windows SSPI authentication calls fail when a particular mechanism + isn't available, introduced these functions for DIGEST, NTLM, Kerberos 5 + and Negotiate to allow both HTTP and SASL authentication the opportunity + to query support for a supported mechanism before selecting it. - Reported-by: Michael Osipov + For now each function returns TRUE to maintain compatability with the + existing code when called. -Jay Satiro (5 Apr 2016) -- KNOWN_BUGS: #94 IMAP custom requests use the LIST handler +Daniel Stenberg (18 Aug 2016) +- test1144: verify HEAD with body-only response + +Steve Holme (17 Aug 2016) +- RELEASE-PROCEDURE: Added some more future release dates - Bug: https://github.com/curl/curl/issues/536 - Reported-by: eXeC64@users.noreply.github.com + ...and removed some old ones -Daniel Stenberg (5 Apr 2016) -- KNOWN_BUGS: remove 68, 70 and 72. +Daniel Stenberg (17 Aug 2016) +- [David Woodhouse brought this change] + + curl: allow "pkcs11:" prefix for client certificates - Due to their age (we don't fully know if they actually remain) and lack - of detail - very few people will bother to find out what they're about - or work on them. If people truly still suffer from any of these, I - assume they will be reported again and then we'll deal with them. + RFC7512 provides a standard method to reference certificates in PKCS#11 + tokens, by means of a URI starting 'pkcs11:'. - 72. "Pausing pipeline problems." - https://curl.haxx.se/mail/lib-2009-07/0214.html + We're working on fixing various applications so that whenever they would + have been able to use certificates from a file, users can simply insert + a PKCS#11 URI instead and expect it to work. This expectation is now a + part of the Fedora packaging guidelines, for example. - 70. Problem re-using easy handle after call to curl_multi_remove_handle - https://curl.haxx.se/mail/lib-2009-07/0249.html + This doesn't work with cURL because of the way that the colon is used + to separate the certificate argument from the passphrase. So instead of - 68. "More questions about ares behavior". - https://curl.haxx.se/mail/lib-2009-08/0012.html - -- KNOWN_BUGS: remove 92 and 88, fixed - -- http2: fix connection reuse when PING comes after last DATA + curl -E 'pkcs11:manufacturer=piv_II;id=%01' … - It turns out the google GFE HTTP/2 servers send a PING frame immediately - after a stream ends and its last DATA has been received by curl. So if - we don't drain that from the socket, it makes the socket readable in - subsequent checks and libcurl then (wrongly) assumes the connection is - dead when trying to reuse the connection. + I instead need to invoke cURL with the colon escaped, like this: - Reported-by: Joonas Kuorilehto + curl -E 'pkcs11\:manufacturer=piv_II;id=%01' … - Discussed in #750 - -- multi: remove trailing space in debug output - -- RELEASE-NOTES: synced with 86e97b642fb - -- CHECKSRC.md: mention cmdline options, fix the bullet list - -- docs/CHECKSRC.md: initial version - -Steve Holme (3 Apr 2016) -- checksrc.bat: Added support for the examples - -Daniel Stenberg (3 Apr 2016) -- lib/src: fix the checksrc invoke + This is suboptimal because we want *consistency* — the URI should be + usable in place of a filename anywhere, without having strange + differences for different applications. - ... now works correctly when invoke from the root makefile - -- nw: please the stricter checksrc - -Steve Holme (3 Apr 2016) -- checksrc.bat: Re-enabled the tests directory by default + This patch therefore disables the processing in parse_cert_parameter() + when the string starts with 'pkcs11:'. It means you can't pass a + passphrase with an unescaped PKCS#11 URI, but there's no need to do so + because RFC7512 allows a PIN to be given as a 'pin-value' attribute in + the URI itself. - Following the recent changes to the source in the tests directory, - re-enabled tests for the default scan. - -- checksrc.bat: Added tests/server directory support + Also, if users are already using RFC7512 URIs with the colon escaped as + in the above example — even providing a passphrase for cURL to handling + instead of using a pin-value attribute, that will continue to work + because their string will start 'pkcs11\:' and won't match the check. - In addition to commit 83b174b3f0 and following the recent changes. - -- tests: Fixed header files to comply with our code style + What *does* break with this patch is the extremely unlikely case that a + user has a file which is in the local directory and literally named + just "pkcs11", and they have a passphrase on it. If that ever happened, + the user would need to refer to it as './pkcs11:' instead. -Daniel Stenberg (3 Apr 2016) -- make checksrc: run it in docs/examples too by default +- nss: make the global variables static -- docs/examples: remove spurious white spaces all over +- openssl: use regular malloc instead of OPENSSL_malloc - ... to please the new, slightly picker, checksrc.pl - -- tests: fix make checksrc in servers/ - -- tests: 'make checksrc' now checks server/ too - -- root/make: have checksrc run in include/curl too - -- tests/server: comply with our code style - -- code: style updates - -- checksrc: check for more malplaced spaces + This allows for better memmory debugging and torture tests. -- unit: make unit test source code checksrc compliant +- proxy: fix tests as follow-up to 93b0d907d5 + + This fixes tests that were added after 113f04e664b as the tests would + fail otherwise. + + We bring back "Proxy-Connection: Keep-Alive" now unconditionally to fix + regressions with old and stupid proxies, but we could possibly switch to + using it only for CONNECT or only for NTLM in a future if we want to + gradually reduce it. + + Fixes #954 + + Reported-by: János Fekete -- checksrc: run checksrc in tests when 'make checksrc' in root +- Revert "Proxy-Connection: stop sending this header by default" + + This reverts commit 113f04e664b16b944e64498a73a4dab990fe9a68. -- checksrc: remove debug crap +- CURLOPT_PROXY.3: unsupported schemes cause errors now + + Follow-up to a96319ebb9 (document the new behavior) -- lib557: allow too long lines +- tests/README: mention nghttpx for HTTP/2 tests -- checksrc: allow ignore of specific warnings within a file (section) +- README.md: add our CII Best Practices badge -- checksrc: add warning names, explain on help output +- proxy: polished the error message for unsupported schemes + + Follow up to a96319ebb93 -Steve Holme (3 Apr 2016) -- checksrc.bat: Disable tests by default until warnings are fixed +- test219: verify unsupported scheme for proxies get rejected -- checksrc.bat: Added support for the tests directory +- proxy: reject attempts to use unsupported proxy schemes + + I discovered some people have been using "https://example.com" style + strings as proxy and it "works" (curl doesn't complain) because curl + ignores unknown schemes and then assumes plain HTTP instead. + + I think this misleads users into believing curl uses HTTPS to proxies + when it doesn't. Now curl rejects proxy strings using unsupported + schemes instead of just ignoring and defaulting to HTTP. -- vauth: Removed the need for a separate GSS-API based SPN function +- RELEASE-NOTES: synced with b7ee5316c2fd5b -- curl_sasl: Fixed potential null pointer utilisation - - Although this should never happen due to the relationship between the - 'mech' and 'resp' variables, and the way they are allocated together, - it does cause problems for code analysis tools: +Marc Hoersken (14 Aug 2016) +- socks.c: Correctly calculate position of port in response packet - V595 The 'mech' pointer was utilized before it was verified against - nullptr. Check lines: 376, 381. curl_sasl.c 376 + Third commit to fix issue #944 regarding SOCKS5 error handling. - Bug: https://github.com/curl/curl/issues/745 - Reported-by: Alexis La Goutte + Reported-by: David Kalnischkies -- spnego: Small code tidy up +- socks.c: Do not modify and invalidate calculated response length - * Prefer dereference of string pointer rather than strlen() - * Free challenge pointer in one place - * Additional comments - -- krb5: Small code tidy up + Second commit to fix issue #944 regarding SOCKS5 error handling. - * Prefer dereference of string pointer rather than strlen() - * Free challenge pointer in one place - * Additional comments + Reported-by: David Kalnischkies -- krb5_gssapi: Only process challenge when present +- socks.c: Move error output after reading the whole response packet - This wouldn't cause a problem because of the way the function is called, - but prior to this change, we were processing the challenge message when - the credentials were NULL rather than when the challenge message was - populated. + First commit to fix issue #944 regarding SOCKS5 error handling. - This also brings this part of the Kerberos 5 code in line with the - Negotiate code. + Reported-by: David Kalnischkies + +Daniel Stenberg (13 Aug 2016) +- [Ronnie Mose brought this change] -- krb5: Fixed missing client response when mutual authentication enabled + MANUAL: Remove invalid link to LDAP documentation (#962) - Although mutual authentication is currently turned off and can only be - enabled by changing libcurl source code, authentication using Kerberos - 5 has been broken since commit 79543caf90 in this use case. + The server developer.netscape.com does not resolve into any + ip address and can be removed. -- krb5_sspi: Only process challenge when present +Jay Satiro (13 Aug 2016) +- openssl: accept subjectAltName iPAddress if no dNSName match + + Undo change introduced in d4643d6 which caused iPAddress match to be + ignored if dNSName was present but did not match. + + Also, if iPAddress is present but does not match, and dNSName is not + present, fail as no-match. Prior to this change in such a case the CN + would be checked for a match. - This wouldn't cause a problem because of the way the function is called, - but prior to this change, we were processing the challenge message when - the credentials were NULL rather than when the challenge message was - populated. + Bug: https://github.com/curl/curl/issues/959 + Reported-by: wmsch@users.noreply.github.com + +Daniel Stenberg (12 Aug 2016) +- [Dambaev Alexander brought this change] + + configure.ac: add zlib search with pkg-config - This also brings this part of the Kerberos 5 code in line with the - Negotiate code. + Closes #956 -- krb5_sspi: Only generate the output token when its not allocated +- rtsp: ignore whitespace in session id - Prior to this change, we were generating the output token when the - credentials were NULL rather than when the output token was NULL. + Follow-up to e577c43bb to fix test case 569 brekage: stop the parser at + whitespace as well. - This also brings this part of the Kerberos 5 code in line with the - Negotiate code. + Help-by: Erik Janssen -- krb5: Only generate a SPN when its not known +- HTTP: retry failed HEAD requests too + + Mark's new document about HTTP Retries + (https://mnot.github.io/I-D/httpbis-retry/) made me check our code and I + spotted that we don't retry failed HEAD requests which seems totally + inconsistent and I can't see any reason for that separate treatment. - Prior to this change, we were generating the SPN in the SSPI code when - the credentials were NULL and in the GSS-API code when the context was - empty. It is better to decouple the SPN generation from these checks - and only generate it when the SPN itself is NULL. + So, no separate treatment for HEAD starting now. A HTTP request sent + over a reused connection that gets cut off before a single byte is + received will be retried on a fresh connection. - This also brings this part of the Kerberos 5 code in line with the - Negotiate code. + Made-aware-by: Mark Nottingham -Daniel Stenberg (3 Apr 2016) -- tests/libtest: follow our code style guidelines better - - ... checksrc of all test code is pending. +- mk-ca-bundle.1: document -m, added in 1.26 -- checksrc.whitelist: remove fopen() uses +- RELEASE-NOTES: synced with e577c43bb5 -- formdata: use appropriate fopen() macros +- [Erik Janssen brought this change] -- checksrc: improve the fopen() parser somewhat + rtsp: accept any RTSP session id - The quote scanner was too fragile, now look for a comma instead to find - the mode argument. - -- unit1604: fix snprintf + Makes libcurl work in communication with gstreamer-based RTSP + servers. The original code validates the session id to be in accordance + with the RFC. I think it is better not to do that: + + - For curl the actual content is a don't care. - follow-up to 0326b06 + - The clarity of the RFC is debatable, is $ allowed or only as \$, that + is imho not clear - sizeof(pointer) is no good for the buffer size! + - Gstreamer seems to url-encode the session id but % is not allowed by + the RFC - Reported-by: Viktor Szakats - -Steve Holme (3 Apr 2016) -- unittests: Fixed compilation warnings + - less code - warning: implicit declaration of function 'sprintf_was_used' - [-Wimplicit-function-declaration] + With this patch curl will correctly handle real-life lines like: + Session: biTN4Kc.8%2B1w-AF.; timeout=60 - Follow up to the modications made to tests/libtest in commit 55452ebdff - as we prefer not to use sprintf() now. + Bug: https://curl.haxx.se/mail/lib-2016-08/0076.html -Daniel Stenberg (2 Apr 2016) -- curl.1: -w filename_effective was introduced in 7.26.0 +- symbols-in-versions: add CURL_STRICTER - We never made a 7.25.1 release + Added in 5fce88aa8c12564 -- 7.49.0: next release version +- [Simon Warta brought this change] -- http2: make use of the nghttp2 error callback - - It offers extra info from nghttp2 in certain error cases. Like for - example when trying prior-knowledge http2 on a server that doesn't speak - http2 at all. The error message is passed on as a verbose message to - libcurl. + winbuild: Allow changing C compiler via environment variable CC (#952) - Discussed in #722 + This makes it possible to use specific compilers or a cache. - The error callback was added in nghttp2 1.9.0 + Sample use for clcache: + set CC=clcache.bat + nmake /f Makefile.vc DEBUG=no MODE=static VC=14 GEN_PDB=no -Steve Holme (2 Apr 2016) -- spnego: Renamed the context's SPN variable - - To be consistent with the Kerberos 5 context and other authentication - code. +- LICENSE-MIXING.md: switched to markdown -- krb5_gssapi: Renamed the status variables - - For consistency with the spnego code. +- docs-make: have markdown files use .md -- krb5: Moved host from Curl_auth_create_gssapi_user_message() to be argument - - For consistency with the spnego and oauth2 code moved the setting of - the host name outside of the Curl_auth_create_gssapi_user_messag() - function. - - This will allow us to more easily override it in the future. +- curl.h: make CURL_NO_OLDIES define CURL_STRICTER -- test1119: Fixed missing CURL_DID_MEMORY_FUNC_TYPEDEFS symbol +- HISTORY.md: use markdown extension -- RELEASE-NOTES: Removed "http_negotiate: Corrected host and proxy host name" - - As this was introduced in the recent vauth changes and not a prior - release. +- SSLCERTS.md: renamed to markdown extension -Daniel Stenberg (1 Apr 2016) -- RELEASE-NOTES: synced with 0aa8da10bbdafa +- INTERNALS.md: use markdown extension for markdown content -Steve Holme (1 Apr 2016) -- http_negotiate: Corrected host and proxy host name being wrong way round - - I had accidentally used the proxy server name for the host and the host - server name for the proxy in commit ad5e9bfd5d and 6d6f9ca1d9. Whilst - Windows SSPI was quite happy with this, GSS-API wasn't. - - Thanks-to: Michael Osipov +- CONTRIBUTE.md: markdown extension -- build: Changed the Visual Studio projects warning level from 3 to 4 - - After squashing most of our compiler warnings, up'ed the default - warning level from 3 to 4 in order to increase the likelyhood of - catching future warnings. +- CONTRIBUTE: changed to markdown -Daniel Stenberg (1 Apr 2016) -- [ehlertjd@gmail.com brought this change] +- CONTRIBUTE: refreshed - IMAP: check pointer before dereferencing it - - may be null in the CURLOPT_CONNECT_ONLY case - - Fixes #747 +- TODO: added an SSH section and two SFTP things to do -Steve Holme (1 Apr 2016) -- .gitignore: Added new VC14 SQLite based program database files +- TODO: remove the 1.22 duplicated item -- curl_memory.h: Fixed typo in comment - - From commit 7218b52c49. +- TODO: move "CURLOPT_MAIL_CLIENT" to SMTP section -- spnego: Corrected some typos in comments - - Corrected typos from commit ad5e9bfd5d and 6d6f9ca1d9. +- TODO: API for URL parsing/splitting -- memdebug: Ensure curl/curl.h is included before curl_memory.h - - Follow up to commit 7db9782dd6. +- TODO: move QUIC to the HTTP section -Daniel Stenberg (1 Apr 2016) -- upload: missing rewind call could make libcurl hang - - When an upload is done, there are two places where that can be detected - and only one of them would rewind the input stream - which sometimes is - necessary for example when doing NTLM HTTP POSTs and more. - - This could then end up libcurl hanging. - - Figured-out-by: Isaac Boukris - Reported-by: Anatol Belski - - Fixes #741 +- [Simon Warta brought this change] -- curl.h: define CURL_DID_MEMORY_FUNC_TYPEDEFS + winbuild: Free name $(CC) in Makefile (#950) - So that we only do the extra typedefs in curl_memory.h when we really - need to and avoid double typedefs. + In the old line number 290, CC and CURL_CC had the same value. After + that, /DCURL_STATICLIB was added to CC but not CURL_CC (intended?). - follow-up commit to 7218b52c49aeb1 + This gets rid of the CC variable entirely. It is a first step to make it + possible to manualyl set a CC variable in order to be able to change the + compiler. + +- TODO: Use huge HTTP/2 windows + +- [Simon Warta brought this change] + + winbuild: Avoid setting redundant CFLAGS to compile commands (#949) - Thanks-to: Steve Holme + $(CURL_CC) is always used with $(CURL_CFLAGS) appended, so before this, + all arguments in CURL_CFLAGS have been added twice. -- curl/mprintf.h: remove support for _MPRINTF_REPLACE +Jay Satiro (8 Aug 2016) +- cmake: Enable win32 threaded resolver by default - The define is not in our name space and is therefore not protected by - our API promises. + - Turn on USE_THREADS_WIN32 in Windows if ares isn't on - It was only really used by libcurl internals but was mostly erased from - there already in 8aabbf5 (March 2015). This is supposedly the final - death blow to that define from everywhere. + This change is similar to what we already do in the autotools build. + +- cmake: Enable win32 large file support by default - As a side-effect, making sure _MPRINTF_REPLACE is gone and not used, I - made the lib tests in tests/libtest/ use curl_printf.h for its redefine - magic and then subsequently the use of sprintf() got banned in the tests - as well (as it is in libcurl internals) and I then replaced them all - with snprintf(). + All compilers used by cmake in Windows should support large files. - In the unlikely event that any users is actually using this define and - gets sad by this change, it is very easily copied to the user's own - code. + - Add test SIZEOF_OFF_T + - Remove outdated test SIZEOF_CURL_OFF_T + - Turn on USE_WIN32_LARGE_FILES in Windows + - Check for 'Largefile' during the features output -- curl_memory.h: avoid the curl/curl.h include - - Discussed in #743 +Daniel Stenberg (7 Aug 2016) +- TODO: added several ideas, removed SPDY -Steve Holme (1 Apr 2016) -- url: Corrected get protocol family for FTP and LDAP +- http2: always wait for readable socket - Fixed copy/paste error from commit a5aec58726. - -Jay Satiro (31 Mar 2016) -- strerror: don't bit shift a signed integer + Since the server can at any time send a HTTP/2 frame to us, we need to + wait for the socket to be readable during all transfers so that we can + act on incoming frames even when uploading etc. - Bug: https://github.com/curl/curl/issues/744 - Reported-by: Alexis La Goutte + Reminded-by: Tatsuhiro Tsujikawa -Daniel Stenberg (31 Mar 2016) -- http2: more documentation for prior knowledge +- RELEASE-NOTES: synced with 7b4bf37a44791 -- [Diego Bes brought this change] +- [Thomas Glanzmann brought this change] - http2: support "prior knowledge", no upgrade from HTTP/1.1 + mbedtls: set debug threshold to 4 (verbose) when MBEDTLS_DEBUG is defined - Supports HTTP/2 over clear TCP + In order to make MBEDTLS_DEBUG work, the debug threshold must be unequal + to 0. This patch also adds a comment how mbedtls must be compiled in + order to make debugging work, and explains the possible debug levels. + +- CURLOPT_TCP_NODELAY: now enabled by default - - Optimize switching to HTTP/2 by removing calls to init and setup - before switching. Switching will eventually call setup and setup calls - init. + After a few wasted hours hunting down the reason for slowness during a + TLS handshake that turned out to be because of TCP_NODELAY not being + set, I think we have enough motivation to toggle the default for this + option. We now enable TCP_NODELAY by default and allow applications to + switch it off. - - Supports new version to “force” the use of HTTP/2 over clean TCP + This also makes --tcp-nodelay unnecessary, but --no-tcp-nodelay can be + used to disable it. - - Add common line parameter “--http2-prior-knowledge” to the Curl - command line tool. + Thanks-to: Tim Rühsen + Bug: https://curl.haxx.se/mail/lib-2016-06/0143.html + +- [Serj Kalichev brought this change] -- imap: remove duplicated function + TFTP: Fix upload problem with piped input - The list and search response functions were identical! Merged into one - now. Detected by PVS Studio. + When input stream for curl is stdin and input stream is not a file but + generated by a script then curl can truncate data transfer to arbitrary + size since a partial packet is treated as end of transfer by TFTP. - Reported-by: Alexis La Goutte + Fixes #857 -- SOCKS5_gssapi_negotiate: don't assume little-endian ints +- mk-ca-bundle.pl: -m keeps ca cert meta data in output - The code copied one byte from a 32bit integer, which works fine as long - as the byte order is the same. Not a fine assumption. Reported by PVS - Studio. + Makes the script pass on comments holding meta data to the output + file. Like fingerprinters, issuer, date ranges etc. - Reported-by: Alexis La Goutte - -- http: remove ((expression)) double parentheses + Closes #937 -- Curl_add_buffer_send: avoid possible NULL dereference +- multi: make Curl_expire() work with 0 ms timeouts - ... as we check for a NULL pointer below, we move the derefence to after - the check. Detected by PVS Studio. + Previously, passing a timeout of zero to Curl_expire() was a magic code + for clearing all timeouts for the handle. That is now instead made with + the new Curl_expire_clear() function and thus a 0 timeout is fine to set + and will trigger a timeout ASAP. - Reported-by: Alexis La Goutte + This will help removing short delays, in particular notable when doing + HTTP/2. -- file: remove duplicate checks of the same variable +- transfer: return without select when the read loop reached maxcount - ... as it doesn't change in between. Deteced by PVS Studio. + Regression added in 790d6de48515. The was then added to avoid one + particular transfer to starve out others. But when aborting due to + reading the maxcount, the connection must be marked to be read from + again without first doing a select as for some protocols (like SFTP/SCP) + the data may already have been read off the socket. - Reported-by: Alexis La Goutte + Reported-by: Dan Donahue + Bug: https://curl.haxx.se/mail/lib-2016-07/0057.html -Steve Holme (30 Mar 2016) -- [Marcel Raad brought this change] +Steve Holme (3 Aug 2016) +- [Bill Nagel brought this change] - openssl: Fix compilation warnings - - When compiling with OpenSSL 1.1.0 (so that the HAVE_X509_GET0_SIGNATURE - && HAVE_X509_GET0_EXTENSIONS pre-processor block is active), Visual C++ - 14 complains: - - warning C4701: potentially uninitialized local variable 'palg' used - warning C4701: potentially uninitialized local variable 'psig' used + mbedtls: Added support for NTLM -Daniel Stenberg (30 Mar 2016) -- multi: turn Curl_done into file local multi_done - - ... as it now is used by multi.c only. +Daniel Stenberg (3 Aug 2016) +- [Sergei Nikulov brought this change] -- multi: multi_reconnect_request is the former Curl_reconnect_request + travis: removed option to rebuild autotool from source - now a file local function in multi.c + Fixes #943 -- multi: move Curl_do and Curl_do_done to multi.c and make static - - ... called multi_do and multi_do_done as they're file local now. +- bump: start working toward 7.50.2 -Jay Satiro (29 Mar 2016) -- wolfssl: Use ECC supported curves extension - - https://github.com/wolfSSL/wolfssl/issues/366 +Version 7.50.1 (3 Aug 2016) -- build-wolfssl: Allow a broader range of ciphers (Visual Studio) - - This is an update to the build-time options used to build wolfSSL in - Visual Studio for greater compatibility, and make it behave similar to - the way OpenSSL 1.0.2 behaves. Starting in wolfSSL v3.6.6 static ciphers - and SSLv3 are disabled by default at build time, but we can use both. - - - Enable static cipher suites TLS_ECDH_ and TLS_RSA_. - - - Enable SSLv3 hello. Though in libcurl we disable it by default at - runtime, we make it available so the user can manually select it if - necessary. +Daniel Stenberg (3 Aug 2016) +- THANKS: 7 new contributors from the 7.50.1 release -Daniel Stenberg (29 Mar 2016) -- [Isaac Boukris brought this change] +- RELEASE-NOTES: 7.50.1 - GSS: make Curl_gss_log_error more verbose - - Also display the GSS_C_GSS_CODE (major code) when specified instead of - only GSS_C_MECH_CODE (minor code). - - In addition, the old code was printing a colon twice after the prefix - and also miscalculated the length of the buffer in between calls to - gss_display_status (the length of ": " was missing). - - Also, gss_buffer is not guaranteed to be NULL terminated and thus need - to restrict reading by its length. +- TLS: only reuse connections with the same client cert - Closes #738 + CVE-2016-5420 + Bug: https://curl.haxx.se/docs/adv_20160803B.html -- build: use roffit 0.11 feature +- TLS: switch off SSL session id when client cert is used - ... load file specified as argument. + CVE-2016-5419 + Bug: https://curl.haxx.se/docs/adv_20160803A.html + Reported-by: Bru Rom + Contributions-by: Eric Rescorla and Ray Satiro -- http2: set correct scheme in handler structs [regression] - - Since commit a5aec58 the handler schemes need to match for the - connections to be reused and for HTTP/2 multiplexing to work, reusing - connections is very important! +- curl_multi_cleanup: clear connection pointer for easy handles - Closes #736 + CVE-2016-5421 + Bug: https://curl.haxx.se/docs/adv_20160803C.html + Reported-by: Marcelo Echeverria and Fernando Muñoz -- hostip.c: minor white space edit for style +- KNOWN_BUGS: SOCKS proxy not working via IPv6 + + Closes #835 -- [Viktor Szakats brought this change] +- KNOWN_BUGS: CURLOPT_SEEKFUNCTION not called with CURLFORM_STREAM + + Closes #768 - TODO: use secure protocol in recently added URL +- KNOWN_BUGS: transfer-encoding: chunked in HTTP/2 - Closes #733 + Closes #662 -- HTTP2.md: mention libressl and boringssl too +- TODO: Provide cmake config-file + + Closes #885 -- docs/HTTP-COOKIES: converted to markdown +Patrick Monnerat (2 Aug 2016) +- os400: define BUILDING_LIBCURL in make script. -- HTTP2: s/polarssl/mbedtls +Daniel Stenberg (1 Aug 2016) +- RELEASE-NOTES: synced with aa9f536a18b -Jay Satiro (28 Mar 2016) -- wolfssl: Add ALPN support +Jay Satiro (1 Aug 2016) +- [Thomas Glanzmann brought this change] -- tool_operate: remove mixed declaration + mbedtls: Fix debug function name - This is a follow up to the previous commit. - -Daniel Stenberg (28 Mar 2016) -- curl: warn for --capath use if not supported by libcurl + This patch is necessary so that curl compiles if MBEDTLS_DEBUG is + defined. - Closes #492 + Bug: https://curl.haxx.se/mail/lib-2016-08/0001.html -- TODO: 2.5 Edge-triggered sockets should work +Daniel Stenberg (1 Aug 2016) +- [Sergei Nikulov brought this change] -- Makefile.am: skip the scripts dir - - Skipping the scripts dir is primarily done for 'make install' so that it - does not attempt to install the zsh completion script as we've not yet - found a proper way to do/run that at install time. + travis: fix OSX build by re-installing libtool - By leaving the script dir's Makefile in place, a user can still opt to - run make install manually in there. + Apparently due to a broken homebrew install - Closes #620 + fixes #934 + Closes #939 -- CURLMOPT_SOCKETFUNCTION.3: describe the 'what' argument +- [Martin Vejnár brought this change] -- curl_multi_socket_action.3: mark the options properly + win32: fix a potential memory leak in Curl_load_library - ... to make them appear as links on the html version. - -Steve Holme (27 Mar 2016) -- RELEASE-NOTES: Synced with f0bdd72c10 + If a call to GetSystemDirectory fails, the `path` pointer that was + previously allocated would be leaked. This makes sure that `path` is + always freed. + + Closes #938 -- http_ntlm: Renamed from curl_ntlm.[c|h] +- include: revert 9adf3c4 and make public types void * again - Renamed the header and source files for this module as they are HTTP - specific and as such, they should use the naming convention as other - HTTP authentication source files do - this revert commit 260ee6b7bf. + Many applications assume the actual contents of the public types and use + that do for example forward declarations (saving them from including our + public header) which then breaks when we switch from void * to a struct + *. - Note: We could also rename curl_ntlm_wb.[c|h], however, the Winbind - code needs separating from the HTTP protocol and migrating into the - vauth directory, thus adding support for Winbind to the SASL based - protocols such as IMAP, POP3 and SMTP. - -Daniel Stenberg (27 Mar 2016) -- [marquis-de-muesli brought this change] - - docs: curlinfo_filetime sftp support, new curlopt_quote "statvfs" + I'm not convinced we were wrong, but since this practise seems + widespread enough I'm willing to (partly) step down. - Closes #677 - -- [marquis-de-muesli brought this change] - - SSH: new CURLOPT_QUOTE command "statvfs" + Now libcurl uses the struct itself when it is built and it allows + applications to use the struct type if CURL_STRICTER is defined at the + time of the #include. - usage: "statvfs path" - returns remote file system statistics - -- [marquis-de-muesli brought this change] - - SSH: support CURLINFO_FILETIME + Reported-by: Peter Frühberger + Fixes #926 -- [Karlson2k brought this change] +Jay Satiro (28 Jul 2016) +- [Yonggang Luo brought this change] - sshserver.pl: use quotes for given options + cmake: Fix for schannel support - Fixed failed redirection of stderr with some options. At least on Msys2, - perl fails to redirect stderr if $value contains newline or other weird - characters. - -Jay Satiro (26 Mar 2016) -- url: don't use bad offset in tld_check_name to show error + The check_library_exists_concat do not check crypt32 library properly. + So include it directly. - libidn's tld_check_lz returns an error offset of the first character - that it failed to process, however that offset is not a byte offset and - may not even be in the locale encoding therefore we can't use it to show - the user the character that failed to process. + Bug: https://github.com/curl/curl/pull/917 + Reported-by: Yonggang Luo - Bug: https://github.com/curl/curl/issues/731 - Reported-by: Karlson2k + Bug: https://github.com/curl/curl/issues/935 + Reported-by: Alain Danteny -Steve Holme (26 Mar 2016) -- http_negotiate: Combine GSS-API and SSPI source files +- Revert "travis: Install libtool for OS X builds" - As the GSS-API and SSPI based source files are no longer library/API - specific, following the extraction of that authentication code to the - vauth directory, combine these files rather than maintain two separate - versions. - -- vauth: Moved the Negotiate authentication code to the new vauth directory + Didn't work. - Part 2 of 2 - Moved the GSS-API based Negotiate authentication code. + This reverts commit 50723585ed380744358de054e2a55dccee65dfd7. -- vauth: Moved the Negotiate authentication code to the new vauth directory +- travis: Install libtool for OS X builds - Part 1 of 2 - Moved the SSPI based Negotiate authentication code. + CI is failing due to missing libtoolize, so I'm trying this. -- warnless.h: Removed spurious character from commit 696bc6b9c9 - - Not picked up by checksrc or Visual Studio but my own code review, this - would haven broken Intel based Unix builds - Perhaps I should learn to - type on my laptop's keyboard before committing! +Daniel Stenberg (26 Jul 2016) +- [Viktor Szakats brought this change] -- schannel: Fixed compilation warning from commit f8d88a4913 + TODO: minor typo in last commit - warning C4244: '=': conversion from 'int' to 'unsigned short', possible - loss of data + merged #931 -- warnless?: Added some integer based conversion functions +- TODO: Timeout idle connections from the pool -Daniel Stenberg (25 Mar 2016) -- [Dusty Mabe brought this change] +Patrick Monnerat (25 Jul 2016) +- os400: minimum supported OS version: V6R1M0. + Do not log compilation informational messages. - docs/TODO: Add feature request for metalink in HTTP headers +Jay Satiro (24 Jul 2016) +- tests: Fix for http/2 feature - Closes #729 - Closes #728 + Bug: https://curl.haxx.se/mail/lib-2016-07/0070.html + Reported-by: Paul Howarth -Steve Holme (25 Mar 2016) -- build: Corrected typos from commit 70e56939aa +Steve Holme (23 Jul 2016) +- README: Mention wolfSSL in the 'Dependencies' section -- vauth: Refactored function names after move to new vauth directory +- vauth.h: No need to query HAVE_GSSAPI || USE_WINDOWS_SSPI for SPNEGO - Renamed all the SASL functions that moved to the new vauth directory to - include the correct module name. + As SPNEGO is only defined when these pre-processor variables are defined + there is no need to query them explicitly. -- vauth: Updated the copyright year after recent changes +- spnego: Corrected miss-placed * in Curl_auth_spnego_cleanup() declaration - As most of this work was performed in 2015 but not pushed until 2016 - updated the copyright year to reflect the public facing changes. - -- vauth: Moved the OAuth 2.0 authentication code to the new vauth directory + Typo introduced in commit ad5e9bfd5d. -- vauth: Moved the NTLM authentication code to the new vauth directory +Daniel Stenberg (22 Jul 2016) +- SECURITY: mention how to get windows-specific CVEs + + ... and make the distros link a proper link -- vauth: Moved the Kerberos V5 authentication code to the new vauth directory +Dan Fandrich (21 Jul 2016) +- test558: fix test by stripping file paths from FD lines -- digest.c: Fixed checksrc warnings +Kamil Dudka (21 Jul 2016) +- tests: distribute the http2-server.pl script, too -- vauth: Moved the DIGEST authentication code to the new vauth directory +- docs: distribute the CURLINFO_HTTP_VERSION(3) man page, too -- vauth: Moved the CRAM-MD5 authentication code to the new vauth directory +Daniel Stenberg (21 Jul 2016) +- bump: start working on 7.50.1 -- vauth: Moved the ClearText authentication code to the new vauth directory +Version 7.50.0 (21 Jul 2016) -- vauth: Moved Curl_sasl_build_spn() to create the initial vauth source files +Daniel Stenberg (21 Jul 2016) +- RELEASE-NOTES: version 7.50.0 ready -- checksrc.bat: Added support for checking the new vauth directory +- THANKS: 13 new contributors from the 7.50.0 release -- build: Updated all makefiles and project files for the new vauth directory +Jay Satiro (21 Jul 2016) +- winbuild: fix embedded manifest option - Updated the makefiles and Visual Studio project files to support moving - the authentication code to the new lib/vauth directory that was started - in commit 0d04e859e1. - -Daniel Stenberg (24 Mar 2016) -- [JDepooter brought this change] - - schannel: Add ALPN support + Embedded manifest option didn't work due to typo. - Add ALPN support for schannel. This allows cURL to negotiate - HTTP/2.0 connections when built with schannel. + Reported-by: Stefan Kanthak + +- vauth: Fix memleak by freeing credentials if out of memory - Closes #724 + This is a follow up to the parent commit dcdd4be which fixes one leak + but creates another by failing to free the credentials handle if out of + memory. Also there's a second location a few lines down where we fail to + do same. This commit fixes both of those issues. -Steve Holme (24 Mar 2016) -- http: Minor update based on CODE_STYLE guidelines +Daniel Stenberg (20 Jul 2016) +- [Saurav Babu brought this change] -Daniel Stenberg (23 Mar 2016) -- multi: fix "Operation timed out after" timer - - Use the local, reasonably updated, 'now' value when creating the message - string to output for the timeout condition. + vauth: Fixed memory leak due to function returning without free - Fixes #619 + This patch allocates memory to "output_token" only when it is required + so that memory is not leaked if function returns. -- openssl: boringssl provides the same numbering as openssl - - ... so we don't need extra boringssl precautions for for - HAVE_ERR_REMOVE_THREAD_STATE_NOARG. +- test558: updated after ipv6-check move - Pointed-out-by: David Benjamin + Follow-up commit to c50980807c5 to make this test pass. -- openssl: fix ERR_remove_thread_state() for boringssl/libressl +Jay Satiro (20 Jul 2016) +- connect: disable TFO on Linux when using SSL - The removed arg is only done in OpenSSL + - Linux TFO + TLS is not implemented yet. - Bug: https://twitter.com/xtraemeat/status/712564874098917376 - -- bump: work on 7.48.1 + Bug: https://github.com/curl/curl/issues/907 -- RELEASE-PROCEDURE: mention the github release tag edit - - ... and update the coming release dates a bit +Daniel Stenberg (19 Jul 2016) +- ROADMAP: QUIC and TLS 1.3 -Steve Holme (23 Mar 2016) -- checksrc.bat: Updated the help to be consistent with generate.bat - - Follow up to commit a8c7f0fcbf prior to release. +- RELEASE-NOTES: synced with c50980807c5 -Version 7.48.0 (23 Mar 2016) +Jay Satiro (18 Jul 2016) +- [Brian Prodoehl brought this change] -Daniel Stenberg (23 Mar 2016) -- RELEASE-NOTES: curl 7.48.0 + curl_global_init: Check if IPv6 works + + - Curl_ipv6works() is not thread-safe until after the first call, so + call it once during global init to avoid a possible race condition. + + Bug: https://github.com/curl/curl/issues/915 + PR: https://github.com/curl/curl/pull/918 -- THANKS: 15 new contributors from 7.48.0 release +- [Timothy Polich brought this change] -Jay Satiro (23 Mar 2016) -- CURLINFO_TLS_SSL_PTR.3: Warn about limitations + CURLMOPT_SOCKETFUNCTION.3: fix typo - Bug: https://github.com/curl/curl/issues/685 + Closes https://github.com/curl/curl/pull/914 -Daniel Stenberg (22 Mar 2016) -- Revert "sshserver: remove use of AuthorizedKeysFile2" - - It seems we may have some autobuild problems after this commit went - in. Trying to see if a revert helps to get them back. - - This reverts commit 2716350d1f3edc8e929f6ceeee05051090f6d642. +- [Miroslav Franc brought this change] -- maketgz: add -j to make dist + library: Fix memory leaks found during static analysis - ... makes it a lot faster - -- libcurl-thread.3: minor nroff format fix + Closes https://github.com/curl/curl/pull/913 -- CURLINFO_TLS_SSL_PTR.3: minor nroff format fix +- [Viktor Szakats brought this change] -- CODE_STYLE: indend example code + cookie.c: Fix misleading indentation - ... to make it look nicer in markdown outputa + Closes https://github.com/curl/curl/pull/911 -Jay Satiro (22 Mar 2016) -- build-wolfssl: Update VS properties for wolfSSL v3.9.0 - - - Do not use wolfSSL's sample user-setting files. - - wolfSSL starting in v3.9.0 has added their own sample user settings that - are applied by default, but we don't use them because we have our own - settings. - - - Do not use wolfSSL's Visual Studio Unicode character setting. - - wolfSSL Visual Studio projects use the Unicode character set however our - settings and options imitate mingw build which does not use the Unicode - character set. This does not appear to have any effect at the moment but - better safe than sorry. +- FAQ: Update FTP directory listing section for MLSD command + Explain how some FTP servers support the machine readable listing + format MLSD from RFC 3659 and compare it to LIST. - These changes are backwards compatible with earlier versions. + Ref: https://github.com/curl/curl/issues/906 -Steve Holme (22 Mar 2016) -- hostip6: Fixed compilation warnings when verbose strings disabled - - warning C4189: 'data': local variable is initialized but not referenced - - ...and some minor formatting/spacing changes. +Daniel Stenberg (1 Jul 2016) +- [Sergei Nikulov brought this change] -Daniel Stenberg (21 Mar 2016) -- sshserver: remove use of AuthorizedKeysFile2 - - Support for the (undocumented) AuthorizedKeysFile2 was removed in - OpenSSH 5.9, released in September 2011 + Appveyor: Updates for options - CURL_STATICLIB/BUILD_TESTING - Closes #715 + Closes #892 -Steve Holme (20 Mar 2016) -- connect/ntlm/http: Fixed compilation warnings when verbose strings disabled - - warning C4189: 'data': local variable is initialized but not referenced +- TODO: 17.4 also brings more HTTP/2 support -- openssl: Fixed compilation warning when /Wall enabled +- TODO: try next proxy if one doesn't work - warning C4706: assignment within conditional expression + Closes #896 -- CODE_STYLE: Use boolean conditions - - Rather than use TRUE, FALSE, NULL, 0 or != 0 in if/while conditions. +- conn: don't free easy handle data in handler->disconnect - Additionally, corrected some example code to adhere to the recommended - coding style. + Reported-by: Gou Lingfeng + Bug: https://curl.haxx.se/mail/lib-2016-06/0139.html -- inet_pton.c: Fixed compilation warnings - - warning: conversion to 'unsigned char' from 'int' may alter its value +- test1244: test different proxy ports same URL -Daniel Stenberg (19 Mar 2016) -- RELEASE-NOTES: synced with 80851028efc2fa9 +- curl_global_init.3: improved formatting of the flags -- mbedtls: fix compiler warning +- curl_global_init.3: expand on the SSL and WIN32 bits purpose - vtls/mbedtls.h:67:36: warning: implicit declaration of function - ‘mbedtls_sha256’ [-Wimplicit-function-declaration] + Reported-by: Richard Gray + Bug: https://curl.haxx.se/mail/lib-2016-06/0136.html -Steve Holme (19 Mar 2016) -- easy: Minor coding standard and style updates - - Following commit c5744340db. Additionally removes the need for a second - 'result code' variable as well. +- [Michael Kaufmann brought this change] -Jay Satiro (19 Mar 2016) -- easy: Remove poll failure check in easy_transfer - - .. because curl_multi_wait can no longer signal poll failure. + cleanup: minor code cleanup in Curl_http_readwrite_headers() - follow-up to 77e1726 + - the expression of an 'if' was always true + - a 'while' contained a condition that was always true + - use 'if(k->exp100 > EXP100_SEND_DATA)' instead of 'if(k->exp100)' + - fixed a typo - Bug: https://github.com/curl/curl/issues/707 + Closes #889 -Steve Holme (19 Mar 2016) -- build: Added missing Visual Studio filter files for VC10 onwards +- SFTP: set a generic error when no SFTP one exists... - As these files don't need to contain references to the source files, - although typically do, added basic files which only include three - filters and don't require the project file generator to be modified. + ... as otherwise we could get a 0 which would count as no error and we'd + wrongly continue and could end up segfaulting. - These files allow the source code to be viewed in the Solution Explorer - in versions of Visual Studio from 2010 onwards in the same manner as - previous versions did rather than one large view of files. + Bug: https://curl.haxx.se/mail/lib-2016-06/0052.html + Reported-by: 暖和的和暖 -- ftp/imap/pop3/smtp: Fixed compilation warning when /Wall enabled - - warning C4706: assignment within conditional expression +- ROADMAP: http2 tests are merged, mention http2 perf -- config-w32.h: Fixed compilation warning when /Wall enabled +- docs/README.md: to render nicer pages on github - warning C4668: 'USE_IPV6' is not defined as a preprocessor macro, - replacing with '0' for '#if/#elif' + ... as previously the README.cmake would be picked and put at the bottom + of the docs page there and it wasn't very representative! -- imap.c: Fixed compilation warning with /Wall enabled - - warning C4701: potentially uninitialized local variable 'size' used +- README.md: change host name for the svg logo - Technically this can't happen, as the usage of 'size' is protected by - 'if(parsed)' and 'parsed' is only set after 'size' has been parsed. + rawgit.com asks to use the domain cdn.rawgit.com for production - Anyway, lets keep the compiler happy. + See #900 -- KNOWN_BUGS: #93 Issue with CURLFORM_CONTENTLEN in arrays on 32-bit platforms +- [Viktor Szakats brought this change] -Daniel Stenberg (18 Mar 2016) -- bump: the coming release is 7.48.0 + README.md: use the SVG logo -- configure: use cpp -P when needed - - Since gcc 5, the processor output can get split up on multiple lines - that made the configure script fail to figure out values from - definitions. The fix is to use cpp -P, and this fix now first checks if - cpp -P is necessary and then if cpp -P works before it uses that to - extract defined values. - - Fixes #719 +- README.md: logo on top! -Steve Holme (18 Mar 2016) -- formdata.c: Fixed compilation warning - - formdata.c:390: warning: cast from pointer to integer of different size - - Introduced in commit ca5f9341ef this happens because a char*, which is - 32-bits wide in 32-bit land, is being cast to a curl_off_t which is - 64-bits wide where 64-bit integers are supported by the compiler. - - This doesn't happen in 64-bit land as a pointer is the same size as a - curl_off_t. +- KNOWN_BUGS: 3.4 POP3 expects "CRLF.CRLF" eob for some - This fix doesn't address the fact that a 64-bit value cannot be used - for CURLFORM_CONTENTLEN when set in a form array and compiled on a - 32-bit platforms, it does at least suppress the compilation warning. + Closes #740 -Daniel Stenberg (18 Mar 2016) -- FAQ: 2.5 Install libcurl for both 32bit and 64bit? +- RELEASE-NOTES: synced with d61c80515aa8 -- [Gisle Vanem brought this change] +- [Michael Osipov brought this change] - openssl: adapt to API breakage in ERR_remove_thread_state() + acinclude.m4: improve autodetection of CA bundle on FreeBSD - The OpenSSL API change that broke this is "Convert ERR_STATE to new - multi-threading API": openssl commit 8509dcc. + The FreeBSD Port security/ca_root_nss installs the Mozilla NSS CA bundle + to /usr/local/share/certs/ca-root-nss.crt. Use this bundle in the + discovery process. - Closes #713 - -- version: init moved to private name space, added protos + This change also removes the former FreeBSD path that has been obsolete + for 8 years since this FreeBSD ports commit: + https://svnweb.freebsd.org/ports/head/security/?view=revision&revision=215953 - follow-up to 80015cdd52145 + Closes #894 -- openssl: verbose: show matching SAN pattern - - ... to allow users to see which specfic wildcard that matched when such - is used. +- configure: don't specify .lib for libs on windows - Also minor logic cleanup to simplify the code, and I removed all tabs - from verbose strings. - -Jay Satiro (16 Mar 2016) -- version: thread safety + Another follow up for crypt32.lib linking with winssl -Steve Holme (16 Mar 2016) -- transfer: Removed redundant HTTP authentication include files +- configure: fix winssl LIBS change typo - It would also seem that share.h is not required here either as there - are no references to the Curl_share structure or functions. + follow-up from 120bf29e -- easy: Removed redundant HTTP authentication include files +- TODO: "TCP Fast Open" is done, add monitor pool connections -Jay Satiro (15 Mar 2016) -- CURLOPT_SSLENGINE.3: Only for OpenSSL built with engine support +- configure: add crypt32.lib for winssl builds - Bug: https://curl.haxx.se/mail/lib-2016-03/0150.html - Reported-by: Oliver Graute - -Steve Holme (15 Mar 2016) -- curl_sasl: Minor code indent fixes - -Daniel Stenberg (14 Mar 2016) -- runtests: mention when run event-based + Necessary since 6cabd78531f -- easy: add check to malloc() when running event-based +- Makefile.vc: link with crypt32.lib for winssl builds + + Necessary since 6cabd78531f - ... to allow torture tests then too. + Fixes #853 -- memdebug: skip logging the limit countdown, fflush when reached +- [Joel Depooter brought this change] -- CODE_STYLE: Space around operators + VC: Add crypt32.lib to Visual Sudio project template files - As just discussed on the mailing list, also document how we prefer - spacing in expressions. + Closes #854 -- curl: glob_range: no need to check unsigned variable for negative - - cppcheck warned: +- vc: fix the build for schannel certinfo support - [src/tool_urlglob.c:283]: (style) Checking if unsigned variable 'step_n' - is less than zero. - -- CODE_STYLE: add example for indent style as well - -- CODE_STYLE: mention braces for functions too - -- docs/Makefile.am: include CODE_STYLE in tarball too - -- CONTRIBUTE: moved out code style to a separate document + Broken since 6cabd785, which adds use of the Curl_extract_certinfo + function from the x509asn1.c file. -- CODE_STYLE: initial version +- typedefs: use the full structs in internal code... - Ripped out from CONTRIBUTE into its own document, but also extended from - there. + ... and save the typedef'ed names for headers and external APIs. -- curl_sasl.c: minor code indent fixes +- internals: rename the SessionHandle struct to Curl_easy -- multi: simplified singlesocket +- headers: forward declare CURL, CURLM and CURLSH as structs - Since sh_getentry() now checks for invalid sockets itself and by - narrowing the scope of the remove_sock_from_hash variable. - -- multi: introduce sh_getentry() for looking up sockets in the sockhash + Instead of typedef'ing to void, typedef to their corresponding actual + struct names to allow compilers to type-check. - Simplify the code by using a single entry that looks for a socket in the - socket hash. As indicated in #712, the code looked for CURL_SOCKET_BAD - at some point and that is ineffective/wrong and this makes it easier to - avoid that. - -- [Jaime Fullaondo brought this change] + Assisted-by: Reinhard Max - multi hash: ensure modulo performed on curl_socket_t +Jay Satiro (22 Jun 2016) +- vtls: Only call add/getsession if session id is enabled - Closes #712 + Prior to this change we called Curl_ssl_getsessionid and + Curl_ssl_addsessionid regardless of whether session ID reusing was + enabled. According to comments that is in case session ID reuse was + disabled but then later enabled. + + The old way was not intuitive and probably not something users expected. + When a user disables session ID caching I'd guess they don't expect the + session ID to be cached anyway in case the caching is later enabled. -Steve Holme (13 Mar 2016) -- base64: Minor coding standard and style updates +Daniel Stenberg (22 Jun 2016) +- curl.1: the used progress meter suffix is k in lower case + + Closes #883 -- base64: Use 'CURLcode result' for curl result codes +- [Sergei Nikulov brought this change] -- negotiate: Use 'CURLcode result' for curl result codes + cmake: now using BUILD_TESTING=ON/OFF + + CMake build now using BUILD_TESTING=ON/OFF (default is OFF) to build + tests and enabling CTest integration. Options BUILD_CURL_TESTS and + BUILD_DASHBOARD_REPORTS was removed. + + Closes #882 + + Reviewed-by: Brad King -Daniel Stenberg (13 Mar 2016) -- [Maksim Kuzevanov brought this change] +- [Michael Kaufmann brought this change] - multi_runsingle: avoid loop in CURLM_STATE_WAITPROXYCONNECT + cleanup: fix method names in code comments - Closes #703 - -- TODO: Use the RFC6265 test suite + Closes #887 -Steve Holme (13 Mar 2016) -- checksrc.bat: Added the ability to scan src and lib source independently +Kamil Dudka (21 Jun 2016) +- curl-compilers.m4: improve detection of GCC's -fvisibility= flag + + Some builds of GCC produce output on both stdout and stderr when --help + --verbose is used. The 2>&1 redirection caused them to be arbitrarily + interleaved with each other because of stream buffering. Consequently, + grep failed to match the fvisibility= string in the mixed output, even + though the string was present in GCC's standard output. + + This led to silently disabling symbol hiding in some builds of curl. -- digest: Use boolean based success code for Curl_sasl_digest_get_pair() +Daniel Stenberg (19 Jun 2016) +- tests: fix the HTTP/2 tests + + The HTTP/2 tests brought with commit bf05606ef1f were using the internal + name 'http2' for the HTTP/2 server, while in fact that name was already + used for the second instance of the HTTP server. This made tests using + the second instance (like test 2050) fail after a HTTP/2 test had run. - Rather than use a 0 and 1 integer base result code use a TRUE / FALSE - based success code. + The server is now known as HTTP/2 internally and within the + section in test cases. 1700, 1701 and 1702 were updated accordingly. -- digest: Corrected some typos in comments +- openssl: use more 'const' to fix build warnings with 1.1.0 branch -- krb5: Corrected some typos in function descriptions +- curl.1: missed 'T' in the progress unit suffixes -- ntlm: Corrected some typos in function descriptions +- curl.1: mention the unix for the progress meter -- url: Corrected indentation when calling idna_to_ascii_lz() +Patrick Monnerat (16 Jun 2016) +- os400: add new definitions to ILE/RPG binding. -- idn_win32: Use boolean based success codes +Daniel Stenberg (16 Jun 2016) +- openssl: fix cert check with non-DNS name fields present - Rather than use 0 and 1 integer base result codes use a FALSE / TRUE - based success code. + Regression introduced in 5f5b62635 (released in 7.48.0) + + Reported-by: Fabian Ruff + Fixes #875 -Daniel Stenberg (10 Mar 2016) -- idn_win32.c: warning: Trailing whitespace +Dan Fandrich (16 Jun 2016) +- axtls: Use Curl_wait_ms instead of the less-portable usleep -Steve Holme (10 Mar 2016) -- idn_win32.c: Fixed compilation warning from commit 9e7fcd4291 - - warning C4267: 'function': conversion from 'size_t' to 'int', - possible loss of data +- axtls: Fixed compile after compile 31c521b0 -Daniel Stenberg (10 Mar 2016) -- THANKS-filter: unify Michael König +- tests: Added HTTP proxy keywords to tests 1141 & 1142 -- RELEASE-NOTES: synced with 863c5766dd +Jay Satiro (15 Jun 2016) +- [Sergei Nikulov brought this change] -- ftp: remove a check for NULL(!) + cmake: Fix build with winldap - ... as it implies we need to check for that on all the other variable - references as well (as Coverity otherwise warns us for missing NULL - checks), and we're alredy making sure that the pointer is never NULL. + Bug: https://github.com/curl/curl/pull/874 + Reported-by: Sergei Nikulov -- cookies: first n/v pair in Set-Cookie: is the cookie, then parameters - - RFC 6265 section 4.1.1 spells out that the first name/value pair in the - header is the actual cookie name and content, while the following are - the parameters. +- CURLOPT_POSTFIELDS.3: Clarify what happens when set empty - libcurl previously had a more liberal approach which causes significant - problems when introducing new cookie parameters, like the suggested new - cookie priority draft. + When CURLOPT_POSTFIELDS is set to an empty string libcurl will send a + zero-byte POST. Prior to this change it was documented as sending data + from the read callback. - The previous logic read all n/v pairs from left-to-right and the first - name used that wassn't a known parameter name would be used as the - cookie name, thus accepting "Set-Cookie: Max-Age=2; person=daniel" to be - a cookie named 'person' while an RFC 6265 compliant parser should - consider that to be a cookie named 'Max-Age' with an (unknown) parameter - 'person'. + This also changes the wording of what happens when empty or NULL so that + it's hopefully easier to understand for people whose primary language + isn't English. - Fixes #709 - -- krb5: improved type handling to avoid clang compiler warnings + Bug: https://github.com/curl/curl/issues/862 + Reported-by: Askar Safin -- url.c: fix clang warning: no newline at end of file +- [Michael Wallner brought this change] -- curl_multi_wait: never return -1 in 'numfds' + curl_multi_socket_action.3: Fix rewording - Such a return value isn't documented but could still happen, and the - curl tool code checks for it. It would happen when the underlying - Curl_poll() function returns an error. Starting now we mask that error - as a user of curl_multi_wait() would have no way to handle it anyway. + - Remove some erroneous text. - Reported-by: Jay Satiro - Closes #707 - -- HTTP2.md: add CURL_HTTP_VERSION_2TLS and updated alt-svc link + Closes https://github.com/curl/curl/pull/865 -- curl_multi_wait.3: add example +- [Luo Jinghua brought this change] -Steve Holme (8 Mar 2016) -- imap/pop3/smtp: Fixed connections upgraded with TLS are not reused - - Regression since commit 710f14edba. + resolve: enable protocol family logic for synthesized IPv6 - Bug: https://github.com/curl/curl/issues/422 - Reported-by: Justin Ehlert - -Jay Satiro (8 Mar 2016) -- opt-docs: fix heading macros + - Enable protocol family logic for IPv6 resolves even when support + for synthesized addresses is enabled. - ..SH should be .SH + This is a follow up to the parent commit that added support for + synthesized IPv6 addresses from IPv4 on iOS/OS X. The protocol family + logic needed for IPv6 was inadvertently excluded if support for + synthesized addresses was enabled. - Bug: https://github.com/curl/curl/issues/705 - Reported-by: Eric S. Raymond - -Kamil Dudka (8 Mar 2016) -- [Tim Rühsen brought this change] + Bug: https://github.com/curl/curl/issues/863 + Ref: https://github.com/curl/curl/pull/866 + Ref: https://github.com/curl/curl/pull/867 - cookie: do not refuse cookies for localhost - - Closes #658 +Daniel Stenberg (7 Jun 2016) +- [Luo Jinghua brought this change] -Daniel Stenberg (8 Mar 2016) -- ftp_done: clear tunnel_state when secondary socket closes + resolve: add support for IPv6 DNS64/NAT64 Networks on OS X + iOS - Introducing a function for closing the secondary connection to make this - bug less likely to happen again. + Use getaddrinfo() to resolve the IPv4 address literal on iOS/Mac OS X. + If the current network interface doesn’t support IPv4, but supports + IPv6, NAT64, and DNS64. - Reported-by: daboul - Closes #701 - -- [Gisle Vanem brought this change] + Closes #866 + Fixes #863 - openssl: use the correct OpenSSL/BoringSSL/LibreSSL in messages +- tests: two more HTTP/2 tests + + 1701 and 1702 -- HTTP2.md: HTTP/2 by default for curl's HTTPS connections +- runtests: don't display logs when http2 server fails to start -- [Anders Bakken brought this change] +- runtests: make stripfile work on stdout as well + + ... and have test 1700 use that to strip out the nghttpx server: headers - pipeline: Sanity check pipeline pointer before accessing it. +- http2-tests: test1700 is the first real HTTP/2 test - I got a crash with this stack: + It requires that 'nghttpx' is in the PATH, and it will run the tests + using nghttpx as a front-end proxy in front of the standard HTTP/1 test + server. This uses HTTP/2 over plain TCP. - curl/lib/url.c:2873 (Curl_removeHandleFromPipeline) - curl/lib/url.c:2919 (Curl_getoff_all_pipelines) - curl/lib/multi.c:561 (curl_multi_remove_handle) - curl/lib/url.c:415 (Curl_close) - curl/lib/easy.c:859 (curl_easy_cleanup) + If you like me have nghttpx installed in a custom path, you can run test 1700 + like this: - Closes #704 - -- HTTP2.md: mention the disable ALPN and NPN options + $ PATH=$PATH:$HOME/build-nghttp2/bin/ ./runtests.pl 1700 -- TODO: 17.12 keep running, read instructions from pipe/socket - - And delete trailing whitespace - And rename section 17 to "command line tool" from "client" - - Closes #702 +- RELEASE-NOTES: synced with 34855feeb4c299 -- README.md: linkified +Steve Holme (6 Jun 2016) +- schannel: Disable ALPN on Windows < 8.1 - It also makes it less readable as plain text, so let's keep this - primarily for github use. + Calling QueryContextAttributes with SECPKG_ATTR_APPLICATION_PROTOCOL + fails on Windows < 8.1 so we need to disable ALPN on these OS versions. - Removed the top ascii art logo, as it looks weird when markdownified. - -- README.md: markdown version of README + Inspiration provide by: Daniel Seither - Attempt to make it look more appealing on github - -Jay Satiro (6 Mar 2016) -- mprintf: update trio project link - -Daniel Stenberg (6 Mar 2016) -- CURLOPT_ACCEPTTIMEOUT_MS.3: added example - -- CURLOPT_ACCEPT_ENCODING.3: added example - -- CURLOPT_APPEND.3: added example - -- CURLOPT_NOPROGRESS.3: added example, conform to stardard style + Closes #848 + Fixes #840 -Steve Holme (6 Mar 2016) -- build-openssl/checksrc.bat: Fixed prepend vs append of Perl path +Jay Satiro (5 Jun 2016) +- checksrc: Add LoadLibrary to the banned functions list - Fixed inconsistency from commit 1eae114065 and 0ad6c72227 of the order - in which Perl was added to the PATH. - -Daniel Stenberg (6 Mar 2016) -- opts: added two examples - -- CURLOPT_SSL_CTX_FUNCTION.3: use .NF for example + LoadLibrary was supplanted by Curl_load_library for security + reasons in 6df916d. -- CURLOPT_SSL_CTX_FUNCTION.3: added example +- http: Fix HTTP/2 connection reuse - and removed erroneous reference to test case lib509 - -- curlx.c: use more curl style code - -- test46: change cookie expiry date + - Change the parser to not require a minor version for HTTP/2. - Since two of the cookies would now otherwise expire and cause the test - to fail after commit 20de9b4f09 + HTTP/2 connection reuse broke when we changed from HTTP/2.0 to HTTP/2 + in 8243a95 because the parser still expected a minor version. - Discussed in #697 - -Jay Satiro (5 Mar 2016) -- [Viktor Szakats brought this change] + Bug: https://github.com/curl/curl/issues/855 + Reported-by: Andrew Robbins, Frank Gevaerts - makefile.m32: add missing libs for static -winssl-ssh2 builds +Steve Holme (4 Jun 2016) +- connect.c: Fixed compilation warning from commit 332e8d6164 - Bug: https://github.com/curl/curl/pull/693 + connect.c:952:5: warning: suggest explicit braces to avoid ambiguous 'else' -- mbedtls: fix user-specified SSL protocol version +- win32: Used centralised verify windows version function - Prior to this change when a single protocol CURL_SSLVERSION_ was - specified by the user that version was set only as the minimum version - but not as the maximum version as well. - -Steve Holme (5 Mar 2016) -- .gitignore: Added *.VC.opendb and *.vcxproj.user files for VC14 - -- build-openssl.bat: Fixed cannot find perl if installed but not in path + Closes #845 -- checksrc.bat: Fixed cannot find perl if installed but not in path +- win32: Added verify windows version functionality -Jay Satiro (5 Mar 2016) -- [Viktor Szakats brought this change] +- win32: Introduced centralised verify windows version function - makefile.m32: fix to allow -ssh2-winssl combination +Kamil Dudka (3 Jun 2016) +- tool_urlglob: fix off-by-one error in glob_parse() - In makefile.m32, option -ssh2 (libssh2) automatically implied -ssl - (OpenSSL) option, with no way to override it with -winssl. Since both - libssh2 and curl support using Windows's built-in SSL backend, modify - the logic to allow that combination. - -- cookie: Don't expire session cookies in remove_expired + ... causing SIGSEGV while parsing URL with too many globs. + Minimal example: - Prior to this change cookies with an expiry date that failed parsing - and were converted to session cookies could be purged in remove_expired. + $ curl $(for i in $(seq 101); do printf '{a}'; done) - Bug: https://github.com/curl/curl/issues/697 - Reported-by: Seth Mos + Reported-by: Romain Coltel + Bug: https://bugzilla.redhat.com/1340757 -Daniel Stenberg (3 Mar 2016) -- cookie: remove redundant check - - ... as it was already checked previously within the function. +Daniel Stenberg (1 Jun 2016) +- [Benjamin Kircher brought this change] + + libcurl-multi.3: fix small typo - Reported-by: Dmitry-Me - Closes #695 + Closes #850 -Jay Satiro (1 Mar 2016) -- [Anders Bakken brought this change] +- [Viktor Szakats brought this change] - url: if Curl_done is premature then pipeline not in use + makefile.m32: add crypt32 for winssl builds - Prevent a crash if 2 (or more) requests are made to the same host and - pipelining is enabled and the connection does not complete. + Dependency added by 6cabd78 - Bug: https://github.com/curl/curl/pull/690 + Closes #849 -- [Viktor Szakats brought this change] +- [Ivan Avdeev brought this change] - makefile.m32: allow to pass .dll/.exe-specific LDFLAGS - - using envvars `CURL_LDFLAG_EXTRAS_DLL` and - `CURL_LDFLAG_EXTRAS_EXE` respectively. This - is useful f.e. to pass ASLR-related extra - options, that are required to make this - feature work when using the mingw toolchain. + vtls: fix ssl session cache race condition - Ref: https://github.com/curl/curl/pull/670#issuecomment-190863985 + Sessionid cache management is inseparable from managing individual + session lifetimes. E.g. for reference-counted sessions (like those in + SChannel and OpenSSL engines) every session addition and removal + should be accompanied with refcount increment and decrement + respectively. Failing to do so synchronously leads to a race condition + that causes symptoms like use-after-free and memory corruption. + This commit: + - makes existing session cache locking explicit, thus allowing + individual engines to manage lock's scope. + - fixes OpenSSL and SChannel engines by putting refcount management + inside this lock's scope in relevant places. + - adds these explicit locking calls to other engines that use + sessionid cache to accommodate for this change. Note, however, + that it is unknown whether any of these engines could also have + this race. - Closes https://github.com/curl/curl/pull/689 + Bug: https://github.com/curl/curl/issues/815 + Fixes #815 + Closes #847 -Daniel Stenberg (29 Feb 2016) -- formpost: fix memory leaks in AddFormData error branches - - Reported-by: Dmitry-Me - Fixes #688 +- [Andrew Kurushin brought this change] -Jay Satiro (28 Feb 2016) -- getinfo: Fix syntax error when mbedTLS + schannel: add CURLOPT_CERTINFO support - The assignment of the mbedTLS TLS session info in the parent commit was - incorrect. Change the assignment to a pointer to the session structure. + Closes #822 -- getinfo: Add support for mbedTLS TLS session info +- RELEASE-NOTES: synced with 142ee9fa15002315 + +- openssl: rename the private SSL_strerror - .. and preprocessor check TLS session info is defined for all backends. + ... to make it not look like an OpenSSL function -Daniel Stenberg (26 Feb 2016) -- ROADMAP: clarify on the TLS proxy, mention HTTP cookies to work on +- [Michael Kaufmann brought this change] -- file: try reading from files with no size - - Some systems have special files that report as 0 bytes big, but still - contain data that can be read (for example /proc/cpuinfo on - Linux). Starting now, a zero byte size is considered "unknown" size and - will be read as far as possible anyway. - - Reported-by: Jesse Tan + openssl: Use correct buffer sizes for error messages - Closes #681 + Closes #844 -Jay Satiro (25 Feb 2016) -- configure: warn on invalid ca bundle or path +- curl: fix -q [regression] - - Warn if --with-ca-bundle file does not exist. + This broke in 7.49.0 with commit e200034425a7625 - - Warn if --with-ca-path directory does not contain certificates. + Fixes #842 + +- URL parser: allow URLs to use one, two or three slashes - - Improve help messages for both. + Mostly in order to support broken web sites that redirect to broken URLs + that are accepted by browsers. - Example configure output: + Browsers are typically even more leniant than this as the WHATWG URL + spec they should allow an _infinite_ amount. I tested 8000 slashes with + Firefox and it just worked. - ca cert bundle: /some/file (warning: certs not found) - ca cert path: /some/dir (warning: certs not found) + Added test case 1141, 1142 and 1143 to verify the new parser. - Bug: https://github.com/curl/curl/issues/404 - Reported-by: Jeffrey Walton + Closes #791 -Daniel Stenberg (24 Feb 2016) -- Curl_read: check for activated HTTP/1 pipelining, not only requested - - ... as when pipelining is used, we read things into a unified buffer and - we don't do that with HTTP/2. This could then easily make programs that - set CURLMOPT_PIPELINING = CURLPIPE_HTTP1|CURLPIPE_MULTIPLEX to get data - intermixed or plain broken between HTTP/2 streams. +- [Renaud Lehoux brought this change] + + cmake: Added missing mbedTLS support - Reported-by: Anders Bakken + Closes #837 -Patrick Monnerat (24 Feb 2016) -- os400: Fix ILE/RPG definition of CURLOPT_TFTP_NO_OPTIONS +- [Renaud Lehoux brought this change] -Jay Satiro (23 Feb 2016) -- getinfo: CURLINFO_TLS_SSL_PTR supersedes CURLINFO_TLS_SESSION - - The two options are almost the same, except in the case of OpenSSL: - - CURLINFO_TLS_SESSION OpenSSL session internals is SSL_CTX *. - - CURLINFO_TLS_SSL_PTR OpenSSL session internals is SSL *. - - For backwards compatibility we couldn't modify CURLINFO_TLS_SESSION to - return an SSL pointer for OpenSSL. - - Also, add support for the 'internals' member to point to SSL object for - the other backends axTLS, PolarSSL, Secure Channel, Secure Transport and - wolfSSL. - - Bug: https://github.com/curl/curl/issues/234 - Reported-by: dkjjr89@users.noreply.github.com + mbedtls: removed unused variables - Bug: https://curl.haxx.se/mail/lib-2015-09/0127.html - Reported-by: Michael König + Closes #838 -Daniel Stenberg (23 Feb 2016) -- multi_remove_handle: keep the timeout list until after disconnect - - The internal Curl_done() function uses Curl_expire() at times and that - uses the timeout list. Better clean up the list once we're done using - it. This caused a segfault. - - Reported-by: 蔡文凱 - Bug: https://curl.haxx.se/mail/lib-2016-02/0097.html +- [Frank Gevaerts brought this change] -Kamil Dudka (23 Feb 2016) -- tests/sshserver.pl: use RSA instead of DSA for host auth - - DSA is no longer supported by OpenSSH 7.0, which causes all SCP/SFTP - test cases to be skipped. Using RSA for host authentication works with - both old and new versions of OpenSSH. + http: add CURLINFO_HTTP_VERSION and %{http_version} - Reported-by: Karlson2k + Adds access to the effectively used http version to both libcurl and + curl. - Closes #676 + Closes #799 -Jay Satiro (23 Feb 2016) -- TFTP: add option to suppress TFTP option requests (Part 2) - - - Add tests. - - - Add an example to CURLOPT_TFTP_NO_OPTIONS.3. +- bump: start the journey toward 7.50.0 + +- [Marcel Raad brought this change] + + openssl: fix build with OPENSSL_NO_COMP - - Add --tftp-no-options to expose CURLOPT_TFTP_NO_OPTIONS. + With OPENSSL_NO_COMP defined, there is no function + SSL_COMP_free_compression_methods - Bug: https://github.com/curl/curl/issues/481 + Closes #836 -- [Michael Koenig brought this change] +- [Gisle Vanem brought this change] - TFTP: add option to suppress TFTP option requests (Part 1) - - Some TFTP server implementations ignore the "TFTP Option extension" - (RFC 1782-1784, 2347-2349), or implement it in a flawed way, causing - problems with libcurl. Another switch for curl_easy_setopt - "CURLOPT_TFTP_NO_OPTIONS" is introduced which prevents libcurl from - sending TFTP option requests to a server, avoiding many problems caused - by faulty implementations. + memdebug: fix MSVC crash with -DMEMDEBUG_LOG_SYNC - Bug: https://github.com/curl/curl/issues/481 + Fixes #828 -Daniel Stenberg (22 Feb 2016) -- [Karlson2k brought this change] +- [Jonathan brought this change] - runtests: Fixed usage of %PWD on MinGW64 + README.md: polish - Closes #672 + Closes #834 -Jay Satiro (20 Feb 2016) -- CURLOPT_DEBUGFUNCTION.3: Fix example +- RELEASE-NOTES: fix vuln link -- [Viktor Szakats brought this change] +Version 7.49.1 (30 May 2016) + +Daniel Stenberg (30 May 2016) +- RELEASE-NOTES: 7.49.1 + +- [Steve Holme brought this change] - src/Makefile.m32: add CURL_{LD,C}FLAGS_EXTRAS support + loadlibrary: Only load system DLLs from the system directory + + Inspiration provided by: Daniel Stenberg and Ray Satiro - Sync with lib/Makefile.m32 which already uses those variables. + Bug: https://curl.haxx.se/docs/adv_20160530.html - Bug: https://github.com/curl/curl/pull/670 + Ref: Windows DLL hijacking with curl, CVE-2016-4802 -Dan Fandrich (20 Feb 2016) -- Enabled test 1437 after the bug fix in commit 3fa220a6 +- ssh: fix version number check typo -Jay Satiro (19 Feb 2016) -- [Emil Lerner brought this change] +Jay Satiro (29 May 2016) +- curl_share_setopt.3: Add min ver needed for ssl session lock + + Bug: https://github.com/curl/curl/issues/826 + Reported-by: Michael Wallner - curl_sasl: Fix memory leak in digest parser +Daniel Stenberg (29 May 2016) +- ssh: fix build for libssh2 before 1.2.6 - If any parameter in a HTTP DIGEST challenge message is present multiple - times, memory allocated for all but the last entry should be freed. + The statvfs functionality was added to libssh2 in that version, so we + switch off that functionality when built with older libraries. - Bug: https://github.com/curl/curl/pull/667 + Fixes #831 -Dan Fandrich (19 Feb 2016) -- Added test 1437 to verify a memory leak +- mbedtls: fix includes so snprintf() works - Reported-by: neex@users.noreply.github.com - -Jay Satiro (18 Feb 2016) -- CURLOPT_COOKIEFILE.3: HTTP headers must be Set-Cookie style + Regression from the previous *printf() rearrangements, this file missed to + include the correct header to make sure snprintf() works universally. - Bug: https://github.com/curl/curl/issues/666 - Reported-by: baumanj@users.noreply.github.com + Reported-by: Moti Avrahami + Bug: https://curl.haxx.se/mail/lib-2016-05/0196.html -- curl.1: HTTP headers for --cookie must be Set-Cookie style +Steve Holme (23 May 2016) +- checksrc.pl: Added variants of strcat() & strncat() to banned function list - Bug: https://github.com/curl/curl/issues/666 - Reported-by: baumanj@users.noreply.github.com - -Daniel Stenberg (18 Feb 2016) -- curl.1: add a missing dash - -- CONTRIBUTING.md: fix links + Added support for checking the tchar, unicode and mbcs variants of + strcat() and strncat() in the banned function list. -- ISSUE_TEMPLATE: github issue template - - First version, try this out! +Daniel Stenberg (23 May 2016) +- smtp: minor ident (white space) fixes -- CONTRIBUTING.md: move into .github +- THANKS: updated after script fixes - To hide github specific files somewhat from the rest. - -- opts: add references + Now giving credit properly to github user names, fixed some UTF-8 issues + and added names discovered when contrithanks was improved. -- examples/make: add 'checksrc' target +- THANKS-filter: more name cleanups -- 10-at-a-time: typecast the argument passed to sleep() +- contrithanks.sh: exclude existing names case insensitively -- externalsocket.c: fix compiler warning for fwrite return type +- contrithanks.sh: use same grep pattern and -a flag as contributors.sh -- anyauthput.c: fix compiler warnings +- contributors.sh: better grep pattern, use grep -a -- simplessl.c: warning: while with space +- THANKS-filter: fix more names -- curlx.c: i2s_ASN1_IA5STRING() clashes with an openssl function +- contrithanks.sh: do the same github fix as contributors.sh - Reported-By: Gisle Vanem + from 1577bfa35ba -- http2: don't decompress gzip decoding automatically - - At one point during the development of HTTP/2, the commit 133cdd29ea0 - introduced automatic decompression of Content-Encoding as that was what - the spec said then. Now however, HTTP/2 should work the same way as - HTTP/1 in this regard. +Jay Satiro (23 May 2016) +- contributors: Show GitHub username if real name unknown - Reported-by: Kazuho Oku + Prior to this change if a GitHub contributor's real name was unknown + they would be omitted from the list. - Closes #661 + Bug: https://github.com/curl/curl/issues/824 -Jay Satiro (16 Feb 2016) -- [Tatsuhiro Tsujikawa brought this change] +Daniel Stenberg (21 May 2016) +- RELEASE-NOTES: synced with 3caaeffbe8ded4 - http: Don't break the header into chunks if HTTP/2 +Jay Satiro (20 May 2016) +- openssl: cleanup must free compression methods - nghttp2 callback deals with TLS layer and therefore the header does not - need to be broken into chunks. + - Free compression methods if OpenSSL 1.0.2 to avoid a memory leak. - Bug: https://github.com/curl/curl/issues/659 - Reported-by: Kazuho Oku - -Daniel Stenberg (16 Feb 2016) -- [Viktor Szakats brought this change] - - openssl: use macro to guard the opaque EVP_PKEY branch + Bug: https://github.com/curl/curl/issues/817 + Reported-by: jveazey@users.noreply.github.com -- [Viktor Szakats brought this change] +Daniel Stenberg (20 May 2016) +- [Gisle Vanem brought this change] - openssl: avoid direct PKEY access with OpenSSL 1.1.0 - - by using API instead of accessing an internal structure. - This is required starting OpenSSL 1.1.0-pre3. + curl_multibyte: fix compiler error - Closes #650 - -- RELEASE-NOTES: synced with ede0bfc079da - -- [Clint Clayton brought this change] - - CURLOPT_CONNECTTIMEOUT_MS.3: Fix example to use milliseconds option + While compiling lib/curl_multibyte.c with '-DUSE_WIN32_IDN' etc. I was + getting: - Change the example in the docs for CURLOPT_CONNECTTIMEOUT_MS to use - CURLOPT_CONNECTTIMEOUT_MS instead of CURLOPT_CONNECTTIMEOUT. + f:\mingw32\src\inet\curl\lib\memdebug.h(38): error C2054: expected '(' + to follow 'CURL_EXTERN' - Closes #653 + f:\mingw32\src\inet\curl\lib\memdebug.h(38): error C2085: + 'curl_domalloc': not in formal parameter list -- opt-docs: add more references +- THANKS-filter: make Jan-E get proper credit -- [David Byron brought this change] +- [Jan-E brought this change] - SCP: use libssh2_scp_recv2 to support > 2GB files on windows - - libssh2_scp_recv2 is introduced in libssh2 1.7.0 - to be released "any - day now. + winbuild/Makefile.vc: Fix check on SSL, MBEDTLS, WINSSL exclusivity - Closes #451 + Closes #818 -Jay Satiro (13 Feb 2016) -- [Shine Fan brought this change] +- [Alexander Traud brought this change] - gtls: fix for builds lacking encrypted key file support + libcurl.m4: Avoid obsolete warning - Bug: https://github.com/curl/curl/pull/651 + Closes #821 -Dan Fandrich (13 Feb 2016) -- test1604: Add to Makefile.inc so it gets run +Jay Satiro (20 May 2016) +- [Michael Kaufmann brought this change] -Jay Satiro (12 Feb 2016) -- generate.bat: Fix comment bug by removing old comments + CURLOPT_CONNECT_TO.3: user must not free the list prematurely - Remove NOTES section, it's no longer needed since we aren't setting the - errorlevel and more importantly the recently updated URL in the comments - is causing some unusual behavior that breaks the script. + The connect-to list isn't copied so as long as the handle may be used + for a transfer the list must be valid. - Closes https://github.com/curl/curl/issues/649 + Bug: https://github.com/curl/curl/pull/819 + Reported-by: Michael Kaufmann -Kamil Dudka (12 Feb 2016) -- curl.1: --disable-{eprt,epsv} are ignored for IPv6 hosts - - The behavior has been clarified in CURLOPT_FTP_USE_{EPRT,EPSV}.3 man - pages since curl-7_12_3~131. This patch makes it clear in the curl.1 - man page, too. - - Bug: https://bugzilla.redhat.com/1305970 +Daniel Stenberg (19 May 2016) +- RELEASE-NOTES: synced with 48114a8634242c -Daniel Stenberg (12 Feb 2016) -- dist: ship buildconf.bat too +- openssl: ERR_remove_thread_state() is deprecated in latest 1.1.0 - As the winbuild/* stuff uses it! + See OpenSSL commit 21e001747d4a -- curlx_tvdiff: handle 32bit time_t overflows - - On 32bit systems, make sure we don't overflow and return funky values - for very large time differences. - - Reported-by: Anders Bakken +- http2: use HTTP/2 in the HTTP/1.1-alike header - Closes #646 + ... when generating them, not "2.0" as the protocol is called just + HTTP/2 and nothing else. -- examples: fix some compiler warnings +Jay Satiro (19 May 2016) +- dist: include curl_multi_socket_all.3 + + Closes https://github.com/curl/curl/pull/816 -- simplessl.c: fix my breakage +Steve Holme (18 May 2016) +- bump: Start work on 7.49.1 -- examples: adhere to curl code style +Daniel Stenberg (18 May 2016) +- curlbuild.h.dist: check __LP64__ as well to fix MIPS build - All plain C examples now (mostly) adhere to the curl code style. While - they are only examples, they had diverted so much and contained all - sorts of different mixed code styles by now. Having them use a unified - style helps users and readability. Also, as they get copy-and-pasted - widely by users, making sure they're clean and nice is a good idea. + The preprocessor check that sets up the 32bit defines for non-configure + builds didn't work properly for MIPS systems as __mips__ is defined for + both 32bit and 64bit. Now __LP64__ is also checked and indicates 64bit. - 573 checksrc warnings were addressed. + Reported-by: Tomas Jakobsson + Fixes #813 + +- [Marcel Raad brought this change] -- examples/cookie_interface.c: add cleanup call + schannel: fix compile break with MSVC XP toolset - cleaning up handles is a good idea as we leak memory otherwise + For the Windows XP toolset of Visual C++ 2013/2015, the old Windows SDK + 7.1 is used. In this case, _USING_V110_SDK71_ is defined. - Also, line wrapped before 80 columns. + Closes #812 -Kamil Dudka (10 Feb 2016) -- nss: search slash in forward direction in dup_nickname() +- dist: include CHECKSRC.md - It is wasteful to search it backwards if we look for _any_ slash. + Reported-by: Paul Howarth + Bug: https://curl.haxx.se/mail/lib-2016-05/0116.html -- nss: do not count enabled cipher-suites +- test/Makefile.am: include manpage-scan.pl and nroff-scan.pl in dist - We only care if at least one cipher-suite is enabled, so it does - not make any sense to iterate till the end and count all enabled - cipher-suites. - -Daniel Stenberg (10 Feb 2016) -- contributors.sh: make 79 the max column width (from 80) + Reported-by: Ray Satiro + Bug: https://curl.haxx.se/mail/lib-2016-05/0113.html -- RELEASE-NOTES: synced with c276aefee3995 +Version 7.49.0 (17 May 2016) -- mbedtls.c: re-indent to better match curl standards +Daniel Stenberg (17 May 2016) +- THANKS: 24 new names from 7.49.0 release notes -- [Rafael Antonio brought this change] +- RELEASE-NOTES: 7.49.0 - mbedtls: fix memory leak when destroying SSL connection data +- mbedtls/polarssl: set "hostname" unconditionally - Closes #626 - -- mbedtls: fix ALPN usage segfault + ...as otherwise the TLS libs will skip the CN/SAN check and just allow + connection to any server. curl previously skipped this function when SNI + wasn't used or when connecting to an IP address specified host. - Since we didn't keep the input argument around after having called - mbedtls, it could end up accessing the wrong memory when figuring out - the ALPN protocols. + CVE-2016-3739 - Closes #642 + Bug: https://curl.haxx.se/docs/adv_20160518A.html + Reported-by: Moti Avrahami -Jay Satiro (9 Feb 2016) -- [Timotej Lazar brought this change] +- [Frank Gevaerts brought this change] - opts: update references to renamed options + CURLOPT_RESOLVE.3: fix typo + + Closes #811 -- KNOWN_BUGS: Update #92 - Windows device prefix +- docs: CURLOPT_RESOLVE overrides CURLOPT_IPRESOLVE -- tool_doswin: Support for literal path prefix \\?\ +- KNOWN_BUGS: GnuTLS backend skips really long certificate fields - For example something like --output \\?\C:\foo - -Daniel Stenberg (9 Feb 2016) -- configure: state "BoringSSL" in summary when that was detected + Closes #762 -- [David Benjamin brought this change] +- CURLOPT_HTTPPOST.3: the data needs to be around while in use - openssl: remove most BoringSSL #ifdefs. - - As of https://boringssl-review.googlesource.com/#/c/6980/, almost all of - BoringSSL #ifdefs in cURL should be unnecessary: - - - BoringSSL provides no-op stubs for compatibility which replaces most - #ifdefs. - - - DES_set_odd_parity has been in BoringSSL for nearly a year now. Remove - the compatibility codepath. - - - With a small tweak to an extend_key_56_to_64 call, the NTLM code - builds fine. +- openssl: get_cert_chain: fix NULL dereference - - Switch OCSP-related #ifdefs to the more generally useful - OPENSSL_NO_OCSP. + CID 1361815: Explicit null dereferenced (FORWARD_NULL) + +- openssl: get_cert_chain: avoid NULL dereference - The only #ifdefs which remain are Curl_ossl_version and the #undefs to - work around OpenSSL and wincrypt.h name conflicts. (BoringSSL leaves - that to the consumer. The in-header workaround makes things sensitive to - include order.) + CID 1361811: Explicit null dereferenced (FORWARD_NULL) + +- dprintf_formatf: fix (false?) Coverity warning - This change errs on the side of removing conditionals despite many of - the restored codepaths being no-ops. (BoringSSL generally adds no-op - compatibility stubs when possible. OPENSSL_VERSION_NUMBER #ifdefs are - bad enough!) + CID 1024412: Memory - illegal accesses (OVERRUN). Claimed to happen when + we run over 'workend' but the condition says <= workend and for all I + can see it should be safe. Compensating for the warning by adding a byte + margin in the buffer. - Closes #640 + Also, removed the extra brace level indentation in the code and made it + so that 'workend' is only assigned once within the function. -Jay Satiro (8 Feb 2016) -- KNOWN_BUGS: Windows device prefix is required for devices +- RELEASE-NOTES: synced with 2dcb5adc72d6 + +- THANKS-filter: fixed Jonathan Cardoso -- tool_urlglob: Allow reserved dos device names (Windows) +Jay Satiro (15 May 2016) +- ftp: fix incorrect out-of-memory code in Curl_pretransfer - Allow --output to reserved dos device names without the device prefix - for backwards compatibility. + - Return value type must match function type. - Example: --output NUL can be used instead of --output \\.\NUL + s/CURLM_OUT_OF_MEMORY/CURLE_OUT_OF_MEMORY/ - Bug: https://github.com/curl/curl/commit/4520534#commitcomment-15954863 - Reported-by: Gisle Vanem + Caught by Travis CI -Daniel Stenberg (8 Feb 2016) -- cookies: allow spaces in cookie names, cut of trailing spaces - - It turns out Firefox and Chrome both allow spaces in cookie names and - there are sites out there using that. +Daniel Stenberg (15 May 2016) +- ftp wildcard: segfault due to init only in multi_perform - Turned out the code meant to strip off trailing space from cookie names - didn't work. Fixed now. + The proper FTP wildcard init is now more properly done in Curl_pretransfer() + and the corresponding cleanup in Curl_close(). - Test case 8 modified to verify both these changes. + The previous place of init/cleanup code made the internal pointer to be NULL + when this feature was used with the multi_socket() API, as it was made within + the curl_multi_perform() function. - Closes #639 + Reported-by: Jonathan Cardoso Machado + Fixes #800 -Patrick Monnerat (8 Feb 2016) -- Merge branch 'master' of github.com:curl/curl +Jay Satiro (13 May 2016) +- libcurl-tlibcurl-thread: Update OpenSSL links + + Because the old OpenSSL link now redirects to their master documentation + (currently 1.1.0), which does not document the required actions for + OpenSSL <= 1.0.2. -- os400: sync ILE/RPG definitions with latest public header files. +Daniel Stenberg (13 May 2016) +- [Viktor Szakats brought this change] -Daniel Stenberg (8 Feb 2016) -- [Ludwig Nussel brought this change] + darwinssl.c: fix OS X codename typo in comment - SSLCERTS: update wrt SSL CA certificate store +- RELEASE-NOTES: synced with 68701e51c1f7 + + Added 8 bug fixes and 5 more contrbutors -- [Ludwig Nussel brought this change] +- [Jay Satiro brought this change] - configure: --with-ca-fallback: use built-in TLS CA fallback + mprintf: Fix processing of width and prec args - When trying to verify a peer without having any root CA certificates - set, this makes libcurl use the TLS library's built in default as - fallback. + Prior to this change a width arg could be erroneously output, and also + width and precision args could not be used together without crashing. - Closes #569 - -- Proxy-Connection: stop sending this header by default + "%0*d%s", 2, 9, "foo" - RFC 7230 says we should stop. Firefox already stopped. + Before: "092" + After: "09foo" - Bug: https://github.com/curl/curl/issues/633 - Reported-By: Brad Fitzpatrick + "%*.*s", 5, 2, "foo" - Closes #633 - -- bump: work toward the next release - -- THANKS: 2 contributors from the 7.47.1 release - -- RELEASE-PROCEDURE: remove the github upload part + Before: crash + After: " fo" - ... as we're HTTPS on the main site now, there's no point in that - extra step - -Version 7.47.1 (8 Feb 2016) + Test 557 is updated to verify this and more -Daniel Stenberg (8 Feb 2016) -- RELEASE-NOTES: curl 7.47.1 time! +- [Michael Kaufmann brought this change] -Jay Satiro (8 Feb 2016) -- tool_operhlp: Check for backslashes in get_url_file_name - - Extract the filename from the last slash or backslash. Prior to this - change backslashes could be part of the filename. + ConnectionExists: follow-up fix for proxy re-use - This change needed for the curl tool built for Cygwin. Refer to the - CYGWIN addendum in advisory 20160127B. + Follow-up commit to 5823179 - Bug: https://curl.haxx.se/docs/adv_20160127B.html + Closes #648 -Daniel Stenberg (7 Feb 2016) -- RELEASE-NOTES: synced with d6a8869ea34 +- [Per Malmberg brought this change] -Jay Satiro (6 Feb 2016) -- openssl: Fix signed/unsigned mismatch warning in X509V3_ext + darwinssl: fix certificate verification disable on OS X 10.8 - sk_X509_EXTENSION_num may return an unsigned integer, however the value - will fit in an int. + The new way of disabling certificate verification doesn't work on + Mountain Lion (OS X 10.8) so we need to use the old way in that version + too. I've tested this solution on versions 10.7.5, 10.8, 10.9, 10.10.2 + and 10.11. - Bug: https://github.com/curl/curl/commit/dd1b44c#commitcomment-15913896 - Reported-by: Gisle Vanem - -Daniel Stenberg (7 Feb 2016) -- TODO: 17.11 -w output to stderr + Closes #802 -Jay Satiro (6 Feb 2016) -- [Michael Kaufmann brought this change] +- [Cory Benfield brought this change] - idn_win32: Better error checking + http2: Add space between colon and header value - .. also fix a conversion bug in the unused function - curl_win32_ascii_to_idn(). + curl's representation of HTTP/2 responses involves transforming the + response to a format that is similar to HTTP/1.1. Prior to this change, + curl would do this by separating header names and values with only a + colon, without introducing a space after the colon. - And remove wprintfs on error (Jay). + While this is technically a valid way to represent a HTTP/1.1 header + block, it is much more common to see a space following the colon. This + change introduces that space, to ensure that incautious tools are safely + able to parse the header block. - Bug: https://github.com/curl/curl/pull/637 - -- [Gisle Vanem brought this change] - - examples/asiohiper: Avoid function name collision on Windows + This also ensures that the difference between the HTTP/1.1 and HTTP/2 + response layout is as minimal as possible. - closesocket => close_socket - Winsock already has the former. + Bug: https://github.com/curl/curl/issues/797 - Bug: https://curl.haxx.se/mail/lib-2016-02/0016.html - -- [Gisle Vanem brought this change] + Closes #798 + Fixes #797 - examples/htmltitle: Use _stricmp on Windows +Kamil Dudka (12 May 2016) +- openssl: fix compile-time warning in Curl_ossl_check_cxn() - Bug: https://curl.haxx.se/mail/lib-2016-02/0017.html - -Daniel Stenberg (6 Feb 2016) -- COPYING: clarify that Daniel is not the sole author + ... introduced in curl-7_48_0-293-g2968c83: - ... done on request and as it is a fair point. - -Jay Satiro (5 Feb 2016) -- unit1604: Fix unit setup return code - -- tool_doswin: Use type SANITIZEcode in sanitize_file_name + Error: COMPILER_WARNING: + lib/vtls/openssl.c: scope_hint: In function ‘Curl_ossl_check_cxn’ + lib/vtls/openssl.c:767:15: warning: conversion to ‘int’ from ‘ssize_t’ + may alter its value [-Wconversion] -- tool_doswin: Improve sanitization processing +Jay Satiro (11 May 2016) +- openssl: stricter connection check function + + - In the case of recv error, limit returning 'connection still in place' + to EINPROGRESS, EAGAIN and EWOULDBLOCK. - - Add unit test 1604 to test the sanitize_file_name function. + This is an improvement on the parent commit which changed the openssl + connection check to use recv MSG_PEEK instead of SSL_peek. - - Use -DCURL_STATICLIB when building libcurltool for unit testing. + Ref: https://github.com/curl/curl/commit/856baf5#comments + +Daniel Stenberg (11 May 2016) +- [Anders Bakken brought this change] + + TLS: SSL_peek is not a const operation - - Better detection of reserved DOS device names. + Calling SSL_peek can cause bytes to be read from the raw socket which in + turn can upset the select machinery that determines whether there's data + available on the socket. - - New flags to modify sanitize behavior: + Since Curl_ossl_check_cxn only tries to determine whether the socket is + alive and doesn't actually need to see the bytes SSL_peek seems like + the wrong function to call. - SANITIZE_ALLOW_COLONS: Allow colons - SANITIZE_ALLOW_PATH: Allow path separators and colons - SANITIZE_ALLOW_RESERVED: Allow reserved device names - SANITIZE_ALLOW_TRUNCATE: Allow truncating a long filename + We're able to occasionally reproduce a connect timeout due to this + bug. What happens is that Curl doesn't know to call SSL_connect again + after the peek happens since data is buffered in the SSL buffer and thus + select won't fire for this socket. - - Restore sanitization of banned characters from user-specified outfile. + Closes #795 + +Jay Satiro (9 May 2016) +- [Daniel Stenberg brought this change] + + TLS: move the ALPN/NPN enable bits to the connection - Prior to this commit sanitization of a user-specified outfile was - temporarily disabled in 2b6dadc because there was no way to allow path - separators and colons through while replacing other banned characters. - Now in such a case we call the sanitize function with - SANITIZE_ALLOW_PATH which allows path separators and colons to pass - through. + Only protocols that actually have a protocol registered for ALPN and NPN + should try to get that negotiated in the TLS handshake. That is only + HTTPS (well, http/1.1 and http/2) right now. Previously ALPN and NPN + would wrongly be used in all handshakes if libcurl was built with it + enabled. + Reported-by: Jay Satiro - Closes https://github.com/curl/curl/issues/624 - Reported-by: Octavio Schroeder + Fixes #789 -- [Viktor Szakats brought this change] +Daniel Stenberg (8 May 2016) +- libcurl-thread.3: openssl 1.1.0 is safe, and so is boringssl - URLs: change more http to https +- [Antonio Larrosa brought this change] -- sasl_sspi: Fix memory leak in domain populate + connect: fix invalid "Network is unreachable" errors - Free an existing domain before replacing it. + Sometimes, in systems with both ipv4 and ipv6 addresses but where the + network doesn't support ipv6, Curl_is_connected returns an error + (intermittently) even if the ipv4 socket connects successfully. - Bug: https://github.com/curl/curl/issues/635 - Reported-by: silveja1@users.noreply.github.com - -Daniel Stenberg (4 Feb 2016) -- [Viktor Szakats brought this change] - - URLs: follow GitHub project rename (also Travis CI) + This happens because there's a for-loop that iterates on the sockets but + the error variable is not resetted when the ipv4 is checked and is ok. - Closes #632 - -- CHANGES.o: fix references to curl.haxx.nu + This patch fixes this problem by setting error to 0 when checking the + second socket and not having a result yet. - I removed the scheme prefix from the URLs references this host name, as - we don't own/run that anymore but the name is kept for historic reasons. - -- HISTORY: add some info about when we used which host names + Fixes #794 -Jay Satiro (2 Feb 2016) -- [Viktor Szakats brought this change] +Jay Satiro (5 May 2016) +- FAQ: refer to thread safety guidelines - URLs: change more http to https +Daniel Stenberg (3 May 2016) +- connections: non-HTTP proxies on different ports aren't reused either + + Reported-by: Oleg Pudeyev and fuchaoqun + + Fixes #648 -Dan Fandrich (3 Feb 2016) -- URLs: Change more haxx.se URLs from http: to https: +- http: make sure a blank header overrides accept_decoding + + Reported-by: rcanavan + Assisted-by: Isaac Boukris + Closes #785 -Daniel Stenberg (3 Feb 2016) -- RELEASE-NOTES: synced with 4af40b364 +- CHECKSRC.md: clarified, explained the whitelist file -- URLs: change all http:// URLs to https:// +- nroff-scan.pl: verify that references are made with \fI -- configure: update the copyright year range in output +- docs: unified man page references to use \fI -- dotdot: allow an empty input string too - - It isn't used by the code in current conditions but for safety it seems - sensible to at least not crash on such input. +- TODO: 17.14 --fail without --location should treat 3xx as a failure - Extended unit test 1395 to verify this too as well as a plain "/" input. - -- HTTPS: update a bunch of URLs from HTTP to HTTPS + Closes #727 -- [Sergei Nikulov brought this change] +- RELEASE-NOTES: synced with 7987f5cb14d - AppVeyor: updated to handle OpenSSL/WinSSL builds - - Closes #621 +- [Isaac Boukris brought this change] -Jay Satiro (1 Feb 2016) -- tool_operate: Don't sanitize --output path (Windows) - - Due to path separators being incorrectly sanitized in --output - pathnames, eg -o c:\foo => c__foo + CURLOPT_ACCEPT_ENCODING.3: Follow-up clarification - This is a partial revert of 3017d8a until I write a proper fix. The - remote-name will continue to be sanitized, but if the user specified an - --output with string replacement (#1, #2, etc) that data is unsanitized - until I finish a fix. + Mention possible content-length mismatch with sum of bytes reported + by write callbacks when auto decoding is enabled. - Bug: https://github.com/bagder/curl/issues/624 - Reported-by: Octavio Schroeder + See #785 -- curl.1: Explain remote-name behavior if file already exists - - .. also warn about letting the server pick the filename. +- test1140: run nroff-scan to verify man pages -- [Gisle Vanem brought this change] +- nroff-scan.pl: verify the .BR references as well - urldata: Error on missing SSL backend-specific connect info +- CURLOPT_CONV_TO_NETWORK_FUNCTION.3: fix bad man page reference -Daniel Stenberg (28 Jan 2016) -- bump: towards the next (7.47.1 ?) +- CURLOPT_BUFFERSIZE.3: fix reference to CURLOPT_MAX_RECV_SPEED_LARGE -- [Sergei Nikulov brought this change] +- curl_easy_pause.3: fix man page reference - cmake: fixed when OpenSSL enabled on Windows and schannel detected +Jay Satiro (1 May 2016) +- tool_cb_hdr: Fix --remote-header-name with schemeless URL - Closes #617 - -Jay Satiro (28 Jan 2016) -- [Sergei Nikulov brought this change] - - urldata: moved common variable out of ifdef + - Move the existing scheme check from tool_operate. - Closes https://github.com/bagder/curl/pull/618 - -- [Viktor Szakats brought this change] + In the case of --remote-header-name we want to parse Content-disposition + for a filename, but only if the scheme is http or https. A recent + adjustment 0dc4d8e was made to account for schemeless URLs however it's + not 100% accurate. To remedy that I've moved the scheme check to the + header callback, since at that point the library has already determined + the scheme. + + Bug: https://github.com/curl/curl/issues/760 + Reported-by: Kai Noda - tool_doswin: silence unused function warning +Daniel Stenberg (1 May 2016) +- tls: make setting pinnedkey option fail if not supported - tool_doswin.c:185:14: warning: 'msdosify' defined but not used - [-Wunused-function] + to make it obvious to users trying to use the feature with TLS backends + not supporting it. - Closes https://github.com/bagder/curl/pull/616 + Discussed in #781 + Reported-by: Travis Burtrum -Daniel Stenberg (27 Jan 2016) -- getredirect.c: fix variable name +- nroff-scan.pl: verifies nroff pages - Reported-by: Bernard Spil - -Version 7.47.0 (27 Jan 2016) - -Daniel Stenberg (27 Jan 2016) -- examples/Makefile.inc: specify programs without .c! + ... not used by any test yet but can be used stand-alone. -- THANKS: 6 new contributors from 7.47.0 release notes +- opts: fix broken/bad references -- [Isaac Boukris brought this change] +- [Michael Kaufmann brought this change] - NTLM: Fix ConnectionExists to compare Proxy credentials - - Proxy NTLM authentication should compare credentials when - re-using a connection similar to host authentication, as it - authenticate the connection. - - Example: - curl -v -x http://proxy:port http://host/ -U good_user:good_pwd - --proxy-ntlm --next -x http://proxy:port http://host/ - [-U fake_user:fake_pwd --proxy-ntlm] - - CVE-2016-0755 + docs: fix bugs in CURLOPT_HTTP_VERSION.3 and CURLOPT_PIPEWAIT.3 - Bug: http://curl.haxx.se/docs/adv_20160127A.html - -- [Ray Satiro brought this change] + Closes #786 - curl: avoid local drive traversal when saving file (Windows) - - curl does not sanitize colons in a remote file name that is used as the - local file name. This may lead to a vulnerability on systems where the - colon is a special path character. Currently Windows/DOS is the only OS - where this vulnerability applies. +- CURLOPT_ACCEPT_ENCODING.3: clarified - CVE-2016-0754 + As discussed in #785 + +- curl.1: --mail-rcpt can be used multiple times - Bug: http://curl.haxx.se/docs/adv_20160127B.html + Reported-by: mgendre + Closes #784 -- RELEASE-NOTES: 7.47.0 +- [Karlson2k brought this change] -- FAQ: language fix in 4.19 + tests: Use 'pathhelp' for paths conversions in secureserver.pl + + Closes #675 -- [paulehoffman brought this change] +- [Karlson2k brought this change] - FAQ: Update to point to GitHub - - Current FAQ didn't make it clear where the main repo is. - - Closes #612 + tests: Use 'pathhelp' for paths conversions in sshserver.pl -- maketgz: generate date stamp with LC_TIME=C - - bug: http://curl.haxx.se/mail/lib-2016-01/0123.html +- [Karlson2k brought this change] -- curl_multi_socket_action.3: line wrap + tests: Use 'pathhelp' for current path in runtests.pl -- RELEASE-NOTES: synced with d58ba66eeceb +- [Karlson2k brought this change] -Steve Holme (21 Jan 2016) -- TODO: "Create remote directories" for SMB + tests: pathhelp.pm to process paths on Msys/Cygwin -Jay Satiro (18 Jan 2016) -- mbedtls: Fix pinned key return value on fail - - - Switch from verifying a pinned public key in a callback during the - certificate verification to inline after the certificate verification. - - The callback method had three problems: +- lib: include curl_printf.h as one of the last headers - 1. If a pinned public key didn't match, CURLE_SSL_PINNEDPUBKEYNOTMATCH - was not returned. + curl_printf.h defines printf to curl_mprintf, etc. This can cause + problems with external headers which may use + __attribute__((format(printf, ...))) markers etc. - 2. If peer certificate verification was disabled the pinned key - verification did not take place as it should. + To avoid that they cause problems with system includes, we include + curl_printf.h after any system headers. That makes the three last + headers to always be, and we keep them in this order: - 3. (related to #2) If there was no certificate of depth 0 the callback - would not have checked the pinned public key. + curl_printf.h + curl_memory.h + memdebug.h - Though all those problems could have been fixed it would have made the - code more complex. Instead we now verify inline after the certificate - verification in mbedtls_connect_step2. + None of them include system headers, they all do funny #defines. - Ref: http://curl.haxx.se/mail/lib-2016-01/0047.html - Ref: https://github.com/bagder/curl/pull/601 - -- tests: Add a test for pinnedpubkey fail even when insecure + Reported-by: David Benjamin - Because disabling the peer verification (--insecure) must not disable - the public key pinning check (--pinnedpubkey). - -- [Daniel Schauenberg brought this change] - - CURLINFO_RESPONSE_CODE.3: add example + Fixes #743 -Kamil Dudka (15 Jan 2016) -- ssh: make CURLOPT_SSH_PUBLIC_KEYFILE treat "" as NULL - - The CURLOPT_SSH_PUBLIC_KEYFILE option has been documented to handle - empty strings specially since curl-7_25_0-31-g05a443a but the behavior - was unintentionally removed in curl-7_38_0-47-gfa7d04f. +- memdebug.h: remove inclusion of other headers - This commit restores the original behavior and clarifies it in the - documentation that NULL and "" have both the same meaning when passed - to CURLOPT_SSH_PUBLIC_KEYFILE. + Mostly because they're not needed, because memdebug.h is always included + last of all headers so the others already included the correct ones. - Bug: http://curl.haxx.se/mail/lib-2016-01/0072.html + But also, starting now we don't want this to accidentally include any + system headers, as the header included _before_ this header may add + defines and other fun stuff that we won't want used in system includes. -Daniel Stenberg (14 Jan 2016) -- RELEASE-NOTES: synced with 35083ca60ed035a +- [Jay Satiro brought this change] -- openssl: improved error detection/reporting + curl -J: make it work even without http:// scheme on URL - ... by extracting the LIB + REASON from the OpenSSL error code. OpenSSL - 1.1.0+ returned a new func number of another cerfificate fail so this - required a fix and this is the better way to catch this error anyway. - -- openssl: for 1.1.0+ they now provide a SSLeay() macro of their own - -- CURLOPT_RESOLVE.3: minor language polish - -- configure: assume IPv6 works when cross-compiled + It does open up a miniscule risk that one of the other protocols that + libcurl could use would send back a Content-Disposition header and then + curl would act on it even if not HTTP. - The configure test uses AC_TRY_RUN to figure out if an ipv6 socket - works, and testing like that doesn't work for cross-compiles. These days - IPv6 support is widespread so a blind guess is probably more likely to - be 'yes' than 'no' now. + A future mitigation for this risk would be to allow the callback to ask + libcurl which protocol is being used. - Further: anyone who cross-compiles can use configure's --disable-ipv6 to - explicitly disable IPv6 and that also works for cross-compiles. + Verified with test 1312 - Made happen after discussions in issue #594 + Closes #760 -- TODO: "Try to URL encode given URL" +- manpage-scan.pl: also verify the command line option docs - Closes #514 + This script now also scans src/tool_getparam.c, docs/curl.1 and + src/tool_help.c and will warn if any of them lists a command line option + not mentioned in one of the other places. -- ConnectionExists: only do pipelining/multiplexing when asked - - When an HTTP/2 upgrade request fails (no protocol switch), it would - previously detect that as still possible to pipeline on (which is - acorrect) and do that when PIPEWAIT was enabled even if pipelining was - not explictily enabled. - - It should only pipelined if explicitly asked to. +- curl: show the long option version of -q in the -h list + +- curl: remove "--socks" as "--socks5" turned 8 - Closes #584 + In commit 2e42b0a2524 (Jan 2008) we made the option "--socks" deprecated + and it has not been documented since. The more explicit socks options + (like --socks4 or --socks5) should be used. -- [Mohammad AlSaleh brought this change] +- curl.1: document the deprecated --ftp-ssl option - lib: Prefix URLs with lower-case protocol names/schemes - - Before this patch, if a URL does not start with the protocol - name/scheme, effective URLs would be prefixed with upper-case protocol - names/schemes. This behavior might not be expected by library users or - end users. - - For example, if `CURLOPT_DEFAULT_PROTOCOL` is set to "https". And the - URL is "hostname/path". The effective URL would be - "HTTPS://hostname/path" instead of "https://hostname/path". - - After this patch, effective URLs would be prefixed with a lower-case - protocol name/scheme. - - Closes #597 +- curl: remove --http-request - Signed-off-by: Mohammad AlSaleh + It was mentioned as deprecated already in commit ae1912cb0d4 from + 1999. It has not been documented in this millennium. -- [Alessandro Ghedini brought this change] +- curl: mention --ntlm-wb in -h list - scripts: don't generate and install zsh completion when cross-compiling +- curl: -h output lacked --proxy-header -- [Alessandro Ghedini brought this change] +- curl.1: document --ntlm-wb - scripts: fix zsh completion generation - - The script should use the just-built curl, not the system one. This fixes - zsh completion generation when no system curl is installed. +- curl.1: document the long format of -q: --disable -- [Alessandro Ghedini brought this change] +- curl.1: mention the deprecated --krb4 option - zsh.pl: fail if no curl is found +- curl.1: document --ftp-ssl-reqd - Instead of generation a broken completion file. - -- [Michael Kaufmann brought this change] + Even if deprecated, document it so that people will find it as old + scripts may still use it. - IDN host names: Remove the port number before converting to ACE +- curl: use --telnet-option as documented - Closes #596 + The code said "telnet-options" but no documentation ever said so. It + worked fine since the code is fine with a unique match of the first + part. -Jay Satiro (10 Jan 2016) -- runtests: Add mbedTLS to the SSL backends +- getparam: remove support for --ftpport - .. and enable SSLpinning tests for mbedTLS, BoringSSL and LibreSSL. + It has been deprecated and undocumented since commit ad5ead8bed7 (Dec + 2003). --ftp-port is the proper long option name. -Daniel Stenberg (10 Jan 2016) -- [Thomas Glanzmann brought this change] +- curl: make --disable work as long form of -q + + To make the aliases list reflect reality. - mbedtls: implement CURLOPT_PINNEDPUBLICKEY +- aliases: remove trailing space from capath string -Jay Satiro (9 Jan 2016) -- [Tatsuhiro Tsujikawa brought this change] +- cmdline parse: only single letter options have single-letter strings + + ... moved around options so that parsing the code to find all + single-letter options easier. - url: Fix compile error with --enable-werror +Jay Satiro (28 Apr 2016) +- CURLINFO_TLS_SSL_PTR.3: Clarify SSL pointer availability + + Bug: https://curl.haxx.se/mail/lib-2016-04/0126.html + Reported-by: Bru Rom -- [Tatsuhiro Tsujikawa brought this change] +Daniel Stenberg (28 Apr 2016) +- curl_easy_getinfo.3: remove superfluous blank lines - http2: Ensure that http2_handle_stream_close is called +- test1139: verifies libcurl option man page presence - Previously, when HTTP/2 is enabled and used, and stream has content - length known, Curl_read was not called when there was no bytes left to - read. Because of this, we could not make sure that - http2_handle_stream_close was called for every stream. Since we use - http2_handle_stream_close to emit trailer fields, they were - effectively ignored. This commit changes the code so that Curl_read is - called even if no bytes left to read, to ensure that - http2_handle_stream_close is called for every stream. + - checks that each option has its own man page present - Discussed in https://github.com/bagder/curl/pull/564 + - checks that each option is mentioned in its corresponding index man + page -Daniel Stenberg (8 Jan 2016) -- http2: handle the received SETTINGS frame - - This regression landed in 5778e6f5 and made libcurl not act on received - settings and instead stayed with its internal defaults. +- curl_easy_getinfo.3: added missing mention of CURLINFO_TLS_SESSION - Bug: http://curl.haxx.se/mail/lib-2016-01/0031.html - Reported-by: Bankde + ... although it is deprecated. -- Revert "multiplex: allow only once HTTP/2 is actually used" +Jay Satiro (28 Apr 2016) +- mbedtls: Fix session resume + + This also fixes PolarSSL session resume. - This reverts commit 46cb70e9fa81c9a56de484cdd7c5d9d0d9fbec36. + Prior to this change the TLS session information wasn't properly + saved and restored for PolarSSL and mbedTLS. - Bug: http://curl.haxx.se/mail/lib-2016-01/0031.html - -Jay Satiro (8 Jan 2016) -- [Tatsuhiro Tsujikawa brought this change] - - http2: Fix PUSH_PROMISE headers being treated as trailers + Bug: https://curl.haxx.se/mail/lib-2016-01/0070.html + Reported-by: Thomas Glanzmann - Discussed in https://github.com/bagder/curl/pull/564 + Bug: https://curl.haxx.se/mail/lib-2016-04/0095.html + Reported-by: Moti Avrahami + +Daniel Stenberg (27 Apr 2016) +- RELEASE-NOTES: synced with f4298fcc6d2 -Daniel Stenberg (8 Jan 2016) - [Michael Kaufmann brought this change] - connection reuse: IDN host names fixed + opts: Fix some syntax errors in example code fragments + + Fixes #779 + +- openssl: avoid BN_print a NULL bignum - Use the ACE form of IDN hostnames as key in the connection cache. Add - new tests. + OpenSSL 1.1.0-pre seems to return NULL(?) for a whole lot of those + numbers so make sure the function handles this. - Closes #592 + Reported-by: Linus Nordberg -- tests: mark IPv6 FTP and FTPS tests with the FTP keyword +- [Marcel Raad brought this change] -Jay Satiro (7 Jan 2016) -- mbedtls: Fix ALPN support - - - Fix ALPN reply detection. + CONNECT_ONLY: don't close connection on GSS 401/407 reponses - - Wrap nghttp2 code in ifdef USE_NGHTTP2. + Previously, connections were closed immediately before the user had a + chance to extract the socket when the proxy required Negotiate + authentication. + This regression was brought in with the security fix in commit + 79b9d5f1a42578f - Prior to this change ALPN and HTTP/2 did not work properly in mbedTLS. + Closes #655 -- http2: Fix client write for trailers on stream close - - Check that the trailer buffer exists before attempting a client write - for trailers on stream close. - - Refer to comments in https://github.com/bagder/curl/pull/564 +- CURLINFO_TLS_SESSION.3: clarify TLS library support before 7.48.0 -Daniel Stenberg (7 Jan 2016) -- COPYING: update general copyright year range +- mbedtls.c: silly spellfix of a comment -- ConnectionExists: add missing newline in infof() call +- KNOWN_BUGS: 1.10 Strips trailing dot from host name - Mistake from commit a464f33843ee1 + Closes #716 -- multiplex: allow only once HTTP/2 is actually used - - To make sure curl doesn't allow multiplexing before a connection is - upgraded to HTTP/2 (like when Upgrade: h2c fails), we must make sure the - connection uses HTTP/2 as well and not only check what's wanted. - - Closes #584 +- test1322: verify stripping of trailing dot from host name - Patch-by: c0ff + While being debated (in #716) and a violation of RFC 7230 section 5.4, + this test verifies that the existing functionality works as intended. It + strips the dot from the host name and uses the host without dot + throughout the internals. -Jay Satiro (4 Jan 2016) -- curl_global_init.3: Add Windows-specific info for init via DLL +- multi: accidentally used resolved host name instead of proxy - - Add to both curl_global_init.3 and libcurl.3 the caveat for Windows - that initializing libcurl via a DLL's DllMain or static initializer - could cause a deadlock. + Regression introduced in 09b5a998 - Bug: https://github.com/bagder/curl/issues/586 - Reported-by: marc-groundctl@users.noreply.github.com - -Daniel Stenberg (4 Jan 2016) -- FAQ: clarify who to mail about ECCN clarifications - -- progressfunc.c: spellfix description - -- docs/examples/multi-app.c: fix bad desc formatting - -- examples: added descriptions - -- example/simple.c: add description + Bug: https://curl.haxx.se/mail/lib-2016-04/0084.html + Reported-by: BoBo -- getredirect.c: a new example +- symbols-in-versions: added new CURLSSLBACKEND_ symbols -Marc Hoersken (27 Dec 2015) -- RELEASE-NOTES: add 5e0e81a9c4e35f04ca +- test148: fixed after the --ftp-create-dirs retry change + + follow-up commit to 3c1e84f569 as it made curl try a little harder -Daniel Stenberg (26 Dec 2015) -- RELEASE-NOTES: synced with 2aec4359db1088b10d +- curl.h: clarify curl_sslbackend for openssl clones and renames -Marc Hoersken (26 Dec 2015) -- test 1515: add data check +- [Karlson2k brought this change] -- test 1515: add MSYS support by passing a relative path + url.c: fixed DEBUGASSERT() for WinSock workaround - MSYS would otherwise turn a /-style path into a C:\-style path. - -- test 539: use datacheck mode text for ASCII-mode LISTings + If buffer is allocated, but nothing is received during prereceive + stage, than number of processed bytes must be zero. - While still using datacheck mode binary for the inline reply data. + Closes #778 -- runtests.pl: check up to 5 data parts with different text modes +- KNOWN_BUGS: --interface for ipv6 binds to unusable IP address - Move the text-mode conversion for reply/replycheck from the verify - section into the load section and add support for 4 more check parts. - -Daniel Stenberg (24 Dec 2015) -- CURLOPT_RANGE: for HTTP servers, range support is optional - -Marc Hoersken (24 Dec 2015) -- tests 1048 and 1050: use datacheck mode text for ASCII-mode LISTings - -- tests 706 and 707: use datacheck mode text for ASCII-mode LISTings - -- tests 400,403,406: use datacheck mode text for ASCII-mode LISTings + Closes #686 for now. -- sockfilt.c: fix calculation of sleep timeout on Windows +- TODO: 1.17 Add support for IRIs - Not converting to double caused small timeouts to be skipped. - -- tests first.c: fix calculation of sleep timeout on Windows + Adding support for IRIs is a mouthful, but is probably interesting at + least for areas and countries where the use of such "URLs" are growing + popularity. - Not converting to double caused small timeouts to be skipped. + Closes #776 -- test 573: add more debug output +- THANKS-filter: Travis Burtrum -- ftplistparser.c: fix handling of file LISTings using Windows EOL - - Previously file.txt[CR][LF] would have been returned as file.tx - (without the last t) if filetype is symlink. Now the t is - included and the internal item_length includes the zero byte. - - Spotted using test 576 on Windows. +- lib1517: checksrc compliance -- test 16: fix on Linux (and Windows) by using plain ASCII characters - - Follow up on b064ff0c351bb287557228575ef4c1d079b866fb, thanks Daniel. +- [moparisthebest brought this change] -- tftpd server: add Windows support by writing files in binary mode + PolarSSL: Implement public key pinning -- tests 252-255: use datacheck mode text for ASCII-mode LISTings +Patrick Monnerat (22 Apr 2016) +- os400: upgrade ILE/RPG binding -- test 16: fix on Windows by converting data file from ANSI to UTF-8 +- curl.h: CURLOPT_CONNECT_TO sets a struct slist *, not a string -Daniel Stenberg (23 Dec 2015) -- Makefile.inc: s/curl_SOURCES/CURL_FILES - - This allows the root Makefile.am to include the Makefile.inc without - causing automake to warn on it (variables named *_SOURCES are - magic). curl_SOURCES is then instead assigned properly in - src/Makefile.am only. +Daniel Stenberg (22 Apr 2016) +- contributors.sh: make --releasenotes implied - Closes #577 + It got too annoying to type =) -- [Anders Bakken brought this change] +- RELEASE-NOTES: synced with 3c1e84f5693d8093 - ConnectionExists: with *PIPEWAIT, wait for connections +- curl: make --ftp-create-dirs retry on failure + + The underlying libcurl option used for this feature is + CURLOPT_FTP_CREATE_MISSING_DIRS which has the ability to retry the dir + creation, but it was never set to do that by the command line tool. - Try harder to prevent libcurl from opening up an additional socket when - CURLOPT_PIPEWAIT is set. Accomplished by letting ongoing TCP and TLS - handshakes complete first before the decision is made. + Now it does. - Closes #575 + Bug: https://curl.haxx.se/mail/archive-2016-04/0021.html + Reported-by: John Wanghui + Help-by: Leif W -- [Anders Bakken brought this change] +- [Henrik Gaßmann brought this change] - Add .dir-locals and set c-basic-offset to 2. + winbuild: add mbedtls support - This makes it easier for emacs users to automatically get the right - 2-space indentation when they edit curl source files. + Add WITH_MBEDTLS option. Make WITH_SSL, WITH_MBEDTLS and ENABLE_WINSSL + options mutual exclusive. - c++-mode is in there as well because Emacs can't easily know if - something is a C or C++ header. + Closes #606 + +- KNOWN_BUGS: fixed "5.6 Improper use of Autoconf cache variables" - Closes #574 + As of commit d9f3b365a3 -- [Johannes Schindelin brought this change] +- [Irfan Adilovic brought this change] - configure: detect IPv6 support on Windows + configure: ac_cv_ -> curl_cv_ for write-only vars - This patch was "nicked" from the MINGW-packages project by Daniel. + These configure vars are modified in a curl-specific way but never + evaluated or loaded from cache, even though they are designated as + _cv_. We could either implement proper AC_CACHE_CHECKs for them, or + remove them completely. - https://github.com/Alexpux/MINGW-packages/commit/9253d0bf58a1486e91f7efb5316e7fdb48fa4007 - Signed-off-by: Johannes Schindelin - -- configure: allow static builds on mingw + Fixes #603 as ac_cv_func_gethostbyname is no longer clobbered, and + AC_CHECK_FUNC(gethostbyname...) will no longer spuriously succeed after + the first configure run with caching. - This patch is adopted from the MINGW-packages project. It makes it - possible to build curl both shared and static again. + `ac_cv_func_strcasecmp` is curious, see #770. - URL: https://github.com/Alexpux/MINGW-packages/tree/master/mingw-w64-curl + `eval "ac_cv_func_$func=yes"` can still cause problems as it works in + tandem with AC_CHECK_FUNCS and then potentially modifies its result. It + would be best to rewrite this test to use a new CURL_CHECK_FUNCS macro, + which works the same as AC_CHECK_FUNCS but relies on caching the values + of curl_cv_func_* variables, without modifiying ac_cv_func_*. -Marc Hoersken (17 Dec 2015) -- test 1326: fix file check since curl is outputting binary data +- [Irfan Adilovic brought this change] -- test 1326: fix getting stuck on Windows due to incomplete request + configure: ac_cv_ -> curl_cv_ for r/w vars - The request needs to be read and send in binary mode in order to use - CRLF instead of LF. Adding --upload-file - causes curl to read stdin - in binary mode. - -Daniel Stenberg (17 Dec 2015) -- RELEASE-NOTES: command line option recount + These configure vars are modified in a curl-specific way and modified by + the configure process, but are never loaded from cache, even though they + are designated as _cv_. We should implement proper AC_CACHE_CHECKs for + them eventually. -Dan Fandrich (16 Dec 2015) -- scripts/Makefile: build zsh script even in an out-of-tree build +- [Irfan Adilovic brought this change] -Marc Hoersken (16 Dec 2015) -- sockfilt.c: added some debug output to select_ws + configure: ac_cv_func_clock_gettime -> curl_... + + This variable must not be cached in its current form, as any cached + information will prevent the next configure run from determining the + correct LIBS needed for the function. Thus, rename prefix `ac_cv_` to + just `curl_`. -- sockfilt.c: keep lines shorter than 80 chars +- [Irfan Adilovic brought this change] -- sockfilt.c: do not wait on unreliable file or pipe handle + configure: ac_cv_ -> curl_cv_ for all cached vars - The previous implementation caused issues on modern MSYS2 runtimes. - -Daniel Stenberg (16 Dec 2015) -- cyassl: deal with lack of *get_peer_certificate + This was automated by: + + sed -b -i -f <(ack -A1 AC_CACHE_CHECK | \ + ack -o 'ac_cv_.*?\b' | \ + sort -u | xargs -n1 bash -c \ + 'echo "s/$0/curl_cv_${0#ac_cv_}/g"') \ + $(git ls-files) - The function is only present in wolfssl/cyassl if it was built with - --enable-opensslextra. With these checks added, pinning support is disabled - unless the TLS lib has that function available. + This only changed the prefix for 16 variables actually checked with + AC_CACHE_CHECK. + +- openssl: builds with OpenSSL 1.1.0-pre5 - Also fix the mistake in configure that checks for the wrong lib name. + The RSA, DSA and DH structs are now opaque and require use of new APIs - Closes #566 + Fixes #763 -- wolfssl: handle builds without SSLv3 support +Steve Holme (20 Apr 2016) +- url.c: Prefer we don't use explicit NULLs in conditions + + Fixed commit fa5fa65a30 to not use NULLs in if condition. -- [Tatsuhiro Tsujikawa brought this change] +Daniel Stenberg (20 Apr 2016) +- [Isaac Boukris brought this change] - http2: Support trailer fields + NTLM: check for NULL pointer before deferencing - This commit adds trailer support in HTTP/2. In HTTP/1.1, chunked - encoding must be used to send trialer fields. HTTP/2 deprecated any - trandfer-encoding, including chunked. But trailer fields are now - always available. + At ConnectionExists, both check->proxyuser and check->proxypasswd + could be NULL, so make sure to check first. - Since trailer fields are relatively rare these days (gRPC uses them - extensively though), allocating buffer for trailer fields is done when - we detect that HEADERS frame containing trailer fields is started. We - use Curl_add_buffer_* functions to buffer all trailers, just like we - do for regular header fields. And then deliver them when stream is - closed. We have to be careful here so that all data are delivered to - upper layer before sending trailers to the application. + Fixes #765 + +- [Karlson2k brought this change] + + tests: added test1517 - We can deliver trailer field one by one using NGHTTP2_ERR_PAUSE - mechanism, but current method is far more simple. + ... for checking ability to receive full HTTP response when POST request + is used with slow read callback function. - Another possibility is use chunked encoding internally for HTTP/2 - traffic. I have not tested it, but it could add another overhead. + This test checks for bug #657 and verifies the work-around from + 72d5e144fbc6. - Closes #564 + Closes #720 -- RELEASE-NOTES: synced with 6c2c019654e658a +- [Karlson2k brought this change] -Jay Satiro (15 Dec 2015) -- x509asn1: Fix host altname verification - - - In Curl_verifyhost check all altnames in the certificate. + sendf.c: added ability to call recv() before send() as workaround - Prior to this change only the first altname was checked. Only the GSKit - SSL backend was affected by this bug. + WinSock destroys recv() buffer if send() is failed. As result - server + response may be lost if server sent it while curl is still sending + request. This behavior noticeable on HTTP server short replies if + libcurl use several send() for request (usually for POST request). + To workaround this problem, libcurl use recv() before every send() and + keeps received data in intermediate buffer for further processing. - Bug: http://curl.haxx.se/mail/lib-2015-12/0062.html - Reported-by: John Kohl + Fixes: #657 + Closes: #668 -Daniel Stenberg (15 Dec 2015) -- curl --expect100-timeout: added +Kamil Dudka (19 Apr 2016) +- connect: make sure that rc is initialized in singleipconnect() - This is the new command line option to set the value for the existing - libcurl option CURLOPT_EXPECT_100_TIMEOUT_MS - -- cyassl: fix compiler warning on type conversion - -- curlver: the pending release will become 7.47.0 - -- [Anders Bakken brought this change] - - setstropt: const-correctness + This commit fixes a Clang warning introduced in curl-7_48_0-190-g8f72b13: - Closes #565 - -- ROADMAP: implemented HTTP2 for HTTPS-only + Error: CLANG_WARNING: + lib/connect.c:1120:11: warning: The right operand of '==' is a garbage value + 1118| } + 1119| + 1120|-> if(-1 == rc) + 1121| error = SOCKERRNO; + 1122| } -- HTTP2.md: spell fix and remove TODO now implemented +Daniel Stenberg (19 Apr 2016) +- make/checksrc: use $srcdir, not $top_srcdir -- libressl: the latest openssl x509 funcs are not in libressl +- src/checksrc.whitelist: removed -- curl: use 2TLS by default - - Make this the default for the curl tool (if built with HTTP/2 powers - enabled) unless a specific HTTP version is requested on the command - line. - - This should allow more users to get HTTP/2 powers without having to - change anything. +- tool_operate: switch to inline checksrc ignore -- http: add libcurl option to allow HTTP/2 for HTTPS only +- lib/checksrc.whitelist: not needed anymore - ... and stick to 1.1 for HTTP. This is in line with what browsers do and - should have very little risk. + ... as checksrc now skips comments -- openssl: adapt to openssl >= 1.1.0 X509 opaque structs +- vtls.h: remove a space before semicolon - Closes #491 - -- openssl: avoid BIO_reset() warnings since it returns a value - -- openssl: adapt to 1.1.0+ name changes + ... that the new checksrc detected -- scripts/makefile: add standard header +- darwinssl: removed commented out code -- scripts/Makefile: fix GNUism and survive no perl - - Closes #555 +- http_chunks: removed checksrc disable - Reported-by: Thomas Klausner - -- fix b6d5cb40d7038fe + ... since checksrc now skips comments -- [Tatsuhiro Tsujikawa brought this change] +- imap: inlined checksrc disable instead of whitelist edit - http2: Fix hanging paused stream +- checksrc: taught to skip comments - When NGHTTP2_ERR_PAUSE is returned from data_source_read_callback, we - might not process DATA frame fully. Calling nghttp2_session_mem_recv() - again will continue to process DATA frame, but if there is no incoming - frames, then we have to call it again with 0-length data. Without this, - on_stream_close callback will not be called, and stream could be hanged. + ... but output non-stripped version of the line, even if that then can + make the script identify the wrong position in the line at + times. Showing the line stripped (ie without comments) is just too + surprising. + +- opts/Makefile.am: list all docs file one by one - Bug: http://curl.haxx.se/mail/lib-2015-11/0103.html - Reported-by: Francisco Moraes + ... to make it easier to add lines in patches that won't just break all + other patches trying to add lines too. -- [Christian Stewart brought this change] +- curl_easy_setopt.3: mention CURLOPT_TCP_FASTOPEN - build: fix compilation error with CURL_DISABLE_VERBOSE_STRINGS - - With curl disable verbose strings in http.c the compilation fails due to - the data variable being undefined later on in the function. +- RELEASE-NOTES: synced with 03de4e4b219 - Closes #558 + (since we just merged two major features) -Jay Satiro (7 Dec 2015) -- [Gisle Vanem brought this change] +- [Alessandro Ghedini brought this change] - config-win32: Fix warning HAVE_WINSOCK2_H undefined + connect: implement TCP Fast Open for Linux + + Closes #660 -- [Gisle Vanem brought this change] +- [Alessandro Ghedini brought this change] - openssl: BoringSSL doesn't have CONF_modules_free + tool: add --tcp-fastopen option -- [Gisle Vanem brought this change] +- [Alessandro Ghedini brought this change] - lwip: Fix compatibility issues with later versions - - The name of the header guard in lwIP's has changed from - '__LWIP_OPT_H__' to 'LWIP_HDR_OPT_H' (bug #35874 in May 2015). - - Other fixes: - - - In curl_setup.h, the problem with an old PSDK doesn't apply if lwIP is - used. - - - In memdebug.h, the 'socket' should be undefined first due to lwIP's - lwip_socket() macro. - - - In curl_addrinfo.c lwIP's getaddrinfo() + freeaddrinfo() macros need - special handling because they were undef'ed in memdebug.h. - - - In select.c we can't use preprocessor conditionals inside select if - MSVC and select is a macro, as it is with lwIP. - - http://curl.haxx.se/mail/lib-2015-12/0023.html - http://curl.haxx.se/mail/lib-2015-12/0024.html + connect: implement TCP Fast Open for OS X -Patrick Monnerat (7 Dec 2015) -- os400: define CURL_VERSION_PSL in ILE/RPG binding +- [Alessandro Ghedini brought this change] -Jay Satiro (7 Dec 2015) -- [Gisle Vanem brought this change] + url: add CURLOPT_TCP_FASTOPEN option - version: Add flag CURL_VERSION_PSL for libpsl +- checksrc: pass on -D so the whitelists are found correctly -- formdata: Check if length is too large for memory +- configure: remove check for libresolve - - If the size of the length type (curl_off_t) is greater than the size - of the size_t type then check before allocating memory to make sure the - value of length will fit in a size_t without overflow. If it doesn't - then return CURLE_BAD_FUNCTION_ARGUMENT. + 'strncasecmp' was once provided by libresolv (no trailing e) for SunOS, + but this check is broken and most likely adds nothing useful. Removing + now. - Bug: https://github.com/bagder/curl/issues/425#issuecomment-154518679 - Reported-by: Steve Holme - -Steve Holme (3 Dec 2015) -- tests: Corrected copy and pasted comments from commit e643c5c908 - -Daniel Stenberg (3 Dec 2015) -- curl: remove keepalive #ifdef checks done on libcurl's behalf + Reported-by: Irfan Adilovic - They didn't match the ifdef logic used within libcurl anyway so they - could indeed warn for the wrong case - plus the tool cannot know how the - lib actually performs at that level. - -Steve Holme (2 Dec 2015) -- test947: Corrected typo in test name + Discussed in #770 -- tests: Disable the OAUTHBEARER tests when using a non-default port number - - Tests 842, 843, 844, 845, 887, 888, 889, 890, 946, 947, 948 and 949 fail - if a custom port number is specified via the -b option of runtests.pl. +- scripts/make: use $(EXEEXT) for executables - Suggested by: Kamil Dudka - Bug: http://curl.haxx.se/mail/lib-2015-12/0003.html - -Daniel Stenberg (2 Dec 2015) -- bump: towards next release + Reported-by: bodop - for all we know now, it might be called 7.46.1 - -Version 7.46.0 (1 Dec 2015) - -Daniel Stenberg (1 Dec 2015) -- RELEASE-NOTES: updated contributor count for 7.46.0 - -- THANKS: new contributors from the 7.46.0 release + Fixes #771 -- THANKS-filter: single Tim Rühsen spelling +- includes: avoid duplicate memory callback typdefs even harder -- docs/examples: gitignore some more built examples +- checksrc/makefile.am: use $top_srcdir to find source files + + ... to properly support out of source tree builds. -- RELEASE-NOTES; this bug was never released +- RELEASE-NOTES: synced with 26ec93dd6aeba8dfb5 -- RELEASE-NOTES: synced with e55f15454efacb0 +- opts: fix option references missing (section) -- [Flavio Medeiros brought this change] +- [Michael Kaufmann brought this change] - Curl_read_plain: clean up ifdefs that break statements + news: CURLOPT_CONNECT_TO and --connect-to - Closes #546 - -- http2: convert some verbose output into debug-only output + Makes curl connect to the given host+port instead of the host+port found + in the URL. -- http2 push: add missing inits of new stream +- makefile.vc6: use d suffix on debug object + + To allow both release and debug builds in parallel. - - set the correct stream_id for pushed streams - - init maxdownload and size properly - -- http2 push: set weight for new stream + Reported-by: Rod Widdowson - give the new stream the old one's stream_weight internally to avoid - sending a PRIORITY frame unless asked for it + Fixes #769 -- curl_setup.h: undef freeaddrinfo in c-ares block to fix build +Jay Satiro (12 Apr 2016) +- http2: Use size_t type for data drain count - Fixes warnings 78c25c854a added. + Ref: https://github.com/curl/curl/issues/659 + Ref: https://github.com/curl/curl/pull/663 -- nonblock: fix setting non-blocking mode for Amiga - - IoctlSocket() apparently wants a pointer to a long, passed as a char * - in its third parameter. This bug was introduced already back in commit - c5fdeef41d from October 1 2001! +- http2: Improve header parsing - Bug: http://curl.haxx.se/mail/lib-2015-11/0088.html - Reported-by: Norbert Kett - -- zsh install: fix DESTDIR support + - Error if a header line is larger than supported. - Reported-by: Mohammad AlSaleh - -Dan Fandrich (27 Nov 2015) -- lib: Only define curl_dofreeaddrinfo if struct addrinfo is available - -Steve Holme (27 Nov 2015) -- tool_paramhlp: Fixed display of URL index in password prompt for --next + - Warn if cumulative header line length may be larger than supported. - Commit f3bae6ed73 added the URL index to the password prompt when using - --next. Unfortunately, because the size_t specifier (%zu) is not - supported by all sprintf() implementations we use the curl_off_t format - specifier instead. The display of an incorrect value arises on platforms - where size_t and curl_off_t are of a different size. - -Daniel Stenberg (25 Nov 2015) -- timecond: do not add if-modified-since without timecondition + - Allow spaces when parsing the path component. - The RTSP code path didn't skip adding the if-modified-since for certain - RTSP code paths, even if CURLOPT_TIMECONDITION was set to - CURL_TIMECOND_NONE. + - Make sure each header line ends in \r\n. This fixes an out of bounds. - Also, an unknown non-zero CURLOPT_TIMECONDITION value no longer equals - CURL_TIMECOND_IFMODSINCE. + - Disallow header continuation lines until we decide what to do. - Bug: http://stackoverflow.com/questions/33903982/curl-timecond-none-doesnt-work-how-to-remove-if-modified-since-header - -- RELEASE-NOTES: synced with 99d17a5e2ba77e58 + Ref: https://github.com/curl/curl/issues/659 + Ref: https://github.com/curl/curl/pull/663 -- examples/README: cut out the incomplete list +- http2: Add Curl_http2_strerror for HTTP/2 error codes - ... and add a generic explanation for them instead. Each example file - should contain its own description these days. - -- test1513: make sure the callback is only called once + Ref: https://github.com/curl/curl/issues/659 + Ref: https://github.com/curl/curl/pull/663 -- [Daniel Shahaf brought this change] +- [Tatsuhiro Tsujikawa brought this change] - build: Install zsh completion + http2: Don't increment drain when one header field is received + + Sicne we write header field in temporary location, not in the memory + that upper layer provides, incrementing drain should not happen. - Fixes #534 - Closes #537 + Ref: https://github.com/curl/curl/issues/659 + Ref: https://github.com/curl/curl/pull/663 -- done: make sure the final progress update is made +- [Tatsuhiro Tsujikawa brought this change] + + http2: Ensure that http2_handle_stream_close is called - It would previously be skipped if an existing error was returned, but - would lead to a previous value being left there and later used. - CURLINFO_TOTAL_TIME for example. + This commit ensures that streams which was closed in on_stream_close + callback gets passed to http2_handle_stream_close. Previously, this + might not happen. To achieve this, we increment drain property to + forcibly call recv function for that stream. - Still it avoids that final progress update if we reached DONE as the - result of a callback abort to avoid another callback to be called after - an abort-by-callback. + To more accurately check that we have no pending event before shutting + down HTTP/2 session, we sum up drain property into + http_conn.drain_total. We only shutdown session if that value is 0. - Reported-by: Lukas Ruzicka + With this commit, when stream was closed before reading response + header fields, error code CURLE_HTTP2_STREAM is returned even if + HTTP/2 level error is NO_ERROR. This signals the upper layer that + stream was closed by error just like TCP connection close in HTTP/1. - Closes #538 + Ref: https://github.com/curl/curl/issues/659 + Ref: https://github.com/curl/curl/pull/663 -- curl: expanded the -XHEAD warning text - - ... to also mention the specific options used. +- [Tatsuhiro Tsujikawa brought this change] -- Revert "cleanup: general removal of TODO (and similar) comments" - - This reverts commit 64e959ffe37c436503f9fed1ce2d6ee6ae50bd9a. + http2: Process paused data first before tear down http2 session - Feedback-by: Dan Fandrich - URL: http://curl.haxx.se/mail/lib-2015-11/0062.html - -- CURLOPT_HEADERFUNCTION.3: fix typo + This commit ensures that data from network are processed before HTTP/2 + session is terminated. This is achieved by pausing nghttp2 whenever + different stream than current easy handle receives data. - Refer to _HEADERDATA not _WRITEDATA. + This commit also fixes the bug that sometimes processing hangs when + multiple HTTP/2 streams are multiplexed. - Reported-by: Michał Piechowski - -- TODO: TCP Fast Open - -Steve Holme (22 Nov 2015) -- examples: Added website parse-able descriptions to the e-mail examples + Ref: https://github.com/curl/curl/issues/659 + Ref: https://github.com/curl/curl/pull/663 -- TODO: Added another 'multi-interface' idea +- [Tatsuhiro Tsujikawa brought this change] -- smb.c: Fixed compilation warnings + http2: Check session closure early in http2_recv - smb.c:134:3: warning: conversion to 'short unsigned int' from 'int' may - alter its value - smb.c:146:42: warning: conversion to 'unsigned int' from 'long long - unsigned int' may alter its value - smb.c:146:65: warning: conversion to 'unsigned int' from 'long long - unsigned int' may alter its value + Ref: https://github.com/curl/curl/issues/659 + Ref: https://github.com/curl/curl/pull/663 -- schannel: Corrected copy/paste error in commit 8d17117683 +- [Tatsuhiro Tsujikawa brought this change] -- schannel: Use GetVersionEx() when VerifyVersionInfo() isn't available + http2: Add handling stream level error - Regression from commit 7a8e861a5 as highlighted in the msys autobuilds. - -- examples: Fixed compilation warnings + Previously, when a stream was closed with other than NGHTTP2_NO_ERROR + by RST_STREAM, underlying TCP connection was dropped. This is + undesirable since there may be other streams multiplexed and they are + very much fine. This change introduce new error code + CURLE_HTTP2_STREAM, which indicates stream error that only affects the + relevant stream, and connection should be kept open. The existing + CURLE_HTTP2 means connection error in general. - pop3-multi.c:96:5: warning: implicit declaration of function 'memset' - imap-multi.c:96:5: warning: implicit declaration of function 'memset' - http2-download.c:226:5: warning: implicit declaration of function 'memset' - http2-upload.c:290:5: warning: implicit declaration of function 'memset' - http2-upload.c:290:5: warning: implicit declaration of function 'memset' + Ref: https://github.com/curl/curl/issues/659 + Ref: https://github.com/curl/curl/pull/663 -- Makefile.inc: Fixed test run error +Daniel Stenberg (11 Apr 2016) +- http2: drain the socket better... - test845 not present in tests/data/Makefile.inc + ... but ignore EAGAIN if the stream has ended so that we don't end up in + a loop. This is a follow-up to c8ab613 in order to avoid the problem + d261652 was made to fix. + + Reported-by: Jay Satiro + Clues-provided-by: Tatsuhiro Tsujikawa + + Discussed in #750 -Daniel Stenberg (20 Nov 2015) -- TODO: remove duplicated title +- KNOWN_BUGS: added info for "Hangs with PolarSSL" -- TODO: added two more libcurl ideas +- KNOWN_BUGS: 1.9 HTTP/2 frames while in the connection pool kill reuse - Moved some ideas from "next major" to just ordinary ideas since we can - always add new things while keeping the old without doing a "next - major". + Closes #750 -Steve Holme (20 Nov 2015) -- tests: Re-enabled tests 889 and 890 following POP3 fix +- build: include scripts/ in the dist -- pop3: Differentiate between success and continuation responses +Steve Holme (9 Apr 2016) +- CURLOPT_SOCKS5_GSSAPI_SERVICE: Merged with CURLOPT_PROXY_SERVICE_NAME + + As these two options provide identical functionality, the former for + SOCK5 proxies and the latter for HTTP proxies, merged the two options + together. + + As such CURLOPT_SOCKS5_GSSAPI_SERVICE is marked as deprecated as of + 7.49.0. -- pop3: Added clarity on some server response codes +- urldata: Use bool for socks5_gssapi_nec as it is a flag + + This value is set to TRUE or FALSE so should be a bool and not a long. -Daniel Stenberg (20 Nov 2015) -- [Daniel Shahaf brought this change] +- url: Ternary operator code style changes - build: Fix theoretical infinite loops +- CODE_STYLE: Added ternary operator example to 'Space around operators' - Add error-checking to 'cd' in a few cases where omitting the checks - might result in an infinite loop. + Following conversation on the libcurl mailing list. + +- sasl: Fixed compilation errors from commit 9d89a0387 - Closes #535 + ...when GSS-API or Windows SSPI are not used. + +- url: Corrected comments following 9d89a0387 -Patrick Monnerat (19 Nov 2015) -- curl.h: s/#defien/#define/ +- docs: Added clarification following commit 9d89a0387 -- os400: synchronize ILE/RPG header file +- Makefile: Fixed echo of checksrc check -- os400: Provide options for libssh2 use in compile scripts. Adjust README. +- checksrc: Fix issue with the autobuilds not picking up the whitelist -Daniel Stenberg (19 Nov 2015) -- [danielsh@apache.org brought this change] +- checksrc: Added missing vauth and vtls directories - zsh completion: Preserve single quotes in output +- ftp/imap/pop3/smtp: Allow the service name to be overridden - When an option's help string contains literal single quotes, those - single quotes would be stripped from the option's description in the - completion output (unless the zsh RC_QUOTES option were set while the - completion function was being sourced, which is not the default). This - patch makes the completion output contain single quotes where the --help - output does. + Allow the service name to be overridden for DIGIST-MD5 and Kerberos 5 + authentication in FTP, IMAP, POP3 and SMTP. + +- http_negotiate: Calculate service name and proxy service name locally - Closes #532 + Calculate the service name and proxy service names locally, rather than + in url.c which will allow for us to support overriding the service name + for other protocols such as FTP, IMAP, POP3 and SMTP. -Jay Satiro (18 Nov 2015) -- [MaxGiting brought this change] +- ROADMAP: Updated following the move of the authentication code - FAQ: Grammar changes - - Closes https://github.com/bagder/curl/pull/533 +Patrick Monnerat (8 Apr 2016) +- KNOWN_BUGS: openldap hangs. TODO: binary SASL. -Daniel Stenberg (17 Nov 2015) -- http2: http_done: don't free already-freed push headers - - The push headers are freed after the push callback has been invoked, - meaning this code should only free the headers if the callback was never - invoked and thus the headers weren't freed at that time. +Daniel Stenberg (8 Apr 2016) +- KNOWN_BUGS: 5.6 Improper use of Autoconf cache variables - Reported-by: Davey Shafik + Closes #603 -- [Anders Bakken brought this change] +- KNOWN_BUGS: 11.2 error buffer not set... + + Closes #544 - getconnectinfo: Don't call recv(2) if socket == -1 +- KNOWN_BUGS: 11.1 Curl leaks .onion hostnames in DNS - Closes #528 + Closes #543 -- CURLMOPT_PUSHFUNCTION.3: *_byname() returns only the first header +- KNOWN_BUGS: 1.8 DNS timing is wrong for HTTP redirects - ... if there are more than one using the same name + Closes #522 -- http2: minor comment typo +- TODO: HTTP/2 "prior knowledge" is implemented! -- sasl; fix checksrc warnings +- [Damien Vielpeau brought this change] -Steve Holme (15 Nov 2015) -- RELEASE-NOTES: Adjusted for the recent OAuth 2.0 activity + mbedtls: fix MBEDTLS_DEBUG builds -- tests: Disabled 889 and 890 until we support POP3 continuation responses +- mbedtls: implement and provide *_data_pending() - As POP3 final and continuation responses both begin with a + character, - and both the finalcode and contcode variables in SASLprotoc are set as - such, we cannot tell the difference between them when we are expecting - an optional continuation from the server such as the following: + ... as otherwise we might get stuck thinking there's no more data to + handle. - + something else from the server - +OK final response + Reported-by: Damien Vielpeau - Disabled these tests until such a time we can tell the responses apart. + Fixes #737 -- tests: Corrected typos from commit ba4d8f7eba +- mbedtls: follow-up for the previous commit -- tests: Added OAUTHBEARER failure response tests +- mbedtls.c: name space pollution fix, Use 'Curl_' -- oauth2: Support OAUTHBEARER failures sent as continuation responses - - According to RFC7628 a failure message may be sent by the server in a - base64 encoded JSON string as a continuation response. +- mbedtls.c: changed private prefix to mbed_ - Currently only implemented for OAUTHBEARER and not XAUTH2. - -Daniel Stenberg (15 Nov 2015) -- RELEASE-NOTES: synced with 808a17ee675 - -Steve Holme (14 Nov 2015) -- tests: Renamed existing OAuth 2.0 (XOAUTH) tests + mbedtls_ is the prefix used by the mbedTLS library itself so we should + avoid using that for our private functions. -- tests: Added OAuth 2.0 (OAUTHBEARER) tests +- mbedtls.h: fix compiler warnings -- oauth2: Added support for OAUTHBEARER SASL mechanism to IMAP, POP3 and SNMP +- Revert "winbuild: trying to set some files eol=crlf for git" - OAUTHBEARER is now the official "registered" SASL mechanism name for - OAuth 2.0. However, we don't want to drop support for XOAUTH2 as some - servers won't support the new mechanism yet. - -Daniel Stenberg (13 Nov 2015) -- RELEASE-NOTES: recounted curl_easy_setopt() options - -- typecheck-gcc.h: add missing slist-using options + This reverts commit 9c08b4f1e7eced5a4d3782a3e0daa484c9d77d21. - CURLOPT_RESOLVE and CURLOPT_PROXYHEADER were missing + Didn't help. Caused problems. - Also sorted the list. + Fixes #756 -- typecheck-gcc.h: added CURLOPT_CLOSESOCKETDATA +- curl.1: use example.com more - ... and sorted curl_is_cb_data_option alphabetically - -Jay Satiro (13 Nov 2015) -- [Sebastian Pohlschmidt brought this change] + Make (most) example snippets use the example.com domain instead of the + random ones picked and used before. Some of those were probably + legitimate sites and some not. example.com is designed for this purpose. - openssl: Free modules on cleanup - - Curl_ossl_init calls OPENSSL_load_builtin_modules() but - Curl_ossl_cleanup doesn't make a call to free these modules. - - Bug: https://github.com/bagder/curl/issues/526 +- [Michael Kaufmann brought this change] -Steve Holme (13 Nov 2015) -- symbols-in-versions: Added new CURLOPTTYPE_STRINGPOINT alias + HTTP2: Add a space character after the status code - ...following commit aba281e762 to fix test 1119. - -Daniel Stenberg (13 Nov 2015) -- curl: mark two more options strings for --libcurl output - -- typecheck-gcc.h: add some missing string types + The space character after the status code is mandatory, even if the + reason phrase is empty (see RFC 7230 section 3.1.2) - Also sorted that list alphabetically + Closes #755 -- curl.h: introducing the STRINGPOINT alias - - As an alias for OBJECTPOINT. Provided to allow us to grep for all string - options easier. +- [Viktor Szakats brought this change] -- cleanup: general removal of TODO (and similar) comments + URLs: change http to https in many places - They tend to never get updated anyway so they're frequently inaccurate - and we never go back to revisit them anyway. We document issues to work - on properly in KNOWN_BUGS and TODO instead. - -- ftplistparser: remove empty function - -- openssl: remove #if check for 0.9.7 for ENGINE_load_private_key + Closes #754 -- openssl: all supported versions have X509_STORE_set_flags +- winbuild: trying to set some files eol=crlf for git - Simplify by removing #ifdefs and macros + Thinking it might help to apply patches etc with git. -- openssl: remove 0.9.3 check +- [Theodore Dubois brought this change] -- openssl: remove #ifdefs for < 0.9.5 support + curl.1: change example for -F - We only support >= 0.9.7 - -- lib/vtls/openssl: remove unused traces of yassl ifdefs - -Dan Fandrich (12 Nov 2015) -- [dfandrich brought this change] - - unit1603: Demote hash mismatch failure to a warning + It's a bad idea to send your passwords anywhere, especially over HTTP. + Modified example to send a picture instead. - The hashes can vary between architectures (e.g. Sparc differs from x86_64). - This is not a fatal problem but just reduces the coverage of these white-box - tests, as the assumptions about into which hash bucket each key falls are no - longer valid. - -- [dfandrich brought this change] - - unit1603: Added unit tests for hash functions - -- [dfandrich brought this change] - - unit1602: Fixed failure in torture test + Fixes #752 -Steve Holme (12 Nov 2015) -- sasl: Re-introduced XOAUTH2 in the default enabled authentication mechanism +- KNOWN_BUGS: reorganized and cleaned up - Following the fix in commit d6d58dd558 it is necessary to re-introduce - XOAUTH2 in the default enabled authentication mechanism, which was - removed in commit 7b2012f262, otherwise users will have to specify - AUTH=XOAUTH2 in the URL. + Now sorted into categories and organized in the same style we do the + TODO document. It will make each issue linked properly on the + https://curl.haxx.se/docs/knownbugs.html web page. - Note: OAuth 2.0 will only be used when the bearer is specified. + The sections should make it easier to find issues and issues related to + areas of the reader's specific interest. -- [Stefan Bühler brought this change] +Jay Satiro (6 Apr 2016) +- KNOWN_BUGS: #95 curl in Windows can't handle Unicode arguments - sasl_sspi: fix identity memory leak in digest authentication +Steve Holme (6 Apr 2016) +- KNOWN_BUGS: Use https://curl.haxx.se URL for github based issues -- [Stefan Bühler brought this change] +- CHECKSRC.md: Corrected some typos - sasl_sspi: fixed unicode build for digest authentication +- RELEASE-NOTES: Corrected last updated - Closes #525 + Included a summary of the checksrc.bat updates and combined two krb5 + changes as they should have been implemented at the same time. -- oauth2: Re-factored OAuth 2.0 state variable +- vauth: Corrected a number of typos in comments + + Reported-by: Michael Osipov -- sasl: Don't choose OAuth 2.0 if mechanism not advertised +Jay Satiro (5 Apr 2016) +- KNOWN_BUGS: #94 IMAP custom requests use the LIST handler - Regression from commit 9e8ced9890 which meant if --oauth2-bearer was - specified but the SASL mechanism wasn't supported by the server then - the mechanism would be chosen. + Bug: https://github.com/curl/curl/issues/536 + Reported-by: eXeC64@users.noreply.github.com -Daniel Stenberg (12 Nov 2015) -- runtests: more compact "System characteristics" output +Daniel Stenberg (5 Apr 2016) +- KNOWN_BUGS: remove 68, 70 and 72. + + Due to their age (we don't fully know if they actually remain) and lack + of detail - very few people will bother to find out what they're about + or work on them. If people truly still suffer from any of these, I + assume they will be reported again and then we'll deal with them. - - no point in repeating curl features that is already listed as features - from the curl -V output + 72. "Pausing pipeline problems." + https://curl.haxx.se/mail/lib-2009-07/0214.html - - remove the port numbers/unix domain path from the output unless - verbose is used, as that is rarely interesting to users. - -- runtests: rename conditional curl-features to $has_[name] - -Steve Holme (11 Nov 2015) -- oauth2: Introduced support for host and port details + 70. Problem re-using easy handle after call to curl_multi_remove_handle + https://curl.haxx.se/mail/lib-2009-07/0249.html - Added support to the OAuth 2.0 message function for host and port, in - order to accommodate the official OAUTHBEARER SASL mechanism which is - to be added shortly. + 68. "More questions about ares behavior". + https://curl.haxx.se/mail/lib-2009-08/0012.html -- curl_setup.h: Removed duplicate CURL_DISABLE_RTSP when HTTP_ONLY defined +- KNOWN_BUGS: remove 92 and 88, fixed -- cmake: Add missing feature macros in config header (Part 2) +- http2: fix connection reuse when PING comes after last DATA - In addition to commit a215381c94 added the RTSP, RTMP and SMB protocols. - -Daniel Stenberg (10 Nov 2015) -- [Douglas Creager brought this change] - - cmake: Add missing feature macros in config header + It turns out the google GFE HTTP/2 servers send a PING frame immediately + after a stream ends and its last DATA has been received by curl. So if + we don't drain that from the socket, it makes the socket readable in + subsequent checks and libcurl then (wrongly) assumes the connection is + dead when trying to reuse the connection. - The curl_config.h file can be generated either from curl_config.h.cmake - or curl_config.h.in, depending on whether you're building using CMake or - the autotools. The CMake template header doesn't include entries for - all of the protocols that you can disable, which (I think) means that - you can't actually disable those protocols when building via CMake. + Reported-by: Joonas Kuorilehto - Closes #523 + Discussed in #750 -- [Douglas Creager brought this change] +- multi: remove trailing space in debug output - BoringSSL: Work with stricter BIO_get_mem_data() - - BoringSSL implements `BIO_get_mem_data` as a function, instead of a - macro, and expects the output pointer to be a `char **`. We have to add - an explicit cast to grab the pointer as a `const char **`. - - Closes #524 +- RELEASE-NOTES: synced with 86e97b642fb -- http2: rectify the http2 version #if check - - We need 1.0.0 or later. Also verified by configure. +- CHECKSRC.md: mention cmdline options, fix the bullet list -Steve Holme (9 Nov 2015) -- oauth2: Don't use XAUTH2 in OAuth 2.0 function name +- docs/CHECKSRC.md: initial version -- oauth2: Don't use XOAUTH2 in OAuth 2.0 variables +Steve Holme (3 Apr 2016) +- checksrc.bat: Added support for the examples -- oauth2: Use OAuth 2.0 rather than XOAUTH2 in comments +Daniel Stenberg (3 Apr 2016) +- lib/src: fix the checksrc invoke - When referring to OAuth 2.0 we should use the official name rather the - SASL mechanism name. + ... now works correctly when invoke from the root makefile diff --git a/CMake/CurlSymbolHiding.cmake b/CMake/CurlSymbolHiding.cmake new file mode 100644 index 0000000..9f7d296 --- /dev/null +++ b/CMake/CurlSymbolHiding.cmake @@ -0,0 +1,61 @@ +include(CheckCSourceCompiles) + +option(CURL_HIDDEN_SYMBOLS "Set to ON to hide libcurl internal symbols (=hide all symbols that aren't officially external)." ON) +mark_as_advanced(CURL_HIDDEN_SYMBOLS) + +if(CURL_HIDDEN_SYMBOLS) + set(SUPPORTS_SYMBOL_HIDING FALSE) + + if(CMAKE_C_COMPILER_ID MATCHES "Clang") + set(SUPPORTS_SYMBOL_HIDING TRUE) + set(_SYMBOL_EXTERN "__attribute__ ((__visibility__ (\"default\")))") + set(_CFLAG_SYMBOLS_HIDE "-fvisibility=hidden") + elseif(CMAKE_COMPILER_IS_GNUCC) + if(NOT CMAKE_VERSION VERSION_LESS 2.8.10) + set(GCC_VERSION ${CMAKE_C_COMPILER_VERSION}) + else() + execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion + OUTPUT_VARIABLE GCC_VERSION) + endif() + if(NOT GCC_VERSION VERSION_LESS 3.4) + # note: this is considered buggy prior to 4.0 but the autotools don't care, so let's ignore that fact + set(SUPPORTS_SYMBOL_HIDING TRUE) + set(_SYMBOL_EXTERN "__attribute__ ((__visibility__ (\"default\")))") + set(_CFLAG_SYMBOLS_HIDE "-fvisibility=hidden") + endif() + elseif(CMAKE_C_COMPILER_ID MATCHES "SunPro" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 8.0) + set(SUPPORTS_SYMBOL_HIDING TRUE) + set(_SYMBOL_EXTERN "__global") + set(_CFLAG_SYMBOLS_HIDE "-xldscope=hidden") + elseif(CMAKE_C_COMPILER_ID MATCHES "Intel" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 9.0) + # note: this should probably just check for version 9.1.045 but I'm not 100% sure + # so let's to it the same way autotools do. + set(SUPPORTS_SYMBOL_HIDING TRUE) + set(_SYMBOL_EXTERN "__attribute__ ((__visibility__ (\"default\")))") + set(_CFLAG_SYMBOLS_HIDE "-fvisibility=hidden") + check_c_source_compiles("#include + int main (void) { printf(\"icc fvisibility bug test\"); return 0; }" _no_bug) + if(NOT _no_bug) + set(SUPPORTS_SYMBOL_HIDING FALSE) + set(_SYMBOL_EXTERN "") + set(_CFLAG_SYMBOLS_HIDE "") + endif() + elseif(MSVC) + set(SUPPORTS_SYMBOL_HIDING TRUE) + endif() + + set(HIDES_CURL_PRIVATE_SYMBOLS ${SUPPORTS_SYMBOL_HIDING}) +elseif(MSVC) + if(NOT CMAKE_VERSION VERSION_LESS 3.7) + set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) #present since 3.4.3 but broken + set(HIDES_CURL_PRIVATE_SYMBOLS FALSE) + else() + message(WARNING "Hiding private symbols regardless CURL_HIDDEN_SYMBOLS being disabled.") + set(HIDES_CURL_PRIVATE_SYMBOLS TRUE) + endif() +elseif() + set(HIDES_CURL_PRIVATE_SYMBOLS FALSE) +endif() + +set(CURL_CFLAG_SYMBOLS_HIDE ${_CFLAG_SYMBOLS_HIDE}) +set(CURL_EXTERN_SYMBOL ${_SYMBOL_EXTERN}) diff --git a/CMake/CurlTests.c b/CMake/CurlTests.c index ceff391..bc36c8e 100644 --- a/CMake/CurlTests.c +++ b/CMake/CurlTests.c @@ -533,3 +533,19 @@ main () { return 0; } #endif +#ifdef HAVE_FSETXATTR_6 +#include /* header from libc, not from libattr */ +int +main() { + fsetxattr(0, 0, 0, 0, 0, 0); + return 0; +} +#endif +#ifdef HAVE_FSETXATTR_5 +#include /* header from libc, not from libattr */ +int +main() { + fsetxattr(0, 0, 0, 0, 0); + return 0; +} +#endif diff --git a/CMake/FindCARES.cmake b/CMake/FindCARES.cmake new file mode 100644 index 0000000..c4ab5f1 --- /dev/null +++ b/CMake/FindCARES.cmake @@ -0,0 +1,42 @@ +# - Find c-ares +# Find the c-ares includes and library +# This module defines +# CARES_INCLUDE_DIR, where to find ares.h, etc. +# CARES_LIBRARIES, the libraries needed to use c-ares. +# CARES_FOUND, If false, do not try to use c-ares. +# also defined, but not for general use are +# CARES_LIBRARY, where to find the c-ares library. + +FIND_PATH(CARES_INCLUDE_DIR ares.h + /usr/local/include + /usr/include + ) + +SET(CARES_NAMES ${CARES_NAMES} cares) +FIND_LIBRARY(CARES_LIBRARY + NAMES ${CARES_NAMES} + PATHS /usr/lib /usr/local/lib + ) + +IF (CARES_LIBRARY AND CARES_INCLUDE_DIR) + SET(CARES_LIBRARIES ${CARES_LIBRARY}) + SET(CARES_FOUND "YES") +ELSE (CARES_LIBRARY AND CARES_INCLUDE_DIR) + SET(CARES_FOUND "NO") +ENDIF (CARES_LIBRARY AND CARES_INCLUDE_DIR) + + +IF (CARES_FOUND) + IF (NOT CARES_FIND_QUIETLY) + MESSAGE(STATUS "Found c-ares: ${CARES_LIBRARIES}") + ENDIF (NOT CARES_FIND_QUIETLY) +ELSE (CARES_FOUND) + IF (CARES_FIND_REQUIRED) + MESSAGE(FATAL_ERROR "Could not find c-ares library") + ENDIF (CARES_FIND_REQUIRED) +ENDIF (CARES_FOUND) + +MARK_AS_ADVANCED( + CARES_LIBRARY + CARES_INCLUDE_DIR + ) diff --git a/CMake/FindLibSSH2.cmake b/CMake/FindLibSSH2.cmake new file mode 100644 index 0000000..12a7c61 --- /dev/null +++ b/CMake/FindLibSSH2.cmake @@ -0,0 +1,35 @@ +# - Try to find the libssh2 library +# Once done this will define +# +# LIBSSH2_FOUND - system has the libssh2 library +# LIBSSH2_INCLUDE_DIR - the libssh2 include directory +# LIBSSH2_LIBRARY - the libssh2 library name + +if (LIBSSH2_INCLUDE_DIR AND LIBSSH2_LIBRARY) + set(LibSSH2_FIND_QUIETLY TRUE) +endif (LIBSSH2_INCLUDE_DIR AND LIBSSH2_LIBRARY) + +FIND_PATH(LIBSSH2_INCLUDE_DIR libssh2.h +) + +FIND_LIBRARY(LIBSSH2_LIBRARY NAMES ssh2 +) + +if(LIBSSH2_INCLUDE_DIR) + file(STRINGS "${LIBSSH2_INCLUDE_DIR}/libssh2.h" libssh2_version_str REGEX "^#define[\t ]+LIBSSH2_VERSION_NUM[\t ]+0x[0-9][0-9][0-9][0-9][0-9][0-9].*") + + string(REGEX REPLACE "^.*LIBSSH2_VERSION_NUM[\t ]+0x([0-9][0-9]).*$" "\\1" LIBSSH2_VERSION_MAJOR "${libssh2_version_str}") + string(REGEX REPLACE "^.*LIBSSH2_VERSION_NUM[\t ]+0x[0-9][0-9]([0-9][0-9]).*$" "\\1" LIBSSH2_VERSION_MINOR "${libssh2_version_str}") + string(REGEX REPLACE "^.*LIBSSH2_VERSION_NUM[\t ]+0x[0-9][0-9][0-9][0-9]([0-9][0-9]).*$" "\\1" LIBSSH2_VERSION_PATCH "${libssh2_version_str}") + + string(REGEX REPLACE "^0(.+)" "\\1" LIBSSH2_VERSION_MAJOR "${LIBSSH2_VERSION_MAJOR}") + string(REGEX REPLACE "^0(.+)" "\\1" LIBSSH2_VERSION_MINOR "${LIBSSH2_VERSION_MINOR}") + string(REGEX REPLACE "^0(.+)" "\\1" LIBSSH2_VERSION_PATCH "${LIBSSH2_VERSION_PATCH}") + + set(LIBSSH2_VERSION "${LIBSSH2_VERSION_MAJOR}.${LIBSSH2_VERSION_MINOR}.${LIBSSH2_VERSION_PATCH}") +endif(LIBSSH2_INCLUDE_DIR) + +include(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibSSH2 DEFAULT_MSG LIBSSH2_INCLUDE_DIR LIBSSH2_LIBRARY ) + +MARK_AS_ADVANCED(LIBSSH2_INCLUDE_DIR LIBSSH2_LIBRARY LIBSSH2_VERSION_MAJOR LIBSSH2_VERSION_MINOR LIBSSH2_VERSION_PATCH LIBSSH2_VERSION) diff --git a/CMake/FindNGHTTP2.cmake b/CMake/FindNGHTTP2.cmake new file mode 100644 index 0000000..4e566cf --- /dev/null +++ b/CMake/FindNGHTTP2.cmake @@ -0,0 +1,18 @@ +include(FindPackageHandleStandardArgs) + +find_path(NGHTTP2_INCLUDE_DIR "nghttp2/nghttp2.h") + +find_library(NGHTTP2_LIBRARY NAMES nghttp2) + +find_package_handle_standard_args(NGHTTP2 + FOUND_VAR + NGHTTP2_FOUND + REQUIRED_VARS + NGHTTP2_LIBRARY + NGHTTP2_INCLUDE_DIR + FAIL_MESSAGE + "Could NOT find NGHTTP2" +) + +set(NGHTTP2_INCLUDE_DIRS ${NGHTTP2_INCLUDE_DIR} ) +set(NGHTTP2_LIBRARIES ${NGHTTP2_LIBRARY}) diff --git a/CMake/OtherTests.cmake b/CMake/OtherTests.cmake index d599498..3b203c5 100644 --- a/CMake/OtherTests.cmake +++ b/CMake/OtherTests.cmake @@ -179,17 +179,20 @@ int main(void) { include(CheckCSourceRuns) -set(CMAKE_REQUIRED_FLAGS) -if(HAVE_SYS_POLL_H) - set(CMAKE_REQUIRED_FLAGS "-DHAVE_SYS_POLL_H") -endif(HAVE_SYS_POLL_H) -check_c_source_runs(" - #ifdef HAVE_SYS_POLL_H - # include - #endif - int main(void) { - return poll((void *)0, 0, 10 /*ms*/); - }" HAVE_POLL_FINE) +# See HAVE_POLL in CMakeLists.txt for why poll is disabled on macOS +if(NOT APPLE) + set(CMAKE_REQUIRED_FLAGS) + if(HAVE_SYS_POLL_H) + set(CMAKE_REQUIRED_FLAGS "-DHAVE_SYS_POLL_H") + endif(HAVE_SYS_POLL_H) + check_c_source_runs(" + #ifdef HAVE_SYS_POLL_H + # include + #endif + int main(void) { + return poll((void *)0, 0, 10 /*ms*/); + }" HAVE_POLL_FINE) +endif() set(HAVE_SIG_ATOMIC_T 1) set(CMAKE_REQUIRED_FLAGS) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7113c7e..17606bf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # -# Copyright (C) 1998 - 2015, Daniel Stenberg, , et al. +# Copyright (C) 1998 - 2016, 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 @@ -19,7 +19,7 @@ # KIND, either express or implied. # ########################################################################### -# cURL/libcurl CMake script +# curl/libcurl CMake script # by Tetetest and Sukender (Benoit Neil) # TODO: @@ -72,7 +72,7 @@ set(OS "\"${CMAKE_SYSTEM_NAME}\"") include_directories(${PROJECT_BINARY_DIR}/include/curl) include_directories( ${CURL_SOURCE_DIR}/include ) -option(BUILD_CURL_EXE "Set to ON to build cURL executable." ON) +option(BUILD_CURL_EXE "Set to ON to build curl executable." ON) option(CURL_STATICLIB "Set to ON to build libcurl with static linking." OFF) option(ENABLE_ARES "Set to ON to enable c-ares support" OFF) if(WIN32) @@ -119,8 +119,7 @@ if(MSVC) mark_as_advanced(BUILD_RELEASE_DEBUG_DIRS) endif() -option(CURL_HIDDEN_SYMBOLS "Set to ON to hide libcurl internal symbols (=hide all symbols that aren't officially external)." ON) -mark_as_advanced(CURL_HIDDEN_SYMBOLS) +include(CurlSymbolHiding) option(HTTP_ONLY "disables all protocols except HTTP (This overrides all CURL_DISABLE_* options)" OFF) mark_as_advanced(HTTP_ONLY) @@ -252,7 +251,7 @@ include (CMakeDependentOption) # On windows preload settings if(WIN32) - set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D_WINSOCKAPI_") + set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D_WINSOCKAPI_=") include(${CMAKE_CURRENT_SOURCE_DIR}/CMake/Platforms/WindowsCache.cmake) endif(WIN32) @@ -333,6 +332,13 @@ if(CMAKE_USE_OPENSSL) endif() endif() +option(USE_NGHTTP2 "Use Nghttp2 library" OFF) +if(USE_NGHTTP2) + find_package(NGHTTP2 REQUIRED) + include_directories(${NGHTTP2_INCLUDE_DIRS}) + list(APPEND CURL_LIBS ${NGHTTP2_LIBRARIES}) +endif() + if(NOT CURL_DISABLE_LDAP) if(WIN32) option(USE_WIN32_LDAP "Use Windows LDAP implementation" ON) @@ -443,12 +449,12 @@ if(NOT CURL_DISABLE_LDAPS) endif() # Check for idn -check_library_exists_concat("idn" idna_to_ascii_lz HAVE_LIBIDN) +check_library_exists_concat("idn2" idn2_lookup_ul HAVE_LIBIDN2) # Check for symbol dlopen (same as HAVE_LIBDL) check_library_exists("${CURL_LIBS}" dlopen "" HAVE_DLOPEN) -option(CURL_ZLIB "Set to ON to enable building cURL with zlib support." ON) +option(CURL_ZLIB "Set to ON to enable building curl with zlib support." ON) set(HAVE_LIBZ OFF) set(HAVE_ZLIB_H OFF) set(HAVE_ZLIB OFF) @@ -584,6 +590,8 @@ if(NOT UNIX) set(CURL_LIBS ${CURL_LIBS} "crypt32") endif() endif() + elseif(USE_OPENSSL) + set(CURL_LIBS ${CURL_LIBS} "crypt32") endif() endif(NOT UNIX) @@ -603,6 +611,7 @@ check_include_file_concat("sys/types.h" HAVE_SYS_TYPES_H) check_include_file_concat("sys/uio.h" HAVE_SYS_UIO_H) check_include_file_concat("sys/un.h" HAVE_SYS_UN_H) check_include_file_concat("sys/utime.h" HAVE_SYS_UTIME_H) +check_include_file_concat("sys/xattr.h" HAVE_SYS_XATTR_H) check_include_file_concat("alloca.h" HAVE_ALLOCA_H) check_include_file_concat("arpa/inet.h" HAVE_ARPA_INET_H) check_include_file_concat("arpa/tftp.h" HAVE_ARPA_TFTP_H) @@ -612,7 +621,7 @@ check_include_file_concat("des.h" HAVE_DES_H) check_include_file_concat("err.h" HAVE_ERR_H) check_include_file_concat("errno.h" HAVE_ERRNO_H) check_include_file_concat("fcntl.h" HAVE_FCNTL_H) -check_include_file_concat("idn-free.h" HAVE_IDN_FREE_H) +check_include_file_concat("idn2.h" HAVE_IDN2_H) check_include_file_concat("ifaddrs.h" HAVE_IFADDRS_H) check_include_file_concat("io.h" HAVE_IO_H) check_include_file_concat("krb.h" HAVE_KRB_H) @@ -642,7 +651,6 @@ check_include_file_concat("stropts.h" HAVE_STROPTS_H) check_include_file_concat("termio.h" HAVE_TERMIO_H) check_include_file_concat("termios.h" HAVE_TERMIOS_H) check_include_file_concat("time.h" HAVE_TIME_H) -check_include_file_concat("tld.h" HAVE_TLD_H) check_include_file_concat("unistd.h" HAVE_UNISTD_H) check_include_file_concat("utime.h" HAVE_UTIME_H) check_include_file_concat("x509.h" HAVE_X509_H) @@ -656,9 +664,6 @@ check_include_file_concat("netinet/if_ether.h" HAVE_NETINET_IF_ETHER_H) check_include_file_concat("stdint.h" HAVE_STDINT_H) check_include_file_concat("sockio.h" HAVE_SOCKIO_H) check_include_file_concat("sys/utsname.h" HAVE_SYS_UTSNAME_H) -check_include_file_concat("idna.h" HAVE_IDNA_H) - - check_type_size(size_t SIZEOF_SIZE_T) check_type_size(ssize_t SIZEOF_SSIZE_T) @@ -740,7 +745,11 @@ endif() check_symbol_exists(basename "${CURL_INCLUDES}" HAVE_BASENAME) check_symbol_exists(socket "${CURL_INCLUDES}" HAVE_SOCKET) -check_symbol_exists(poll "${CURL_INCLUDES}" HAVE_POLL) +# poll on macOS is unreliable, it first did not exist, then was broken until +# fixed in 10.9 only to break again in 10.12. +if(NOT APPLE) + check_symbol_exists(poll "${CURL_INCLUDES}" HAVE_POLL) +endif() check_symbol_exists(select "${CURL_INCLUDES}" HAVE_SELECT) check_symbol_exists(strdup "${CURL_INCLUDES}" HAVE_STRDUP) check_symbol_exists(strstr "${CURL_INCLUDES}" HAVE_STRSTR) @@ -776,8 +785,6 @@ if(CMAKE_USE_OPENSSL) check_symbol_exists(RAND_status "${CURL_INCLUDES}" HAVE_RAND_STATUS) check_symbol_exists(RAND_screen "${CURL_INCLUDES}" HAVE_RAND_SCREEN) check_symbol_exists(RAND_egd "${CURL_INCLUDES}" HAVE_RAND_EGD) - check_symbol_exists(CRYPTO_cleanup_all_ex_data "${CURL_INCLUDES}" - HAVE_CRYPTO_CLEANUP_ALL_EX_DATA) if(HAVE_LIBCRYPTO AND HAVE_LIBSSL) set(USE_OPENSSL 1) endif(HAVE_LIBCRYPTO AND HAVE_LIBSSL) @@ -807,9 +814,6 @@ check_symbol_exists(pipe "${CURL_INCLUDES}" HAVE_PIPE) check_symbol_exists(ftruncate "${CURL_INCLUDES}" HAVE_FTRUNCATE) check_symbol_exists(getprotobyname "${CURL_INCLUDES}" HAVE_GETPROTOBYNAME) check_symbol_exists(getrlimit "${CURL_INCLUDES}" HAVE_GETRLIMIT) -check_symbol_exists(idn_free "${CURL_INCLUDES}" HAVE_IDN_FREE) -check_symbol_exists(idna_strerror "${CURL_INCLUDES}" HAVE_IDNA_STRERROR) -check_symbol_exists(tld_strerror "${CURL_INCLUDES}" HAVE_TLD_STRERROR) check_symbol_exists(setlocale "${CURL_INCLUDES}" HAVE_SETLOCALE) check_symbol_exists(setrlimit "${CURL_INCLUDES}" HAVE_SETRLIMIT) check_symbol_exists(fcntl "${CURL_INCLUDES}" HAVE_FCNTL) @@ -819,6 +823,13 @@ check_symbol_exists(setsockopt "${CURL_INCLUDES}" HAVE_SETSOCKOPT) # symbol exists in win32, but function does not. check_function_exists(inet_pton HAVE_INET_PTON) +check_symbol_exists(fsetxattr "${CURL_INCLUDES}" HAVE_FSETXATTR) +if(HAVE_FSETXATTR) + foreach(CURL_TEST HAVE_FSETXATTR_5 HAVE_FSETXATTR_6) + curl_internal_test_run(${CURL_TEST}) + endforeach(CURL_TEST) +endif(HAVE_FSETXATTR) + # sigaction and sigsetjmp are special. Use special mechanism for # detecting those, but only if previous attempt failed. if(HAVE_SIGNAL_H) @@ -1074,7 +1085,7 @@ _add_if("IPv6" ENABLE_IPV6) _add_if("unix-sockets" USE_UNIX_SOCKETS) _add_if("libz" HAVE_LIBZ) _add_if("AsynchDNS" USE_ARES OR USE_THREADS_POSIX OR USE_THREADS_WIN32) -_add_if("IDN" HAVE_LIBIDN) +_add_if("IDN" HAVE_LIBIDN2) _add_if("Largefile" (CURL_SIZEOF_CURL_OFF_T GREATER 4) AND ((SIZEOF_OFF_T GREATER 4) OR USE_WIN32_LARGE_FILES)) # TODO SSP1 (WinSSL) check is missing @@ -1142,9 +1153,7 @@ set(CURL_CA_BUNDLE "") set(CURLVERSION "${CURL_VERSION}") set(ENABLE_SHARED "yes") if(CURL_STATICLIB) - # Broken: LIBCURL_LIBS below; .a lib is not built - message(WARNING "Static linking is broken!") - set(ENABLE_STATIC "no") + set(ENABLE_STATIC "yes") else() set(ENABLE_STATIC "no") endif() @@ -1153,9 +1162,12 @@ set(includedir "\${prefix}/include") set(LDFLAGS "${CMAKE_SHARED_LINKER_FLAGS}") set(LIBCURL_LIBS "") set(libdir "${CMAKE_INSTALL_PREFIX}/lib") -# TODO CURL_LIBS also contains absolute paths which don't work with static -l... foreach(_lib ${CMAKE_C_IMPLICIT_LINK_LIBRARIES} ${CURL_LIBS}) - set(LIBCURL_LIBS "${LIBCURL_LIBS} -l${_lib}") + if(_lib MATCHES ".*/.*") + set(LIBCURL_LIBS "${LIBCURL_LIBS} ${_lib}") + else() + set(LIBCURL_LIBS "${LIBCURL_LIBS} -l${_lib}") + endif() endforeach() # "a" (Linux) or "lib" (Windows) string(REPLACE "." "" libext "${CMAKE_STATIC_LIBRARY_SUFFIX}") diff --git a/COPYING b/COPYING index a98663e..1e45a5e 100644 --- a/COPYING +++ b/COPYING @@ -1,6 +1,6 @@ COPYRIGHT AND PERMISSION NOTICE -Copyright (c) 1996 - 2016, Daniel Stenberg, , and many +Copyright (c) 1996 - 2017, Daniel Stenberg, , and many contributors, see the THANKS file. All rights reserved. diff --git a/Makefile b/Makefile index 329e4f3..8577c8a 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # -# Copyright (C) 1998 - 2015, Daniel Stenberg, , et al. +# Copyright (C) 1998 - 2017, 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 @@ -20,8 +20,6 @@ # ########################################################################### -VC=vc6 - all: ./configure make @@ -87,366 +85,13 @@ mingw32%: $(MAKE) -C lib -f Makefile.m32 CFG=$@ $(MAKE) -C src -f Makefile.m32 CFG=$@ -vc-clean: $(VC) - cd lib - nmake -f Makefile.$(VC) clean - cd ..\src - nmake -f Makefile.$(VC) clean - -vc-all: $(VC) - cd lib - nmake -f Makefile.$(VC) cfg=release - nmake -f Makefile.$(VC) cfg=release-ssl - nmake -f Makefile.$(VC) cfg=release-zlib - nmake -f Makefile.$(VC) cfg=release-ssl-zlib - nmake -f Makefile.$(VC) cfg=release-ssl-dll - nmake -f Makefile.$(VC) cfg=release-zlib-dll - nmake -f Makefile.$(VC) cfg=release-ssl-dll-zlib-dll - nmake -f Makefile.$(VC) cfg=release-dll - nmake -f Makefile.$(VC) cfg=release-dll-ssl-dll - nmake -f Makefile.$(VC) cfg=release-dll-zlib-dll - nmake -f Makefile.$(VC) cfg=release-dll-ssl-dll-zlib-dll - nmake -f Makefile.$(VC) cfg=debug - nmake -f Makefile.$(VC) cfg=debug-ssl - nmake -f Makefile.$(VC) cfg=debug-zlib - nmake -f Makefile.$(VC) cfg=debug-ssl-zlib - nmake -f Makefile.$(VC) cfg=debug-ssl-dll - nmake -f Makefile.$(VC) cfg=debug-zlib-dll - nmake -f Makefile.$(VC) cfg=debug-ssl-dll-zlib-dll - nmake -f Makefile.$(VC) cfg=debug-dll - nmake -f Makefile.$(VC) cfg=debug-dll-ssl-dll - nmake -f Makefile.$(VC) cfg=debug-dll-zlib-dll - nmake -f Makefile.$(VC) cfg=debug-dll-ssl-dll-zlib-dll - -vc: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release - cd ..\src - nmake /f Makefile.$(VC) - -vc-x64: $(VC) - cd lib - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release - cd ..\src - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release - -vc-sspi: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release WINDOWS_SSPI=1 - cd ..\src - nmake /f Makefile.$(VC) cfg=release WINDOWS_SSPI=1 - -vc-x64-sspi: $(VC) - cd lib - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release WINDOWS_SSPI=1 - cd ..\src - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release WINDOWS_SSPI=1 - -vc-idn: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release USE_IDN=1 - cd ..\src - nmake /f Makefile.$(VC) cfg=release USE_IDN=1 - -vc-x64-idn: $(VC) - cd lib - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release USE_IDN=1 - cd ..\src - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release USE_IDN=1 - -vc-idn-sspi: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release USE_IDN=1 WINDOWS_SSPI=1 - cd ..\src - nmake /f Makefile.$(VC) cfg=release USE_IDN=1 WINDOWS_SSPI=1 - -vc-x64-idn-sspi: $(VC) - cd lib - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release USE_IDN=1 WINDOWS_SSPI=1 - cd ..\src - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release USE_IDN=1 WINDOWS_SSPI=1 - -vc-zlib: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release-zlib - cd ..\src - nmake /f Makefile.$(VC) cfg=release-zlib - -vc-x64-zlib: $(VC) - cd lib - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-zlib - cd ..\src - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-zlib - -vc-zlib-sspi: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release-zlib WINDOWS_SSPI=1 - cd ..\src - nmake /f Makefile.$(VC) cfg=release-zlib WINDOWS_SSPI=1 - -vc-x64-zlib-sspi: $(VC) - cd lib - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-zlib WINDOWS_SSPI=1 - cd ..\src - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-zlib WINDOWS_SSPI=1 - -vc-zlib-idn: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release-zlib USE_IDN=1 - cd ..\src - nmake /f Makefile.$(VC) cfg=release-zlib USE_IDN=1 - -vc-x64-zlib-idn: $(VC) - cd lib - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-zlib USE_IDN=1 - cd ..\src - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-zlib USE_IDN=1 - -vc-zlib-idn-sspi: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release-zlib USE_IDN=1 WINDOWS_SSPI=1 - cd ..\src - nmake /f Makefile.$(VC) cfg=release-zlib USE_IDN=1 WINDOWS_SSPI=1 - -vc-x64-zlib-idn-sspi: $(VC) - cd lib - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-zlib USE_IDN=1 WINDOWS_SSPI=1 - cd ..\src - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-zlib USE_IDN=1 WINDOWS_SSPI=1 - -vc-ssl: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release-ssl - cd ..\src - nmake /f Makefile.$(VC) cfg=release-ssl - -vc-x64-ssl: $(VC) - cd lib - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl - cd ..\src - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl - -vc-ssl-sspi: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release-ssl WINDOWS_SSPI=1 - cd ..\src - nmake /f Makefile.$(VC) cfg=release-ssl WINDOWS_SSPI=1 - -vc-x64-ssl-sspi: $(VC) - cd lib - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl WINDOWS_SSPI=1 - cd ..\src - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl WINDOWS_SSPI=1 - -vc-ssl-idn: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release-ssl USE_IDN=1 - cd ..\src - nmake /f Makefile.$(VC) cfg=release-ssl USE_IDN=1 - -vc-x64-ssl-idn: $(VC) - cd lib - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl USE_IDN=1 - cd ..\src - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl USE_IDN=1 - -vc-ssl-idn-sspi: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release-ssl USE_IDN=1 WINDOWS_SSPI=1 - cd ..\src - nmake /f Makefile.$(VC) cfg=release-ssl USE_IDN=1 WINDOWS_SSPI=1 - -vc-x64-ssl-idn-sspi: $(VC) - cd lib - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl USE_IDN=1 WINDOWS_SSPI=1 - cd ..\src - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl USE_IDN=1 WINDOWS_SSPI=1 - -vc-ssl-zlib: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release-ssl-zlib - cd ..\src - nmake /f Makefile.$(VC) cfg=release-ssl-zlib - -vc-x64-ssl-zlib: $(VC) - cd lib - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-zlib - cd ..\src - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-zlib - -vc-ssl-zlib-sspi: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release-ssl-zlib WINDOWS_SSPI=1 - cd ..\src - nmake /f Makefile.$(VC) cfg=release-ssl-zlib WINDOWS_SSPI=1 - -vc-x64-ssl-zlib-sspi: $(VC) - cd lib - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-zlib WINDOWS_SSPI=1 - cd ..\src - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-zlib WINDOWS_SSPI=1 - -vc-ssl-zlib-idn: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release-ssl-zlib USE_IDN=1 - cd ..\src - nmake /f Makefile.$(VC) cfg=release-ssl-zlib USE_IDN=1 - -vc-x64-ssl-zlib-idn: $(VC) - cd lib - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-zlib USE_IDN=1 - cd ..\src - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-zlib USE_IDN=1 - -vc-ssl-zlib-idn-sspi: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release-ssl-zlib USE_IDN=1 WINDOWS_SSPI=1 - cd ..\src - nmake /f Makefile.$(VC) cfg=release-ssl-zlib USE_IDN=1 WINDOWS_SSPI=1 - -vc-x64-ssl-zlib-idn-sspi: $(VC) - cd lib - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-zlib USE_IDN=1 WINDOWS_SSPI=1 - cd ..\src - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-zlib USE_IDN=1 WINDOWS_SSPI=1 - -vc-ssl-ssh2-zlib: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release-ssl-ssh2-zlib - cd ..\src - nmake /f Makefile.$(VC) cfg=release-ssl-ssh2-zlib - -vc-x64-ssl-ssh2-zlib: $(VC) - cd lib - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-ssh2-zlib - cd ..\src - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-ssh2-zlib - -vc-ssl-ssh2-zlib-sspi: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release-ssl-ssh2-zlib WINDOWS_SSPI=1 - cd ..\src - nmake /f Makefile.$(VC) cfg=release-ssl-ssh2-zlib WINDOWS_SSPI=1 - -vc-x64-ssl-ssh2-zlib-sspi: $(VC) - cd lib - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-ssh2-zlib WINDOWS_SSPI=1 - cd ..\src - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-ssh2-zlib WINDOWS_SSPI=1 - -vc-ssl-ssh2-zlib-idn: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release-ssl-ssh2-zlib USE_IDN=1 - cd ..\src - nmake /f Makefile.$(VC) cfg=release-ssl-ssh2-zlib USE_IDN=1 - -vc-x64-ssl-ssh2-zlib-idn: $(VC) - cd lib - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-ssh2-zlib USE_IDN=1 - cd ..\src - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-ssh2-zlib USE_IDN=1 - -vc-ssl-ssh2-zlib-idn-sspi: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release-ssl-ssh2-zlib USE_IDN=1 WINDOWS_SSPI=1 - cd ..\src - nmake /f Makefile.$(VC) cfg=release-ssl-ssh2-zlib USE_IDN=1 WINDOWS_SSPI=1 - -vc-x64-ssl-ssh2-zlib-idn-sspi: $(VC) - cd lib - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-ssh2-zlib USE_IDN=1 WINDOWS_SSPI=1 - cd ..\src - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-ssl-ssh2-zlib USE_IDN=1 WINDOWS_SSPI=1 - -vc-winssl: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release-winssl WINDOWS_SSPI=1 - cd ..\src - nmake /f Makefile.$(VC) cfg=release-winssl WINDOWS_SSPI=1 - -vc-x64-winssl: $(VC) - cd lib - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-winssl WINDOWS_SSPI=1 - cd ..\src - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-winssl WINDOWS_SSPI=1 - -vc-winssl-idn: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release-winssl USE_IDN=1 WINDOWS_SSPI=1 - cd ..\src - nmake /f Makefile.$(VC) cfg=release-winssl USE_IDN=1 WINDOWS_SSPI=1 - -vc-x64-winssl-idn: $(VC) - cd lib - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-winssl USE_IDN=1 WINDOWS_SSPI=1 - cd ..\src - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-winssl USE_IDN=1 WINDOWS_SSPI=1 - -vc-winssl-zlib: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release-winssl-zlib WINDOWS_SSPI=1 - cd ..\src - nmake /f Makefile.$(VC) cfg=release-winssl-zlib WINDOWS_SSPI=1 +vc: + cd winbuild + nmake /f Makefile.vc MACHINE=x86 -vc-x64-winssl-zlib: $(VC) - cd lib - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-winssl-zlib WINDOWS_SSPI=1 - cd ..\src - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-winssl-zlib WINDOWS_SSPI=1 - -vc-winssl-zlib-idn: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release-winssl-zlib USE_IDN=1 WINDOWS_SSPI=1 - cd ..\src - nmake /f Makefile.$(VC) cfg=release-winssl-zlib USE_IDN=1 WINDOWS_SSPI=1 - -vc-x64-winssl-zlib-idn: $(VC) - cd lib - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-winssl-zlib USE_IDN=1 WINDOWS_SSPI=1 - cd ..\src - nmake /f Makefile.$(VC) MACHINE=x64 cfg=release-winssl-zlib USE_IDN=1 WINDOWS_SSPI=1 - -vc-ssl-dll: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release-ssl-dll - cd ..\src - nmake /f Makefile.$(VC) cfg=release-ssl-dll - -vc-dll-ssl-dll: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release-dll-ssl-dll - cd ..\src - nmake /f Makefile.$(VC) cfg=release-dll-ssl-dll - -vc-dll: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release-dll - cd ..\src - nmake /f Makefile.$(VC) cfg=release-dll - -vc-dll-zlib-dll: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release-dll-zlib-dll - cd ..\src - nmake /f Makefile.$(VC) cfg=release-dll-zlib-dll - -vc-dll-ssl-dll-zlib-dll: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release-dll-ssl-dll-zlib-dll - cd ..\src - nmake /f Makefile.$(VC) cfg=release-dll-ssl-dll-zlib-dll - -vc-ssl-dll-zlib-dll: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release-ssl-dll-zlib-dll - cd ..\src - nmake /f Makefile.$(VC) cfg=release-ssl-dll-zlib-dll - -vc-zlib-dll: $(VC) - cd lib - nmake /f Makefile.$(VC) cfg=release-zlib-dll - cd ..\src - nmake /f Makefile.$(VC) cfg=release-zlib-dll +vc-x64: + cd winbuild + nmake /f Makefile.vc MACHINE=x64 djgpp: $(MAKE) -C lib -f Makefile.dj @@ -497,86 +142,6 @@ linux: all linux-ssl: ssl -# We don't need to do anything for vc6. -vc6: - -# VC7 makefiles are for use with VS.NET and VS.NET 2003 -vc7: lib/Makefile.vc7 src/Makefile.vc7 - -lib/Makefile.vc7: lib/Makefile.vc6 - @echo "generate $@" - @sed -e "s/VC6/VC7/g" lib/Makefile.vc6 > lib/Makefile.vc7 - -src/Makefile.vc7: src/Makefile.vc6 - @echo "generate $@" - @sed -e "s/VC6/VC7/g" src/Makefile.vc6 > src/Makefile.vc7 - -# VC8 makefiles are for use with VS2005 -vc8: lib/Makefile.vc8 src/Makefile.vc8 - -lib/Makefile.vc8: lib/Makefile.vc6 - @echo "generate $@" - @sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/ws2_32.lib/ws2_32.lib bufferoverflowu.lib/g" -e "s/VC6/VC8/g" lib/Makefile.vc6 > lib/Makefile.vc8 - -src/Makefile.vc8: src/Makefile.vc6 - @echo "generate $@" - @sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/ws2_32.lib/ws2_32.lib bufferoverflowu.lib/g" -e "s/VC6/VC8/g" src/Makefile.vc6 > src/Makefile.vc8 - -# VC9 makefiles are for use with VS2008 -vc9: lib/Makefile.vc9 src/Makefile.vc9 - -lib/Makefile.vc9: lib/Makefile.vc6 - @echo "generate $@" - @sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/ws2_32.lib/ws2_32.lib/g" -e "s/vc6/vc9/g" -e "s/VC6/VC9/g" lib/Makefile.vc6 > lib/Makefile.vc9 - -src/Makefile.vc9: src/Makefile.vc6 - @echo "generate $@" - @sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/ws2_32.lib/ws2_32.lib/g" -e "s/vc6/vc9/g" -e "s/VC6/VC9/g" src/Makefile.vc6 > src/Makefile.vc9 - -# VC10 makefiles are for use with VS2010 -vc10: lib/Makefile.vc10 src/Makefile.vc10 - -lib/Makefile.vc10: lib/Makefile.vc6 - @echo "generate $@" - @sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/ws2_32.lib/ws2_32.lib/g" -e "s/vc6/vc10/g" -e "s/VC6/VC10/g" lib/Makefile.vc6 > lib/Makefile.vc10 - -src/Makefile.vc10: src/Makefile.vc6 - @echo "generate $@" - @sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/ws2_32.lib/ws2_32.lib/g" -e "s/vc6/vc10/g" -e "s/VC6/VC10/g" src/Makefile.vc6 > src/Makefile.vc10 - -# VC11 makefiles are for use with VS2012 -vc11: lib/Makefile.vc11 src/Makefile.vc11 - -lib/Makefile.vc11: lib/Makefile.vc6 - @echo "generate $@" - @sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/ws2_32.lib/ws2_32.lib/g" -e "s/vc6/vc11/g" -e "s/VC6/VC11/g" lib/Makefile.vc6 > lib/Makefile.vc11 - -src/Makefile.vc11: src/Makefile.vc6 - @echo "generate $@" - @sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/ws2_32.lib/ws2_32.lib/g" -e "s/vc6/vc11/g" -e "s/VC6/VC11/g" src/Makefile.vc6 > src/Makefile.vc11 - -# VC12 makefiles are for use with VS2013 -vc12: lib/Makefile.vc12 src/Makefile.vc12 - -lib/Makefile.vc12: lib/Makefile.vc6 - @echo "generate $@" - @sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/ws2_32.lib/ws2_32.lib/g" -e "s/vc6/vc12/g" -e "s/VC6/VC12/g" lib/Makefile.vc6 > lib/Makefile.vc12 - -src/Makefile.vc12: src/Makefile.vc6 - @echo "generate $@" - @sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/ws2_32.lib/ws2_32.lib/g" -e "s/vc6/vc12/g" -e "s/VC6/VC12/g" src/Makefile.vc6 > src/Makefile.vc12 - -# VC14 makefiles are for use with VS2015 -vc14: lib/Makefile.vc14 src/Makefile.vc14 - -lib/Makefile.vc14: lib/Makefile.vc6 - @echo "generate $@" - @sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/ws2_32.lib/ws2_32.lib/g" -e "s/vc6/vc14/g" -e "s/VC6/VC14/g" lib/Makefile.vc6 > lib/Makefile.vc14 - -src/Makefile.vc14: src/Makefile.vc6 - @echo "generate $@" - @sed -e "s#/GX /DWIN32 /YX#/EHsc /DWIN32#" -e "s#/GZ#/RTC1#" -e "s/ws2_32.lib/ws2_32.lib/g" -e "s/vc6/vc14/g" -e "s/VC6/VC14/g" src/Makefile.vc6 > src/Makefile.vc14 - ca-bundle: lib/mk-ca-bundle.pl @echo "generate a fresh ca-bundle.crt" @perl $< -b -l -u lib/ca-bundle.crt diff --git a/Makefile.am b/Makefile.am index 2986acf..33f900a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -5,7 +5,7 @@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # -# Copyright (C) 1998 - 2016, Daniel Stenberg, , et al. +# Copyright (C) 1998 - 2017, 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 @@ -24,10 +24,13 @@ AUTOMAKE_OPTIONS = foreign ACLOCAL_AMFLAGS = -I m4 -CMAKE_DIST = CMakeLists.txt CMake/CMakeConfigurableFile.in \ - CMake/CurlTests.c CMake/FindGSS.cmake CMake/OtherTests.cmake \ - CMake/Platforms/WindowsCache.cmake CMake/Utilities.cmake \ - include/curl/curlbuild.h.cmake CMake/Macros.cmake +CMAKE_DIST = CMakeLists.txt CMake/CMakeConfigurableFile.in \ + CMake/CurlTests.c CMake/FindGSS.cmake CMake/OtherTests.cmake \ + CMake/Platforms/WindowsCache.cmake CMake/Utilities.cmake \ + include/curl/curlbuild.h.cmake CMake/Macros.cmake \ + CMake/CurlSymbolHiding.cmake CMake/FindCARES.cmake \ + CMake/FindLibSSH2.cmake CMake/FindNGHTTP2.cmake + VC6_LIBTMPL = projects/Windows/VC6/lib/libcurl.tmpl VC6_LIBDSP = projects/Windows/VC6/lib/libcurl.dsp.dist @@ -133,8 +136,7 @@ VC_DIST = projects/README \ projects/Windows/VC14/src/curl.vcxproj.filters WINBUILD_DIST = winbuild/BUILD.WINDOWS.txt winbuild/gen_resp_file.bat \ - winbuild/MakefileBuild.vc winbuild/Makefile.vc \ - winbuild/Makefile.msvc.names + winbuild/MakefileBuild.vc winbuild/Makefile.vc EXTRA_DIST = CHANGES COPYING maketgz Makefile.dist curl-config.in \ RELEASE-NOTES buildconf libcurl.pc.in MacOSX-Framework scripts/zsh.pl \ diff --git a/Makefile.in b/Makefile.in index f86dfc4..9d8c066 100644 --- a/Makefile.in +++ b/Makefile.in @@ -21,7 +21,7 @@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # -# Copyright (C) 1998 - 2016, Daniel Stenberg, , et al. +# Copyright (C) 1998 - 2017, 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 @@ -495,10 +495,12 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign ACLOCAL_AMFLAGS = -I m4 -CMAKE_DIST = CMakeLists.txt CMake/CMakeConfigurableFile.in \ - CMake/CurlTests.c CMake/FindGSS.cmake CMake/OtherTests.cmake \ - CMake/Platforms/WindowsCache.cmake CMake/Utilities.cmake \ - include/curl/curlbuild.h.cmake CMake/Macros.cmake +CMAKE_DIST = CMakeLists.txt CMake/CMakeConfigurableFile.in \ + CMake/CurlTests.c CMake/FindGSS.cmake CMake/OtherTests.cmake \ + CMake/Platforms/WindowsCache.cmake CMake/Utilities.cmake \ + include/curl/curlbuild.h.cmake CMake/Macros.cmake \ + CMake/CurlSymbolHiding.cmake CMake/FindCARES.cmake \ + CMake/FindLibSSH2.cmake CMake/FindNGHTTP2.cmake VC6_LIBTMPL = projects/Windows/VC6/lib/libcurl.tmpl VC6_LIBDSP = projects/Windows/VC6/lib/libcurl.dsp.dist @@ -595,8 +597,7 @@ VC_DIST = projects/README \ projects/Windows/VC14/src/curl.vcxproj.filters WINBUILD_DIST = winbuild/BUILD.WINDOWS.txt winbuild/gen_resp_file.bat \ - winbuild/MakefileBuild.vc winbuild/Makefile.vc \ - winbuild/Makefile.msvc.names + winbuild/MakefileBuild.vc winbuild/Makefile.vc EXTRA_DIST = CHANGES COPYING maketgz Makefile.dist curl-config.in \ RELEASE-NOTES buildconf libcurl.pc.in MacOSX-Framework scripts/zsh.pl \ @@ -633,31 +634,31 @@ LIB_VTLS_HFILES = vtls/openssl.h vtls/vtls.h vtls/gtls.h \ LIB_CFILES = file.c timeval.c base64.c hostip.c progress.c formdata.c \ cookie.c http.c sendf.c ftp.c url.c dict.c if2ip.c speedcheck.c \ ldap.c version.c getenv.c escape.c mprintf.c telnet.c netrc.c \ - getinfo.c transfer.c strequal.c easy.c security.c curl_fnmatch.c \ + getinfo.c transfer.c strcase.c easy.c security.c curl_fnmatch.c \ fileinfo.c ftplistparser.c wildcard.c krb5.c memdebug.c http_chunks.c \ strtok.c connect.c llist.c hash.c multi.c content_encoding.c share.c \ http_digest.c md4.c md5.c http_negotiate.c inet_pton.c strtoofft.c \ strerror.c amigaos.c hostasyn.c hostip4.c hostip6.c hostsyn.c \ inet_ntop.c parsedate.c select.c tftp.c splay.c strdup.c socks.c \ - ssh.c rawstr.c curl_addrinfo.c socks_gssapi.c socks_sspi.c \ + ssh.c curl_addrinfo.c socks_gssapi.c socks_sspi.c \ curl_sspi.c slist.c nonblock.c curl_memrchr.c imap.c pop3.c smtp.c \ pingpong.c rtsp.c curl_threads.c warnless.c hmac.c curl_rtmp.c \ openldap.c curl_gethostname.c gopher.c idn_win32.c \ http_proxy.c non-ascii.c asyn-ares.c asyn-thread.c curl_gssapi.c \ - http_ntlm.c curl_ntlm_wb.c curl_ntlm_core.c curl_sasl.c \ + http_ntlm.c curl_ntlm_wb.c curl_ntlm_core.c curl_sasl.c rand.c \ curl_multibyte.c hostcheck.c conncache.c pipeline.c dotdot.c \ x509asn1.c http2.c smb.c curl_endian.c curl_des.c system_win32.c LIB_HFILES = arpa_telnet.h netrc.h file.h timeval.h hostip.h progress.h \ formdata.h cookie.h http.h sendf.h ftp.h url.h dict.h if2ip.h \ speedcheck.h urldata.h curl_ldap.h escape.h telnet.h getinfo.h \ - strequal.h curl_sec.h memdebug.h http_chunks.h curl_fnmatch.h \ + strcase.h curl_sec.h memdebug.h http_chunks.h curl_fnmatch.h \ wildcard.h fileinfo.h ftplistparser.h strtok.h connect.h llist.h \ hash.h content_encoding.h share.h curl_md4.h curl_md5.h http_digest.h \ http_negotiate.h inet_pton.h amigaos.h strtoofft.h strerror.h \ inet_ntop.h curlx.h curl_memory.h curl_setup.h transfer.h select.h \ easyif.h multiif.h parsedate.h tftp.h sockaddr.h splay.h strdup.h \ - socks.h ssh.h curl_base64.h rawstr.h curl_addrinfo.h curl_sspi.h \ + socks.h ssh.h curl_base64.h curl_addrinfo.h curl_sspi.h \ slist.h nonblock.h curl_memrchr.h imap.h pop3.h smtp.h pingpong.h \ rtsp.h curl_threads.h warnless.h curl_hmac.h curl_rtmp.h \ curl_gethostname.h gopher.h http_proxy.h non-ascii.h asyn.h \ @@ -665,7 +666,7 @@ LIB_HFILES = arpa_telnet.h netrc.h file.h timeval.h hostip.h progress.h \ curl_sasl.h curl_multibyte.h hostcheck.h conncache.h \ curl_setup_once.h multihandle.h setup-vms.h pipeline.h dotdot.h \ x509asn1.h http2.h sigpipe.h smb.h curl_endian.h curl_des.h \ - curl_printf.h system_win32.h + curl_printf.h system_win32.h rand.h LIB_RCFILES = libcurl.rc CSOURCES = $(LIB_CFILES) $(LIB_VAUTH_CFILES) $(LIB_VTLS_CFILES) @@ -675,14 +676,12 @@ HHEADERS = $(LIB_HFILES) $(LIB_VAUTH_HFILES) $(LIB_VTLS_HFILES) # the official API, but we re-use the code here to avoid duplication. CURLX_CFILES = \ ../lib/strtoofft.c \ - ../lib/rawstr.c \ ../lib/nonblock.c \ ../lib/warnless.c CURLX_HFILES = \ ../lib/curl_setup.h \ ../lib/strtoofft.h \ - ../lib/rawstr.h \ ../lib/nonblock.h \ ../lib/warnless.h diff --git a/RELEASE-NOTES b/RELEASE-NOTES index 2973b75..27ca118 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -1,61 +1,20 @@ -Curl and libcurl 7.50.2 +Curl and libcurl 7.53.1 - Public curl releases: 158 - Command line options: 185 - curl_easy_setopt() options: 224 + Public curl releases: 164 + Command line options: 205 + curl_easy_setopt() options: 244 Public functions in libcurl: 61 - Contributors: 1441 + Contributors: 1507 This release includes the following bugfixes: - o mbedtls: Added support for NTLM - o SSH: fixed SFTP/SCP transfer problems [1] - o multi: make Curl_expire() work with 0 ms timeouts - o mk-ca-bundle.pl: -m keeps ca cert meta data in output [2] - o TFTP: Fix upload problem with piped input [3] - o CURLOPT_TCP_NODELAY: now enabled by default [4] - o mbedtls: set verbose TLS debug when MBEDTLS_DEBUG is defined [5] - o http2: always wait for readable socket - o cmake: Enable win32 large file support by default - o cmake: Enable win32 threaded resolver by default - o winbuild: Avoid setting redundant CFLAGS to compile commands [6] - o curl.h: make CURL_NO_OLDIES define CURL_STRICTER - o docs: make more markdown files use .md extension - o docs: CONTRIBUTE and LICENSE-MIXING were converted to markdown - o winbuild: Allow changing C compiler via environment variable CC [7] - o rtsp: accept any RTSP session id [8] - o HTTP: retry failed HEAD requests on reused connections too - o configure: add zlib search with pkg-config [9] - o openssl: accept subjectAltName iPAddress if no dNSName match [10] - o MANUAL: Remove invalid link to LDAP documentation [11] - o socks: improved connection procedure [12] - o proxy: reject attempts to use unsupported proxy schemes - o proxy: bring back use of "Proxy-Connection:" [13] - o curl: allow "pkcs11:" prefix for client certificates [14] - o spnego_sspi: fix memory leak in case *outlen is zero [15] - o SOCKS: improve verbose output of SOCKS5 connection sequence - o SOCKS: display the hostname returned by the SOCKS5 proxy server - o http/sasl: Query authentication mechanism supported by SSPI before using - o sasl: Don't use GSSAPI authentication when domain name not specified [16] - o win: Basic support for Universal Windows Platform apps [17] - o nss: fix incorrect use of a previously loaded certificate from file - o nss: work around race condition in PK11_FindSlotByName() [18] - o ftp: fix wrong poll on the secondary socket [19] - o openssl: build warning-free with 1.1.0 (again) - o HTTP: stop parsing headers when switching to unknown protocols [20] - o test219: Add http as a required feature - o TLS: random file/egd doesn't have to match for conn reuse - o schannel: Disable ALPN for Wine since it is causing problems [21] - o http2: make sure stream errors don't needlessly close the connection [22] - o http2: return CURLE_HTTP2_STREAM for unexpected stream close [23] - o darwinssl: --cainfo is intended for backward compatibility only - o speed caps: not based on average speeds anymore [24] - o configure: make the cpp -P detection not clobber CPPFLAGS [25] - o http2: use named define instead of magic constant in read callback - o http2: skip the content-length parsing, detect unknown size - o http2: return EOF when done uploading without known size [26] - o darwinssl: test for errSecSuccess in PKCS12 import rather than noErr [27] - o openssl: fix CURLINFO_SSL_VERIFYRESULT [28] + o cyassl: fix typo + o url: Improve CURLOPT_PROXY_CAPATH error handling [1] + o urldata: include curl_sspi.h when Windows SSPI is enabled [2] + o formdata: check for EOF when reading from stdin [3] + o tests: Set CHARSET & LANG to UTF-8 in 1035, 2046 and 2047 [4] + o url: Default the proxy CA bundle location to CURL_CA_BUNDLE [5] + o rand: added missing #ifdef HAVE_FCNTL_H around fcntl.h header [6] This release includes the following known bugs: @@ -64,45 +23,17 @@ This release includes the following known bugs: This release would not have looked like this without help, code, reports and advice from friends like these: - Ales Novak, Bill Nagel, Christian Fillion, Craig Davison, Dambaev Alexander, - Dan Donahue, Dan Fandrich, Daniel Gustafsson, Daniel Stenberg, - David Kalnischkies, David Woodhouse, Erik Janssen, Gaurav Malhotra, - János Fekete, Kamil Dudka, Marcel Raad, Marc Hörsken, Marco Deckel, - Mark Hamilton, Mark Nottingham, Michael Kaufmann, Miroslav Franc, - Nick Zitzmann, Olivier Brunel, Peter Wang, Ray Satiro, Ronnie Mose, - Sergei Nikulov, Serj Kalichev, Simon Warta, Steve Holme, Tatsuhiro Tsujikawa, - Thomas Glanzmann, Tim Rühsen, wmsch on github, - (35 contributors) + Dan Fandrich, Daniel Stenberg, İsmail Dönmez, jveazey on github, Ray Satiro, + Sergii Pylypenko, Shachaf Ben-Kiki, Viktor Szakáts, + (8 contributors) Thanks! (and sorry if I forgot to mention someone) References to bug reports and discussions on issues: - [1] = https://curl.haxx.se/mail/lib-2016-07/0057.html - [2] = https://curl.haxx.se/bug/?i=937 - [3] = https://curl.haxx.se/bug/?i=857 - [4] = https://curl.haxx.se/mail/lib-2016-06/0143.html - [5] = https://curl.haxx.se/mail/lib-2016-08/0017.html - [6] = https://curl.haxx.se/bug/?i=949 - [7] = https://curl.haxx.se/bug/?i=952 - [8] = https://curl.haxx.se/mail/lib-2016-08/0076.html - [9] = https://curl.haxx.se/bug/?i=956 - [10] = https://curl.haxx.se/bug/?i=959 - [11] = https://curl.haxx.se/bug/?i=962 - [12] = https://curl.haxx.se/bug/?i=944 - [13] = https://curl.haxx.se/bug/?i=954 - [14] = https://curl.haxx.se/mail/lib-2016-08/0122.html - [15] = https://curl.haxx.se/bug/?i=970 - [16] = https://curl.haxx.se/bug/?i=718 - [17] = https://curl.haxx.se/bug/?i=820 - [18] = https://bugzilla.mozilla.org/1297397 - [19] = https://curl.haxx.se/bug/?i=978 - [20] = https://curl.haxx.se/bug/?i=899 - [21] = https://curl.haxx.se/bug/?i=983 - [22] = https://curl.haxx.se/bug/?i=941 - [23] = https://curl.haxx.se/bug/?i=986 - [24] = https://curl.haxx.se/bug/?i=971 - [25] = https://curl.haxx.se/bug/?i=958 - [26] = https://curl.haxx.se/bug/?i=982 - [27] = https://curl.haxx.se/bug/?i=993 - [28] = https://curl.haxx.se/bug/?i=995 + [1] = https://curl.haxx.se/bug/?i=1257 + [2] = https://curl.haxx.se/bug/?i=1276 + [3] = https://curl.haxx.se/bug/?i=1281 + [4] = https://curl.haxx.se/bug/?i=1277 + [5] = https://curl.haxx.se/bug/?i=1257 + [6] = https://curl.haxx.se/bug/?i=1285 diff --git a/acinclude.m4 b/acinclude.m4 index 312efcb..2abae8d 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -5,7 +5,7 @@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # -# Copyright (C) 1998 - 2015, Daniel Stenberg, , et al. +# Copyright (C) 1998 - 2016, 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 @@ -1856,7 +1856,7 @@ AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [ AC_CHECK_HEADERS(sys/types.h sys/time.h time.h) AC_MSG_CHECKING([for monotonic clock_gettime]) # - if test "x$dontwant_rt" == "xno" ; then + if test "x$dontwant_rt" = "xno" ; then AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[ #ifdef HAVE_SYS_TYPES_H @@ -3199,3 +3199,47 @@ TEST EINVAL TEST CPPPFLAG="" fi ]) + + +dnl CURL_MAC_CFLAGS +dnl +dnl Check if -mmacosx-version-min, -miphoneos-version-min or any +dnl similar are set manually, otherwise do. And set +dnl -Werror=partial-availability. +dnl + +AC_DEFUN([CURL_MAC_CFLAGS], [ + + tst_cflags="no" + case $host_os in + darwin*) + tst_cflags="yes" + ;; + esac + + AC_MSG_CHECKING([for good-to-use Mac CFLAGS]) + AC_MSG_RESULT([$tst_cflags]); + + if test "$tst_cflags" = "yes"; then + AC_MSG_CHECKING([for *version-min in CFLAGS]) + min="" + if test -z "$(echo $CFLAGS | grep m.*os.*-version-min)"; then + min="-mmacosx-version-min=10.8" + CFLAGS="$CFLAGS $min" + fi + if test -z "$min"; then + AC_MSG_RESULT([set by user]) + else + AC_MSG_RESULT([$min set]) + fi + + old_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -Werror=partial-availability" + AC_MSG_CHECKING([whether $CC accepts -Werror=partial-availability]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + CFLAGS=$old_CFLAGS]) + fi + +]) diff --git a/config.guess b/config.guess index 0967f2a..2e9ad7f 100755 --- a/config.guess +++ b/config.guess @@ -2,7 +2,7 @@ # Attempt to guess a canonical system name. # Copyright 1992-2016 Free Software Foundation, Inc. -timestamp='2016-04-02' +timestamp='2016-10-02' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -186,9 +186,12 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. + # to ELF recently (or will in the future) and ABI. case "${UNAME_MACHINE_ARCH}" in - arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax) + earm*) + os=netbsdelf + ;; + arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ @@ -997,6 +1000,9 @@ EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; + mips64el:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-${LIBC} exit ;; @@ -1029,6 +1035,9 @@ EOF ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; + riscv32:Linux:*:* | riscv64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; @@ -1408,18 +1417,17 @@ esac cat >&2 < in order to provide the needed -information to handle your system. +If $0 has already been updated, send the following data and any +information you think might be pertinent to config-patches@gnu.org to +provide the necessary information to handle your system. config.guess timestamp = $timestamp diff --git a/config.sub b/config.sub index 8d39c4b..dd2ca93 100755 --- a/config.sub +++ b/config.sub @@ -2,7 +2,7 @@ # Configuration validation subroutine script. # Copyright 1992-2016 Free Software Foundation, Inc. -timestamp='2016-03-30' +timestamp='2016-11-04' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -117,7 +117,7 @@ case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ - kopensolaris*-gnu* | \ + kopensolaris*-gnu* | cloudabi*-eabi* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` @@ -301,6 +301,7 @@ case $basic_machine in | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pru \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ @@ -428,6 +429,7 @@ case $basic_machine in | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pru-* \ | pyramid-* \ | riscv32-* | riscv64-* \ | rl78-* | romp-* | rs6000-* | rx-* \ @@ -643,6 +645,14 @@ case $basic_machine in basic_machine=m68k-bull os=-sysv3 ;; + e500v[12]) + basic_machine=powerpc-unknown + os=$os"spe" + ;; + e500v[12]-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + os=$os"spe" + ;; ebmon29k) basic_machine=a29k-amd os=-ebmon @@ -1022,7 +1032,7 @@ case $basic_machine in ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; - ppcle | powerpclittle | ppc-le | powerpc-little) + ppcle | powerpclittle) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) @@ -1032,7 +1042,7 @@ case $basic_machine in ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) + ppc64le | powerpc64little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) @@ -1389,7 +1399,7 @@ case $os in | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ @@ -1399,7 +1409,7 @@ case $os in | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ - | -onefs* | -tirtos*) + | -onefs* | -tirtos* | -phoenix* | -fuchsia*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) diff --git a/configure b/configure index 721af36..b7030ff 100755 --- a/configure +++ b/configure @@ -1168,10 +1168,11 @@ with_libssh2 with_librtmp enable_versioned_symbols with_winidn -with_libidn +with_libidn2 with_nghttp2 with_zsh_functions_dir enable_threaded_resolver +enable_pthreads enable_verbose enable_sspi enable_crypto_auth @@ -1899,6 +1900,8 @@ Optional Features: Enable threaded resolver --disable-threaded-resolver Disable threaded resolver + --enable-pthreads Enable POSIX threads (default for threaded resolver) + --disable-pthreads Disable POSIX threads --enable-verbose Enable verbose strings --disable-verbose Disable verbose strings --enable-sspi Enable SSPI @@ -1940,8 +1943,8 @@ Optional Packages: --with-gssapi=DIR Where to look for GSS-API --with-winssl enable Windows native SSL/TLS --without-winssl disable Windows native SSL/TLS - --with-darwinssl enable iOS/Mac OS X native SSL/TLS - --without-darwinssl disable iOS/Mac OS X native SSL/TLS + --with-darwinssl enable Apple OS native SSL/TLS + --without-darwinssl disable Apple OS native SSL/TLS --with-ssl=PATH Where to look for OpenSSL, PATH points to the SSL installation (default: /usr/local/ssl); when possible, set the PKG_CONFIG_PATH environment @@ -1996,8 +1999,8 @@ Optional Packages: --without-librtmp disable LIBRTMP --with-winidn=PATH enable Windows native IDN --without-winidn disable Windows native IDN - --with-libidn=PATH Enable libidn usage - --without-libidn Disable libidn usage + --with-libidn2=PATH Enable libidn2 usage + --without-libidn2 Disable libidn2 usage --with-nghttp2=PATH Enable nghttp2 usage --without-nghttp2 Disable nghttp2 usage --with-zsh-functions-dir=PATH @@ -5627,7 +5630,7 @@ VERSIONNUM=`$SED -ne 's/^#define LIBCURL_VERSION_NUM 0x\(.*\)/\1/p' ${srcdir}/in PKGADD_PKG="HAXXcurl" -PKGADD_NAME="cURL - a client that groks URLs" +PKGADD_NAME="curl - a client that groks URLs" PKGADD_VENDOR="curl.haxx.se" @@ -5641,7 +5644,7 @@ curl_tls_srp_msg="no (--enable-tls-srp)" curl_res_msg="default (--enable-ares / --enable-threaded-resolver)" curl_ipv6_msg="no (--enable-ipv6)" curl_unix_sockets_msg="no (--enable-unix-sockets)" - curl_idn_msg="no (--with-{libidn,winidn})" + curl_idn_msg="no (--with-{libidn2,winidn})" curl_manual_msg="no (--enable-manual)" curl_libcurl_msg="enabled (--disable-libcurl-option)" curl_verbose_msg="enabled (--disable-verbose)" @@ -17254,7 +17257,7 @@ $as_echo "no" >&6; } *** *** Whatever settings are present in CFLAGS will be used for this run. *** -*** If you wish to help the cURL project to better support your compiler +*** If you wish to help the curl project to better support your compiler *** you can report this and the required info on the libcurl development *** mailing list: https://cool.haxx.se/mailman/listinfo/curl-library/ *** @@ -19204,6 +19207,63 @@ $as_echo "no" >&6; } esac + + + tst_cflags="no" + case $host_os in + darwin*) + tst_cflags="yes" + ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for good-to-use Mac CFLAGS" >&5 +$as_echo_n "checking for good-to-use Mac CFLAGS... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tst_cflags" >&5 +$as_echo "$tst_cflags" >&6; }; + + if test "$tst_cflags" = "yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for *version-min in CFLAGS" >&5 +$as_echo_n "checking for *version-min in CFLAGS... " >&6; } + min="" + if test -z "$(echo $CFLAGS | grep m.*os.*-version-min)"; then + min="-mmacosx-version-min=10.8" + CFLAGS="$CFLAGS $min" + fi + if test -z "$min"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: set by user" >&5 +$as_echo "set by user" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $min set" >&5 +$as_echo "$min set" >&6; } + fi + + old_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -Werror=partial-availability" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -Werror=partial-availability" >&5 +$as_echo_n "checking whether $CC accepts -Werror=partial-availability... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + CFLAGS=$old_CFLAGS +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support http" >&5 $as_echo_n "checking whether to support http... " >&6; } # Check whether --enable-http was given. @@ -20436,7 +20496,7 @@ done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for monotonic clock_gettime" >&5 $as_echo_n "checking for monotonic clock_gettime... " >&6; } # - if test "x$dontwant_rt" == "xno" ; then + if test "x$dontwant_rt" = "xno" ; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -22015,8 +22075,8 @@ if test "${with_darwinssl+set}" = set; then : fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable iOS/Mac OS X native SSL/TLS" >&5 -$as_echo_n "checking whether to enable iOS/Mac OS X native SSL/TLS... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable Apple OS native SSL/TLS" >&5 +$as_echo_n "checking whether to enable Apple OS native SSL/TLS... " >&6; } if test "$curl_ssl_msg" = "$init_ssl_msg"; then if test "x$OPT_DARWINSSL" != "xno" && test -d "/System/Library/Frameworks/Security.framework"; then @@ -22027,7 +22087,7 @@ $as_echo "#define USE_DARWINSSL 1" >>confdefs.h USE_DARWINSSL=1 - curl_ssl_msg="enabled (iOS/Mac OS X-native)" + curl_ssl_msg="enabled (Apple OS-native)" DARWINSSL_ENABLED=1 LDFLAGS="$LDFLAGS -framework CoreFoundation -framework Security" else @@ -22651,11 +22711,8 @@ fi - for ac_func in RAND_status \ - RAND_screen \ - RAND_egd \ + for ac_func in RAND_egd \ ENGINE_cleanup \ - CRYPTO_cleanup_all_ex_data \ SSL_get_shutdown \ SSLv2_client_method do : @@ -23750,12 +23807,13 @@ $as_echo "$as_me: detected GnuTLS version $version" >&6;} $as_echo "$as_me: Added $gtlslib to LD_LIBRARY_PATH" >&6;} fi fi - for ac_func in gnutls_certificate_set_x509_key_file2 + for ac_func in gnutls_certificate_set_x509_key_file2 gnutls_alpn_set_protocols gnutls_ocsp_req_init do : - ac_fn_c_check_func "$LINENO" "gnutls_certificate_set_x509_key_file2" "ac_cv_func_gnutls_certificate_set_x509_key_file2" -if test "x$ac_cv_func_gnutls_certificate_set_x509_key_file2" = xyes; then : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF -#define HAVE_GNUTLS_CERTIFICATE_SET_X509_KEY_FILE2 1 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi @@ -25936,7 +25994,7 @@ $as_echo "found" >&6; } DIR_SSH2=${PREFIX_SSH2}/lib$libsuff fi - LDFLAGS="$LDFLAGS $LD_SSH2" + LDFLAGS="$LD_SSH2 $LDFLAGS" CPPFLAGS="$CPPFLAGS $CPP_SSH2" LIBS="$LIB_SSH2 $LIBS" @@ -26446,13 +26504,13 @@ $as_echo "$as_me: WARNING: Cannot find libraries for IDN support: IDN disabled" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build with libidn" >&5 -$as_echo_n "checking whether to build with libidn... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build with libidn2" >&5 +$as_echo_n "checking whether to build with libidn2... " >&6; } OPT_IDN="default" -# Check whether --with-libidn was given. -if test "${with_libidn+set}" = set; then : - withval=$with_libidn; OPT_IDN=$withval +# Check whether --with-libidn2 was given. +if test "${with_libidn2+set}" = set; then : + withval=$with_libidn2; OPT_IDN=$withval fi case "$OPT_IDN" in @@ -26596,14 +26654,14 @@ fi fi if test "x$PKGCONFIG" != "xno"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libidn options with pkg-config" >&5 -$as_echo_n "checking for libidn options with pkg-config... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libidn2 options with pkg-config" >&5 +$as_echo_n "checking for libidn2 options with pkg-config... " >&6; } itexists=` if test -n "$IDN_PCDIR"; then PKG_CONFIG_LIBDIR="$IDN_PCDIR" export PKG_CONFIG_LIBDIR fi - $PKGCONFIG --exists libidn >/dev/null 2>&1 && echo 1` + $PKGCONFIG --exists libidn2 >/dev/null 2>&1 && echo 1` if test -z "$itexists"; then PKGCONFIG="no" @@ -26621,22 +26679,22 @@ $as_echo "found" >&6; } PKG_CONFIG_LIBDIR="$IDN_PCDIR" export PKG_CONFIG_LIBDIR fi - $PKGCONFIG --libs-only-l libidn 2>/dev/null` + $PKGCONFIG --libs-only-l libidn2 2>/dev/null` IDN_LDFLAGS=` if test -n "$IDN_PCDIR"; then PKG_CONFIG_LIBDIR="$IDN_PCDIR" export PKG_CONFIG_LIBDIR fi - $PKGCONFIG --libs-only-L libidn 2>/dev/null` + $PKGCONFIG --libs-only-L libidn2 2>/dev/null` IDN_CPPFLAGS=` if test -n "$IDN_PCDIR"; then PKG_CONFIG_LIBDIR="$IDN_PCDIR" export PKG_CONFIG_LIBDIR fi - $PKGCONFIG --cflags-only-I libidn 2>/dev/null` + $PKGCONFIG --cflags-only-I libidn2 2>/dev/null` IDN_DIR=`echo $IDN_LDFLAGS | $SED -e 's/-L//'` else - IDN_LIBS="-lidn" + IDN_LIBS="-lidn2" IDN_LDFLAGS="-L$want_idn_path/lib$libsuff" IDN_CPPFLAGS="-I$want_idn_path/include" IDN_DIR="$want_idn_path/lib$libsuff" @@ -26749,14 +26807,14 @@ fi fi if test "x$PKGCONFIG" != "xno"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libidn options with pkg-config" >&5 -$as_echo_n "checking for libidn options with pkg-config... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libidn2 options with pkg-config" >&5 +$as_echo_n "checking for libidn2 options with pkg-config... " >&6; } itexists=` if test -n ""; then PKG_CONFIG_LIBDIR="" export PKG_CONFIG_LIBDIR fi - $PKGCONFIG --exists libidn >/dev/null 2>&1 && echo 1` + $PKGCONFIG --exists libidn2 >/dev/null 2>&1 && echo 1` if test -z "$itexists"; then PKGCONFIG="no" @@ -26769,12 +26827,12 @@ $as_echo "found" >&6; } fi if test "$PKGCONFIG" != "no"; then - IDN_LIBS=`$PKGCONFIG --libs-only-l libidn 2>/dev/null` - IDN_LDFLAGS=`$PKGCONFIG --libs-only-L libidn 2>/dev/null` - IDN_CPPFLAGS=`$PKGCONFIG --cflags-only-I libidn 2>/dev/null` + IDN_LIBS=`$PKGCONFIG --libs-only-l libidn2 2>/dev/null` + IDN_LDFLAGS=`$PKGCONFIG --libs-only-L libidn2 2>/dev/null` + IDN_CPPFLAGS=`$PKGCONFIG --cflags-only-I libidn2 2>/dev/null` IDN_DIR=`echo $IDN_LDFLAGS | $SED -e 's/-L//'` else - IDN_LIBS="-lidn" + IDN_LIBS="-lidn2" fi fi # @@ -26802,30 +26860,30 @@ $as_echo "$as_me: IDN_DIR: \"$IDN_DIR\"" >&6;} LDFLAGS="$IDN_LDFLAGS $LDFLAGS" LIBS="$IDN_LIBS $LIBS" # - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if idna_to_ascii_4i can be linked" >&5 -$as_echo_n "checking if idna_to_ascii_4i can be linked... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if idn2_lookup_ul can be linked" >&5 +$as_echo_n "checking if idn2_lookup_ul can be linked... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#define idna_to_ascii_4i innocuous_idna_to_ascii_4i +#define idn2_lookup_ul innocuous_idn2_lookup_ul #ifdef __STDC__ # include #else # include #endif -#undef idna_to_ascii_4i +#undef idn2_lookup_ul #ifdef __cplusplus extern "C" #endif -char idna_to_ascii_4i (); -#if defined __stub_idna_to_ascii_4i || defined __stub___idna_to_ascii_4i +char idn2_lookup_ul (); +#if defined __stub_idn2_lookup_ul || defined __stub___idn2_lookup_ul choke me #endif int main (void) { -return idna_to_ascii_4i (); +return idn2_lookup_ul (); ; return 0; } @@ -26846,70 +26904,8 @@ $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext - if test "$tst_links_libidn" = "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if idna_to_ascii_lz can be linked" >&5 -$as_echo_n "checking if idna_to_ascii_lz can be linked... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -#define idna_to_ascii_lz innocuous_idna_to_ascii_lz -#ifdef __STDC__ -# include -#else -# include -#endif -#undef idna_to_ascii_lz -#ifdef __cplusplus -extern "C" -#endif -char idna_to_ascii_lz (); -#if defined __stub_idna_to_ascii_lz || defined __stub___idna_to_ascii_lz -choke me -#endif - -int main (void) -{ -return idna_to_ascii_lz (); - ; - return 0; -} - -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - tst_links_libidn="yes" - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - tst_links_libidn="no" - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - fi # - if test "$tst_links_libidn" = "yes"; then - -$as_echo "#define HAVE_LIBIDN 1" >>confdefs.h - - for ac_func in idn_free idna_strerror tld_strerror -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - - for ac_header in idn-free.h tld.h + for ac_header in idn2.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" @@ -26922,22 +26918,20 @@ fi done - if test "x$ac_cv_header_tld_h" = "xyes"; then - IDN_ENABLED=1 - curl_idn_msg="enabled" - if test -n "$IDN_DIR" -a "x$cross_compiling" != "xyes"; then - LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$IDN_DIR" - export LD_LIBRARY_PATH - { $as_echo "$as_me:${as_lineno-$LINENO}: Added $IDN_DIR to LD_LIBRARY_PATH" >&5 + if test "$tst_links_libidn" = "yes"; then + +$as_echo "#define HAVE_LIBIDN2 1" >>confdefs.h + + + IDN_ENABLED=1 + + curl_idn_msg="enabled (libidn2)" + if test -n "$IDN_DIR" -a "x$cross_compiling" != "xyes"; then + LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$IDN_DIR" + export LD_LIBRARY_PATH + { $as_echo "$as_me:${as_lineno-$LINENO}: Added $IDN_DIR to LD_LIBRARY_PATH" >&5 $as_echo "$as_me: Added $IDN_DIR to LD_LIBRARY_PATH" >&6;} - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libraries for IDN support too old: IDN disabled" >&5 -$as_echo "$as_me: WARNING: Libraries for IDN support too old: IDN disabled" >&2;} - CPPFLAGS="$clean_CPPFLAGS" - LDFLAGS="$clean_LDFLAGS" - LIBS="$clean_LIBS" fi else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find libraries for IDN support: IDN disabled" >&5 @@ -35855,8 +35849,9 @@ $as_echo "no" >&6; } tst_allow_poll="unknown" # case $host_os in - darwin[123456789].*|darwin10.*|darwin11.*|darwin12.*|interix*) - curl_disallow_poll="yes" + darwin*|interix*) + curl_disallow_poll="yes" + tst_compi_poll="no" ;; esac # @@ -35974,14 +35969,30 @@ else $curl_includes_stdlib $curl_includes_poll + $curl_includes_time int main (void) { + /* detect the original poll() breakage */ if(0 != poll(0, 0, 10)) exit(1); /* fail */ - else - exit(0); + else { + /* detect the 10.12 poll() breakage */ + struct timeval before, after; + int rc; + size_t us; + + gettimeofday(&before, NULL); + rc = poll(NULL, 0, 500); + gettimeofday(&after, NULL); + + us = (after.tv_sec - before.tv_sec) * 1000000 + + (after.tv_usec - before.tv_usec); + + if(us < 400000) + exit(1); + } ; return 0; @@ -40187,7 +40198,31 @@ if test "x$want_thres" = xyes && test "x$want_ares" = xyes; then as_fn_error $? "Options --enable-threaded-resolver and --enable-ares are mutually exclusive" "$LINENO" 5 fi -if test "$want_thres" = "yes" && test "$dontwant_rt" = "no"; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use POSIX threads for threaded resolver" >&5 +$as_echo_n "checking whether to use POSIX threads for threaded resolver... " >&6; } +# Check whether --enable-pthreads was given. +if test "${enable_pthreads+set}" = set; then : + enableval=$enable_pthreads; case "$enableval" in + no) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + want_pthreads=no + ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + want_pthreads=yes + ;; + esac +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: auto" >&5 +$as_echo "auto" >&6; } + want_pthreads=auto + + +fi + +if test "$want_thres" = "yes" && test "$dontwant_rt" = "no" && \ + test "$want_pthreads" != "no"; then ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" if test "x$ac_cv_header_pthread_h" = xyes; then : @@ -40253,13 +40288,28 @@ $as_echo "#define USE_THREADS_POSIX 1" >>confdefs.h curl_res_msg="POSIX threaded" fi +fi fi +if test "x$USE_THREADS_POSIX" != "x1"; then + if test "$want_pthreads" = "yes"; then + as_fn_error $? "--enable-pthreads but pthreads was not found" "$LINENO" 5 + fi + if test "$want_thres" = "yes"; then + if test "$curl_cv_native_windows" = "yes"; then + USE_THREADS_WIN32=1 +$as_echo "#define USE_THREADS_WIN32 1" >>confdefs.h + curl_res_msg="Win32 threaded" + else + as_fn_error $? "Threaded resolver enabled but no thread library found" "$LINENO" 5 + fi + fi fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable verbose strings" >&5 $as_echo_n "checking whether to enable verbose strings... " >&6; } # Check whether --enable-verbose was given. @@ -40607,7 +40657,8 @@ fi if test "x$HAVE_LIBZ" = "x1"; then SUPPORT_FEATURES="$SUPPORT_FEATURES libz" fi -if test "x$USE_ARES" = "x1" -o "x$USE_THREADS_POSIX" = "x1"; then +if test "x$USE_ARES" = "x1" -o "x$USE_THREADS_POSIX" = "x1" \ + -o "x$USE_THREADS_WIN32" = "x1"; then SUPPORT_FEATURES="$SUPPORT_FEATURES AsynchDNS" fi if test "x$IDN_ENABLED" = "x1"; then @@ -40656,6 +40707,11 @@ if test "x$USE_NGHTTP2" = "x1"; then SUPPORT_FEATURES="$SUPPORT_FEATURES HTTP2" fi +if test "x$OPENSSL_ENABLED" = "x1" -o "x$GNUTLS_ENABLED" = "x1" \ + -o "x$NSS_ENABLED" = "x1"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES HTTPS-proxy" +fi + if test "x$CURL_DISABLE_HTTP" != "x1"; then @@ -40924,7 +40980,7 @@ if test "x$want_curldebug_assumed" = "xyes" && ac_configure_args="$ac_configure_args --enable-curldebug" fi -ac_config_files="$ac_config_files Makefile docs/Makefile docs/examples/Makefile docs/libcurl/Makefile docs/libcurl/opts/Makefile include/Makefile include/curl/Makefile src/Makefile lib/Makefile scripts/Makefile lib/libcurl.vers tests/Makefile tests/certs/Makefile tests/certs/scripts/Makefile tests/data/Makefile tests/server/Makefile tests/libtest/Makefile tests/unit/Makefile packages/Makefile packages/Win32/Makefile packages/Win32/cygwin/Makefile packages/Linux/Makefile packages/Linux/RPM/Makefile packages/Linux/RPM/curl.spec packages/Linux/RPM/curl-ssl.spec packages/Solaris/Makefile packages/EPM/curl.list packages/EPM/Makefile packages/vms/Makefile packages/AIX/Makefile packages/AIX/RPM/Makefile packages/AIX/RPM/curl.spec curl-config libcurl.pc" +ac_config_files="$ac_config_files Makefile docs/Makefile docs/examples/Makefile docs/libcurl/Makefile docs/libcurl/opts/Makefile docs/cmdline-opts/Makefile include/Makefile include/curl/Makefile src/Makefile lib/Makefile scripts/Makefile lib/libcurl.vers tests/Makefile tests/certs/Makefile tests/certs/scripts/Makefile tests/data/Makefile tests/server/Makefile tests/libtest/Makefile tests/unit/Makefile packages/Makefile packages/Win32/Makefile packages/Win32/cygwin/Makefile packages/Linux/Makefile packages/Linux/RPM/Makefile packages/Linux/RPM/curl.spec packages/Linux/RPM/curl-ssl.spec packages/Solaris/Makefile packages/EPM/curl.list packages/EPM/Makefile packages/vms/Makefile packages/AIX/Makefile packages/AIX/RPM/Makefile packages/AIX/RPM/curl.spec curl-config libcurl.pc" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -42009,6 +42065,7 @@ do "docs/examples/Makefile") CONFIG_FILES="$CONFIG_FILES docs/examples/Makefile" ;; "docs/libcurl/Makefile") CONFIG_FILES="$CONFIG_FILES docs/libcurl/Makefile" ;; "docs/libcurl/opts/Makefile") CONFIG_FILES="$CONFIG_FILES docs/libcurl/opts/Makefile" ;; + "docs/cmdline-opts/Makefile") CONFIG_FILES="$CONFIG_FILES docs/cmdline-opts/Makefile" ;; "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "include/curl/Makefile") CONFIG_FILES="$CONFIG_FILES include/curl/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; diff --git a/configure.ac b/configure.ac index 083e18c..1e76c49 100644 --- a/configure.ac +++ b/configure.ac @@ -141,7 +141,7 @@ AC_SUBST(VERSIONNUM) dnl Solaris pkgadd support definitions PKGADD_PKG="HAXXcurl" -PKGADD_NAME="cURL - a client that groks URLs" +PKGADD_NAME="curl - a client that groks URLs" PKGADD_VENDOR="curl.haxx.se" AC_SUBST(PKGADD_PKG) AC_SUBST(PKGADD_NAME) @@ -157,7 +157,7 @@ curl_tls_srp_msg="no (--enable-tls-srp)" curl_res_msg="default (--enable-ares / --enable-threaded-resolver)" curl_ipv6_msg="no (--enable-ipv6)" curl_unix_sockets_msg="no (--enable-unix-sockets)" - curl_idn_msg="no (--with-{libidn,winidn})" + curl_idn_msg="no (--with-{libidn2,winidn})" curl_manual_msg="no (--enable-manual)" curl_libcurl_msg="enabled (--disable-libcurl-option)" curl_verbose_msg="enabled (--disable-verbose)" @@ -357,6 +357,8 @@ case X-"$curl_cv_native_windows" in esac CURL_CHECK_WIN32_LARGEFILE +CURL_MAC_CFLAGS + dnl ************************************************************ dnl switch off particular protocols dnl @@ -1371,18 +1373,18 @@ fi OPT_DARWINSSL=no AC_ARG_WITH(darwinssl,dnl -AC_HELP_STRING([--with-darwinssl],[enable iOS/Mac OS X native SSL/TLS]) -AC_HELP_STRING([--without-darwinssl], [disable iOS/Mac OS X native SSL/TLS]), +AC_HELP_STRING([--with-darwinssl],[enable Apple OS native SSL/TLS]) +AC_HELP_STRING([--without-darwinssl], [disable Apple OS native SSL/TLS]), OPT_DARWINSSL=$withval) -AC_MSG_CHECKING([whether to enable iOS/Mac OS X native SSL/TLS]) +AC_MSG_CHECKING([whether to enable Apple OS native SSL/TLS]) if test "$curl_ssl_msg" = "$init_ssl_msg"; then if test "x$OPT_DARWINSSL" != "xno" && test -d "/System/Library/Frameworks/Security.framework"; then AC_MSG_RESULT(yes) - AC_DEFINE(USE_DARWINSSL, 1, [to enable iOS/Mac OS X native SSL/TLS support]) + AC_DEFINE(USE_DARWINSSL, 1, [to enable Apple OS native SSL/TLS support]) AC_SUBST(USE_DARWINSSL, [1]) - curl_ssl_msg="enabled (iOS/Mac OS X-native)" + curl_ssl_msg="enabled (Apple OS-native)" DARWINSSL_ENABLED=1 LDFLAGS="$LDFLAGS -framework CoreFoundation -framework Security" else @@ -1635,11 +1637,8 @@ if test "$curl_ssl_msg" = "$init_ssl_msg" && test X"$OPT_SSL" != Xno; then dnl SSL_get_shutdown (but this check won't actually detect it there dnl as it's a macro that needs the header files be included) - AC_CHECK_FUNCS( RAND_status \ - RAND_screen \ - RAND_egd \ + AC_CHECK_FUNCS( RAND_egd \ ENGINE_cleanup \ - CRYPTO_cleanup_all_ex_data \ SSL_get_shutdown \ SSLv2_client_method ) @@ -1848,7 +1847,7 @@ if test "$curl_ssl_msg" = "$init_ssl_msg"; then AC_MSG_NOTICE([Added $gtlslib to LD_LIBRARY_PATH]) fi fi - AC_CHECK_FUNCS(gnutls_certificate_set_x509_key_file2) + AC_CHECK_FUNCS([gnutls_certificate_set_x509_key_file2 gnutls_alpn_set_protocols gnutls_ocsp_req_init]) fi fi @@ -2582,7 +2581,7 @@ if test X"$OPT_LIBSSH2" != Xno; then DIR_SSH2=${PREFIX_SSH2}/lib$libsuff fi - LDFLAGS="$LDFLAGS $LD_SSH2" + LDFLAGS="$LD_SSH2 $LDFLAGS" CPPFLAGS="$CPPFLAGS $CPP_SSH2" LIBS="$LIB_SSH2 $LIBS" @@ -2829,15 +2828,15 @@ dnl ********************************************************************** dnl Check for the presence of IDN libraries and headers dnl ********************************************************************** -AC_MSG_CHECKING([whether to build with libidn]) +AC_MSG_CHECKING([whether to build with libidn2]) OPT_IDN="default" -AC_ARG_WITH(libidn, -AC_HELP_STRING([--with-libidn=PATH],[Enable libidn usage]) -AC_HELP_STRING([--without-libidn],[Disable libidn usage]), +AC_ARG_WITH(libidn2, +AC_HELP_STRING([--with-libidn2=PATH],[Enable libidn2 usage]) +AC_HELP_STRING([--without-libidn2],[Disable libidn2 usage]), [OPT_IDN=$withval]) case "$OPT_IDN" in no) - dnl --without-libidn option used + dnl --without-libidn2 option used want_idn="no" AC_MSG_RESULT([no]) ;; @@ -2848,13 +2847,13 @@ case "$OPT_IDN" in AC_MSG_RESULT([(assumed) yes]) ;; yes) - dnl --with-libidn option used without path + dnl --with-libidn2 option used without path want_idn="yes" want_idn_path="default" AC_MSG_RESULT([yes]) ;; *) - dnl --with-libidn option used with path + dnl --with-libidn2 option used with path want_idn="yes" want_idn_path="$withval" AC_MSG_RESULT([yes ($withval)]) @@ -2871,33 +2870,33 @@ if test "$want_idn" = "yes"; then if test "$want_idn_path" != "default"; then dnl path has been specified IDN_PCDIR="$want_idn_path/lib$libsuff/pkgconfig" - CURL_CHECK_PKGCONFIG(libidn, [$IDN_PCDIR]) + CURL_CHECK_PKGCONFIG(libidn2, [$IDN_PCDIR]) if test "$PKGCONFIG" != "no"; then IDN_LIBS=`CURL_EXPORT_PCDIR([$IDN_PCDIR]) dnl - $PKGCONFIG --libs-only-l libidn 2>/dev/null` + $PKGCONFIG --libs-only-l libidn2 2>/dev/null` IDN_LDFLAGS=`CURL_EXPORT_PCDIR([$IDN_PCDIR]) dnl - $PKGCONFIG --libs-only-L libidn 2>/dev/null` + $PKGCONFIG --libs-only-L libidn2 2>/dev/null` IDN_CPPFLAGS=`CURL_EXPORT_PCDIR([$IDN_PCDIR]) dnl - $PKGCONFIG --cflags-only-I libidn 2>/dev/null` + $PKGCONFIG --cflags-only-I libidn2 2>/dev/null` IDN_DIR=`echo $IDN_LDFLAGS | $SED -e 's/-L//'` else dnl pkg-config not available or provides no info - IDN_LIBS="-lidn" + IDN_LIBS="-lidn2" IDN_LDFLAGS="-L$want_idn_path/lib$libsuff" IDN_CPPFLAGS="-I$want_idn_path/include" IDN_DIR="$want_idn_path/lib$libsuff" fi else dnl path not specified - CURL_CHECK_PKGCONFIG(libidn) + CURL_CHECK_PKGCONFIG(libidn2) if test "$PKGCONFIG" != "no"; then - IDN_LIBS=`$PKGCONFIG --libs-only-l libidn 2>/dev/null` - IDN_LDFLAGS=`$PKGCONFIG --libs-only-L libidn 2>/dev/null` - IDN_CPPFLAGS=`$PKGCONFIG --cflags-only-I libidn 2>/dev/null` + IDN_LIBS=`$PKGCONFIG --libs-only-l libidn2 2>/dev/null` + IDN_LDFLAGS=`$PKGCONFIG --libs-only-L libidn2 2>/dev/null` + IDN_CPPFLAGS=`$PKGCONFIG --cflags-only-I libidn2 2>/dev/null` IDN_DIR=`echo $IDN_LDFLAGS | $SED -e 's/-L//'` else dnl pkg-config not available or provides no info - IDN_LIBS="-lidn" + IDN_LIBS="-lidn2" fi fi # @@ -2917,9 +2916,9 @@ if test "$want_idn" = "yes"; then LDFLAGS="$IDN_LDFLAGS $LDFLAGS" LIBS="$IDN_LIBS $LIBS" # - AC_MSG_CHECKING([if idna_to_ascii_4i can be linked]) + AC_MSG_CHECKING([if idn2_lookup_ul can be linked]) AC_LINK_IFELSE([ - AC_LANG_FUNC_LINK_TRY([idna_to_ascii_4i]) + AC_LANG_FUNC_LINK_TRY([idn2_lookup_ul]) ],[ AC_MSG_RESULT([yes]) tst_links_libidn="yes" @@ -2927,37 +2926,19 @@ if test "$want_idn" = "yes"; then AC_MSG_RESULT([no]) tst_links_libidn="no" ]) - if test "$tst_links_libidn" = "no"; then - AC_MSG_CHECKING([if idna_to_ascii_lz can be linked]) - AC_LINK_IFELSE([ - AC_LANG_FUNC_LINK_TRY([idna_to_ascii_lz]) - ],[ - AC_MSG_RESULT([yes]) - tst_links_libidn="yes" - ],[ - AC_MSG_RESULT([no]) - tst_links_libidn="no" - ]) - fi # + AC_CHECK_HEADERS( idn2.h ) + if test "$tst_links_libidn" = "yes"; then - AC_DEFINE(HAVE_LIBIDN, 1, [Define to 1 if you have the `idn' library (-lidn).]) + AC_DEFINE(HAVE_LIBIDN2, 1, [Define to 1 if you have the `idn2' library (-lidn2).]) dnl different versions of libidn have different setups of these: - AC_CHECK_FUNCS( idn_free idna_strerror tld_strerror ) - AC_CHECK_HEADERS( idn-free.h tld.h ) - if test "x$ac_cv_header_tld_h" = "xyes"; then - AC_SUBST([IDN_ENABLED], [1]) - curl_idn_msg="enabled" - if test -n "$IDN_DIR" -a "x$cross_compiling" != "xyes"; then - LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$IDN_DIR" - export LD_LIBRARY_PATH - AC_MSG_NOTICE([Added $IDN_DIR to LD_LIBRARY_PATH]) - fi - else - AC_MSG_WARN([Libraries for IDN support too old: IDN disabled]) - CPPFLAGS="$clean_CPPFLAGS" - LDFLAGS="$clean_LDFLAGS" - LIBS="$clean_LIBS" + + AC_SUBST([IDN_ENABLED], [1]) + curl_idn_msg="enabled (libidn2)" + if test -n "$IDN_DIR" -a "x$cross_compiling" != "xyes"; then + LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$IDN_DIR" + export LD_LIBRARY_PATH + AC_MSG_NOTICE([Added $IDN_DIR to LD_LIBRARY_PATH]) fi else AC_MSG_WARN([Cannot find libraries for IDN support: IDN disabled]) @@ -3426,7 +3407,28 @@ if test "x$want_thres" = xyes && test "x$want_ares" = xyes; then [Options --enable-threaded-resolver and --enable-ares are mutually exclusive]) fi -if test "$want_thres" = "yes" && test "$dontwant_rt" = "no"; then +dnl ************************************************************ +dnl disable POSIX threads +dnl +AC_MSG_CHECKING([whether to use POSIX threads for threaded resolver]) +AC_ARG_ENABLE(pthreads, +AC_HELP_STRING([--enable-pthreads], + [Enable POSIX threads (default for threaded resolver)]) +AC_HELP_STRING([--disable-pthreads],[Disable POSIX threads]), +[ case "$enableval" in + no) AC_MSG_RESULT(no) + want_pthreads=no + ;; + *) AC_MSG_RESULT(yes) + want_pthreads=yes + ;; + esac ], [ + AC_MSG_RESULT(auto) + want_pthreads=auto + ] +) +if test "$want_thres" = "yes" && test "$dontwant_rt" = "no" && \ + test "$want_pthreads" != "no"; then AC_CHECK_HEADER(pthread.h, [ AC_DEFINE(HAVE_PTHREAD_H, 1, [if you have ]) save_CFLAGS="$CFLAGS" @@ -3448,10 +3450,24 @@ if test "$want_thres" = "yes" && test "$dontwant_rt" = "no"; then AC_DEFINE(USE_THREADS_POSIX, 1, [if you want POSIX threaded DNS lookup]) curl_res_msg="POSIX threaded" fi - - ]) fi +if test "x$USE_THREADS_POSIX" != "x1"; then + if test "$want_pthreads" = "yes"; then + AC_MSG_ERROR([--enable-pthreads but pthreads was not found]) + fi + if test "$want_thres" = "yes"; then + dnl If native Windows fallback on Win32 threads since no POSIX threads + if test "$curl_cv_native_windows" = "yes"; then + USE_THREADS_WIN32=1 + AC_DEFINE(USE_THREADS_WIN32, 1, [if you want Win32 threaded DNS lookup]) + curl_res_msg="Win32 threaded" + else + AC_MSG_ERROR([Threaded resolver enabled but no thread library found]) + fi + fi +fi + dnl ************************************************************ dnl disable verbose text strings @@ -3680,7 +3696,8 @@ fi if test "x$HAVE_LIBZ" = "x1"; then SUPPORT_FEATURES="$SUPPORT_FEATURES libz" fi -if test "x$USE_ARES" = "x1" -o "x$USE_THREADS_POSIX" = "x1"; then +if test "x$USE_ARES" = "x1" -o "x$USE_THREADS_POSIX" = "x1" \ + -o "x$USE_THREADS_WIN32" = "x1"; then SUPPORT_FEATURES="$SUPPORT_FEATURES AsynchDNS" fi if test "x$IDN_ENABLED" = "x1"; then @@ -3729,6 +3746,11 @@ if test "x$USE_NGHTTP2" = "x1"; then SUPPORT_FEATURES="$SUPPORT_FEATURES HTTP2" fi +if test "x$OPENSSL_ENABLED" = "x1" -o "x$GNUTLS_ENABLED" = "x1" \ + -o "x$NSS_ENABLED" = "x1"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES HTTPS-proxy" +fi + AC_SUBST(SUPPORT_FEATURES) dnl For supported protocols in pkg-config file @@ -3841,6 +3863,7 @@ AC_CONFIG_FILES([Makefile \ docs/examples/Makefile \ docs/libcurl/Makefile \ docs/libcurl/opts/Makefile \ + docs/cmdline-opts/Makefile \ include/Makefile \ include/curl/Makefile \ src/Makefile \ diff --git a/docs/BINDINGS b/docs/BINDINGS deleted file mode 100644 index eb67c3d..0000000 --- a/docs/BINDINGS +++ /dev/null @@ -1,260 +0,0 @@ - _ _ ____ _ - ___| | | | _ \| | - / __| | | | |_) | | - | (__| |_| | _ <| |___ - \___|\___/|_| \_\_____| - - libcurl bindings - - Creative people have written bindings or interfaces for various environments - and programming languages. Using one of these allows you to take advantage of - curl powers from within your favourite language or system. - - This is a list of all known interfaces as of this writing. - - The bindings listed below are not part of the curl/libcurl distribution - archives, but must be downloaded and installed separately. - -Ada95 - - Writtten by Andreas Almroth - http://www.almroth.com/adacurl/index.html - -Basic - - ScriptBasic bindings to libcurl. Writtten by Peter Verhas - http://scriptbasic.com/ - -C - libcurl is a C library in itself! - https://curl.haxx.se/libcurl/ - -C++ - - Written by Jean-Philippe Barrette-LaPierre - http://curlpp.org/ - -Ch - - Written by Stephen Nestinger and Jonathan Rogado - http://chcurl.sourceforge.net/ - -Cocoa - - BBHTTP: written by Bruno de Carvalho - https://github.com/brunodecarvalho/BBHTTP - - curlhandle: Written by Dan Wood - http://curlhandle.sourceforge.net/ - -D - - Written by Kenneth Bogert - http://dlang.org/library/std/net/curl.html - -Dylan - - Written by Chris Double - http://dylanlibs.sourceforge.net/ - -Eiffel - - Written by Eiffel Software - https://room.eiffel.com/library/curl - -Euphoria - - Written by Ray Smith - http://rays-web.com/eulibcurl.htm - -Falcon - - http://www.falconpl.org/index.ftd?page_id=prjs&prj_id=curl - -Ferite - - Written by Paul Querna - http://www.ferite.org/ - -Gambas - - http://gambas.sourceforge.net/ - -glib/GTK+ - - Written by Richard Atterer - http://atterer.net/glibcurl/ - -Guile: - - Written by Michael L. Gran - http://www.lonelycactus.com/guile-curl.html - -Harbour - - Written by Viktor Szakáts - https://github.com/vszakats/harbour-core/tree/master/contrib/hbcurl - -Haskell - - Written by Galois, Inc - http://hackage.haskell.org/cgi-bin/hackage-scripts/package/curl - -Java - - https://github.com/pjlegato/curl-java - -Julia - - Written by Paul Howe - https://github.com/forio/Curl.jl - -Lisp - - Written by Liam Healy - http://common-lisp.net/project/cl-curl/ - -Lua - - luacurl by Alexander Marinov - http://luacurl.luaforge.net/ - - Lua-cURL by Jürgen Hötzel - http://luaforge.net/projects/lua-curl/ - -Mono - - Written by Jeffrey Phillips - http://forge.novell.com/modules/xfmod/project/?libcurl-mono - -.NET - - libcurl-net by Jeffrey Phillips - https://sourceforge.net/projects/libcurl-net/ - -node.js - - node-libcurl by Jonathan Cardoso Machado - https://github.com/JCMais/node-libcurl - -Object-Pascal - - Free Pascal, Delphi and Kylix binding written by Christophe Espern. - http://www.tekool.com/opcurl - -O'Caml - - Written by Lars Nilsson - https://sourceforge.net/projects/ocurl/ - -Pascal - - Free Pascal, Delphi and Kylix binding written by Jeffrey Pohlmeyer. - http://houston.quik.com/jkp/curlpas/ - -Perl - - Maintained by Cris Bailiff and Bálint Szilakszi - https://github.com/szbalint/WWW--Curl - -PHP - - Written by Sterling Hughes - https://php.net/curl - -PostgreSQL - - Written by Gian Paolo Ciceri - http://gborg.postgresql.org/project/pgcurl/projdisplay.php - -Python - - PycURL by Kjetil Jacobsen - http://pycurl.sourceforge.net/ - -R - - http://cran.r-project.org/package=curl - -Rexx - - Written Mark Hessling - http://rexxcurl.sourceforge.net/ - -RPG - - Support for ILE/RPG on OS/400 is included in source distribution - https://curl.haxx.se/libcurl/ - See packages/OS400/README.OS400 and packages/OS400/curl.inc.in - -Ruby - - curb - written by Ross Bamford - http://curb.rubyforge.org/ - - ruby-curl-multi - written by Kristjan Petursson and Keith Rarick - http://curl-multi.rubyforge.org/ - -Rust - - curl-rust - by Carl Lerche - https://github.com/carllerche/curl-rust - -Scheme - - Bigloo binding by Kirill Lisovsky - http://www.metapaper.net/lisovsky/web/curl/ - -S-Lang - - S-Lang binding by John E Davis - http://www.jedsoft.org/slang/modules/curl.html - -Smalltalk - - Smalltalk binding by Danil Osipchuk - http://www.squeaksource.com/CurlPlugin/ - -SP-Forth - - SP-Forth binding by ygrek - http://www.forth.org.ru/~ac/lib/lin/curl/ - -SPL - - SPL binding by Clifford Wolf - http://www.clifford.at/spl/ - -Tcl - - Tclcurl by Andrés García - http://mirror.yellow5.com/tclcurl/ - -Visual Basic - - libcurl-vb by Jeffrey Phillips - https://sourceforge.net/projects/libcurl-vb/ - -Visual Foxpro - - by Carlos Alloatti - http://www.ctl32.com.ar/libcurl.asp - -Q - The libcurl module is part of the default install - http://q-lang.sourceforge.net/ - -wxWidgets - - Written by Casey O'Donnell - http://wxcode.sourceforge.net/components/wxcurl/ - -XBLite - - Written by David Szafranski - http://perso.wanadoo.fr/xblite/libraries.html - -Xojo - - Written by Andrew Lambert - https://github.com/charonn0/RB-libcURL diff --git a/docs/BINDINGS.md b/docs/BINDINGS.md new file mode 100644 index 0000000..a11cb4c --- /dev/null +++ b/docs/BINDINGS.md @@ -0,0 +1,106 @@ +libcurl bindings +================ + + Creative people have written bindings or interfaces for various environments + and programming languages. Using one of these allows you to take advantage of + curl powers from within your favourite language or system. + + This is a list of all known interfaces as of this writing. + + The bindings listed below are not part of the curl/libcurl distribution + archives, but must be downloaded and installed separately. + +[Ada95](http://www.almroth.com/adacurl/index.html) Written by Andreas Almroth + +[Basic](http://scriptbasic.com/) ScriptBasic bindings written by Peter Verhas + +[C++](http://curlpp.org/) Written by Jean-Philippe Barrette-LaPierre + +[Ch](https://chcurl.sourceforge.io/) Written by Stephen Nestinger and Jonathan Rogado + +Cocoa: [BBHTTP](https://github.com/brunodecarvalho/BBHTTP) written by Bruno de Carvalho +[curlhandle](https://github.com/karelia/curlhandle) Written by Dan Wood + +[D](https://dlang.org/library/std/net/curl.html) Written by Kenneth Bogert + +[Dylan](https://dylanlibs.sourceforge.io/) Written by Chris Double + +[Eiffel](https://room.eiffel.com/library/curl) Written by Eiffel Software + +[Euphoria](http://rays-web.com/eulibcurl.htm) Written by Ray Smith + +[Falcon](http://www.falconpl.org/index.ftd?page_id=prjs&prj_id=curl) + +[Ferite](http://www.ferite.org/) Written by Paul Querna + +[Gambas](https://gambas.sourceforge.io/) + +[glib/GTK+](http://atterer.net/glibcurl/) Written by Richard Atterer + +[Guile](http://www.lonelycactus.com/guile-curl.html) Written by Michael L. Gran + +[Harbour](https://github.com/vszakats/harbour-core/tree/master/contrib/hbcurl) Written by Viktor Szakáts + +[Haskell](https://hackage.haskell.org/cgi-bin/hackage-scripts/package/curl) Written by Galois, Inc + +[Java](https://github.com/pjlegato/curl-java) + +[Julia](https://github.com/forio/Curl.jl) Written by Paul Howe + +[Lisp](https://common-lisp.net/project/cl-curl/) Written by Liam Healy + +Lua: [luacurl](http://luacurl.luaforge.net/) by Alexander Marinov, [Lua-cURL](http://luaforge.net/projects/lua-curl/) by Jürgen Hötzel + +[Mono](https://forge.novell.com/modules/xfmod/project/?libcurl-mono) Written by Jeffrey Phillips + +[.NET](https://sourceforge.net/projects/libcurl-net/) libcurl-net by Jeffrey Phillips + +[node.js](https://github.com/JCMais/node-libcurl) node-libcurl by Jonathan Cardoso Machado + +[Object-Pascal](http://www.tekool.com/opcurl) Free Pascal, Delphi and Kylix binding written by Christophe Espern. + +[O'Caml](https://sourceforge.net/projects/ocurl/) Written by Lars Nilsson + +[Pascal](http://houston.quik.com/jkp/curlpas/) Free Pascal, Delphi and Kylix binding written by Jeffrey Pohlmeyer. + +[Perl](https://github.com/szbalint/WWW--Curl) Maintained by Cris Bailiff and Bálint Szilakszi + +[PHP](https://php.net/curl) Originally written by Sterling Hughes + +[PostgreSQL](http://gborg.postgresql.org/project/pgcurl/projdisplay.php) Written by Gian Paolo Ciceri + +[Python](http://pycurl.io/) PycURL by Kjetil Jacobsen + +[R](https://cran.r-project.org/package=curl) + +[Rexx](https://rexxcurl.sourceforge.io/) Written Mark Hessling + +RPG, support for ILE/RPG on OS/400 is included in source distribution + +Ruby: [curb](http://curb.rubyforge.org/) written by Ross Bamford, [ruby-curl-multi](http://curl-multi.rubyforge.org/) written by Kristjan Petursson and Keith Rarick + +[Rust](https://github.com/carllerche/curl-rust) curl-rust - by Carl Lerche + +[Scheme](https://www.metapaper.net/lisovsky/web/curl/) Bigloo binding by Kirill Lisovsky + +[S-Lang](http://www.jedsoft.org/slang/modules/curl.html) by John E Davis + +[Smalltalk](http://www.squeaksource.com/CurlPlugin/) Written by Danil Osipchuk + +[SP-Forth](http://www.forth.org.ru/~ac/lib/lin/curl/) Written by ygrek + +[SPL](http://www.clifford.at/spl/) Written by Clifford Wolf + +[Tcl](http://mirror.yellow5.com/tclcurl/) Tclcurl by Andrés García + +[Visual Basic](https://sourceforge.net/projects/libcurl-vb/) libcurl-vb by Jeffrey Phillips + +[Visual Foxpro](http://www.ctl32.com.ar/libcurl.asp) by Carlos Alloatti + +[Q](https://q-lang.sourceforge.io/) The libcurl module is part of the default install + +[wxWidgets](https://wxcode.sourceforge.io/components/wxcurl/) Written by Casey O'Donnell + +[XBLite](http://perso.wanadoo.fr/xblite/libraries.html) Written by David Szafranski + +[Xojo](https://github.com/charonn0/RB-libcURL) Written by Andrew Lambert diff --git a/docs/BUGS b/docs/BUGS index dfd9b20..8cabbd2 100644 --- a/docs/BUGS +++ b/docs/BUGS @@ -15,6 +15,16 @@ BUGS 1.6 How to get a stack trace 1.7 Bugs in libcurl bindings + 2. Bug fixing procedure + 2.1 What happens on first filing + 2.2 First response + 2.3 Not reproducible + 2.4 Unresponsive + 2.5 Lack of time/interest + 2.6 KNOWN_BUGS + 2.7 TODO + 2.8 Closing off stalled bugs + ============================================================================== 1.1 There are still bugs @@ -76,8 +86,6 @@ BUGS 1.4 libcurl problems - First, post all libcurl problems on the curl-library mailing list. - When you've written your own application with libcurl to perform transfers, it is even more important to be specific and detailed when reporting bugs. @@ -144,3 +152,96 @@ BUGS If you suspect that the problem exists in the underlying libcurl, then please convert your program over to plain C and follow the steps outlined above. + +2. Bug fixing procedure + +2.1 What happens on first filing + + When a new issue is posted in the issue tracker or on the mailing list, the + team of developers first need to see the report. Maybe they took the day + off, maybe they're off in the woods hunting. Have patience. Allow at least a + few days before expecting someone to have responded. + + In the issue tracker you can expect that some labels will be set on the + issue to help categorize it. + +2.2 First response + + If your issue/bug report wasn't perfect at once (and few are), chances are + that someone will ask follow-up questions. Which version did you use? Which + options did you use? How often does the problem occur? How can we reproduce + this problem? Which protocols does it involve? Or perhaps much more specific + and deep diving questions. It all depends on your specific issue. + + You should then respond to these follow-up questions and provide more info + about the problem, so that we can help you figure it out. Or maybe you can + help us figure it out. An active back-and-forth communication is important + and the key for finding a cure and landing a fix. + +2.3 Not reproducible + + For problems that we can't reproduce and can't understand even after having + gotten all the info we need and having studied the source code over again, + are really hard to solve so then we may require further work from you who + actually see or experience the problem. + +2.4 Unresponsive + + If the problem haven't been understood or reproduced, and there's nobody + responding to follow-up questions or questions asking for clarifications or + for discussing possible ways to move forward with the task, we take that as + a strong suggestion that the bug is not important. + + Unimportant issues will be closed as inactive sooner or later as they can't + be fixed. The inactivity period (waiting for responses) should not be + shorter than two weeks but may extend months. + +2.5 Lack of time/interest + + Bugs that are filed and are understood can unfortunately end up in the + "nobody cares enough about it to work on it" category. Such bugs are + perfectly valid problems that *should* get fixed but apparently aren't. We + try to mark such bugs as "KNOWN_BUGS material" after a time of inactivity + and if no activity is noticed after yet some time those bugs are added to + KNOWN_BUGS and are closed in the issue tracker. + +2.6 KNOWN_BUGS + + This is a list of known bugs. Bugs we know exist and that have been pointed + out but that haven't yet been fixed. The reasons for why they haven't been + fixed can involve anything really, but the primary reason is that nobody has + considered these problems to be important enough to spend the necesary time + and effort to have them fixed. + + The KNOWN_BUGS are always up for grabs and we will always love the ones who + bring one of them back to live and offers solutions to them. + + The KNOWN_BUGS document has a sibling document known as TODO. + +2.7 TODO + + Issues that are filed or reported that aren't really bugs but more missing + features or ideas for future improvements and so on are marked as + 'enhancement' or 'feature-request' and will be added to the TODO document + instead and the issue is closed. We don't keep TODO items in the issue + tracker. + + The TODO document is full of ideas and suggestions of what we can add or fix + one day. You're always encouraged and free to grab one of those items and + take up a discussion with the curl development team on how that could be + implemented or provided in the project so that you can work on ticking it + odd that document. + + If the issue is rather a bug and not a missing feature or functionality, it + is listed in KNOWN_BUGS instead. + +2.8 Closing off stalled bugs + + The issue and pull request trackers on https://github.com/curl/curl will + only hold "active" entries (using a non-precise defintion of what active + actually is, but they're at least not completely dead). Those that are + abandonded or in other ways dormant will be closed and sometimes added to + TODO and KNOWN_BUGS instead. + + This way, we only have "active" issues open on github. Irrelevant issues and + pull requests will not distract developes or casual visitors. diff --git a/docs/CHECKSRC.md b/docs/CHECKSRC.md index 591e066..b42de84 100644 --- a/docs/CHECKSRC.md +++ b/docs/CHECKSRC.md @@ -20,7 +20,7 @@ when, for example, one of the files is generated. checksrc does not check and verify the code against the entire style guide, but the script is instead an effort to detect the most common mistakes and -syntax mistakes that contributers make before they get accustomed to our code +syntax mistakes that contributors make before they get accustomed to our code style. Heck, many of us regulars do the mistakes too and this script helps us keep the code in shape. @@ -33,7 +33,7 @@ warnings are: - `BADCOMMAND`: There's a bad !checksrc! instruction in the code. See the **Ignore certain warnings** section below for details. -- `BANNEDFUNC`: A banned function was used. The funtions sprintf, vsprintf, +- `BANNEDFUNC`: A banned function was used. The functions sprintf, vsprintf, strcat, strncat, gets are **never** allowed in curl source code. - `BRACEELSE`: '} else' on the same line. The else is supposed to be on the diff --git a/docs/CODE_STYLE.md b/docs/CODE_STYLE.md index 73a4d94..ba5f710 100644 --- a/docs/CODE_STYLE.md +++ b/docs/CODE_STYLE.md @@ -1,4 +1,4 @@ -# cURL C code style +# curl C code style Source code that has a common style is easier to read than code that uses different styles in different places. It helps making the code feel like one @@ -9,8 +9,8 @@ style is more important than individual contributors having their own personal tastes satisfied. Our C code has a few style rules. Most of them are verified and upheld by the -lib/checksrc.pl script. Invoked with `make checksrc` or even by default by the -build system when built after `./configure --enable-debug` has been used. +`lib/checksrc.pl` script. Invoked with `make checksrc` or even by default by +the build system when built after `./configure --enable-debug` has been used. It is normally not a problem for anyone to follow the guidelines, as you just need to copy the style already used in the source code and there are no @@ -28,7 +28,8 @@ other places of the code, just that the names should be logical, understandable and be named according to what they're used for. File-local functions should be made static. We like lower case names. -See the INTERNALS document on how we name non-exported library-global symbols. +See the [INTERNALS](INTERNALS.md) document on how we name non-exported +library-global symbols. ## Indenting @@ -50,7 +51,7 @@ introduced in the C standard until C99. We use only `/*` and `*/` comments: ## Long lines -Source code in curl may never be wider than 80 columns and there are two +Source code in curl may never be wider than 79 columns and there are two reasons for maintaining this even in the modern era of very large and high resolution screens: @@ -72,8 +73,12 @@ the initial keyword. Like this: /* clearly a youngster */ } -When we write functions however, the opening brace should be in the first -column of the first line: +You may omit the braces if they would contain only a one-line statement: + + if(!x) + continue; + +For functions the opening brace should be on a separate line: int main(int argc, char **argv) { @@ -162,6 +167,53 @@ Examples: complement = ~bits; empty = (!*string) ? TRUE : FALSE; +## Column alignment + +Some statements cannot be completed on a single line because the line would +be too long, the statement too hard to read, or due to other style guidelines +above. In such a case the statement will span multiple lines. + +If a continuation line is part of an expression or sub-expression then you +should align on the appropriate column so that it's easy to tell what part of +the statement it is. Operators should not start continuation lines. In other +cases follow the 2-space indent guideline. Here are some examples from libcurl: + +~~~c + if(Curl_pipeline_wanted(handle->multi, CURLPIPE_HTTP1) && + (handle->set.httpversion != CURL_HTTP_VERSION_1_0) && + (handle->set.httpreq == HTTPREQ_GET || + handle->set.httpreq == HTTPREQ_HEAD)) + /* didn't ask for HTTP/1.0 and a GET or HEAD */ + return TRUE; +~~~ + +~~~c + case CURLOPT_KEEP_SENDING_ON_ERROR: + data->set.http_keep_sending_on_error = (0 != va_arg(param, long)) ? + TRUE : FALSE; + break; +~~~ + +~~~c + data->set.http_disable_hostname_check_before_authentication = + (0 != va_arg(param, long)) ? TRUE : FALSE; +~~~ + +~~~c + if(option) { + result = parse_login_details(option, strlen(option), + (userp ? &user : NULL), + (passwdp ? &passwd : NULL), + NULL); + } +~~~ + +~~~c + DEBUGF(infof(data, "Curl_pp_readresp_ %d bytes of trailing " + "server response left\n", + (int)clipamount)); +~~~ + ## Platform dependent code Use `#ifdef HAVE_FEATURE` to do conditional code. We avoid checking for diff --git a/docs/CONTRIBUTE.md b/docs/CONTRIBUTE.md index cbda0c0..e77c365 100644 --- a/docs/CONTRIBUTE.md +++ b/docs/CONTRIBUTE.md @@ -4,7 +4,7 @@ This document is intended to offer guidelines on how to best contribute to the curl project. This concerns new features as well as corrections to existing flaws or bugs. -## Learning cURL +## Learning curl ### Join the Community @@ -83,14 +83,14 @@ It is annoying when you get a huge patch from someone that is said to fix 511 odd problems, but discussions and opinions don't agree with 510 of them - or 509 of them were already fixed in a different way. Then the person merging this change needs to extract the single interesting patch from somewhere -within the huge pile of source, and that gives a lot of extra work. +within the huge pile of source, and that creates a lot of extra work. -Preferably, each fix that correct a problem should be in its own patch/commit +Preferably, each fix that corrects a problem should be in its own patch/commit with its own description/commit message stating exactly what they correct so that all changes can be selectively applied by the maintainer or other interested parties. -Also, separate changes enable bisecting much better when we track problems +Also, separate changes enable bisecting much better for tracking problems and regression in the future. ### Patch Against Recent Sources @@ -103,9 +103,9 @@ release archive is quite OK as well! ### Documentation Writing docs is dead boring and one of the big problems with many open source -projects. Someone's gotta do it. It makes it a lot easier if you submit a -small description of your fix or your new features with every contribution so -that it can be swiftly added to the package documentation. +projects. But someone's gotta do it! It makes things a lot easier if you +submit a small description of your fix or your new features with every +contribution so that it can be swiftly added to the package documentation. The documentation is always made in man pages (nroff formatted) or plain ASCII files. All HTML files on the web site and in the release archives are @@ -134,9 +134,9 @@ patch to [the curl-library mailing list](https://curl.haxx.se/mail/list.cgi?list=curl-library). Either way, your change will be reviewed and discussed there and you will be -expected to correct flaws pointed out and update accordingly, or the change -risk stalling and eventually just get deleted without action. As a submitter -of a change, you are the owner of that change until it has been merged. +expected to correct flaws pointed out and update accordingly, or the change +risks stalling and eventually just getting deleted without action. As a +submitter of a change, you are the owner of that change until it has been merged. Respond on the list or on github about the change and answer questions and/or fix nits/flaws. This is very important. We will take lack of replies as a @@ -151,14 +151,14 @@ changes merged. We prefer pull requests to mailed patches, as it makes it a proper git commit that is easy to merge and they are easy to track and not that easy to loose -in a flood of many emails, like they sometimes do on the mailing lists. +in the flood of many emails, like they sometimes do on the mailing lists. -When you ajust your pull requests after review, consider squashing the +When you adjust your pull requests after review, consider squashing the commits so that we can review the full updated version more easily. ### Making quality patches -Make the patch against as recent sources as possible. +Make the patch against as recent source versions as possible. If you've followed the tips in this document and your patch still hasn't been incorporated or responded to after some weeks, consider resubmitting it to @@ -204,8 +204,8 @@ local repository: git commit [file] -As usual, group your commits so that you commit all changes that at once that -constitutes a logical change. +As usual, group your commits so that you commit all changes at once that +constitute a logical change. Once you have done all your commits and you're happy with what you see, you can make patches out of your changes that are suitable for mailing: @@ -243,5 +243,5 @@ For unix-like operating systems: For Windows: - - [http://gnuwin32.sourceforge.net/packages/patch.htm](http://gnuwin32.sourceforge.net/packages/patch.htm) - - [http://gnuwin32.sourceforge.net/packages/diffutils.htm](http://gnuwin32.sourceforge.net/packages/diffutils.htm) + - [https://gnuwin32.sourceforge.io/packages/patch.htm](https://gnuwin32.sourceforge.io/packages/patch.htm) + - [https://gnuwin32.sourceforge.io/packages/diffutils.htm](https://gnuwin32.sourceforge.io/packages/diffutils.htm) diff --git a/docs/FAQ b/docs/FAQ index d9e538a..f8cb644 100644 --- a/docs/FAQ +++ b/docs/FAQ @@ -81,7 +81,7 @@ FAQ 4.16 My HTTP POST or PUT requests are slow! 4.17 Non-functional connect timeouts on Windows 4.18 file:// URLs containing drive letters (Windows, NetWare) - 4.19 Why doesn't cURL return an error when the network cable is unplugged? + 4.19 Why doesn't curl return an error when the network cable is unplugged? 4.20 curl doesn't return error for HTTP non-200 responses! 4.21 Why is there a HTTP/1.1 in my HTTP/2 request? @@ -215,22 +215,22 @@ FAQ another tool that uses libcurl. We do not add things to curl that other small and available tools already do - very fine at the side. Curl's output is fine to pipe into another program or - redirect to another file for the next program to interpret. + very well at the side. Curl's output can be piped into another program or + redirected to another file for the next program to interpret. We focus on protocol related issues and improvements. If you wanna do more - magic with the supported protocols than curl currently does, chances are big + magic with the supported protocols than curl currently does, chances are good we will agree. If you wanna add more protocols, we may very well agree. - If you want someone else to make all the work while you wait for us to + If you want someone else to do all the work while you wait for us to implement it for you, that is not a very friendly attitude. We spend a considerable time already on maintaining and developing curl. In order to get more out of us, you should consider trading in some of your time and - efforts in return. Simply go to the GitHub repo which resides at + effort in return. Simply go to the GitHub repo which resides at https://github.com/curl/curl, fork the project, and create pull requests with your proposed changes. - If you write the code, chances are bigger that it will get into curl faster. + If you write the code, chances are better that it will get into curl faster. 1.5 Who makes curl? @@ -238,7 +238,7 @@ FAQ project leader and main developer, but other persons' submissions are important and crucial. Anyone can contribute and post their changes and improvements and have them inserted in the main sources (of course on the - condition that developers agree on that the fixes are good). + condition that developers agree that the fixes are good). The full list of all contributors is found in the docs/THANKS file. @@ -247,9 +247,9 @@ FAQ 1.6 What do you get for making curl? Project cURL is entirely free and open. No person gets paid for developing - curl on full time. We do this voluntarily, mostly on spare time. + curl full time. We do this voluntarily, mostly in our spare time. Occasionally companies pay individual developers to work on curl, but that's - up to each company and developer. It is not controlled by nor supervised in + up to each company and developer. This is not controlled by nor supervised in any way by the project. We still get help from companies. Haxx provides web site, bandwidth, mailing @@ -260,11 +260,11 @@ FAQ do so in the future. If you want to support our project, consider a donation or a banner-program - or even better: by helping us coding, documenting, testing etc. + or even better: by helping us with coding, documenting or testing etc. 1.7 What about CURL from curl.com? - During the summer 2001, curl.com was busy advertising their client-side + During the summer of 2001, curl.com was busy advertising their client-side programming language for the web, named CURL. We are in no way associated with curl.com or their CURL programming @@ -277,7 +277,7 @@ FAQ We recognize that we will be living in parallel with curl.com and wish them every success. - 1.8 I have a problem who do I mail? + 1.8 I have a problem whom do I mail? Please do not mail any single individual unless you really need to. Keep curl-related questions on a suitable mailing list. All available mailing @@ -285,8 +285,8 @@ FAQ https://curl.haxx.se/mail/ Keeping curl-related questions and discussions on mailing lists allows - others to join in and help, to share their ideas, contribute their - suggestions and spread their wisdom. Keeping discussions on public mailing + others to join in and help, to share their ideas, to contribute their + suggestions and to spread their wisdom. Keeping discussions on public mailing lists also allows for others to learn from this (both current and future users thanks to the web based archives of the mailing lists), thus saving us from having to repeat ourselves even more. Thanks for respecting this. @@ -324,9 +324,9 @@ FAQ 1.11 Why don't you update ca-bundle.crt - The ca cert bundle that used to shipped with curl was very outdated and must - be replaced with an up-to-date version by anyone who wants to verify - peers. It is no longer provided by curl. The last curl release ever that + The ca cert bundle that used to be shipped with curl was very outdated and + must be replaced with an up-to-date version by anyone who wants to verify + peers. It is no longer provided by curl. The last curl release that ever shipped a ca cert bundle was curl 7.18.0. In the cURL project we've decided not to attempt to keep this file updated @@ -347,7 +347,7 @@ FAQ 1.12 I have a problem who can I chat with? There's a bunch of friendly people hanging out in the #curl channel on the - IRC network irc.freenode.net. If you're polite and nice, chances are big + IRC network irc.freenode.net. If you're polite and nice, chances are good that you can get -- or provide -- help instantly. 1.13 curl's ECCN number? @@ -430,7 +430,7 @@ FAQ 2.1.2 only the libssl lib is missing If all include files and the libcrypto lib is present, with only the - libssl being missing according to configure, this is mostly likely because + libssl being missing according to configure, this is most likely because a few functions are left out from the libssl. If the function names missing include RSA or RSAREF you can be certain @@ -467,7 +467,7 @@ FAQ 2.5 Install libcurl for both 32bit and 64bit? - In curl's configure procedure one of the regular include files get created + In curl's configure procedure one of the regular include files gets created with platform specific information. The file 'curl/curlbuild.h' in the installed libcurl file tree is therefore somewhat tied to that particular platform. @@ -520,11 +520,14 @@ FAQ 3.3 Why doesn't my posting using -F work? - You can't simply use -F or -d at your choice. The web server that will - receive your post expects one of the formats. If the form you're trying to - submit uses the type 'multipart/form-data', then and only then you must use - the -F type. In all the most common cases, you should use -d which then - causes a posting with the type 'application/x-www-form-urlencoded'. + You can't arbitrarily use -F or -d, the choice between -F or -d depends on the + HTTP operation you need curl to do and what the web server that will receive + your post expects. + + If the form you're trying to submit uses the type 'multipart/form-data', then + and only then you must use the -F type. In all the most common cases, you + should use -d which then causes a posting with the type + 'application/x-www-form-urlencoded'. This is described in some detail in the MANUAL and TheArtOfHttpScripting documents, and if you don't understand it the first time, read it again @@ -611,7 +614,7 @@ FAQ XML-RPC are all such ones. You can use -X to set custom requests and -H to set custom headers (or replace internally generated ones). - Using libcurl is of course just as fine and you'd just use the proper + Using libcurl is of course just as good and you'd just use the proper library options to do the same. 3.11 How do I POST with a different Content-Type? @@ -631,7 +634,7 @@ FAQ There is one exception to this rule, and that is if you can "tunnel through" the given HTTP proxy. Proxy tunneling is enabled with a special option (-p) and is generally not available as proxy admins usually disable tunneling to - other ports than 443 (which is used for HTTPS access through proxies). + ports other than 443 (which is used for HTTPS access through proxies). 3.13 Why does my single/double quotes fail? @@ -650,7 +653,7 @@ FAQ Windows/DOS prompts I believe you're forced to use double (") quotes. Please study the documentation for your particular environment. Examples in - the curl docs will use a mix of both these ones as shown above. You must + the curl docs will use a mix of both of these as shown above. You must adjust them to work in your environment. Remember that curl works and runs on more operating systems than most single @@ -685,7 +688,7 @@ FAQ No. curl itself has no code that performs recursive operations, such as those performed by wget and similar tools. - There exist wrapper scripts with that functionality (for example the + There exists wrapper scripts with that functionality (for example the curlmirror perl script), and you can write programs based on libcurl to do it, but the command line tool curl itself cannot. @@ -696,9 +699,9 @@ FAQ CLIENT CERTIFICATE - The server you communicate may require that you can provide this in order to - prove that you actually are who you claim to be. If the server doesn't - require this, you don't need a client certificate. + The server you communicate with may require that you can provide this in + order to prove that you actually are who you claim to be. If the server + doesn't require this, you don't need a client certificate. A client certificate is always used together with a private key, and the private key has a pass phrase that protects it. @@ -859,14 +862,14 @@ FAQ 4.3 How can I use {, }, [ or ] to specify multiple URLs? - Because those letters have a special meaning to the shell, and to be used in + Because those letters have a special meaning to the shell, to be used in a URL specified to curl you must quote them. - An example that downloads two URLs (sequentially) would do: + An example that downloads two URLs (sequentially) would be: curl '{curl,www}.haxx.se' - To be able to use those letters as actual parts of the URL (without using + To be able to use those characters as actual parts of the URL (without using them for the curl URL "globbing" system), use the -g/--globoff option: curl -g 'www.site.com/weirdname[].html' @@ -1016,14 +1019,16 @@ FAQ 4.13 Why is curl -R on Windows one hour off? - During daylight savings time, when -R is used, curl will set a time that - appears one hour off. This happens due to a flaw in how Windows stores and - uses file modification times and it is not easily worked around. For details - on this problem, read this: http://www.codeproject.com/datetime/dstbugs.asp + Since curl 7.53.0 this issue should be fixed as long as curl was built with + any modern compiler that allows for a 64-bit curl_off_t type. For older + compilers or prior curl versions it may set a time that appears one hour off. + This happens due to a flaw in how Windows stores and uses file modification + times and it is not easily worked around. For more details read this: + http://www.codeproject.com/datetime/dstbugs.asp 4.14 Redirects work in browser but not with curl! - curl supports HTTP redirects fine (see item 3.8). Browsers generally support + curl supports HTTP redirects well (see item 3.8). Browsers generally support at least two other ways to perform redirects that curl does not: Meta tags. You can write a HTML tag that will cause the browser to redirect @@ -1047,7 +1052,7 @@ FAQ To use explicit FTPS, you use a FTP:// URL and the --ftp-ssl option (or one of its related flavours). This is the most common method, and the one - mandated by RFC4217. This kind of connection then of course uses the + mandated by RFC4217. This kind of connection will then of course use the standard FTP port 21 by default. 4.16 My HTTP POST or PUT requests are slow! @@ -1055,7 +1060,7 @@ FAQ libcurl makes all POST and PUT requests (except for POST requests with a very tiny request body) use the "Expect: 100-continue" header. This header allows the server to deny the operation early so that libcurl can bail out - already before having to send any data. This is useful in authentication + before having to send any data. This is useful in authentication cases and others. However, many servers don't implement the Expect: stuff properly and if the @@ -1083,18 +1088,18 @@ FAQ 4.18 file:// URLs containing drive letters (Windows, NetWare) - When using cURL to try to download a local file, one might use a URL + When using curl to try to download a local file, one might use a URL in this format: file://D:/blah.txt - You'll find that even if D:\blah.txt does exist, cURL returns a 'file + You'll find that even if D:\blah.txt does exist, curl returns a 'file not found' error. According to RFC 1738 (https://www.ietf.org/rfc/rfc1738.txt), file:// URLs must contain a host component, but it is ignored by most implementations. In the above example, 'D:' is treated as the - host component, and is taken away. Thus, cURL tries to open '/blah.txt'. + host component, and is taken away. Thus, curl tries to open '/blah.txt'. If your system is installed to drive C:, that will resolve to 'C:\blah.txt', and if that doesn't exist you will get the not found error. @@ -1107,9 +1112,9 @@ FAQ file://localhost/D:/blah.txt - In either case, cURL should now be looking for the correct file. + In either case, curl should now be looking for the correct file. - 4.19 Why doesn't cURL return an error when the network cable is unplugged? + 4.19 Why doesn't curl return an error when the network cable is unplugged? Unplugging a cable is not an error situation. The TCP/IP protocol stack was designed to be fault tolerant, so even though there may be a physical @@ -1146,7 +1151,7 @@ FAQ When doing HTTP transfers, curl will perform exactly what you're asking it to do and if successful it will not return an error. You can use curl to test your web server's "file not found" page (that gets 404 back), you can - use it to check your authentication protected web pages (that get a 401 + use it to check your authentication protected web pages (that gets a 401 back) and so on. The specific HTTP response code does not constitute a problem or error for @@ -1161,7 +1166,7 @@ FAQ libcurl speak). You can also use the -w option and the variable %{response_code} to extract - the exact response code that was return in the response. + the exact response code that was returned in the response. 4.21 Why is there a HTTP/1.1 in my HTTP/2 request? @@ -1171,8 +1176,8 @@ FAQ The reason for this is that we first generate the request to send using the old 1.1 style and show that request in the verbose output, and then we convert it over to the binary header-compressed HTTP/2 style. The actual - "1.1" part from that request is then not actually used in the transfer. The - binary HTTP/2 headers are not human readable. + "1.1" part from that request is then not actually used in the transfer. + The binary HTTP/2 headers are not human readable. 5. libcurl Issues @@ -1254,10 +1259,10 @@ FAQ libcurl will reuse connections for all transfers that are made using the same libcurl handle. - When you use the easy interface, the connection cache is kept within the - easy handle. If you instead use the multi interface, the connection cache - will be kept within the multi handle and will be shared among all the easy - handles that are used within the same multi handle. + When you use the easy interface the connection cache is kept within the easy + handle. If you instead use the multi interface, the connection cache will be + kept within the multi handle and will be shared among all the easy handles + that are used within the same multi handle. 5.7 Link errors when building libcurl on Windows! @@ -1316,8 +1321,8 @@ FAQ you want to change name resolver function you must rebuild libcurl and tell it to use a different function. - - The non-IPv6 resolver that can use one out of four host name resolve calls - (depending on what your system supports): + - The non-IPv6 resolver that can use one of four different host name resolve + calls (depending on what your system supports): A - gethostbyname() B - gethostbyname_r() with 3 arguments @@ -1351,7 +1356,7 @@ FAQ 5.12 Can I make libcurl fake or hide my real IP address? No. libcurl operates on a higher level. Besides, faking IP address would - imply sending IP packet with a made-up source address, and then you normally + imply sending IP packets with a made-up source address, and then you normally get a problem with receiving the packet sent back as they would then not be routed to you! @@ -1381,18 +1386,18 @@ FAQ libcurl is a C library, it doesn't know anything about C++ member functions. - You can overcome this "limitation" with a relative ease using a static + You can overcome this "limitation" with relative ease using a static member function that is passed a pointer to the class: // f is the pointer to your object. - static YourClass::func(void *buffer, size_t sz, size_t n, void *f) + static size_t YourClass::func(void *buffer, size_t sz, size_t n, void *f) { // Call non-static member function. static_cast(f)->nonStaticFunction(); } // This is how you pass pointer to the static function: - curl_easy_setopt(hcurl, CURLOPT_WRITEFUNCTION, YourClass:func); + curl_easy_setopt(hcurl, CURLOPT_WRITEFUNCTION, YourClass::func); curl_easy_setopt(hcurl, CURLOPT_WRITEDATA, this); 5.15 How do I get an FTP directory listing? diff --git a/docs/HISTORY.md b/docs/HISTORY.md index ea402c6..551e7d2 100644 --- a/docs/HISTORY.md +++ b/docs/HISTORY.md @@ -1,20 +1,14 @@ - _ _ ____ _ - ___| | | | _ \| | - / __| | | | |_) | | - | (__| |_| | _ <| |___ - \___|\___/|_| \_\_____| - -How cURL Became Like This +How curl Became Like This ========================= Towards the end of 1996, Daniel Stenberg was spending time writing an IRC bot for an Amiga related channel on EFnet. He then came up with the idea to make currency-exchange calculations available to Internet Relay Chat (IRC) -users. All the necessary data are published on the Web; he just needed to +users. All the necessary data were published on the Web; he just needed to automate their retrieval. Daniel simply adopted an existing command-line open-source tool, httpget, that -Brazilian Rafael Sagula had written and recently release version 0.1 of. After +Brazilian Rafael Sagula had written and recently released version 0.1 of. After a few minor adjustments, it did just what he needed. 1997 @@ -41,14 +35,14 @@ was revealed to us much later.) SSL support was added, powered by the SSLeay library. -August, first announcement of curl on freshmeat.net. +August: first announcement of curl on freshmeat.net. -October, with the curl 4.9 release and the introduction of cookie support, +October: with the curl 4.9 release and the introduction of cookie support, curl was no longer released under the GPL license. Now we're at 4000 lines of code, we switched over to the MPL license to restrict the effects of "copyleft". -November, configure script and reported successful compiles on several +November: configure script and reported successful compiles on several major operating systems. The never-quite-understood -F option was added and curl could now simulate quite a lot of a browser. TELNET support was added. @@ -58,30 +52,30 @@ page. People started making Linux RPM packages out of it. 1999 ---- -January, DICT support added. +January: DICT support added. -OpenSSL took over where SSLeay was abandoned. +OpenSSL took over and SSLeay was abandoned. -May, first Debian package. +May: first Debian package. -August, LDAP:// and FILE:// support added. The curl web site gets 1300 visits +August: LDAP:// and FILE:// support added. The curl web site gets 1300 visits weekly. Moved site to curl.haxx.nu. -Released curl 6.0 in September. 15000 lines of code. +September: Released curl 6.0. 15000 lines of code. -December 28, added the project on Sourceforge and started using its services +December 28: added the project on Sourceforge and started using its services for managing the project. 2000 ---- -Spring 2000, major internal overhaul to provide a suitable library interface. +Spring: major internal overhaul to provide a suitable library interface. The first non-beta release was named 7.1 and arrived in August. This offered the easy interface and turned out to be the beginning of actually getting -other software and programs to get based on and powered by libcurl. Almost +other software and programs to be based on and powered by libcurl. Almost 20000 lines of code. -June 2000: the curl site moves to "curl.haxx.se" +June: the curl site moves to "curl.haxx.se" August, the curl web site gets 4000 visits weekly. @@ -90,41 +84,40 @@ party libcurl binding showed up. CURL has been a supported module in PHP since the release of PHP 4.0.2. This would soon get followers. More than 16 different bindings exist at the time of this writing. -September, kerberos4 support was added. +September: kerberos4 support was added. -In November started the work on a test suite for curl. It was later re-written +November: started the work on a test suite for curl. It was later re-written from scratch again. The libcurl major SONAME number was set to 1. 2001 ---- -January, Daniel released curl 7.5.2 under a new license again: MIT (or -MPL). The MIT license is extremely liberal and can be used combined with GPL +January: Daniel released curl 7.5.2 under a new license again: MIT (or +MPL). The MIT license is extremely liberal and can be combined with GPL in other projects. This would finally put an end to the "complaints" from people involved in GPLed projects that previously were prohibited from using libcurl while it was released under MPL only. (Due to the fact that MPL is deemed "GPL incompatible".) -curl supports HTTP 1.1 starting with the release of 7.7, March 22 2001. This +March 22: curl supports HTTP 1.1 starting with the release of 7.7. This also introduced libcurl's ability to do persistent connections. 24000 lines of code. The libcurl major SONAME number was bumped to 2 due to this overhaul. +The first experimental ftps:// support was added. -The first experimental ftps:// support was added in March 2001. - -August. curl is bundled in Mac OS X, 10.1. It was already becoming more and +August: curl is bundled in Mac OS X, 10.1. It was already becoming more and more of a standard utility of Linux distributions and a regular in the BSD ports collections. The curl web site gets 8000 visits weekly. Curl Corporation contacted Daniel to discuss "the name issue". After Daniel's reply, they have -never since got in touch again. +never since got back in touch again. -September, libcurl 7.9 introduces cookie jar and curl_formadd(). During the +September: libcurl 7.9 introduces cookie jar and curl_formadd(). During the forthcoming 7.9.x releases, we introduced the multi interface slowly and -without much whistles. +without many whistles. 2002 ---- -June, the curl web site gets 13000 visits weekly. curl and libcurl is +June: the curl web site gets 13000 visits weekly. curl and libcurl is 35000 lines of code. Reported successful compiles on more than 40 combinations of CPUs and operating systems. @@ -133,15 +126,15 @@ impossible. Around 5000 downloaded packages each week from the main site gives a hint, but the packages are mirrored extensively, bundled with numerous OS distributions and otherwise retrieved as part of other software. -September, with the release of curl 7.10 it is released under the MIT license +September: with the release of curl 7.10 it is released under the MIT license only. 2003 ---- -January. Started working on the distributed curl tests. The autobuilds. +January: Started working on the distributed curl tests. The autobuilds. -February, the curl site averages at 20000 visits weekly. At any given moment, +February: the curl site averages at 20000 visits weekly. At any given moment, there's an average of 3 people browsing the curl.haxx.se site. Multiple new authentication schemes are supported: Digest (May), NTLM (June) @@ -150,7 +143,7 @@ and Negotiate (June). November: curl 7.10.8 is released. 45000 lines of code. ~55000 unique visitors to the curl.haxx.se site. Five official web mirrors. -December, full-fledged SSL for FTP is supported. +December: full-fledged SSL for FTP is supported. 2004 ---- @@ -164,18 +157,18 @@ curl_formparse() function August: Curl and libcurl 7.12.1 - Public curl release number: 82 + Public curl release number: 82 Releases counted from the very beginning: 109 - Available command line options: 96 + Available command line options: 96 Available curl_easy_setopt() options: 120 - Number of public functions in libcurl: 36 - Amount of public web site mirrors: 12 - Number of known libcurl bindings: 26 + Number of public functions in libcurl: 36 + Amount of public web site mirrors: 12 + Number of known libcurl bindings: 26 2005 ---- -April. GnuTLS can now optionally be used for the secure layer when curl is +April: GnuTLS can now optionally be used for the secure layer when curl is built. April: Added the multi_socket() API @@ -189,8 +182,8 @@ December: security vulnerability: libcurl URL Buffer Overflow 2006 ---- -January. We dropped support for Gopher. We found bugs in the implementation -that turned out having been introduced years ago, so with the conclusion that +January: We dropped support for Gopher. We found bugs in the implementation +that turned out to have been introduced years ago, so with the conclusion that nobody had found out in all this time we removed it instead of fixing it. March: security vulnerability: libcurl TFTP Packet Buffer Overflow @@ -214,8 +207,8 @@ November: Command line options: 128 curl_easy_setopt() options: 158 - Public functions in libcurl: 58 - Known libcurl bindings: 37 + Public functions in libcurl: 58 + Known libcurl bindings: 37 Contributors: 683 145,000 unique visitors. >100 GB downloaded. @@ -248,11 +241,11 @@ August: Public curl releases: 117 Command line options: 138 curl_easy_setopt() options: 180 - Public functions in libcurl: 58 - Known libcurl bindings: 39 + Public functions in libcurl: 58 + Known libcurl bindings: 39 Contributors: 808 - Gopher support added (re-added actually) + Gopher support added (re-added actually, see January 2006) 2012 ---- diff --git a/docs/HTTP2.md b/docs/HTTP2.md index cc5a5b3..efbe699 100644 --- a/docs/HTTP2.md +++ b/docs/HTTP2.md @@ -96,18 +96,31 @@ curl tool curl offers the `--http2` command line option to enable use of HTTP/2. -curl offers the `--http2-prior-knowledge` command line option to enable use of +curl offers the `--http2-prior-knowledge` command line option to enable use of HTTP/2 without HTTP/1.1 Upgrade. Since 7.47.0, the curl tool enables HTTP/2 by default for HTTPS connections. +curl tool limitations +--------------------- + +The command line tool won't do any HTTP/2 multiplexing even though libcurl +supports it, simply because the curl tool is not written to take advantage of +the libcurl API that's necessary for this (the multi interface). We have an +outstanding TODO item for this and **you** can help us make it happen. + +The command line tool also doesn't support HTTP/2 server push for the same +reason it doesn't do multiplexing: it needs to use the multi interface for +that so that multiplexing is supported. + HTTP Alternative Services ------------------------- -Alt-Svc is a suggested extension with a corresponding frame (ALTSVC) in HTTP/2 -that tells the client about an alternative "route" to the same content for the -same origin server that you get the response from. A browser or long-living -client can use that hint to create a new connection asynchronously. For -libcurl, we may introduce a way to bring such clues to the applicaton and/or -let a subsequent request use the alternate route -automatically. [Spec](https://tools.ietf.org/html/draft-ietf-httpbis-alt-svc-14) +Alt-Svc is an extension with a corresponding frame (ALTSVC) in HTTP/2 that +tells the client about an alternative "route" to the same content for the same +origin server that you get the response from. A browser or long-living client +can use that hint to create a new connection asynchronously. For libcurl, we +may introduce a way to bring such clues to the application and/or let a +subsequent request use the alternate route automatically. + +[Detailed in RFC 7838](https://tools.ietf.org/html/rfc7838) diff --git a/docs/INSTALL b/docs/INSTALL index 2e1075b..ff260b1 100644 --- a/docs/INSTALL +++ b/docs/INSTALL @@ -6,1110 +6,4 @@ How To Compile -Installing Binary Packages -========================== - - Lots of people download binary distributions of curl and libcurl. This - document does not describe how to install curl or libcurl using such a - binary package. This document describes how to compile, build and install - curl and libcurl from source code. - -Building from git -================= - - If you get your code off a git repository, see the GIT-INFO file in the - root directory for specific instructions on how to proceed. - -Unix -==== - - A normal Unix installation is made in three or four steps (after you've - unpacked the source archive): - - ./configure - make - make test (optional) - make install - - You probably need to be root when doing the last command. - - If you have checked out the sources from the git repository, read the - GIT-INFO on how to proceed. - - Get a full listing of all available configure options by invoking it like: - - ./configure --help - - If you want to install curl in a different file hierarchy than /usr/local, - you need to specify that already when running configure: - - ./configure --prefix=/path/to/curl/tree - - If you happen to have write permission in that directory, you can do 'make - install' without being root. An example of this would be to make a local - install in your own home directory: - - ./configure --prefix=$HOME - make - make install - - The configure script always tries to find a working SSL library unless - explicitly told not to. If you have OpenSSL installed in the default search - path for your compiler/linker, you don't need to do anything special. If - you have OpenSSL installed in /usr/local/ssl, you can run configure like: - - ./configure --with-ssl - - If you have OpenSSL installed somewhere else (for example, /opt/OpenSSL) - and you have pkg-config installed, set the pkg-config path first, like this: - - env PKG_CONFIG_PATH=/opt/OpenSSL/lib/pkgconfig ./configure --with-ssl - - Without pkg-config installed, use this: - - ./configure --with-ssl=/opt/OpenSSL - - If you insist on forcing a build without SSL support, even though you may - have OpenSSL installed in your system, you can run configure like this: - - ./configure --without-ssl - - If you have OpenSSL installed, but with the libraries in one place and the - header files somewhere else, you have to set the LDFLAGS and CPPFLAGS - environment variables prior to running configure. Something like this - should work: - - (with the Bourne shell and its clones): - - CPPFLAGS="-I/path/to/ssl/include" LDFLAGS="-L/path/to/ssl/lib" \ - ./configure - - (with csh, tcsh and their clones): - - env CPPFLAGS="-I/path/to/ssl/include" LDFLAGS="-L/path/to/ssl/lib" \ - ./configure - - If you have shared SSL libs installed in a directory where your run-time - linker doesn't find them (which usually causes configure failures), you can - provide the -R option to ld on some operating systems to set a hard-coded - path to the run-time linker: - - env LDFLAGS=-R/usr/local/ssl/lib ./configure --with-ssl - - MORE OPTIONS - ------------ - - To force configure to use the standard cc compiler if both cc and gcc are - present, run configure like - - CC=cc ./configure - or - env CC=cc ./configure - - To force a static library compile, disable the shared library creation - by running configure like: - - ./configure --disable-shared - - To tell the configure script to skip searching for thread-safe functions, - add an option like: - - ./configure --disable-thread - - If you're a curl developer and use gcc, you might want to enable more - debug options with the --enable-debug option. - - curl can be built to use a whole range of libraries to provide various - useful services, and configure will try to auto-detect a decent - default. But if you want to alter it, you can select how to deal with - each individual library. - - To build with GnuTLS for SSL/TLS, use both --without-ssl and - --with-gnutls. - - To build with Cyassl for SSL/TLS, use both --without-ssl and - --with-cyassl. - - To build with NSS for SSL/TLS, use both --without-ssl and --with-nss. - - To build with PolarSSL for SSL/TLS, use both --without-ssl and - --with-polarssl. - - To build with axTLS for SSL/TLS, use both --without-ssl and --with-axtls. - - To build with GSS-API support, use --with-gssapi and have the MIT Kerberos - or Heimdal packages installed. - - To get support for SCP and SFTP, build with --with-libssh2 and have - libssh2 0.16 or later installed. - - To get Metalink support, build with --with-libmetalink and have the - libmetalink packages installed. - - SPECIAL CASES - ------------- - - Some versions of uClibc require configuring with CPPFLAGS=-D_GNU_SOURCE=1 - to get correct large file support. - - The Open Watcom C compiler on Linux requires configuring with the variables: - - ./configure CC=owcc AR="$WATCOM/binl/wlib" AR_FLAGS=-q \ - RANLIB=/bin/true STRIP="$WATCOM/binl/wstrip" CFLAGS=-Wextra - -Win32 -===== - - Building Windows DLLs and C run-time (CRT) linkage issues - --------------------------------------------------------- - - As a general rule, building a DLL with static CRT linkage is highly - discouraged, and intermixing CRTs in the same app is something to - avoid at any cost. - - Reading and comprehension of Microsoft Knowledge Base articles - KB94248 and KB140584 is a must for any Windows developer. Especially - important is full understanding if you are not going to follow the - advice given above. - - KB94248 - How To Use the C Run-Time - https://support.microsoft.com/kb/94248/en-us - - KB140584 - How to link with the correct C Run-Time (CRT) library - https://support.microsoft.com/kb/140584/en-us - - KB190799 - Potential Errors Passing CRT Objects Across DLL Boundaries - https://msdn.microsoft.com/en-us/library/ms235460 - - If your app is misbehaving in some strange way, or it is suffering - from memory corruption, before asking for further help, please try - first to rebuild every single library your app uses as well as your - app using the debug multithreaded dynamic C runtime. - - If you get linkage errors read section 5.7 of the FAQ document. - - MingW32 - ------- - - Make sure that MinGW32's bin dir is in the search path, for example: - - set PATH=c:\mingw32\bin;%PATH% - - then run 'mingw32-make mingw32' in the root dir. There are other - make targets available to build libcurl with more features, use: - 'mingw32-make mingw32-zlib' to build with Zlib support; - 'mingw32-make mingw32-ssl-zlib' to build with SSL and Zlib enabled; - 'mingw32-make mingw32-ssh2-ssl-zlib' to build with SSH2, SSL, Zlib; - 'mingw32-make mingw32-ssh2-ssl-sspi-zlib' to build with SSH2, SSL, Zlib - and SSPI support. - - If you have any problems linking libraries or finding header files, be sure - to verify that the provided "Makefile.m32" files use the proper paths, and - adjust as necessary. It is also possible to override these paths with - environment variables, for example: - - set ZLIB_PATH=c:\zlib-1.2.8 - set OPENSSL_PATH=c:\openssl-1.0.2c - set LIBSSH2_PATH=c:\libssh2-1.6.0 - - ATTENTION: if you want to build with libssh2 support you have to use latest - version 0.17 - previous versions will NOT work with 7.17.0 and later! - Use 'mingw32-make mingw32-ssh2-ssl-zlib' to build with SSH2 and SSL enabled. - - It is now also possible to build with other LDAP SDKs than MS LDAP; - currently it is possible to build with native Win32 OpenLDAP, or with the - Novell CLDAP SDK. If you want to use these you need to set these vars: - - set LDAP_SDK=c:\openldap - set USE_LDAP_OPENLDAP=1 - - or for using the Novell SDK: - - set USE_LDAP_NOVELL=1 - - If you want to enable LDAPS support then set LDAPS=1. - - - optional MingW32-built OpenLDAP SDK available from: - http://www.gknw.net/mirror/openldap/ - - optional recent Novell CLDAP SDK available from: - https://www.novell.com/developer/ndk/ldap_libraries_for_c.html - - Cygwin - ------ - - Almost identical to the unix installation. Run the configure script in the - curl root with 'sh configure'. Make sure you have the sh executable in - /bin/ or you'll see the configure fail toward the end. - - Run 'make' - - Dev-Cpp - ------- - - See the separate INSTALL.devcpp file for details. - - MSVC 6 caveats - -------------- - - If you use MSVC 6 it is required that you use the February 2003 edition of - the 'Platform SDK' which can be downloaded from: - - https://www.microsoft.com/en-us/download/details.aspx?id=12261 - - Building any software with MSVC 6 without having PSDK installed is just - asking for trouble down the road once you have released it, you might notice - the problems in the first corner or ten miles ahead, depending mostly on your - choice of static vs dynamic runtime and third party libraries. Anyone using - software built in such way will at some point regret having done so. - - If the compiler has been updated with the installation of a service pack as - those mentioned in https://support.microsoft.com/kb/194022 the compiler can be - safely used to read source code, translate and make it object code. - - But, even with the service packs mentioned above installed, the resulting - software generated in such an environment will be using outdated system - header files and libraries with bugs and security issues which have already - been addressed and fixed long time ago. - - So, building curl and libcurl with MSVC 6 without PSDK is absolutely - discouraged for the benefit of anyone using software built in such - environment. And it will not be supported in any way, as we could just - be hunting bugs which have already been fixed way back in 2003. - - When building with MSVC 6 we attempt to detect if PSDK is not being used, - and if this is the case the build process will fail hard with an error - message stating that the February 2003 PSDK is required. This is done to - protect the unsuspecting and avoid PEBKAC issues. - - Additionally it might happen that a die hard MSVC hacker still wants to - build curl and libcurl with MSVC 6 without PSDK installed, even knowing - that this is a highly discouraged and unsupported build environment. In - this case the brave of heart will be able to build in such an environment - with the requisite of defining preprocessor symbol ALLOW_MSVC6_WITHOUT_PSDK - in lib/config-win32.h and knowing that LDAP and IPv6 support will be missing. - - MSVC from command line - ---------------------- - - Run the 'vcvars32.bat' file to get a proper environment. The - vcvars32.bat file is part of the Microsoft development environment and - you may find it in 'C:\Program Files\Microsoft Visual Studio\vc98\bin' - provided that you installed Visual C/C++ 6 in the default directory. - - Then run 'nmake vc' in curl's root directory. - - If you want to compile with zlib support, you will need to build - zlib (http://www.zlib.net/) as well. Please read the zlib - documentation on how to compile zlib. Define the ZLIB_PATH environment - variable to the location of zlib.h and zlib.lib, for example: - - set ZLIB_PATH=c:\zlib-1.2.8 - - Then run 'nmake vc-zlib' in curl's root directory. - - If you want to compile with SSL support you need the OpenSSL package. - Please read the OpenSSL documentation on how to compile and install - the OpenSSL libraries. The build process of OpenSSL generates the - libeay32.dll and ssleay32.dll files in the out32dll subdirectory in - the OpenSSL home directory. OpenSSL static libraries (libeay32.lib, - ssleay32.lib, RSAglue.lib) are created in the out32 subdirectory. - - Before running nmake define the OPENSSL_PATH environment variable with - the root/base directory of OpenSSL, for example: - - set OPENSSL_PATH=c:\openssl-0.9.8zc - - Then run 'nmake vc-ssl' or 'nmake vc-ssl-dll' in curl's root - directory. 'nmake vc-ssl' will create a libcurl static and dynamic - libraries in the lib subdirectory, as well as a statically linked - version of curl.exe in the src subdirectory. This statically linked - version is a standalone executable not requiring any DLL at - runtime. This make method requires that you have the static OpenSSL - libraries available in OpenSSL's out32 subdirectory. - 'nmake vc-ssl-dll' creates the libcurl dynamic library and - links curl.exe against libcurl and OpenSSL dynamically. - This executable requires libcurl.dll and the OpenSSL DLLs - at runtime. - Run 'nmake vc-ssl-zlib' to build with both ssl and zlib support. - - MSVC IDE - -------- - - A fairly comprehensive set of Visual Studio project files are available for - v6.0 through v12.0 and are located in the projects folder to allow proper - building of both the libcurl library as well as the curl tool. - - For more information about these projects and building via Visual Studio - please see the README file located in the projects folder. - - Borland C++ compiler - -------------------- - - Ensure that your build environment is properly set up to use the compiler - and associated tools. PATH environment variable must include the path to - bin subdirectory of your compiler installation, eg: c:\Borland\BCC55\bin - - It is advisable to set environment variable BCCDIR to the base path of - the compiler installation. - - set BCCDIR=c:\Borland\BCC55 - - In order to build a plain vanilla version of curl and libcurl run the - following command from curl's root directory: - - make borland - - To build curl and libcurl with zlib and OpenSSL support set environment - variables ZLIB_PATH and OPENSSL_PATH to the base subdirectories of the - already built zlib and OpenSSL libraries and from curl's root directory - run command: - - make borland-ssl-zlib - - libcurl library will be built in 'lib' subdirectory while curl tool - is built in 'src' subdirectory. In order to use libcurl library it is - advisable to modify compiler's configuration file bcc32.cfg located - in c:\Borland\BCC55\bin to reflect the location of libraries include - paths for example the '-I' line could result in something like: - - -I"c:\Borland\BCC55\include;c:\curl\include;c:\openssl\inc32" - - bcc3.cfg '-L' line could also be modified to reflect the location of - of libcurl library resulting for example: - - -L"c:\Borland\BCC55\lib;c:\curl\lib;c:\openssl\out32" - - In order to build sample program 'simple.c' from the docs\examples - subdirectory run following command from mentioned subdirectory: - - bcc32 simple.c libcurl.lib cw32mt.lib - - In order to build sample program simplessl.c an SSL enabled libcurl - is required, as well as the OpenSSL libeay32.lib and ssleay32.lib - libraries. - - OTHER MSVC IDEs - --------------- - - If you use VC++, Borland or similar compilers. Include all lib source - files in a static lib "project" (all .c and .h files that is). - (you should name it libcurl or similar) - - Make the sources in the src/ drawer be a "win32 console application" - project. Name it curl. - - Disabling Specific Protocols in Win32 builds - -------------------------------------------- - - The configure utility, unfortunately, is not available for the Windows - environment, therefore, you cannot use the various disable-protocol - options of the configure utility on this platform. - - However, you can use the following defines to disable specific - protocols: - - HTTP_ONLY disables all protocols except HTTP - CURL_DISABLE_FTP disables FTP - CURL_DISABLE_LDAP disables LDAP - CURL_DISABLE_TELNET disables TELNET - CURL_DISABLE_DICT disables DICT - CURL_DISABLE_FILE disables FILE - CURL_DISABLE_TFTP disables TFTP - CURL_DISABLE_HTTP disables HTTP - CURL_DISABLE_IMAP disables IMAP - CURL_DISABLE_POP3 disables POP3 - CURL_DISABLE_SMTP disables SMTP - - If you want to set any of these defines you have the following options: - - - Modify lib/config-win32.h - - Modify lib/curl_setup.h - - Modify lib/Makefile.vc6 - - Modify the "Preprocessor Definitions" in the libcurl project - - Note: The pre-processor settings can be found using the Visual Studio IDE - under "Project -> Settings -> C/C++ -> General" in VC6 and "Project -> - Properties -> Configuration Properties -> C/C++ -> Preprocessor" in later - versions. - - Using BSD-style lwIP instead of Winsock TCP/IP stack in Win32 builds - -------------------------------------------------------------------- - - In order to compile libcurl and curl using BSD-style lwIP TCP/IP stack - it is necessary to make definition of preprocessor symbol USE_LWIPSOCK - visible to libcurl and curl compilation processes. To set this definition - you have the following alternatives: - - - Modify lib/config-win32.h and src/config-win32.h - - Modify lib/Makefile.vc6 - - Modify the "Preprocessor Definitions" in the libcurl project - - Note: The pre-processor settings can be found using the Visual Studio IDE - under "Project -> Settings -> C/C++ -> General" in VC6 and "Project -> - Properties -> Configuration Properties -> C/C++ -> Preprocessor" in later - versions. - - Once that libcurl has been built with BSD-style lwIP TCP/IP stack support, - in order to use it with your program it is mandatory that your program - includes lwIP header file (or another lwIP header that includes - this) before including any libcurl header. Your program does not need the - USE_LWIPSOCK preprocessor definition which is for libcurl internals only. - - Compilation has been verified with lwIP 1.4.0 and contrib-1.4.0 from: - - http://download.savannah.gnu.org/releases/lwip/lwip-1.4.0.zip - http://download.savannah.gnu.org/releases/lwip/contrib-1.4.0.zip - - This BSD-style lwIP TCP/IP stack support must be considered experimental - given that it has been verified that lwIP 1.4.0 still needs some polish, - and libcurl might yet need some additional adjustment, caveat emptor. - - Important static libcurl usage note - ----------------------------------- - - When building an application that uses the static libcurl library, you must - add '-DCURL_STATICLIB' to your CFLAGS. Otherwise the linker will look for - dynamic import symbols. - - Legacy Windows and SSL - ---------------------- - - WinSSL (specifically SChannel from Windows SSPI), is the native SSL library - in Windows. However, WinSSL in Windows <= XP is unable to connect to servers - that no longer support the legacy handshakes and algorithms used by those - versions. If you will be using curl in one of those earlier versions of - Windows you should choose another SSL backend such as OpenSSL. - -Apple iOS and Mac OS X -====================== - - On recent Apple operating systems, curl can be built to use Apple's - SSL/TLS implementation, Secure Transport, instead of OpenSSL. To build with - Secure Transport for SSL/TLS, use the configure option --with-darwinssl. (It - is not necessary to use the option --without-ssl.) This feature requires iOS - 5.0 or later, or OS X 10.5 ("Leopard") or later. - - When Secure Transport is in use, the curl options --cacert and --capath and - their libcurl equivalents, will be ignored, because Secure Transport uses - the certificates stored in the Keychain to evaluate whether or not to trust - the server. This, of course, includes the root certificates that ship with - the OS. The --cert and --engine options, and their libcurl equivalents, are - currently unimplemented in curl with Secure Transport. - - For OS X users: In OS X 10.8 ("Mountain Lion"), Apple made a major - overhaul to the Secure Transport API that, among other things, added - support for the newer TLS 1.1 and 1.2 protocols. To get curl to support - TLS 1.1 and 1.2, you must build curl on Mountain Lion or later, or by - using the equivalent SDK. If you set the MACOSX_DEPLOYMENT_TARGET - environmental variable to an earlier version of OS X prior to building curl, - then curl will use the new Secure Transport API on Mountain Lion and later, - and fall back on the older API when the same curl binary is executed on - older cats. For example, running these commands in curl's directory in the - shell will build the code such that it will run on cats as old as OS X 10.6 - ("Snow Leopard") (using bash): - - export MACOSX_DEPLOYMENT_TARGET="10.6" - ./configure --with-darwinssl - make - -IBM OS/2 -======== - - Building under OS/2 is not much different from building under unix. - You need: - - - emx 0.9d - - GNU make - - GNU patch - - ksh - - GNU bison - - GNU file utilities - - GNU sed - - autoconf 2.13 - - If you want to build with OpenSSL or OpenLDAP support, you'll need to - download those libraries, too. Dirk Ohme has done some work to port SSL - libraries under OS/2, but it looks like he doesn't care about emx. You'll - find his patches on: http://come.to/Dirk_Ohme - - If during the linking you get an error about _errno being an undefined - symbol referenced from the text segment, you need to add -D__ST_MT_ERRNO__ - in your definitions. - - If everything seems to work fine but there's no curl.exe, you need to add - -Zexe to your linker flags. - - If you're getting huge binaries, probably your makefiles have the -g in - CFLAGS. - -VMS -=== - - (The VMS section is in whole contributed by the friendly Nico Baggus) - - Curl seems to work with FTP & HTTP other protocols are not tested. (the - perl http/ftp testing server supplied as testing too cannot work on VMS - because vms has no concept of fork(). [ I tried to give it a whack, but - that's of no use. - - SSL stuff has not been ported. - - Telnet has about the same issues as for Win32. When the changes for Win32 - are clear maybe they'll work for VMS too. The basic problem is that select - ONLY works for sockets. - - Marked instances of fopen/[f]stat that might become a problem, especially - for non stream files. In this regard, the files opened for writing will be - created stream/lf and will thus be safe. Just keep in mind that non-binary - read/wring from/to files will have a records size limit of 32767 bytes - imposed. - - Stat to get the size of the files is again only safe for stream files & - fixed record files without implied CC. - - -- My guess is that only allowing access to stream files is the quickest - way to get around the most issues. Therefore all files need to to be - checked to be sure they will be stream/lf before processing them. This is - the easiest way out, I know. The reason for this is that code that needs to - report the filesize will become a pain in the ass otherwise. - - Exit status.... Well we needed something done here, - - VMS has a structured exist status: - | 3 | 2 | 1 | 0| - |1098|765432109876|5432109876543|210| - +----+------------+-------------+---+ - |Ctrl| Facility | Error code |sev| - +----+------------+-------------+---+ - - With the Ctrl-bits an application can tell if part or the whole message has - already been printed from the program, DCL doesn't need to print it again. - - Facility - basically the program ID. A code assigned to the program - the name can be fetched from external or internal message libraries - Error code - the err codes assigned by the application - Sev. - severity: Even = error, off = non error - - 0 = Warning - 1 = Success - 2 = Error - 3 = Information - 4 = Fatal - <5-7> reserved. - - This all presents itself with: - %--, - - See also the src/curlmsg.msg file, it has the source for the messages In - src/main.c a section is devoted to message status values, the globalvalues - create symbols with certain values, referenced from a compiled message - file. Have all exit function use a exit status derived from a translation - table with the compiled message codes. - - This was all compiled with: - - Compaq C V6.2-003 on OpenVMS Alpha V7.1-1H2 - - So far for porting notes as of: - - 13-jul-2001 - N. Baggus - -QNX -=== - - (This section was graciously brought to us by David Bentham) - - As QNX is targeted for resource constrained environments, the QNX headers - set conservative limits. This includes the FD_SETSIZE macro, set by default - to 32. Socket descriptors returned within the CURL library may exceed this, - resulting in memory faults/SIGSEGV crashes when passed into select(..) - calls using fd_set macros. - - A good all-round solution to this is to override the default when building - libcurl, by overriding CFLAGS during configure, example - - # configure CFLAGS='-DFD_SETSIZE=64 -g -O2' - -RISC OS -======= - - The library can be cross-compiled using gccsdk as follows: - - CC=riscos-gcc AR=riscos-ar RANLIB='riscos-ar -s' ./configure \ - --host=arm-riscos-aof --without-random --disable-shared - make - - where riscos-gcc and riscos-ar are links to the gccsdk tools. - You can then link your program with curl/lib/.libs/libcurl.a - -AmigaOS -======= - - (This section was graciously brought to us by Diego Casorran) - - To build cURL/libcurl on AmigaOS just type 'make amiga' ... - - What you need is: (not tested with others versions) - - GeekGadgets / gcc 2.95.3 (http://www.geekgadgets.org/) - - AmiTCP SDK v4.3 (http://www.aminet.net/comm/tcp/AmiTCP-SDK-4.3.lha) - - Native Developer Kit (http://www.amiga.com/3.9/download/NDK3.9.lha) - - As no ixemul.library is required you will be able to build it for - WarpOS/PowerPC (not tested by me), as well a MorphOS version should be - possible with no problems. - - To enable SSL support, you need a OpenSSL native version (without ixemul), - you can find a precompiled package at http://amiga.sourceforge.net/OpenSSL/ - -NetWare -======= - - To compile curl.nlm / libcurl.nlm you need: - - - either any gcc / nlmconv, or CodeWarrior 7 PDK 4 or later. - - gnu make and awk running on the platform you compile on; - native Win32 versions can be downloaded from: - http://www.gknw.net/development/prgtools/ - - recent Novell LibC or Novell CLib SDK available from: - https://www.novell.com/developer/ndk/ - - optional recent Novell CLDAP SDK available from: - https://www.novell.com/developer/ndk/ldap_libraries_for_c.html - - optional zlib sources (static or dynamic linking with zlib.imp); - sources with NetWare Makefile can be obtained from: - http://www.gknw.net/mirror/zlib/ - - optional OpenSSL sources (version 0.9.8 or later build with BSD sockets); - you can find precompiled packages at: - http://www.gknw.net/development/ossl/netware/ - for CLIB-based builds OpenSSL 0.9.8h or later is required - earlier versions - don't support building with CLIB BSD sockets. - - optional SSH2 sources (version 0.17 or later); - - Set a search path to your compiler, linker and tools; on Linux make - sure that the var OSTYPE contains the string 'linux'; set the var - NDKBASE to point to the base of your Novell NDK; and then type - 'make netware' from the top source directory; other targets available - are 'netware-ssl', 'netware-ssl-zlib', 'netware-zlib' and 'netware-ares'; - if you need other combinations you can control the build with the - environment variables WITH_SSL, WITH_ZLIB, WITH_ARES, WITH_SSH2, and - ENABLE_IPV6; you can set LINK_STATIC=1 to link curl.nlm statically. - By default LDAP support is enabled, however currently you will need a patch - in order to use the CLDAP NDK with BSD sockets (Novell Bug 300237): - http://www.gknw.net/test/curl/cldap_ndk/ldap_ndk.diff - I found on some Linux systems (RH9) that OS detection didn't work although - a 'set | grep OSTYPE' shows the var present and set; I simply overwrote it - with 'OSTYPE=linux-rh9-gnu' and the detection in the Makefile worked... - Any help in testing appreciated! - Builds automatically created 8 times a day from current git are here: - http://www.gknw.net/mirror/curl/autobuilds/ - the status of these builds can be viewed at the autobuild table: - https://curl.haxx.se/dev/builds.html - -eCos -==== - - curl does not use the eCos build system, so you must first build eCos - separately, then link curl to the resulting eCos library. Here's a sample - configure line to do so on an x86 Linux box targeting x86: - - GCCLIB=`gcc -print-libgcc-file-name` && \ - CFLAGS="-D__ECOS=1 -nostdinc -I$ECOS_INSTALL/include \ - -I`dirname $GCCLIB`/include" \ - LDFLAGS="-nostdlib -Wl,--gc-sections -Wl,-static \ - -L$ECOS_INSTALL/lib -Ttarget.ld -ltarget" \ - ./configure --host=i386 --disable-shared \ - --without-ssl --without-zlib --disable-manual --disable-ldap - - In most cases, eCos users will be using libcurl from within a custom - embedded application. Using the standard 'curl' executable from - within eCos means facing the limitation of the standard eCos C - startup code which does not allow passing arguments in main(). To - run 'curl' from eCos and have it do something useful, you will need - to either modify the eCos startup code to pass in some arguments, or - modify the curl application itself to retrieve its arguments from - some location set by the bootloader or hard-code them. - - Something like the following patch could be used to hard-code some - arguments. The MTAB_ENTRY line mounts a RAM disk as the root filesystem - (without mounting some kind of filesystem, eCos errors out all file - operations which curl does not take to well). The next section synthesizes - some command-line arguments for curl to use, in this case to direct curl - to read further arguments from a file. It then creates that file on the - RAM disk and places within it a URL to download: a file: URL that - just happens to point to the configuration file itself. The results - of running curl in this way is the contents of the configuration file - printed to the console. - ---- src/main.c 19 Jul 2006 19:09:56 -0000 1.363 -+++ src/main.c 24 Jul 2006 21:37:23 -0000 -@@ -4286,11 +4286,31 @@ - } - - -+#ifdef __ECOS -+#include -+MTAB_ENTRY( testfs_mte1, -+ "/", -+ "ramfs", -+ "", -+ 0); -+#endif - - int main(int argc, char *argv[]) - { - int res; - struct Configurable config; -+#ifdef __ECOS -+ char *args[] = {"ecos-curl", "-K", "curlconf.txt"}; -+ FILE *f; -+ argc = sizeof(args)/sizeof(args[0]); -+ argv = args; -+ -+ f = fopen("curlconf.txt", "w"); -+ if (f) { -+ fprintf(f, "--url file:curlconf.txt"); -+ fclose(f); -+ } -+#endif - memset(&config, 0, sizeof(struct Configurable)); - - config.errors = stderr; /* default errors to stderr */ - -Minix -===== - - curl can be compiled on Minix 3 using gcc or ACK (starting with - ver. 3.1.3). Ensure that GNU gawk and bash are both installed and - available in the PATH. - - ACK - --- - Increase the heap sizes of the compiler with the command: - - binsizes xxl - - then configure and compile curl with: - - ./configure CC=cc LD=cc AR=/usr/bin/aal GREP=grep \ - CPPFLAGS='-D_POSIX_SOURCE=1 -I/usr/local/include' - make - chmem =256000 src/curl - - GCC - --- - Make sure gcc is in your PATH with the command: - - export PATH=/usr/gnu/bin:$PATH - - then configure and compile curl with: - - ./configure CC=gcc AR=/usr/gnu/bin/gar GREP=grep - make - chmem =256000 src/curl - -Symbian OS -========== - - The Symbian OS port uses the Symbian build system to compile. From the - packages/Symbian/group/ directory, run: - - bldmake bldfiles - abld build - - to compile and install curl and libcurl using SBSv1. If your Symbian - SDK doesn't include support for P.I.P.S., you will need to contact - your SDK vendor to obtain that first. - -VxWorks -======== - - Build for VxWorks is performed using cross compilation. - That means you build on Windows machine using VxWorks tools and - run the built image on the VxWorks device. - - To build libcurl for VxWorks you need: - - - CYGWIN (free, https://cygwin.com/) - - Wind River Workbench (commercial) - - If you have CYGWIN and Workbench installed on you machine - follow after next steps: - - 1. Open the Command Prompt window and change directory ('cd') - to the libcurl 'lib' folder. - 2. Add CYGWIN 'bin' folder to the PATH environment variable. - For example, type 'set PATH=C:/embedded/cygwin/bin;%PATH%'. - 3. Adjust environment variables defined in 'Environment' section - of the Makefile.vxworks file to point to your software folders. - 4. Build the libcurl by typing 'make -f ./Makefile.vxworks' - - As a result the libcurl.a library should be created in the 'lib' folder. - To clean the build results type 'make -f ./Makefile.vxworks clean'. - -Android -======= - - Method using the static makefile: - - - see the build notes in the packages/Android/Android.mk file. - - Method using a configure cross-compile (tested with Android NDK r7c, r8): - - - prepare the toolchain of the Android NDK for standalone use; this can - be done by invoking the script: - ./build/tools/make-standalone-toolchain.sh - which creates a usual cross-compile toolchain. Lets assume that you put - this toolchain below /opt then invoke configure with something like: - export PATH=/opt/arm-linux-androideabi-4.4.3/bin:$PATH - ./configure --host=arm-linux-androideabi [more configure options] - make - - if you want to compile directly from our GIT repo you might run into - this issue with older automake stuff: - checking host system type... - Invalid configuration `arm-linux-androideabi': - system `androideabi' not recognized - configure: error: /bin/sh ./config.sub arm-linux-androideabi failed - this issue can be fixed with using more recent versions of config.sub - and config.guess which can be obtained here: - http://git.savannah.gnu.org/gitweb/?p=config.git;a=tree - you need to replace your system-own versions which usually can be - found in your automake folder: - find /usr -name config.sub - - Wrapper for pkg-config: - - - In order to make proper use of pkg-config so that configure is able to - find all dependencies you should create a wrapper script for pkg-config; - file /opt/arm-linux-androideabi-4.4.3/bin/arm-linux-androideabi-pkg-config: - - #!/bin/sh - SYSROOT=$(dirname ${0%/*})/sysroot - export PKG_CONFIG_DIR= - export PKG_CONFIG_LIBDIR=${SYSROOT}/usr/local/lib/pkgconfig:${SYSROOT}/usr/share/pkgconfig - export PKG_CONFIG_SYSROOT_DIR=${SYSROOT} - exec pkg-config "$@" - - also create a copy or symlink with name arm-unknown-linux-androideabi-pkg-config. - -CROSS COMPILE -============= - - (This section was graciously brought to us by Jim Duey, with additions by - Dan Fandrich) - - Download and unpack the cURL package. - - 'cd' to the new directory. (e.g. cd curl-7.12.3) - - Set environment variables to point to the cross-compile toolchain and call - configure with any options you need. Be sure and specify the '--host' and - '--build' parameters at configuration time. The following script is an - example of cross-compiling for the IBM 405GP PowerPC processor using the - toolchain from MonteVista for Hardhat Linux. - - (begin script) - - #! /bin/sh - - export PATH=$PATH:/opt/hardhat/devkit/ppc/405/bin - export CPPFLAGS="-I/opt/hardhat/devkit/ppc/405/target/usr/include" - export AR=ppc_405-ar - export AS=ppc_405-as - export LD=ppc_405-ld - export RANLIB=ppc_405-ranlib - export CC=ppc_405-gcc - export NM=ppc_405-nm - - ./configure --target=powerpc-hardhat-linux \ - --host=powerpc-hardhat-linux \ - --build=i586-pc-linux-gnu \ - --prefix=/opt/hardhat/devkit/ppc/405/target/usr/local \ - --exec-prefix=/usr/local - - (end script) - - You may also need to provide a parameter like '--with-random=/dev/urandom' - to configure as it cannot detect the presence of a random number - generating device for a target system. The '--prefix' parameter - specifies where cURL will be installed. If 'configure' completes - successfully, do 'make' and 'make install' as usual. - - In some cases, you may be able to simplify the above commands to as - little as: - - ./configure --host=ARCH-OS - -REDUCING SIZE -============= - - There are a number of configure options that can be used to reduce the - size of libcurl for embedded applications where binary size is an - important factor. First, be sure to set the CFLAGS variable when - configuring with any relevant compiler optimization flags to reduce the - size of the binary. For gcc, this would mean at minimum the -Os option, - and potentially the -march=X, -mdynamic-no-pic and -flto options as well, - e.g. - - ./configure CFLAGS='-Os' LDFLAGS='-Wl,-Bsymbolic'... - - Note that newer compilers often produce smaller code than older versions - due to improved optimization. - - Be sure to specify as many --disable- and --without- flags on the configure - command-line as you can to disable all the libcurl features that you - know your application is not going to need. Besides specifying the - --disable-PROTOCOL flags for all the types of URLs your application - will not use, here are some other flags that can reduce the size of the - library: - - --disable-ares (disables support for the C-ARES DNS library) - --disable-cookies (disables support for HTTP cookies) - --disable-crypto-auth (disables HTTP cryptographic authentication) - --disable-ipv6 (disables support for IPv6) - --disable-manual (disables support for the built-in documentation) - --disable-proxy (disables support for HTTP and SOCKS proxies) - --disable-unix-sockets (disables support for UNIX sockets) - --disable-verbose (eliminates debugging strings and error code strings) - --disable-versioned-symbols (disables support for versioned symbols) - --enable-hidden-symbols (eliminates unneeded symbols in the shared library) - --without-libidn (disables support for the libidn DNS library) - --without-librtmp (disables support for RTMP) - --without-ssl (disables support for SSL/TLS) - --without-zlib (disables support for on-the-fly decompression) - - The GNU compiler and linker have a number of options that can reduce the - size of the libcurl dynamic libraries on some platforms even further. - Specify them by providing appropriate CFLAGS and LDFLAGS variables on the - configure command-line, e.g. - - CFLAGS="-Os -ffunction-sections -fdata-sections \ - -fno-unwind-tables -fno-asynchronous-unwind-tables -flto" \ - LDFLAGS="-Wl,-s -Wl,-Bsymbolic -Wl,--gc-sections" - - Be sure also to strip debugging symbols from your binaries after - compiling using 'strip' (or the appropriate variant if cross-compiling). - If space is really tight, you may be able to remove some unneeded - sections of the shared library using the -R option to objcopy (e.g. the - .comment section). - - Using these techniques it is possible to create a basic HTTP-only shared - libcurl library for i386 Linux platforms that is only 109 KiB in size, and - an FTP-only library that is 109 KiB in size (as of libcurl version 7.45.0, - using gcc 4.9.2). - - You may find that statically linking libcurl to your application will - result in a lower total size than dynamically linking. - - Note that the curl test harness can detect the use of some, but not all, of - the --disable statements suggested above. Use will cause tests relying on - those features to fail. The test harness can be manually forced to skip - the relevant tests by specifying certain key words on the runtests.pl - command line. Following is a list of appropriate key words: - - --disable-cookies !cookies - --disable-manual !--manual - --disable-proxy !HTTP\ proxy !proxytunnel !SOCKS4 !SOCKS5 - -PORTS -===== - - This is a probably incomplete list of known hardware and operating systems - that curl has been compiled for. If you know a system curl compiles and - runs on, that isn't listed, please let us know! - - - Alpha DEC OSF 4 - - Alpha Digital UNIX v3.2 - - Alpha FreeBSD 4.1, 4.5 - - Alpha Linux 2.2, 2.4 - - Alpha NetBSD 1.5.2 - - Alpha OpenBSD 3.0 - - Alpha OpenVMS V7.1-1H2 - - Alpha Tru64 v5.0 5.1 - - AVR32 Linux - - ARM Android 1.5, 2.1, 2.3, 3.2, 4.x - - ARM INTEGRITY - - ARM iOS - - Cell Linux - - Cell Cell OS - - HP-PA HP-UX 9.X 10.X 11.X - - HP-PA Linux - - HP3000 MPE/iX - - MicroBlaze uClinux - - MIPS IRIX 6.2, 6.5 - - MIPS Linux - - OS/400 - - Pocket PC/Win CE 3.0 - - Power AIX 3.2.5, 4.2, 4.3.1, 4.3.2, 5.1, 5.2 - - PowerPC Darwin 1.0 - - PowerPC INTEGRITY - - PowerPC Linux - - PowerPC Mac OS 9 - - PowerPC Mac OS X - - SH4 Linux 2.6.X - - SH4 OS21 - - SINIX-Z v5 - - Sparc Linux - - Sparc Solaris 2.4, 2.5, 2.5.1, 2.6, 7, 8, 9, 10 - - Sparc SunOS 4.1.X - - StrongARM (and other ARM) RISC OS 3.1, 4.02 - - StrongARM/ARM7/ARM9 Linux 2.4, 2.6 - - StrongARM NetBSD 1.4.1 - - Symbian OS (P.I.P.S.) 9.x - - TPF - - Ultrix 4.3a - - UNICOS 9.0 - - i386 BeOS - - i386 DOS - - i386 eCos 1.3.1 - - i386 Esix 4.1 - - i386 FreeBSD - - i386 HURD - - i386 Haiku OS - - i386 Linux 1.3, 2.0, 2.2, 2.3, 2.4, 2.6 - - i386 Mac OS X - - i386 MINIX 3.1 - - i386 NetBSD - - i386 Novell NetWare - - i386 OS/2 - - i386 OpenBSD - - i386 QNX 6 - - i386 SCO unix - - i386 Solaris 2.7 - - i386 Windows 95, 98, ME, NT, 2000, XP, 2003 - - i486 ncr-sysv4.3.03 (NCR MP-RAS) - - ia64 Linux 2.3.99 - - m68k AmigaOS 3 - - m68k Linux - - m68k uClinux - - m68k OpenBSD - - m88k dg-dgux5.4R3.00 - - s390 Linux - - x86_64 Linux - - XScale/PXA250 Linux 2.4 - - Nios II uClinux - -Useful URLs -=========== - -axTLS http://axtls.sourceforge.net/ -c-ares http://c-ares.haxx.se/ -GNU GSS https://www.gnu.org/software/gss/ -GnuTLS https://www.gnu.org/software/gnutls/ -Heimdal http://www.h5l.org/ -libidn https://www.gnu.org/software/libidn/ -libmetalink https://launchpad.net/libmetalink/ -libssh2 https://www.libssh2.org/ -MIT Kerberos http://web.mit.edu/kerberos/www/dist/ -NSS https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS -OpenLDAP http://www.openldap.org/ -OpenSSL https://www.openssl.org/ -PolarSSL https://tls.mbed.org/ -wolfSSL https://www.wolfssl.com/wolfSSL/ -Zlib http://www.zlib.net/ - -MingW http://www.mingw.org/ -MinGW-w64 http://mingw-w64.sourceforge.net/ -OpenWatcom http://www.openwatcom.org/ +see INSTALL.md diff --git a/docs/INSTALL.devcpp b/docs/INSTALL.devcpp deleted file mode 100644 index f989d52..0000000 --- a/docs/INSTALL.devcpp +++ /dev/null @@ -1,302 +0,0 @@ -DevCpp-Mingw Install & Compilation Sept 2005 -================================== - -Reference Emails available at curl@haxx.se: - - Libcurl Install and Use Issues - Awaiting an Answer for Win 32 Install - res = curl_easy_perform(curl); Error - Makefile Issues - - -Having previously done a thorough review of what was available that met my -requirements under GPL, I settled for Libcurl as the software of choice for -many reasons not the least of which was the support. - -Background ----------- - -This quest started when I innocently tried to incorporate the libcurl library -into my simple source code. I figured that a few easy steps would accomplish -this without major headaches. I had no idea that I would be facing an almost -insurmountable challenge. - -The main problem lies in two areas. First the bulk of support for libcurl -exists for a Unix/linux command line environments. This is of little help when -it comes to Windows O/S. - -Secondly the help that does exist for the Windows O/S focused around mingw -through a command line argument environment. - -You may ask "Why is this a problem?" - -I'm using a Windows O/S with DevCpp. For those of you who are unfamiliar with -DevCpp, it is a window shell GUI that replaces the command line environment -for gcc. A definite improvement that I am unwilling to give up. However using -DevCpp presented its own set of issues. Inadvertently I also made some -careless errors such as compiling the 7.14 version of Makefile with an older -version of source code. Thanks to Dan Fandrich for picking this up. - -I did eventually with the help of Daniel, Phillipe and others manage to -implement successfully (the only mingw available version) -curl-7.13.0-win32-ssl-devel-mingw32 into the DevCpp environment. Only the -dynamic libcurl.dll libcurldll.a libraries worked. The static library which I -was interested in did not. Furthermore when I tried to implement one of the -examples included with the curl package (get info.c) it caused the executable -to crash. Tracing the bug I found it in the code and function res = -curl_easy_perform(curl);. - -At this point I had to make a choice as to whether invest my limited -time-energy resource to fixing the bug or to compile the new version -available. After searching the archives I found a very similar or the same bug -reported from version 7.12x on. Daniel did inform me that he thought that this -bug had been fixed with the latest version. So I proceeded to compile the -latest SSL version where I faced other challenges. - -In order to make this process unremarkable for others using the same -environment I decided to document the process so that others will find it -routine. It would be a shame if newbies could not implement this excellent -package for their use. - -I would like to thank the many others in this forum and in the DevCpp forum -for their help. Without your help I may either have given up or it would have -taken me many times longer to achieve success. - -The Cookbook Approach ---------------------- - -This discussion will be confined to a SSL static library compilation and -installation. Limited mention and comments will be inserted where appropriate -to help with non-SSL, dynamic libraries and executables. - - - Using Makefile from DevCpp to compile Libcurl libraries - -Preamble --------- - -Using the latest version release - curl-7.14.0.tar.gz. Curl source code is -platform independent. This simply means that the source code can be compiled -for any Operating System (Linux/Unix Windows etc. and variations of thereof). - -The first thing to note is that inside curl-7.14.0 you will find two folders -lib and src. Both contain Makefile.m32 (required for win mingw library or exe -compilation) files which are different. The main difference between these two -folders and the makefiles is that the src folder contents are used to compile -an executable file(curl.exe) while the lib folder contents are used to compile -a static (libcurl.a) and dynamic (libcurl.dll & libcurldll.a) file that can be -used to compile libcurl with your own source code so that one can use and -access all libcurl functions. - -Before we start please make sure that DevCpp is installed properly. In -particular make sure you have no spaces in the name of any of the directories -and subdirectories where DevCpp is installed. Failure to comply with the -install instructions may produce erratic behaviour in DevCpp. For further info -check the following sites - -http://aditsu.freeunixhost.com/dev-cpp-faq.html -https://sourceforge.net/p/dev-cpp/discussion/48211/thread/2a85ea46 - -As I have mentioned before I will confine this to the SSL Library compilations -but the process is very similar for compilation of the executable - curl.exe; -just substitute the src folder makefile in its stead. - -First use a text processor Notepad, or your own favourite text processor. To -engage your favourite text processor, select Makefile.m32 click once with your -mouse on file icon; icon turns blue, press the shift key and right-click on -mouse, menu appears select "Open with", select your favourite text processor. - -Next read the contents of Makefile.m32. It includes instructions on its use. - -Method I - DOS Command Line ---------------------------- - -Note - The only reason I have included this method is that Method II which is -the preferred method for compiling does not allow for the setting of option -switches (e.g. SSL = 1 or SSL =0). At least that's what they tell me at the -Dev-Cpp forum. - -1 - Make a copy of (D:\Dev-Cpp\bin) bin folder and name it "bin Original" -place it in the Dev-Cpp installed directory (D:\Dev-Cpp\ for this example) - -2 - Copy the entire contents of the LIB folder of curl-7.14.0.tar.gz or zip -version into the bin folder above (D:\Dev-Cpp\bin). The reason being is that -the make.exe file resides in this folder. Make.exe will use - Makefile.m32, -Makefile.inc, and the source code included in the lib folder to compile the -source code. There is a PATH issue with make.exe that remains unresolved at -least for me. Unless the entire source code to be compiled is placed entirely -within the directory of make.exe an error message will be generated - "file -xxxx.yyy not available". - -3- Go to Dev-Cpp\bin and double click on make .exe. You will see a DOS window -quickly pop up and close very quickly. Not to worry! Please do not skip this -step. - -4- Click on the start button\Programs\MS-DOS Prompt.Once the DOS Window is up -Type the disk drive letter (e.g. E: ) engage the enter button. The path should -automatically take you to the directory of the make.exe file. - -5- To compile the source code simply type at the DOS prompt make -f -Makefile.m32 as per instructions contained in the Makefile.m32 file (use any -text processor to read instructions). I don't believe that this makefile -allows for the option of non SSL. Ignore any warnings. - -6- Collect and make copies of libcurl.a, libcurl.dll, libcurldll.a and any *.o -compilations you might need in another directory outside of the bin directory -as you will need this files shortly to set up libcurl for use with -Dev-cpp. For most apps *.o is not required. Later on we will show what to do -with these files. - -7- You are finished but before closing we need to do cleanup - erase the bin -folder and rename the "bin Original" folder created in step 1 to bin. - -Note to compile a curl executable the process is probably similar but instead -of using the LIB folder contents use the SRC folder contents and Makefiles in -curl-7.14.0.tar.gz. File directories relative placements must be respected for -compiling to take place successfully. This may not be possible with the PATH -problem that make.exe experiences. If anyone has solved this PATH issue and -please make sure it actually works on Win 9x/2000/XP before letting me -know. Then please let me or Daniel in on the solution so that it can be -included with these instructions. Thanks. - -or - -Method II - Dev-Cpp GUI ------------------------ - -1- Copy the entire contents of the LIB folder of curl-7.14.0.tar.gz or zip -version into any folder outside of (Dev-Cpp\bin). - -2- Drop the File/New/click on Project. - -3- New Project Dialogue box appears. Double click on the Static Library. - -4- Create Project Dialogue box appears. Select the LIB folder location to -place and locate your Project File Name. Placing the Project File Name -elsewhere may cause problems (PATH issue problem again). - -5- Drop down the Project/Project Options. Project Options Dialogue box -appears. - -6- Select the Makefile tab in the Project Options Dialogue Box. Check Box - -Use Custom Makefile. Click on the Folder icon at the extreme right of the -Check Box. Select Makefile.m32 in the folder wherever you have placed the -contents of the LIB Folder. Press OK and close the Dialogue Box. - -7- Drop the Menu Project/Click on Add to Project. Open File Dialogue Box -appears. The Dialogue Box should open in the folder wherever you have placed -the contents of the LIB Folder. If not go there. - -8- Select Crtl-A to select all files in the LIB folder. Click on open to add -files and close box. Wait till all files are added. This may take 30 seconds -or longer. - -9- Drop the Menu Execute/Click on Compile. - -10- That's it. - - - The following steps must be completed if Curl is to work properly - ================================================================= - -LIB folder inclusions (*.a placement) -------------------------------------- - -1- Refer to Method I - DOS Command Line point # 6 Take libcurl.a, libcurldll.a -and install it in the directory C( or whichever drive Dev is installed) -:\Dev-Cpp\lib. - - -Include Folder --------------- - -1- Create a new folder by the name of curl (do not change the name curl to -some other name as it will cause major issues) in the directory -C:\Dev-Cpp\include. - -2- Copy the entire contents of the curl folder of curl-7.14.0.tar.gz or zip - version into the newly created curl directory - C:\Dev-Cpp\include\curl. - -Links To Include And Lib Folder -------------------------------- - -1- Drop the Menu - Tools\Compiler Options\Directories\Libraries. Make sure -that C( or whichever drive Dev is installed):\DEV-CPP\lib is included. - -2- Next select the Menu - Tools\Compiler Options\Directories\C Includes. Make -sure that C:\DEV-CPP\include and C:\Dev-Cpp\include\curl are included. - -3- Next select the Menu - Tools\Compiler Options\Directories\C++ -Includes. Make sure that C:\DEV-CPP\include and C:\Dev-Cpp\include\curl are -included. - -Linker Links ------------- - -1- Drop the Menu - Tools\Compiler Options\Directories\Compiler. - -2- Make sure that the box "Add these commands to the linker command line" is -checked. - -3- Include in the white space immediately below the box referred in 2 -lcurl --lws2_32. - -SSL Files ---------- - -1- Get the latest openSSL (as of time of this writing) -openssl-0.9.7e-win32-bin.zip for the minimalist package of the openssl-0.9.7e -binaries ported to MS Windows 95/98/NT/XP using the MingW32/GCC-3.1 -development environment. The file may be downloaded at -https://curl.haxx.se/download/. - -2- Open the above zip file. You will find two files - SDL.dll, -SDL_mixer.dll. Install them in the directory C:\WINDOWS\SYSTEM32 for Win 9x -users and c:\winnt\system32 for NT-family users. - -Multithreading Files --------------------- - -To be completed - -#define -------- - -1- Make sure that your program includes the following - #define CURL_STATICLIB -must be declared FIRST before any other define functions may be -added. Otherwise you may experience link errors. - -2- Don't forget to include #include "curl/curl.h". - -e.g. - #define CURL_STATICLIB -#include - #include "curl/curl.h" -#include -#include -#include -etc... - - -Static or Dynamic Library -------------------------- - -The above steps apply for the use by a static library. Should you choose to -use a dynamic library you will be required to perform these additional steps. - -1- Refer to Method I - DOS Command Line point # 6. Install libcurl.dll in the -directory C:\WINDOWS\SYSTEM32 for Win 9x users and c:\winnt\system32 for -NT-family users. - -2- Refer to Linker Links point 3 - Replace -lcurl with -lcurldll. - -Voila you're done. - -The non-SSL static Library build may not be possible to use at least as of the -time of this writing - v7.14. Check reference emails - Phillipe and I found it -impossible to fully compile as certain files were missing for linking. No big -loss as SSL is a major plus. - -Hope this Helps - -Tom diff --git a/docs/INSTALL.md b/docs/INSTALL.md new file mode 100644 index 0000000..ff56600 --- /dev/null +++ b/docs/INSTALL.md @@ -0,0 +1,513 @@ +# how to install curl and libcurl + +## Installing Binary Packages + +Lots of people download binary distributions of curl and libcurl. This +document does not describe how to install curl or libcurl using such a binary +package. This document describes how to compile, build and install curl and +libcurl from source code. + +## Building from git + +If you get your code off a git repository instead of a release tarball, see +the `GIT-INFO` file in the root directory for specific instructions on how to +proceed. + +# Unix + +A normal Unix installation is made in three or four steps (after you've +unpacked the source archive): + + ./configure + make + make test (optional) + make install + +You probably need to be root when doing the last command. + +Get a full listing of all available configure options by invoking it like: + + ./configure --help + +If you want to install curl in a different file hierarchy than `/usr/local`, +specify that when running configure: + + ./configure --prefix=/path/to/curl/tree + +If you have write permission in that directory, you can do 'make install' +without being root. An example of this would be to make a local install in +your own home directory: + + ./configure --prefix=$HOME + make + make install + +The configure script always tries to find a working SSL library unless +explicitly told not to. If you have OpenSSL installed in the default search +path for your compiler/linker, you don't need to do anything special. If you +have OpenSSL installed in /usr/local/ssl, you can run configure like: + + ./configure --with-ssl + +If you have OpenSSL installed somewhere else (for example, /opt/OpenSSL) and +you have pkg-config installed, set the pkg-config path first, like this: + + env PKG_CONFIG_PATH=/opt/OpenSSL/lib/pkgconfig ./configure --with-ssl + +Without pkg-config installed, use this: + + ./configure --with-ssl=/opt/OpenSSL + +If you insist on forcing a build without SSL support, even though you may +have OpenSSL installed in your system, you can run configure like this: + + ./configure --without-ssl + +If you have OpenSSL installed, but with the libraries in one place and the +header files somewhere else, you have to set the LDFLAGS and CPPFLAGS +environment variables prior to running configure. Something like this should +work: + + CPPFLAGS="-I/path/to/ssl/include" LDFLAGS="-L/path/to/ssl/lib" ./configure + +If you have shared SSL libs installed in a directory where your run-time +linker doesn't find them (which usually causes configure failures), you can +provide the -R option to ld on some operating systems to set a hard-coded +path to the run-time linker: + + LDFLAGS=-R/usr/local/ssl/lib ./configure --with-ssl + +## More Options + +To force a static library compile, disable the shared library creation by +running configure like: + + ./configure --disable-shared + +To tell the configure script to skip searching for thread-safe functions, add +an option like: + + ./configure --disable-thread + +If you're a curl developer and use gcc, you might want to enable more debug +options with the `--enable-debug` option. + +curl can be built to use a whole range of libraries to provide various useful +services, and configure will try to auto-detect a decent default. But if you +want to alter it, you can select how to deal with each individual library. + +## Select TLS backend + +The default OpenSSL configure check will also detect and use BoringSSL or +libressl. + + - GnuTLS: `--without-ssl --with-gnutls`. + - Cyassl: `--without-ssl --with-cyassl` + - NSS: `--without-ssl --with-nss` + - PolarSSL: `--without-ssl --with-polarssl` + - mbedTLS: `--without-ssl --with-mbedtls` + - axTLS: `--without-ssl --with-axtls` + - schannel: `--without-ssl --with-winssl` + - secure transport: `--with-winssl --with-darwinssl` + +# Windows + +## Building Windows DLLs and C run-time (CRT) linkage issues + + As a general rule, building a DLL with static CRT linkage is highly + discouraged, and intermixing CRTs in the same app is something to avoid at + any cost. + + Reading and comprehending Microsoft Knowledge Base articles KB94248 and + KB140584 is a must for any Windows developer. Especially important is full + understanding if you are not going to follow the advice given above. + + - [How To Use the C Run-Time](https://support.microsoft.com/kb/94248/en-us) + - [How to link with the correct C Run-Time CRT library](https://support.microsoft.com/kb/140584/en-us) + - [Potential Errors Passing CRT Objects Across DLL Boundaries](https://msdn.microsoft.com/en-us/library/ms235460) + +If your app is misbehaving in some strange way, or it is suffering from +memory corruption, before asking for further help, please try first to +rebuild every single library your app uses as well as your app using the +debug multithreaded dynamic C runtime. + + If you get linkage errors read section 5.7 of the FAQ document. + +## MingW32 + +Make sure that MinGW32's bin dir is in the search path, for example: + + set PATH=c:\mingw32\bin;%PATH% + +then run `mingw32-make mingw32` in the root dir. There are other +make targets available to build libcurl with more features, use: + + - `mingw32-make mingw32-zlib` to build with Zlib support; + - `mingw32-make mingw32-ssl-zlib` to build with SSL and Zlib enabled; + - `mingw32-make mingw32-ssh2-ssl-zlib` to build with SSH2, SSL, Zlib; + - `mingw32-make mingw32-ssh2-ssl-sspi-zlib` to build with SSH2, SSL, Zlib + and SSPI support. + +If you have any problems linking libraries or finding header files, be sure +to verify that the provided "Makefile.m32" files use the proper paths, and +adjust as necessary. It is also possible to override these paths with +environment variables, for example: + + set ZLIB_PATH=c:\zlib-1.2.8 + set OPENSSL_PATH=c:\openssl-1.0.2c + set LIBSSH2_PATH=c:\libssh2-1.6.0 + +It is also possible to build with other LDAP SDKs than MS LDAP; currently +it is possible to build with native Win32 OpenLDAP, or with the Novell CLDAP +SDK. If you want to use these you need to set these vars: + + set LDAP_SDK=c:\openldap + set USE_LDAP_OPENLDAP=1 + +or for using the Novell SDK: + + set USE_LDAP_NOVELL=1 + +If you want to enable LDAPS support then set LDAPS=1. + +## Cygwin + +Almost identical to the unix installation. Run the configure script in the +curl source tree root with `sh configure`. Make sure you have the sh +executable in /bin/ or you'll see the configure fail toward the end. + +Run `make` + +## Borland C++ compiler + +Ensure that your build environment is properly set up to use the compiler and +associated tools. PATH environment variable must include the path to bin +subdirectory of your compiler installation, eg: `c:\Borland\BCC55\bin` + +It is advisable to set environment variable BCCDIR to the base path of the +compiler installation. + + set BCCDIR=c:\Borland\BCC55 + +In order to build a plain vanilla version of curl and libcurl run the +following command from curl's root directory: + + make borland + +To build curl and libcurl with zlib and OpenSSL support set environment +variables `ZLIB_PATH` and `OPENSSL_PATH` to the base subdirectories of the +already built zlib and OpenSSL libraries and from curl's root directory run +command: + + make borland-ssl-zlib + +libcurl library will be built in 'lib' subdirectory while curl tool is built +in 'src' subdirectory. In order to use libcurl library it is advisable to +modify compiler's configuration file bcc32.cfg located in +`c:\Borland\BCC55\bin` to reflect the location of libraries include paths for +example the '-I' line could result in something like: + + -I"c:\Borland\BCC55\include;c:\curl\include;c:\openssl\inc32" + +bcc3.cfg `-L` line could also be modified to reflect the location of of +libcurl library resulting for example: + + -L"c:\Borland\BCC55\lib;c:\curl\lib;c:\openssl\out32" + +In order to build sample program `simple.c` from the docs\examples +subdirectory run following command from mentioned subdirectory: + + bcc32 simple.c libcurl.lib cw32mt.lib + +In order to build sample program simplessl.c an SSL enabled libcurl is +required, as well as the OpenSSL libeay32.lib and ssleay32.lib libraries. + +## Disabling Specific Protocols in Windows builds + +The configure utility, unfortunately, is not available for the Windows +environment, therefore, you cannot use the various disable-protocol options of +the configure utility on this platform. + +However, you can use the following defines to disable specific +protocols: + + - `HTTP_ONLY` disables all protocols except HTTP + - `CURL_DISABLE_FTP` disables FTP + - `CURL_DISABLE_LDAP` disables LDAP + - `CURL_DISABLE_TELNET` disables TELNET + - `CURL_DISABLE_DICT` disables DICT + - `CURL_DISABLE_FILE` disables FILE + - `CURL_DISABLE_TFTP` disables TFTP + - `CURL_DISABLE_HTTP` disables HTTP + - `CURL_DISABLE_IMAP` disables IMAP + - `CURL_DISABLE_POP3` disables POP3 + - `CURL_DISABLE_SMTP` disables SMTP + +If you want to set any of these defines you have the following options: + + - Modify lib/config-win32.h + - Modify lib/curl_setup.h + - Modify winbuild/Makefile.vc + - Modify the "Preprocessor Definitions" in the libcurl project + +Note: The pre-processor settings can be found using the Visual Studio IDE +under "Project -> Settings -> C/C++ -> General" in VC6 and "Project -> +Properties -> Configuration Properties -> C/C++ -> Preprocessor" in later +versions. + +## Using BSD-style lwIP instead of Winsock TCP/IP stack in Win32 builds + +In order to compile libcurl and curl using BSD-style lwIP TCP/IP stack it is +necessary to make definition of preprocessor symbol USE_LWIPSOCK visible to +libcurl and curl compilation processes. To set this definition you have the +following alternatives: + + - Modify lib/config-win32.h and src/config-win32.h + - Modify winbuild/Makefile.vc + - Modify the "Preprocessor Definitions" in the libcurl project + +Note: The pre-processor settings can be found using the Visual Studio IDE +under "Project -> Settings -> C/C++ -> General" in VC6 and "Project -> +Properties -> Configuration Properties -> C/C++ -> Preprocessor" in later +versions. + +Once that libcurl has been built with BSD-style lwIP TCP/IP stack support, in +order to use it with your program it is mandatory that your program includes +lwIP header file `` (or another lwIP header that includes this) +before including any libcurl header. Your program does not need the +`USE_LWIPSOCK` preprocessor definition which is for libcurl internals only. + +Compilation has been verified with [lwIP +1.4.0](http://download.savannah.gnu.org/releases/lwip/lwip-1.4.0.zip) and +[contrib-1.4.0](http://download.savannah.gnu.org/releases/lwip/contrib-1.4.0.zip). + +This BSD-style lwIP TCP/IP stack support must be considered experimental given +that it has been verified that lwIP 1.4.0 still needs some polish, and libcurl +might yet need some additional adjustment, caveat emptor. + +## Important static libcurl usage note + +When building an application that uses the static libcurl library on Windows, +you must add `-DCURL_STATICLIB` to your `CFLAGS`. Otherwise the linker will +look for dynamic import symbols. + +## Legacy Windows and SSL + +WinSSL (specifically SChannel from Windows SSPI), is the native SSL library in +Windows. However, WinSSL in Windows <= XP is unable to connect to servers that +no longer support the legacy handshakes and algorithms used by those +versions. If you will be using curl in one of those earlier versions of +Windows you should choose another SSL backend such as OpenSSL. + +# Apple iOS and Mac OS X + +On modern Apple operating systems, curl can be built to use Apple's SSL/TLS +implementation, Secure Transport, instead of OpenSSL. To build with Secure +Transport for SSL/TLS, use the configure option `--with-darwinssl`. (It is not +necessary to use the option `--without-ssl`.) This feature requires iOS 5.0 or +later, or OS X 10.5 ("Leopard") or later. + +When Secure Transport is in use, the curl options `--cacert` and `--capath` +and their libcurl equivalents, will be ignored, because Secure Transport uses +the certificates stored in the Keychain to evaluate whether or not to trust +the server. This, of course, includes the root certificates that ship with the +OS. The `--cert` and `--engine` options, and their libcurl equivalents, are +currently unimplemented in curl with Secure Transport. + +For OS X users: In OS X 10.8 ("Mountain Lion"), Apple made a major overhaul to +the Secure Transport API that, among other things, added support for the newer +TLS 1.1 and 1.2 protocols. To get curl to support TLS 1.1 and 1.2, you must +build curl on Mountain Lion or later, or by using the equivalent SDK. If you +set the `MACOSX_DEPLOYMENT_TARGET` environmental variable to an earlier +version of OS X prior to building curl, then curl will use the new Secure +Transport API on Mountain Lion and later, and fall back on the older API when +the same curl binary is executed on older cats. For example, running these +commands in curl's directory in the shell will build the code such that it +will run on cats as old as OS X 10.6 ("Snow Leopard") (using bash): + + export MACOSX_DEPLOYMENT_TARGET="10.6" + ./configure --with-darwinssl + make + +# Cross compile + +Download and unpack the curl package. + +'cd' to the new directory. (e.g. `cd curl-7.12.3`) + +Set environment variables to point to the cross-compile toolchain and call +configure with any options you need. Be sure and specify the `--host` and +`--build` parameters at configuration time. The following script is an +example of cross-compiling for the IBM 405GP PowerPC processor using the +toolchain from MonteVista for Hardhat Linux. + + #! /bin/sh + + export PATH=$PATH:/opt/hardhat/devkit/ppc/405/bin + export CPPFLAGS="-I/opt/hardhat/devkit/ppc/405/target/usr/include" + export AR=ppc_405-ar + export AS=ppc_405-as + export LD=ppc_405-ld + export RANLIB=ppc_405-ranlib + export CC=ppc_405-gcc + export NM=ppc_405-nm + + ./configure --target=powerpc-hardhat-linux + --host=powerpc-hardhat-linux + --build=i586-pc-linux-gnu + --prefix=/opt/hardhat/devkit/ppc/405/target/usr/local + --exec-prefix=/usr/local + +You may also need to provide a parameter like `--with-random=/dev/urandom` to +configure as it cannot detect the presence of a random number generating +device for a target system. The `--prefix` parameter specifies where curl +will be installed. If `configure` completes successfully, do `make` and `make +install` as usual. + +In some cases, you may be able to simplify the above commands to as little as: + + ./configure --host=ARCH-OS + +# REDUCING SIZE + +There are a number of configure options that can be used to reduce the size of +libcurl for embedded applications where binary size is an important factor. +First, be sure to set the CFLAGS variable when configuring with any relevant +compiler optimization flags to reduce the size of the binary. For gcc, this +would mean at minimum the -Os option, and potentially the `-march=X`, +`-mdynamic-no-pic` and `-flto` options as well, e.g. + + ./configure CFLAGS='-Os' LDFLAGS='-Wl,-Bsymbolic'... + +Note that newer compilers often produce smaller code than older versions +due to improved optimization. + +Be sure to specify as many `--disable-` and `--without-` flags on the +configure command-line as you can to disable all the libcurl features that you +know your application is not going to need. Besides specifying the +`--disable-PROTOCOL` flags for all the types of URLs your application will not +use, here are some other flags that can reduce the size of the library: + + - `--disable-ares` (disables support for the C-ARES DNS library) + - `--disable-cookies` (disables support for HTTP cookies) + - `--disable-crypto-auth` (disables HTTP cryptographic authentication) + - `--disable-ipv6` (disables support for IPv6) + - `--disable-manual` (disables support for the built-in documentation) + - `--disable-proxy` (disables support for HTTP and SOCKS proxies) + - `--disable-unix-sockets` (disables support for UNIX sockets) + - `--disable-verbose` (eliminates debugging strings and error code strings) + - `--disable-versioned-symbols` (disables support for versioned symbols) + - `--enable-hidden-symbols` (eliminates unneeded symbols in the shared library) + - `--without-libidn` (disables support for the libidn DNS library) + - `--without-librtmp` (disables support for RTMP) + - `--without-ssl` (disables support for SSL/TLS) + - `--without-zlib` (disables support for on-the-fly decompression) + +The GNU compiler and linker have a number of options that can reduce the +size of the libcurl dynamic libraries on some platforms even further. +Specify them by providing appropriate CFLAGS and LDFLAGS variables on the +configure command-line, e.g. + + CFLAGS="-Os -ffunction-sections -fdata-sections + -fno-unwind-tables -fno-asynchronous-unwind-tables -flto" + LDFLAGS="-Wl,-s -Wl,-Bsymbolic -Wl,--gc-sections" + +Be sure also to strip debugging symbols from your binaries after compiling +using 'strip' (or the appropriate variant if cross-compiling). If space is +really tight, you may be able to remove some unneeded sections of the shared +library using the -R option to objcopy (e.g. the .comment section). + +Using these techniques it is possible to create a basic HTTP-only shared +libcurl library for i386 Linux platforms that is only 113 KiB in size, and an +FTP-only library that is 113 KiB in size (as of libcurl version 7.50.3, using +gcc 5.4.0). + +You may find that statically linking libcurl to your application will result +in a lower total size than dynamically linking. + +Note that the curl test harness can detect the use of some, but not all, of +the `--disable` statements suggested above. Use will cause tests relying on +those features to fail. The test harness can be manually forced to skip the +relevant tests by specifying certain key words on the runtests.pl command +line. Following is a list of appropriate key words: + + - `--disable-cookies` !cookies + - `--disable-manual` !--manual + - `--disable-proxy` !HTTP\ proxy !proxytunnel !SOCKS4 !SOCKS5 + +# PORTS + +This is a probably incomplete list of known hardware and operating systems +that curl has been compiled for. If you know a system curl compiles and +runs on, that isn't listed, please let us know! + + - Alpha DEC OSF 4 + - Alpha Digital UNIX v3.2 + - Alpha FreeBSD 4.1, 4.5 + - Alpha Linux 2.2, 2.4 + - Alpha NetBSD 1.5.2 + - Alpha OpenBSD 3.0 + - Alpha OpenVMS V7.1-1H2 + - Alpha Tru64 v5.0 5.1 + - AVR32 Linux + - ARM Android 1.5, 2.1, 2.3, 3.2, 4.x + - ARM INTEGRITY + - ARM iOS + - Cell Linux + - Cell Cell OS + - HP-PA HP-UX 9.X 10.X 11.X + - HP-PA Linux + - HP3000 MPE/iX + - MicroBlaze uClinux + - MIPS IRIX 6.2, 6.5 + - MIPS Linux + - OS/400 + - Pocket PC/Win CE 3.0 + - Power AIX 3.2.5, 4.2, 4.3.1, 4.3.2, 5.1, 5.2 + - PowerPC Darwin 1.0 + - PowerPC INTEGRITY + - PowerPC Linux + - PowerPC Mac OS 9 + - PowerPC Mac OS X + - SH4 Linux 2.6.X + - SH4 OS21 + - SINIX-Z v5 + - Sparc Linux + - Sparc Solaris 2.4, 2.5, 2.5.1, 2.6, 7, 8, 9, 10 + - Sparc SunOS 4.1.X + - StrongARM (and other ARM) RISC OS 3.1, 4.02 + - StrongARM/ARM7/ARM9 Linux 2.4, 2.6 + - StrongARM NetBSD 1.4.1 + - Symbian OS (P.I.P.S.) 9.x + - TPF + - Ultrix 4.3a + - UNICOS 9.0 + - i386 BeOS + - i386 DOS + - i386 eCos 1.3.1 + - i386 Esix 4.1 + - i386 FreeBSD + - i386 HURD + - i386 Haiku OS + - i386 Linux 1.3, 2.0, 2.2, 2.3, 2.4, 2.6 + - i386 Mac OS X + - i386 MINIX 3.1 + - i386 NetBSD + - i386 Novell NetWare + - i386 OS/2 + - i386 OpenBSD + - i386 QNX 6 + - i386 SCO unix + - i386 Solaris 2.7 + - i386 Windows 95, 98, ME, NT, 2000, XP, 2003 + - i486 ncr-sysv4.3.03 (NCR MP-RAS) + - ia64 Linux 2.3.99 + - m68k AmigaOS 3 + - m68k Linux + - m68k uClinux + - m68k OpenBSD + - m88k dg-dgux5.4R3.00 + - s390 Linux + - x86_64 Linux + - XScale/PXA250 Linux 2.4 + - Nios II uClinux diff --git a/docs/INTERNALS.md b/docs/INTERNALS.md index 1691fcc..a733e1f 100644 --- a/docs/INTERNALS.md +++ b/docs/INTERNALS.md @@ -56,7 +56,7 @@ git All changes to the sources are committed to the git repository as soon as they're somewhat verified to work. Changes shall be committed as independently - as possible so that individual changes can be easier spotted and tracked + as possible so that individual changes can be easily spotted and tracked afterwards. Tagging shall be used extensively, and by the time we release new archives we @@ -88,7 +88,7 @@ Dependencies - MIT Kerberos 1.2.4 - GSKit V5R3M0 - NSS 3.14.x - - axTLS 1.2.7 + - axTLS 2.1.0 - PolarSSL 1.3.0 - Heimdal ? - nghttp2 1.0.0 @@ -98,7 +98,7 @@ Operating Systems On systems where configure runs, we aim at working on them all - if they have a suitable C compiler. On systems that don't run configure, we strive to keep - curl running fine on: + curl running correctly on: - Windows 98 - AS/400 V5R3M0 @@ -126,13 +126,13 @@ Build tools Windows vs Unix =============== - There are a few differences in how to program curl the unix way compared to - the Windows way. The four perhaps most notable details are: + There are a few differences in how to program curl the Unix way compared to + the Windows way. Perhaps the four most notable details are: 1. Different function names for socket operations. In curl, this is solved with defines and macros, so that the source looks - the same at all places except for the header file that defines them. The + the same in all places except for the header file that defines them. The macros in use are sclose(), sread() and swrite(). 2. Windows requires a couple of init calls for the socket stuff. @@ -142,7 +142,7 @@ Windows vs Unix behaviour. 3. The file descriptors for network communication and file operations are - not easily interchangeable as in unix. + not as easily interchangeable as in Unix. We avoid this by not trying any funny tricks on file descriptors. @@ -156,11 +156,11 @@ Windows vs Unix conditionals that deal with features *should* instead be in the format `#ifdef HAVE_THAT_WEIRD_FUNCTION`. Since Windows can't run configure scripts, we maintain a `curl_config-win32.h` file in lib directory that is supposed to - look exactly as a `curl_config.h` file would have looked like on a Windows + look exactly like a `curl_config.h` file would have looked like on a Windows machine! Generally speaking: always remember that this will be compiled on dozens of - operating systems. Don't walk on the edge. + operating systems. Don't walk on the edge! Library @@ -174,7 +174,7 @@ Library rather small and easy-to-follow. All the ones prefixed with `curl_easy` are put in the lib/easy.c file. - `curl_global_init_()` and `curl_global_cleanup()` should be called by the + `curl_global_init()` and `curl_global_cleanup()` should be called by the application to initialize and clean up global stuff in the library. As of today, it can handle the global SSL initing if SSL is enabled and it can init the socket layer on windows machines. libcurl itself has no "global" scope. @@ -184,14 +184,14 @@ Library [ `curl_easy_init()`][2] allocates an internal struct and makes some initializations. The returned handle does not reveal internals. This is the - 'Curl_easy' struct which works as an "anchor" struct for all `curl_easy` + `Curl_easy` struct which works as an "anchor" struct for all `curl_easy` functions. All connections performed will get connect-specific data allocated that should be used for things related to particular connections/requests. [`curl_easy_setopt()`][1] takes three arguments, where the option stuff must be passed in pairs: the parameter-ID and the parameter-value. The list of options is documented in the man page. This function mainly sets things in - the 'Curl_easy' struct. + the `Curl_easy` struct. `curl_easy_perform()` is just a wrapper function that makes use of the multi API. It basically calls `curl_multi_init()`, `curl_multi_add_handle()`, @@ -218,7 +218,7 @@ Curl_connect() This function makes sure there's an allocated and initiated 'connectdata' struct that is used for this particular connection only (although there may be several requests performed on the same connect). A bunch of things are - inited/inherited from the Curl_easy struct. + inited/inherited from the `Curl_easy` struct. Curl_do() @@ -250,8 +250,8 @@ Curl_readwrite() Called during the transfer of the actual protocol payload. - During transfer, the progress functions in lib/progress.c are called at a - frequent interval (or at the user's choice, a specified callback might get + During transfer, the progress functions in lib/progress.c are called at + frequent intervals (or at the user's choice, a specified callback might get called). The speedcheck functions in lib/speedcheck.c are also used to verify that the transfer is as fast as required. @@ -272,7 +272,7 @@ Curl_disconnect() When doing normal connections and transfers, no one ever tries to close any connections so this is not normally called when `curl_easy_perform()` is used. This function is only used when we are certain that no more transfers - is going to be made on the connection. It can be also closed by force, or + are going to be made on the connection. It can be also closed by force, or it can be called to make sure that libcurl doesn't keep too many connections alive at the same time. @@ -290,7 +290,7 @@ HTTP(S) base64-functions for user+password stuff (and more) is in (lib/base64.c) and all functions for parsing and sending cookies are found in (lib/cookie.c). - HTTPS uses in almost every means the same procedure as HTTP, with only two + HTTPS uses in almost every case the same procedure as HTTP, with only two exceptions: the connect procedure is different and the function used to read or write from the socket is different, although the latter fact is hidden in the source by the use of `Curl_read()` for reading and `Curl_write()` for @@ -301,8 +301,7 @@ HTTP(S) An interesting detail with the HTTP(S) request, is the `Curl_add_buffer()` series of functions we use. They append data to one single buffer, and when - the building is done the entire request is sent off in one single write. This - is done this way to overcome problems with flawed firewalls and lame servers. + the building is finished the entire request is sent off in one single write. This is done this way to overcome problems with flawed firewalls and lame servers. FTP @@ -385,23 +384,23 @@ Persistent Connections The persistent connection support in libcurl requires some considerations on how to do things inside of the library. - - The 'Curl_easy' struct returned in the [`curl_easy_init()`][2] call + - The `Curl_easy` struct returned in the [`curl_easy_init()`][2] call must never hold connection-oriented data. It is meant to hold the root data as well as all the options etc that the library-user may choose. - - The 'Curl_easy' struct holds the "connection cache" (an array of + - The `Curl_easy` struct holds the "connection cache" (an array of pointers to 'connectdata' structs). - This enables the 'curl handle' to be reused on subsequent transfers. - When libcurl is told to perform a transfer, it first checks for an already existing connection in the cache that we can use. Otherwise it creates a - new one and adds that the cache. If the cache is full already when a new - connection is added added, it will first close the oldest unused one. + new one and adds that to the cache. If the cache is full already when a new + connection is added, it will first close the oldest unused one. - When the transfer operation is complete, the connection is left open. Particular options may tell libcurl not to, and protocols may signal - closure on connections and then they won't be kept open of course. + closure on connections and then they won't be kept open, of course. - When `curl_easy_cleanup()` is called, we close all still opened connections, unless of course the multi interface "owns" the connections. @@ -414,7 +413,7 @@ multi interface/non-blocking ============================ The multi interface is a non-blocking interface to the library. To make that - interface work as good as possible, no low-level functions within libcurl + interface work as well as possible, no low-level functions within libcurl must be written to work in a blocking manner. (There are still a few spots violating this rule.) @@ -465,7 +464,7 @@ Return Codes and Informationals description. In aiding the user to understand what's happening and to debug curl usage, we - must supply a fair amount of informational messages by using the + must supply a fair number of informational messages by using the `Curl_infof()` function. Those messages are only displayed when the user explicitly asks for them. They are best used when revealing information that isn't otherwise obvious. @@ -485,11 +484,11 @@ Client main() resides in `src/tool_main.c`. `src/tool_hugehelp.c` is automatically generated by the mkhelp.pl perl script - to display the complete "manual" and the src/tool_urlglob.c file holds the + to display the complete "manual" and the `src/tool_urlglob.c` file holds the functions used for the URL-"globbing" support. Globbing in the sense that the {} and [] expansion stuff is there. - The client mostly messes around to setup its 'config' struct properly, then + The client mostly sets up its 'config' struct properly, then it calls the `curl_easy_*()` functions of the library and when it gets back control after the `curl_easy_perform()` it cleans up the library, checks status and exits. @@ -542,13 +541,13 @@ Test Suite The main test script is runtests.pl that will invoke test servers like httpserver.pl and ftpserver.pl before all the test cases are performed. The - test suite currently only runs on unix-like platforms. + test suite currently only runs on Unix-like platforms. You'll find a description of the test suite in the tests/README file, and the test case data files in the tests/FILEFORMAT file. The test suite automatically detects if curl was built with the memory - debugging enabled, and if it was it will detect memory leaks, too. + debugging enabled, and if it was, it will detect memory leaks, too. Asynchronous name resolves @@ -589,7 +588,7 @@ Asynchronous name resolves `curl_off_t` ========== - curl_off_t is a data type provided by the external libcurl include + `curl_off_t` is a data type provided by the external libcurl include headers. It is the type meant to be used for the [`curl_easy_setopt()`][1] options that end with LARGE. The type is 64bit large on most modern platforms. @@ -607,10 +606,10 @@ curlx `curlx_strtoofft()` ------------------- - A macro that converts a string containing a number to a curl_off_t number. - This might use the curlx_strtoll() function which is provided as source + A macro that converts a string containing a number to a `curl_off_t` number. + This might use the `curlx_strtoll()` function which is provided as source code in strtoofft.c. Note that the function is only provided if no - strtoll() (or equivalent) function exist on your platform. If curl_off_t + strtoll() (or equivalent) function exist on your platform. If `curl_off_t` is only a 32 bit number on your platform, this macro uses strtol(). `curlx_tvnow()` @@ -624,17 +623,17 @@ curlx `curlx_tvdiff_secs()` --------------------- - returns the same as curlx_tvdiff but with full usec resolution (as a + returns the same as `curlx_tvdiff` but with full usec resolution (as a double) Future ------ - Several functions will be removed from the public curl_ name space in a - future libcurl release. They will then only become available as curlx_ + Several functions will be removed from the public `curl_` name space in a + future libcurl release. They will then only become available as `curlx_` functions instead. To make the transition easier, we already today provide - these functions with the curlx_ prefix to allow sources to get built properly - with the new function names. The functions this concerns are: + these functions with the `curlx_` prefix to allow sources to be built + properly with the new function names. The concerned functions are: - `curlx_getenv` - `curlx_strequal` @@ -659,7 +658,7 @@ Content Encoding [HTTP/1.1][4] specifies that a client may request that a server encode its response. This is usually used to compress a response using one of a set of commonly available compression techniques. These schemes are 'deflate' (the - zlib algorithm), 'gzip' and 'compress'. A client requests that the sever + zlib algorithm), 'gzip' and 'compress'. A client requests that the server perform an encoding by including an Accept-Encoding header in the request document. The value of the header should be one of the recognized tokens 'deflate', ... (there's a way to register new schemes/tokens, see sec 3.5 of @@ -719,7 +718,7 @@ hostip.c explained this host has getaddrinfo() and family, and thus we use that. The host may not be able to resolve IPv6, but we don't really have to take that into - account. Hosts that aren't IPv6-enabled have CURLRES_IPV4 defined. + account. Hosts that aren't IPv6-enabled have `CURLRES_IPV4` defined. ## `CURLRES_ARES` @@ -750,7 +749,7 @@ hostip.c explained - hostip6.c - IPv6 specific functions The hostip.h is the single united header file for all this. It defines the - `CURLRES_*` defines based on the config*.h and curl_setup.h defines. + `CURLRES_*` defines based on the config*.h and `curl_setup.h` defines. Track Down Memory Leaks @@ -767,7 +766,7 @@ Track Down Memory Leaks Rebuild libcurl with -DCURLDEBUG (usually, rerunning configure with --enable-debug fixes this). 'make clean' first, then 'make' so that all - files actually are rebuilt properly. It will also make sense to build + files are actually rebuilt properly. It will also make sense to build libcurl with the debug option (usually -g to the compiler) so that debugging it will be easier if you actually do find a leak in the library. @@ -828,16 +827,16 @@ Track Down Memory Leaks We also added a timer callback that makes libcurl call the application when the timeout value changes, and you set that with [`curl_multi_setopt()`][9] and the [`CURLMOPT_TIMERFUNCTION`][10] option. To get this to work, - Internally, there's an added a struct to each easy handle in which we store + Internally, there's an added struct to each easy handle in which we store an "expire time" (if any). The structs are then "splay sorted" so that we can add and remove times from the linked list and yet somewhat swiftly - figure out both how long time there is until the next nearest timer expires + figure out both how long there is until the next nearest timer expires and which timer (handle) we should take care of now. Of course, the upside of all this is that we get a [`curl_multi_timeout()`][8] that should also work with old-style applications that use [`curl_multi_perform()`][11]. We created an internal "socket to easy handles" hash table that given - a socket (file descriptor) return the easy handle that waits for action on + a socket (file descriptor) returns the easy handle that waits for action on that socket. This hash is made using the already existing hash code (previously only used for the DNS cache). @@ -858,7 +857,7 @@ for older and later versions as things don't change drastically that often. ## Curl_easy - The Curl_easy struct is the one returned to the outside in the external API + The `Curl_easy` struct is the one returned to the outside in the external API as a "CURL *". This is usually known as an easy handle in API documentations and examples. @@ -866,27 +865,27 @@ for older and later versions as things don't change drastically that often. 'connectdata' struct. When a transfer is about to be made, libcurl will either create a new connection or re-use an existing one. The particular connectdata that is used by this handle is pointed out by - Curl_easy->easy_conn. + `Curl_easy->easy_conn`. Data and information that regard this particular single transfer is put in the SingleRequest sub-struct. - When the Curl_easy struct is added to a multi handle, as it must be in order - to do any transfer, the ->multi member will point to the `Curl_multi` struct - it belongs to. The ->prev and ->next members will then be used by the multi - code to keep a linked list of Curl_easy structs that are added to that same - multi handle. libcurl always uses multi so ->multi *will* point to a - `Curl_multi` when a transfer is in progress. + When the `Curl_easy` struct is added to a multi handle, as it must be in + order to do any transfer, the ->multi member will point to the `Curl_multi` + struct it belongs to. The ->prev and ->next members will then be used by the + multi code to keep a linked list of `Curl_easy` structs that are added to + that same multi handle. libcurl always uses multi so ->multi *will* point to + a `Curl_multi` when a transfer is in progress. - ->mstate is the multi state of this particular Curl_easy. When + ->mstate is the multi state of this particular `Curl_easy`. When `multi_runsingle()` is called, it will act on this handle according to which state it is in. The mstate is also what tells which sockets to return for a - specific Curl_easy when [`curl_multi_fdset()`][12] is called etc. + specific `Curl_easy` when [`curl_multi_fdset()`][12] is called etc. The libcurl source code generally use the name 'data' for the variable that - points to the Curl_easy. + points to the `Curl_easy`. - When doing multiplexed HTTP/2 transfers, each Curl_easy is associated with + When doing multiplexed HTTP/2 transfers, each `Curl_easy` is associated with an individual stream, sharing the same connectdata struct. Multiplexing makes it even more important to keep things associated with the right thing! @@ -901,21 +900,21 @@ for older and later versions as things don't change drastically that often. the connection can't be kept alive, the connection will be closed after use and then this struct can be removed from the cache and freed. - Thus, the same Curl_easy can be used multiple times and each time select + Thus, the same `Curl_easy` can be used multiple times and each time select another connectdata struct to use for the connection. Keep this in mind, as it is then important to consider if options or choices are based on the - connection or the Curl_easy. + connection or the `Curl_easy`. Functions in libcurl will assume that connectdata->data points to the - Curl_easy that uses this connection (for the moment). + `Curl_easy` that uses this connection (for the moment). As a special complexity, some protocols supported by libcurl require a special disconnect procedure that is more than just shutting down the socket. It can involve sending one or more commands to the server before doing so. Since connections are kept in the connection cache after use, the - original Curl_easy may no longer be around when the time comes to shut down + original `Curl_easy` may no longer be around when the time comes to shut down a particular connection. For this purpose, libcurl holds a special dummy - `closure_handle` Curl_easy in the `Curl_multi` struct to use when needed. + `closure_handle` `Curl_easy` in the `Curl_multi` struct to use when needed. FTP uses two TCP connections for a typical transfer but it keeps both in this single struct and thus can be considered a single connection for most @@ -929,36 +928,37 @@ for older and later versions as things don't change drastically that often. Internally, the easy interface is implemented as a wrapper around multi interface functions. This makes everything multi interface. - `Curl_multi` is the multi handle struct exposed as "CURLM *" in external APIs. + `Curl_multi` is the multi handle struct exposed as "CURLM *" in external + APIs. - This struct holds a list of Curl_easy structs that have been added to this + This struct holds a list of `Curl_easy` structs that have been added to this handle with [`curl_multi_add_handle()`][13]. The start of the list is - ->easyp and ->num_easy is a counter of added Curl_easys. + `->easyp` and `->num_easy` is a counter of added `Curl_easy`s. - ->msglist is a linked list of messages to send back when + `->msglist` is a linked list of messages to send back when [`curl_multi_info_read()`][14] is called. Basically a node is added to that - list when an individual Curl_easy's transfer has completed. + list when an individual `Curl_easy`'s transfer has completed. - ->hostcache points to the name cache. It is a hash table for looking up name - to IP. The nodes have a limited life time in there and this cache is meant - to reduce the time for when the same name is wanted within a short period of - time. + `->hostcache` points to the name cache. It is a hash table for looking up + name to IP. The nodes have a limited life time in there and this cache is + meant to reduce the time for when the same name is wanted within a short + period of time. - ->timetree points to a tree of Curl_easys, sorted by the remaining time - until it should be checked - normally some sort of timeout. Each Curl_easy + `->timetree` points to a tree of `Curl_easy`s, sorted by the remaining time + until it should be checked - normally some sort of timeout. Each `Curl_easy` has one node in the tree. - ->sockhash is a hash table to allow fast lookups of socket descriptor to - which Curl_easy that uses that descriptor. This is necessary for the + `->sockhash` is a hash table to allow fast lookups of socket descriptor for + which `Curl_easy` uses that descriptor. This is necessary for the `multi_socket` API. - ->conn_cache points to the connection cache. It keeps track of all + `->conn_cache` points to the connection cache. It keeps track of all connections that are kept after use. The cache has a maximum size. - ->closure_handle is described in the 'connectdata' section. + `->closure_handle` is described in the 'connectdata' section. The libcurl source code generally use the name 'multi' for the variable that - points to the Curl_multi struct. + points to the `Curl_multi` struct. ## Curl_handler @@ -971,41 +971,40 @@ for older and later versions as things don't change drastically that often. from a single array which is scanned through when a URL is given to libcurl to work with. - ->scheme is the URL scheme name, usually spelled out in uppercase. That's - "HTTP" or "FTP" etc. SSL versions of the protcol need its own `Curl_handler` - setup so HTTPS separate from HTTP. + `->scheme` is the URL scheme name, usually spelled out in uppercase. That's + "HTTP" or "FTP" etc. SSL versions of the protocol need their own `Curl_handler` setup so HTTPS separate from HTTP. - ->setup_connection is called to allow the protocol code to allocate protocol - specific data that then gets associated with that Curl_easy for the rest of - this transfer. It gets freed again at the end of the transfer. It will be - called before the 'connectdata' for the transfer has been selected/created. - Most protocols will allocate its private 'struct [PROTOCOL]' here and assign - Curl_easy->req.protop to point to it. + `->setup_connection` is called to allow the protocol code to allocate + protocol specific data that then gets associated with that `Curl_easy` for + the rest of this transfer. It gets freed again at the end of the transfer. + It will be called before the 'connectdata' for the transfer has been + selected/created. Most protocols will allocate its private + 'struct [PROTOCOL]' here and assign `Curl_easy->req.protop` to point to it. - ->connect_it allows a protocol to do some specific actions after the TCP + `->connect_it` allows a protocol to do some specific actions after the TCP connect is done, that can still be considered part of the connection phase. - Some protocols will alter the connectdata->recv[] and connectdata->send[] - function pointers in this function. + Some protocols will alter the `connectdata->recv[]` and + `connectdata->send[]` function pointers in this function. - ->connecting is similarly a function that keeps getting called as long as the - protocol considers itself still in the connecting phase. + `->connecting` is similarly a function that keeps getting called as long as + the protocol considers itself still in the connecting phase. - ->do_it is the function called to issue the transfer request. What we call + `->do_it` is the function called to issue the transfer request. What we call the DO action internally. If the DO is not enough and things need to be kept - getting done for the entire DO sequence to complete, ->doing is then usually - also provided. Each protocol that needs to do multiple commands or similar - for do/doing need to implement their own state machines (see SCP, SFTP, - FTP). Some protocols (only FTP and only due to historical reasons) has a - separate piece of the DO state called `DO_MORE`. + getting done for the entire DO sequence to complete, `->doing` is then + usually also provided. Each protocol that needs to do multiple commands or + similar for do/doing need to implement their own state machines (see SCP, + SFTP, FTP). Some protocols (only FTP and only due to historical reasons) has + a separate piece of the DO state called `DO_MORE`. - ->doing keeps getting called while issuing the transfer request command(s) + `->doing` keeps getting called while issuing the transfer request command(s) - ->done gets called when the transfer is complete and DONE. That's after the + `->done` gets called when the transfer is complete and DONE. That's after the main data has been transferred. - ->do_more gets called during the `DO_MORE` state. The FTP protocol uses this - state when setting up the second connection. + `->do_more` gets called during the `DO_MORE` state. The FTP protocol uses + this state when setting up the second connection. ->`proto_getsock` ->`doing_getsock` @@ -1034,11 +1033,11 @@ for older and later versions as things don't change drastically that often. - `PROTOPT_CLOSEACTION` - this protocol has actions to do before closing the connection. This flag is no longer used by code, yet still set for a bunch - protocol handlers. + of protocol handlers. - `PROTOPT_DIRLOCK` - "direction lock". The SSH protocols set this bit to limit which "direction" of socket actions that the main engine will - concern itself about. + concern itself with. - `PROTOPT_NONETWORK` - a protocol that doesn't use network (read file:) @@ -1050,21 +1049,21 @@ for older and later versions as things don't change drastically that often. ## conncache - Is a hash table with connections for later re-use. Each Curl_easy has a + Is a hash table with connections for later re-use. Each `Curl_easy` has a pointer to its connection cache. Each multi handle sets up a connection - cache that all added Curl_easys share by default. + cache that all added `Curl_easy`s share by default. ## Curl_share The libcurl share API allocates a `Curl_share` struct, exposed to the external API as "CURLSH *". - The idea is that the struct can have a set of own versions of caches and + The idea is that the struct can have a set of its own versions of caches and pools and then by providing this struct in the `CURLOPT_SHARE` option, those - specific Curl_easys will use the caches/pools that this share handle + specific `Curl_easy`s will use the caches/pools that this share handle holds. - Then individual Curl_easy structs can be made to share specific things + Then individual `Curl_easy` structs can be made to share specific things that they otherwise wouldn't, such as cookies. The `Curl_share` struct can currently hold cookies, DNS cache and the SSL @@ -1073,7 +1072,7 @@ for older and later versions as things don't change drastically that often. ## CookieInfo This is the main cookie struct. It holds all known cookies and related - information. Each Curl_easy has its own private CookieInfo even when + information. Each `Curl_easy` has its own private CookieInfo even when they are added to a multi handle. They can be made to share cookies by using the share API. diff --git a/docs/KNOWN_BUGS b/docs/KNOWN_BUGS index 5230ecb..12eeedd 100644 --- a/docs/KNOWN_BUGS +++ b/docs/KNOWN_BUGS @@ -18,18 +18,15 @@ problems may have been fixed or changed somewhat since this was written! 1.4 multipart formposts file name encoding 1.5 Expect-100 meets 417 1.6 Unnecessary close when 401 received waiting for 100 - 1.7 CONNECT response larger than 16KB 1.8 DNS timing is wrong for HTTP redirects 1.9 HTTP/2 frames while in the connection pool kill reuse 1.10 Strips trailing dot from host name - 1.11 transfer-encoding: chunked in HTTP/2 - 1.12 CURLOPT_SEEKFUNCTION not called with CURLFORM_STREAM + 1.11 CURLOPT_SEEKFUNCTION not called with CURLFORM_STREAM 2. TLS - 2.1 Hangs with PolarSSL - 2.2 CURLINFO_SSL_VERIFYRESULT has limited support - 2.3 DER in keychain - 2.4 GnuTLS backend skips really long certificate fields + 2.1 CURLINFO_SSL_VERIFYRESULT has limited support + 2.2 DER in keychain + 2.3 GnuTLS backend skips really long certificate fields 3. Email protocols 3.1 IMAP SEARCH ALL truncated response @@ -50,6 +47,9 @@ problems may have been fixed or changed somewhat since this was written! 5.5 can't handle Unicode arguments in Windows 5.6 cmake support gaps 5.7 Visual Studio project gaps + 5.8 configure finding libs in wrong directory + 5.9 Utilize Requires.private directives in libcurl.pc + 5.10 Fix the gcc typechecks 6. Authentication 6.1 NTLM authentication and unicode @@ -83,11 +83,12 @@ problems may have been fixed or changed somewhat since this was written! 11. Internals 11.1 Curl leaks .onion hostnames in DNS 11.2 error buffer not set if connection to multiple addresses fails + 11.3 c-ares deviates from stock resolver on http://1346569778 12. LDAP and OpenLDAP 12.1 OpenLDAP hangs after returning results - 13 TCP/IP + 13. TCP/IP 13.1 --interface for ipv6 binds to unusable IP address @@ -140,13 +141,6 @@ problems may have been fixed or changed somewhat since this was written! waiting for the the 100-continue response. https://curl.haxx.se/mail/lib-2008-08/0462.html -1.7 CONNECT response larger than 16KB - - If a CONNECT response-headers are larger than BUFSIZE (16KB) when the - connection is meant to be kept alive (like for NTLM proxy auth), the function - will return prematurely and will confuse the rest of the HTTP protocol - code. This should be very rare. - 1.8 DNS timing is wrong for HTTP redirects When extracting timing information after HTTP redirects, only the last @@ -198,15 +192,7 @@ problems may have been fixed or changed somewhat since this was written! See https://github.com/curl/curl/issues/716 for the discussion. -1.11 transfer-encoding: chunked in HTTP/2 - - For HTTP/1, when -H transfer-encoding:chunked option is given, curl encodes - the request using chunked encoding. But when HTTP/2 is being used, the - command wrongly sends a request with both content-length and - transfer-encoding: chunked headers being set (and the request body is not - chunked-encoded). See https://github.com/curl/curl/issues/662 - -1.12 CURLOPT_SEEKFUNCTION not called with CURLFORM_STREAM +1.11 CURLOPT_SEEKFUNCTION not called with CURLFORM_STREAM I'm using libcurl to POST form data using a FILE* with the CURLFORM_STREAM option of curl_formadd(). I've noticed that if the connection drops at just @@ -220,26 +206,17 @@ problems may have been fixed or changed somewhat since this was written! 2. TLS -2.1 Hangs with PolarSSL - - "curl_easy_perform hangs with imap and PolarSSL" - https://github.com/curl/curl/issues/334 - - Most likely, a fix similar to commit c111178bd4 (for mbedTLS) is - necessary. Or if we just wait a little longer we'll rip out all support for - PolarSSL instead... - -2.2 CURLINFO_SSL_VERIFYRESULT has limited support +2.1 CURLINFO_SSL_VERIFYRESULT has limited support CURLINFO_SSL_VERIFYRESULT is only implemented for the OpenSSL and NSS backends, so relying on this information in a generic app is flaky. -2.3 DER in keychain +2.2 DER in keychain Curl doesn't recognize certificates in DER format in keychain, but it works with PEM. https://curl.haxx.se/bug/view.cgi?id=1065 -2.4 GnuTLS backend skips really long certificate fields +2.3 GnuTLS backend skips really long certificate fields libcurl calls gnutls_x509_crt_get_dn() with a fixed buffer size and if the field is too long in the cert, it'll just return an error and the field will @@ -368,6 +345,35 @@ problems may have been fixed or changed somewhat since this was written! - support for other development IDEs - add PATH environment variables for third-party DLLs +5.8 configure finding libs in wrong directory + + When the configure script checks for third-party libraries, it adds those + directories to the LDFLAGS variable and then tries linking to see if it + works. When successful, the found directory is kept in the LDFLAGS variable + when the script continues to execute and do more tests and possibly check for + more libraries. + + This can make subsequent checks for libraries wrongly detect another + installation in a directory that was previously added to LDFLAGS by another + library check! + + A possibly better way to do these checks would be to keep the pristine LDFLAGS + even after successful checks and instead add those verified paths to a + separate variable that only after all library checks have been performed gets + appended to LDFLAGS. + +5.9 Utilize Requires.private directives in libcurl.pc + + https://github.com/curl/curl/issues/864 + +5.10 Fix the gcc typechecks + + Issue #846 identifies a problem with the gcc-typechecks and how the types are + documented and checked for CURLINFO_CERTINFO but our attempts to fix the + issue were futile and needs more attention. + + https://github.com/curl/curl/issues/846 + 6. Authentication 6.1 NTLM authentication and unicode @@ -552,6 +558,18 @@ problems may have been fixed or changed somewhat since this was written! CURLE_COULDNT_CONNECT. But the error buffer set by CURLOPT_ERRORBUFFER remains empty. Issue: https://github.com/curl/curl/issues/544 +11.3 c-ares deviates from stock resolver on http://1346569778 + + When using the socket resolvers, that URL becomes: + + * Rebuilt URL to: http://1346569778/ + * Trying 80.67.6.50... + + but with c-ares it instead says "Could not resolve: 1346569778 (Domain name + not found)" + + See https://github.com/curl/curl/issues/893 + 12. LDAP and OpenLDAP @@ -575,7 +593,7 @@ problems may have been fixed or changed somewhat since this was written! https://curl.haxx.se/mail/lib-2016-01/0101.html -13 TCP/IP +13. TCP/IP 13.1 --interface for ipv6 binds to unusable IP address diff --git a/docs/LICENSE-MIXING.md b/docs/LICENSE-MIXING.md index 0bff73e..5376bdb 100644 --- a/docs/LICENSE-MIXING.md +++ b/docs/LICENSE-MIXING.md @@ -45,7 +45,7 @@ not have the announcement clause that collides with GPL. ## WolfSSL - (May be used for SSL/TLS support) Uses the GPL license or a propietary + (May be used for SSL/TLS support) Uses the GPL license or a proprietary license. If this is a problem for you, consider using another TLS library. ## NSS @@ -63,8 +63,11 @@ not have the announcement clause that collides with GPL. ## mbedTLS - (May be used for SSL/TLS support) Uses the GPL license or a propietary - license. If this is a problem for you, consider using another TLS library. + (May be used for SSL/TLS support) Uses the [Apache 2.0 + license](https://opensource.org/licenses/Apache-2.0) or the GPL license. + You may choose to license the code under Apache 2.0 terms or GPL terms. + These licenses grant you different permissions and impose different + obligations. You should select the license that best meets your needs. ## BoringSSL diff --git a/docs/MAIL-ETIQUETTE b/docs/MAIL-ETIQUETTE index 7505800..897fc9f 100644 --- a/docs/MAIL-ETIQUETTE +++ b/docs/MAIL-ETIQUETTE @@ -38,17 +38,17 @@ MAIL ETIQUETTE Each mailing list is targeted to a specific set of users and subjects, please use the one or the ones that suit you the most. - Each mailing list have hundreds up to thousands of readers, meaning that - each mail sent will be received and read by a very large amount of people. + Each mailing list has hundreds up to thousands of readers, meaning that + each mail sent will be received and read by a very large number of people. People from various cultures, regions, religions and continents. 1.2 Netiquette - Netiquette is a common name for how to behave on the internet. Of course, in + Netiquette is a common term for how to behave on the internet. Of course, in each particular group and subculture there will be differences in what is acceptable and what is considered good manners. - This document outlines what we in the cURL project considers to be good + This document outlines what we in the curl project consider to be good etiquette, and primarily this focus on how to behave on and how to use our mailing lists. @@ -56,7 +56,7 @@ MAIL ETIQUETTE Many people send one question to one person. One person gets many mails, and there is only one person who can give you a reply. The question may be - something that other people are also wanting to ask. These other people have + something that other people would also like to ask. These other people have no way to read the reply, but to ask the one person the question. The one person consequently gets overloaded with mail. @@ -79,8 +79,8 @@ MAIL ETIQUETTE 1.5 Moderation of new posters Several of the curl mailing lists automatically make all posts from new - subscribers require moderation. This means that after you've subscribed and - send your first mail to a list, that mail will not be let through to the + subscribers be moderated. This means that after you've subscribed and + sent your first mail to a list, that mail will not be let through to the list until a mailing list administrator has verified that it is OK and permits it to get posted. @@ -104,26 +104,26 @@ MAIL ETIQUETTE messages" No matter what, we NEVER EVER respond to trolls or spammers on the list. If - you believe the list admin should do something particular, contact him/her - off-list. The subject will be taken care of as good as possible to prevent - repeated offenses, but responding on the list to such messages never lead to + you believe the list admin should do something in particular, contact him/her + off-list. The subject will be taken care of as much as possible to prevent + repeated offenses, but responding on the list to such messages never leads to anything good and only puts the light even more on the offender: which was - the entire purpose of it getting to the list in the first place. + the entire purpose of it getting sent to the list in the first place. Don't feed the trolls! 1.7 How to unsubscribe - You unsubscribe the same way you subscribed in the first place. You go to - the page for the particular mailing list you're subscribed to and you enter + You can unsubscribe the same way you subscribed in the first place. You go + to the page for the particular mailing list you're subscribed to and you enter your email address and password and press the unsubscribe button. - Also, this information is included in the headers of every mail that is sent - out to all curl related mailing lists and there's footer in each mail that - links to the "admin" page on which you can unsubscribe and change other - options. + Also, the instructions to unsubscribe are included in the headers of every + mail that is sent out to all curl related mailing lists and there's a footer + in each mail that links to the "admin" page on which you can unsubscribe and + change other options. - You NEVER EVER email the mailing list requesting someone else to get you off + You NEVER EVER email the mailing list requesting someone else to take you off the list. 1.8 I posted, now what? @@ -132,35 +132,35 @@ MAIL ETIQUETTE send the email, your post will just be silently discarded. If you posted for the first time to the mailing list, you first need to wait - for an administrator to allow your email to go through. This normally + for an administrator to allow your email to go through (moderated). This normally happens very quickly but in case we're asleep, you may have to wait a few hours. Once your email goes through it is sent out to several hundred or even - thousand recipients. Your email may cover an area that not that many people + thousands of recipients. Your email may cover an area that not that many people know about or are interested in. Or possibly the person who knows about it - is on vacation or under a very heavy work load right now. You have to wait - for a response and you must not expect to get a response at all, but + is on vacation or under a very heavy work load right now. You may have to wait + for a response and you should not expect to get a response at all, but hopefully you get an answer within a couple of days. You do yourself and all of us a service when you include as many details as possible already in your first email. Mention your operating system and environment. Tell us which curl version you're using and tell us what you did, what happened and what you expected would happen. Preferably, show us - what you did in details enough to allow others to help point out the problem - or repeat the same steps in their places. + what you did with details enough to allow others to help point out the problem + or repeat the same steps in their locations. Failing to include details will only delay responses and make people respond - and ask for the details and you have to send a follow-up email that includes - them. + and ask for more details and you will have to send a follow-up email that + includes them. - Expect the responses to primarily help YOU debug the issue, or ask you + Expect the responses to primarily help YOU debug the issue, or ask YOU questions that can lead you or others towards a solution or explanation to whatever you experience. If you are a repeat offender to the guidelines outlined in this document, chances are that people will ignore you at will and your chances to get - responses will greatly diminish. + responses in the future will greatly diminish. 2. Sending mail @@ -183,7 +183,7 @@ MAIL ETIQUETTE We're actively discouraging replying back to the single person by setting the Reply-To: field in outgoing mails back to the mailing list address, - making it harder for people to mail the author only by mistake. + making it harder for people to mail the author directly, if only by mistake. 2.3 Use a Sensible Subject @@ -198,10 +198,9 @@ MAIL ETIQUETTE mail conversation below. It forces users to read the mail in a backwards order to properly understand it. - This is why top posting is so bad: + This is why top posting is so bad (in top posting order): - A: Because it messes up the order in which people normally read - text. + A: Because it messes up the order in which people normally read text. Q: Why is top-posting such a bad thing? A: Top-posting. Q: What is the most annoying thing in e-mail? @@ -255,7 +254,7 @@ MAIL ETIQUETTE If you are the one who asks, please consider responding once more in case one of the hints was what solved your problems. The guys who write answers feel good to know that they provided a good answer and that you fixed the - problem. Far too often, the person who asked the question is never heard of + problem. Far too often, the person who asked the question is never heard from again, and we never get to know if he/she is gone because the problem was solved or perhaps because the problem was unsolvable! diff --git a/docs/Makefile.am b/docs/Makefile.am index 149e0af..ee8f607 100644 --- a/docs/Makefile.am +++ b/docs/Makefile.am @@ -5,7 +5,7 @@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # -# Copyright (C) 1998 - 2016, Daniel Stenberg, , et al. +# Copyright (C) 1998 - 2017, 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 @@ -29,21 +29,24 @@ PDFPAGES = curl.pdf curl-config.pdf mk-ca-bundle.pdf HTMLPAGES = $(GENHTMLPAGES) index.html -SUBDIRS = examples libcurl +SUBDIRS = examples libcurl cmdline-opts -CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES) +CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES) curl.1 -EXTRA_DIST = MANUAL BUGS CONTRIBUTE.md FAQ FEATURES INTERNALS.md SSLCERTS.md \ - README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS VERSIONS \ - KNOWN_BUGS BINDINGS $(man_MANS) $(HTMLPAGES) HISTORY.md INSTALL \ - $(PDFPAGES) LICENSE-MIXING.md README.netware INSTALL.devcpp \ - MAIL-ETIQUETTE HTTP-COOKIES.md SECURITY.md RELEASE-PROCEDURE SSL-PROBLEMS.md \ - HTTP2.md ROADMAP.md CODE_OF_CONDUCT.md CODE_STYLE.md CHECKSRC.md +EXTRA_DIST = MANUAL BUGS CONTRIBUTE.md FAQ FEATURES INTERNALS.md SSLCERTS.md \ + README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS VERSIONS KNOWN_BUGS \ + BINDINGS.md $(man_MANS) HISTORY.md INSTALL INSTALL.md LICENSE-MIXING.md \ + README.netware MAIL-ETIQUETTE HTTP-COOKIES.md SECURITY.md RELEASE-PROCEDURE \ + SSL-PROBLEMS.md HTTP2.md ROADMAP.md CODE_OF_CONDUCT.md CODE_STYLE.md \ + CHECKSRC.md MAN2HTML= roffit $< >$@ SUFFIXES = .1 .html .pdf +curl.1: + cd cmdline-opts && make + html: $(HTMLPAGES) cd libcurl && make html diff --git a/docs/Makefile.in b/docs/Makefile.in index 0e96309..90ee8a2 100644 --- a/docs/Makefile.in +++ b/docs/Makefile.in @@ -21,7 +21,7 @@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # -# Copyright (C) 1998 - 2016, Daniel Stenberg, , et al. +# Copyright (C) 1998 - 2017, 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 @@ -446,14 +446,14 @@ noinst_man_MANS = mk-ca-bundle.1 GENHTMLPAGES = curl.html curl-config.html mk-ca-bundle.html PDFPAGES = curl.pdf curl-config.pdf mk-ca-bundle.pdf HTMLPAGES = $(GENHTMLPAGES) index.html -SUBDIRS = examples libcurl -CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES) -EXTRA_DIST = MANUAL BUGS CONTRIBUTE.md FAQ FEATURES INTERNALS.md SSLCERTS.md \ - README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS VERSIONS \ - KNOWN_BUGS BINDINGS $(man_MANS) $(HTMLPAGES) HISTORY.md INSTALL \ - $(PDFPAGES) LICENSE-MIXING.md README.netware INSTALL.devcpp \ - MAIL-ETIQUETTE HTTP-COOKIES.md SECURITY.md RELEASE-PROCEDURE SSL-PROBLEMS.md \ - HTTP2.md ROADMAP.md CODE_OF_CONDUCT.md CODE_STYLE.md CHECKSRC.md +SUBDIRS = examples libcurl cmdline-opts +CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES) curl.1 +EXTRA_DIST = MANUAL BUGS CONTRIBUTE.md FAQ FEATURES INTERNALS.md SSLCERTS.md \ + README.win32 RESOURCES TODO TheArtOfHttpScripting THANKS VERSIONS KNOWN_BUGS \ + BINDINGS.md $(man_MANS) HISTORY.md INSTALL INSTALL.md LICENSE-MIXING.md \ + README.netware MAIL-ETIQUETTE HTTP-COOKIES.md SECURITY.md RELEASE-PROCEDURE \ + SSL-PROBLEMS.md HTTP2.md ROADMAP.md CODE_OF_CONDUCT.md CODE_STYLE.md \ + CHECKSRC.md MAN2HTML = roffit $< >$@ SUFFIXES = .1 .html .pdf @@ -816,6 +816,9 @@ uninstall-man: uninstall-man1 .PRECIOUS: Makefile +curl.1: + cd cmdline-opts && make + html: $(HTMLPAGES) cd libcurl && make html diff --git a/docs/README.netware b/docs/README.netware index 12065f3..9028963 100644 --- a/docs/README.netware +++ b/docs/README.netware @@ -11,17 +11,16 @@ README.netware Curl has been successfully compiled with gcc / nlmconv on different flavours of Linux as well as with the official Metrowerks CodeWarrior compiler. While not being the main development target, a continuously growing share of - curl users are NetWare-based, specially also consuming the lib from PHP. + curl users are NetWare-based, especially also consuming the lib from PHP. - The unix-style man pages are tricky to read on windows, so therefore are all - those pages converted to HTML as well as pdf, and included in the release - archives. + The unix-style man pages are tricky to read on windows, so therefore all + those pages are also provided as web pages on the curl web site. The main curl.1 man page is also "built-in" in the command line tool. Use a command line similar to this in order to extract a separate text file: curl -M >manual.txt - Read the INSTALL file for instructions how to compile curl self. + Read the INSTALL file for instructions on how to compile curl self. diff --git a/docs/README.win32 b/docs/README.win32 index cfd45dd..00ca197 100644 --- a/docs/README.win32 +++ b/docs/README.win32 @@ -12,15 +12,14 @@ README.win32 systems. While not being the main develop target, a fair share of curl users are win32-based. - The unix-style man pages are tricky to read on windows, so therefore are all - those pages converted to HTML as well as pdf, and included in the release - archives. + The unix-style man pages are tricky to read on windows, so therefore all + those pages are also provided as web pages on the curl web site. The main curl.1 man page is also "built-in" in the command line tool. Use a command line similar to this in order to extract a separate text file: curl -M >manual.txt - Read the INSTALL file for instructions how to compile curl self. + Read the INSTALL file for instructions on how to compile curl self. diff --git a/docs/RELEASE-PROCEDURE b/docs/RELEASE-PROCEDURE index 1b57452..a7c7433 100644 --- a/docs/RELEASE-PROCEDURE +++ b/docs/RELEASE-PROCEDURE @@ -83,10 +83,9 @@ Coming dates Based on the description above, here are some planned release dates (at the time of this writing): -- September 7, 2016 (version 7.50.2) -- November 2, 2016 -- December 28, 2016 -- February 22, 2017 +- February 22, 2017 (version 7.53.0) - April 19, 2017 - June 14, 2017 - August 9, 2017 +- October 4, 2017 +- December 29, 2017 diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 367130d..1007ccb 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -5,15 +5,6 @@ Roadmap of things Daniel Stenberg and Steve Holme want to work on next. It is intended to serve as a guideline for others for information, feedback and possible participation. -HTTP/2 ------- - -Improve performance. Measurements and tests have shown that in several cases -doing transfers over HTTP/2 can be notably slower than the same transfer done -over HTTP/1. Some of that difference can be attributed the inefficient window -size handling currently in use but there are probably more to be learned and -worked on to optimize this. - QUIC ---- @@ -25,15 +16,6 @@ handle the binary/framing layer in a similar fashion to how HTTP/2 is implemented. This, to allow other projects to benefit from the work and to thus broaden the interest and chance of others to participate. -TLS 1.3 -------- - -The new version of the TLS protocol is in the pipeline and will soon start to -get used out in the wild. It offers some new interesting features and will -need the TLS libraries to adapt and quite likely provide additional or -modified APIs. libcurl needs to adapt accordingly. - - HTTP cookies ------------ @@ -52,19 +34,17 @@ SRV records How to find services for specific domains/hosts. -HTTPS to proxy --------------- - -To avoid network traffic to/from the proxy getting snooped on. There's a git -branch in the public git repository for this that we need to make sure works -for all TLS backends and then merge! - curl_formadd() -------------- make sure there's an easy handle passed in to `curl_formadd()`, `curl_formget()` and `curl_formfree()` by adding replacement functions and -deprecating the old ones to allow custom mallocs and more +deprecating the old ones to allow custom mallocs and more. + +Or perhaps even better: revamp the formpost API completely while we're at it +and making something that is easier to use and understand: + + https://github.com/curl/curl/wiki/formpost-API-redesigned Third-party SASL ---------------- @@ -120,18 +100,14 @@ Improve 2. curl -h output (considered overwhelming to users) -3. we have > 170 command line options, is there a way to redo things to +3. we have > 200 command line options, is there a way to redo things to simplify or improve the situation as we are likely to keep adding features/options in the future too -4. docs (considered "bad" by users but how do we make it better?) - - - split up curl.1 - -5. authentication framework (consider merging HTTP and SASL authentication to +4. authentication framework (consider merging HTTP and SASL authentication to give one API for protocols to call) -6. Perform some of the clean up from the TODO document, removing old +5. Perform some of the clean up from the TODO document, removing old definitions and such like that are currently earmarked to be removed years ago diff --git a/docs/SECURITY.md b/docs/SECURITY.md index 3c07e0b..c88cc9c 100644 --- a/docs/SECURITY.md +++ b/docs/SECURITY.md @@ -1,9 +1,3 @@ - _ _ ____ _ - ___| | | | _ \| | - / __| | | | |_) | | - | (__| |_| | _ <| |___ - \___|\___/|_| \_\_____| - curl security for developers ============================ @@ -81,9 +75,11 @@ announcement. to the 'distros' mailing list to allow them to use the fix prior to the public announcement. -- At the day of the next release, the private branch is merged into the master - branch and pushed. Once pushed, the information is accessible to the public - and the actual release should follow suit immediately afterwards. +- No more than 48 hours before the release, the private branch is merged into + the master branch and pushed. Once pushed, the information is accessible to + the public and the actual release should follow suit immediately afterwards. + The time between the push and the release is used for final tests and + reviews. - The project team creates a release that includes the fix. @@ -94,9 +90,19 @@ announcement. - The security web page on the web site should get the new vulnerability mentioned. +Pre-notification +---------------- + +If you think you are or should be eligible for a pre-notification about +upcoming security announcements for curl, we urge OS distros and similar +vendors to primarily join the distros@openwall list as that is one of the +purposes of that list - and not just for curl of course. +If you are not a distro or otherwise not suitable for distros@openwall and yet +want pre-notifications from us, contact the curl security team with a detailed +and clear explanation why this is the case. -CURL-SECURITY (at haxx dot se) +curl-security (at haxx dot se) ------------------------------ Who is on this list? There are a couple of criteria you must meet, and then we @@ -106,5 +112,5 @@ curl project and you have shown an understanding for the project and its way of working. You must've been around for a good while and you should have no plans in vanishing in the near future. -We do not make the list of partipants public mostly because it tends to vary +We do not make the list of participants public mostly because it tends to vary somewhat over time and a list somewhere will only risk getting outdated. diff --git a/docs/THANKS b/docs/THANKS index 803818f..0336e29 100644 --- a/docs/THANKS +++ b/docs/THANKS @@ -11,6 +11,7 @@ Aaron Oneal Aaron Orenstein Abram Pousada Adam D. Moss +Adam Langley Adam Light Adam Piggott Adam Sampson @@ -20,6 +21,7 @@ Adriano Meirelles Ajit Dhumale Aki Koskinen Akos Pasztory +Akshay Vernekar Alain Danteny Alan Pinstein Albert Chin-A-Young @@ -32,10 +34,12 @@ Ales Novak Alessandro Ghedini Alessandro Vesely Alex Bligh +Alex Chan Alex Fishman Alex Gruz Alex McLellan Alex Neblett +Alex Rousskov Alex Suykov Alex Vinnik Alex aka WindEagle @@ -48,6 +52,7 @@ Alexander Krasnostavsky Alexander Lazic Alexander Pepper Alexander Peslyak +Alexander Sinditskiy Alexander Traud Alexander Zhuravlev Alexey Borzov @@ -76,11 +81,14 @@ Andreas Malzahn Andreas Ntaflos Andreas Olsson Andreas Rieke +Andreas Roth Andreas Schuldei +Andreas Streichardt Andreas Wurf Andrei Benea Andrei Cipu Andrei Kurushin +Andrei Sedoi Andrej E Baranov Andrew Benham Andrew Biggs @@ -103,6 +111,7 @@ Anthon Pang Anthony Avina Anthony Bryan Anthony G. Basile +Antoine Aubert Antoine Calando Anton Bychkov Anton Kalmykov @@ -184,12 +193,14 @@ Brian Ulm Brock Noland Bru Rom Bruce Mitchener +Bruce Stephens Bruno Thomsen Bruno de Carvalho Bryan Henderson Bryan Kemp Byrial Jensen Cameron Kaiser +Cameron MacMinn Camille Moncelier Caolan McNamara Carlo Wood @@ -215,6 +226,7 @@ Chris Smowton Chris Young Christian Fillion Christian Grothoff +Christian Heimes Christian Hägele Christian Krause Christian Kurz @@ -229,6 +241,7 @@ Christopher Conroy Christopher Palow Christopher R. Palmer Christopher Stone +Chungtsun Li Ciprian Badescu Claes Jakobsson Clarence Gardner @@ -267,7 +280,9 @@ Dan C Dan Cristian Dan Donahue Dan Fandrich +Dan Jacobson Dan Locks +Dan McNulty Dan Nelson Dan Petitt Dan Torop @@ -282,6 +297,7 @@ Daniel Kahn Gillmor Daniel Lee Hwang Daniel Melani Daniel Mentz +Daniel Romero Daniel Schauenberg Daniel Seither Daniel Shahaf @@ -291,6 +307,7 @@ Daniel Theron Daniel at touchtunes Darryl House Darshan Mody +Darío Hereñú Dave Dribin Dave Halbakken Dave Hamilton @@ -321,6 +338,7 @@ David Odin David Phillips David Rosenstrauch David Ryskalczyk +David Schweikert David Shaw David Strauss David Tarendash @@ -359,6 +377,7 @@ Dmitry S. Baikov Dolbneff A.V Domenico Andreoli Dominick Meglio +Dominik Hölzl Dominique Leuenberger Doug Kaufman Doug Porter @@ -394,6 +413,7 @@ Emil Romanus Emiliano Ida Enrico Scholz Enrik Berkhan +Eramoto Masaya Eric Cooper Eric Hu Eric Landes @@ -426,6 +446,7 @@ Fabian Hiernaux Fabian Keil Fabian Ruff Fabrizio Ammollo +Fahim Chandurwala Fedor Karpelevitch Feist Josselin Felix Yan @@ -496,6 +517,7 @@ Greg Morse Greg Onufer Greg Pratt Greg Zavertnik +Gregory Szorc Grigory Entin Guenole Bescon Guenter Knauf @@ -516,6 +538,7 @@ Hans Steegers Hans-Jurgen May Hardeep Singh Haris Okanovic +Harold Stuart Harshal Pradhan Hauke Duden He Qin @@ -596,6 +619,7 @@ Javier G. Sogo Jay Austin Jayesh A Shah Jaz Fresh +Jean Gressmann Jean Jacques Drouin Jean-Claude Chauve Jean-Francois Bertrand @@ -617,6 +641,7 @@ Jens Rantil Jeremy Friesner Jeremy Huddleston Jeremy Lin +Jeremy Pearson Jeroen Koekkoek Jeroen Ooms Jerome Muffat-Meridol @@ -636,7 +661,7 @@ Jim Meyering Jiri Dvorak Jiri Hruska Jiri Jaburek -Jiri Malak +Jiří Malák Jocelyn Jaubert Joe Halpin Joe Malicki @@ -749,6 +774,7 @@ Kevin Fisk Kevin Lussier Kevin Reed Kevin Roth +Kim Minjoong Kim Rinnewitz Kim Vandry Kimmo Kinnunen @@ -765,6 +791,7 @@ Kurt Fankhauser Kyle J. McKay Kyle L. Huff Kyle Sallee +Kyselgov E.N Lachlan O'Dea Larry Campbell Larry Fahnoe @@ -816,6 +843,7 @@ Luke Call Luke Dashjr Luo Jinghua Luong Dinh Dung +Luật Nguyễn Lyndon Hill Maciej Karpiuk Maciej Puzio @@ -844,6 +872,7 @@ Marcin Konicki Marco Deckel Marco G. Salvagno Marco Maggi +Marcus Hoffmann Marcus Sundberg Marcus Webster Mario Schroeder @@ -864,16 +893,18 @@ Markus Elfring Markus Koetter Markus Moeller Markus Oberhumer +Markus Westerlind Marquis de Muesli Martijn Koster Martin C. Martin Martin Drasar +Martin Frodl Martin Hager Martin Hedenfalk Martin Jansen Martin Lemke Martin Skinner -Martin Storsjo +Martin Storsjö Martin Vejnár Marty Kuhrt Maruko @@ -895,7 +926,9 @@ Matthew Hall Matthias Bolte Maurice Barnum Mauro Iorio +Mauro Rappa Max Katsev +Max Khon Maxim Ivanov Maxim Perenesenko Maxim Prohorov @@ -947,6 +980,8 @@ Mike Power Mike Protts Mike Revi Miklos Nemeth +Miloš Ljumović +Mingliang Zhu Miroslav Franc Miroslav Spousta Mitz Wark @@ -964,11 +999,13 @@ Nathanael Nerode Nathaniel Waisbrot Naveen Chandran Naveen Noel +Neal Poole Neil Bowers Neil Dunbar Neil Spring Nic Roets Nicholas Maniscalco +Nick Draffen Nick Gimbrone Nick Humfrey Nick Zitzmann @@ -992,6 +1029,7 @@ Norbert Kett Norbert Novotny Octavio Schroeder Ofer +Okhin Vasilij Ola Mork Olaf Flebbe Olaf Stüben @@ -1030,6 +1068,7 @@ Pau Garcia i Quiles Paul Donohue Paul Harrington Paul Howarth +Paul Joyce Paul Marks Paul Marquis Paul Moore @@ -1086,11 +1125,13 @@ Pierre Ynard Pooyan McSporran Pramod Sharma Prash Dush +Praveen Pvs Priyanka Shah Puneet Pawaia Quagmire Quanah Gibson-Mount Quinn Slack +R. Dennis Steed Radu Simionescu Rafa Muyo Rafael Antonio @@ -1100,12 +1141,14 @@ Rafaël Carré Rainer Canavan Rainer Jung Rainer Koenig +Rainer Müller Rajesh Naganathan Rajkumar Mandal Ralf S. Engelschall Ralph Beckmann Ralph Mitchell Ramana Mokkapati +Randy Armstrong Randy McMurchy Ravi Pratap Ray Dassen @@ -1115,6 +1158,7 @@ Razvan Cojocaru Reinhard Max Reinout van Schouwen Remi Gacogne +Remo E Renato Botelho Renaud Chaillat Renaud Duhaut @@ -1141,8 +1185,11 @@ Richard Moore Richard Prescott Richard Silverman Richard van den Berg +Richy Kim Rick Jones Rick Richardson +Ricki Hirner +Rider Linden Rob Crittenden Rob Davies Rob Jones @@ -1186,6 +1233,7 @@ Ryan Braud Ryan Chan Ryan Nelson Ryan Schmidt +Ryan Scott Rémy Léone S. Moonesamy Salvador Dávila @@ -1213,16 +1261,21 @@ Scott Cantor Scott Davis Scott McCreary Sean Boudreau +Sean Burford +Sebastian Mundry Sebastian Pohlschmidt Sebastian Rasmussen Senthil Raja Velu +Sergei Kuzmin Sergei Nikulov Sergey Tatarincev +Sergii Pylypenko Sergio Ballestrero Serj Kalichev Seshubabu Pasam Seth Mos Sh Diao +Shachaf Ben-Kiki Shao Shuchao Sharad Gupta Shard @@ -1257,6 +1310,7 @@ Stefan Tomanek Stefan Ulrich Steinar H. Gunderson Stephan Bergmann +Stephen Brokenshire Stephen Collyer Stephen Kick Stephen More @@ -1327,6 +1381,7 @@ Tobias Stoeckmann Toby Peterson Todd A Ouska Todd Kulesza +Todd Short Todd Vierling Tom Benoist Tom Donovan @@ -1351,8 +1406,10 @@ Tommie Gannert Tommy Tam Ton Voon Toni Moreno +Tony Kelman Toon Verwaest Tor Arntsen +Torben Dannhauer Torsten Foertsch Toshio Kuratomi Toshiyuki Maezawa @@ -1368,6 +1425,8 @@ Ulf Samuelsson Ulrich Doehner Ulrich Telle Ulrich Zadow +Valentin David +Vasy Okhin Venkat Akella Victor Snezhko Vijay Panghal @@ -1428,20 +1487,27 @@ Zdenek Pavlas Zekun Ni Zmey Petroff Zvi Har'El +afrind on github asavah on github baumanj on github bsammon on github dkjjr89 on github eXeC64 on github +jonrumsey on github jveazey on github kreshano on github +lukaszgn on github marc-groundctl on github neex on github nk +nopjmp on github silveja1 on github swalkaus at yahoo.com +tarek112 on github tommink[at]post.pl vanillajonathan on github wmsch on github +zelinchen on github +İsmail Dönmez Štefan Kremeň Никита Дорохин diff --git a/docs/TODO b/docs/TODO index 40b8cc8..15c1b27 100644 --- a/docs/TODO +++ b/docs/TODO @@ -6,7 +6,7 @@ Things that could be nice to do in the future - Things to do in project cURL. Please tell us what you think, contribute and + Things to do in project curl. Please tell us what you think, contribute and send us patches that improve things! Be aware that these are things that we could do, or have once been considered @@ -23,9 +23,8 @@ 1.5 get rid of PATH_MAX 1.6 Modified buffer size approach 1.7 Detect when called from within callbacks - 1.8 Allow SSL (HTTPS) to proxy + 1.8 CURLOPT_RESOLVE for any port number 1.9 Cache negative name resolves - 1.10 Support IDNA2008 1.11 minimize dependencies with dynamicly loaded modules 1.12 have form functions use CURL handle argument 1.14 Typesafe curl_easy_setopt() @@ -37,6 +36,8 @@ 1.20 SRV and URI DNS records 1.21 API for URL parsing/splitting 1.23 Offer API to flush the connection pool + 1.24 TCP Fast Open for windows + 1.25 Remove the generated include file 2. libcurl - multi interface 2.1 More non-blocking @@ -62,11 +63,15 @@ 5.1 Better persistency for HTTP 1.0 5.2 support FF3 sqlite cookie files 5.3 Rearrange request header order - 5.4 Use huge HTTP/2 windows + 5.4 HTTP Digest using SHA-256 5.5 auth= in URLs 5.6 Refuse "downgrade" redirects 5.7 Brotli compression 5.8 QUIC + 5.9 Improve formpost API + 5.10 Leave secure cookies alone + 5.11 Chunked transfer multipart formpost + 5.12 OPTIONS * 6. TELNET 6.1 ditch stdin @@ -102,12 +107,15 @@ 13.1 Disable specific versions 13.2 Provide mutex locking API 13.3 Evaluate SSL patches - 13.4 Cache OpenSSL contexts + 13.4 Cache/share OpenSSL contexts 13.5 Export session ids 13.6 Provide callback for cert verification 13.7 improve configure --with-ssl 13.8 Support DANE - 13.9 Support TLS v1.3 + 13.10 Support SSLKEYLOGFILE + 13.11 Support intermediate & root pinning for PINNEDPUBLICKEY + 13.12 Support HSTS + 13.13 Support HPKP 14. GnuTLS 14.1 SSL engine stuff @@ -126,6 +134,7 @@ 17. SSH protocols 17.1 Multiplexing 17.2 SFTP performance + 17.3 Support better than MD5 hostkey hash 18. Command line tool 18.1 sync @@ -142,9 +151,13 @@ 18.12 keep running, read instructions from pipe/socket 18.13 support metalink in http headers 18.14 --fail without --location should treat 3xx as a failure + 18.15 --retry should resume + 18.16 send only part of --data + 18.17 consider file name from the redirected URL with -O ? 19. Build 19.1 roffit + 19.2 Enable PIE and RELRO by default 20. Test suite 20.1 SSL tunnel @@ -233,27 +246,19 @@ subsequently can add code within libcurl that returns error if called within callbacks for when that's not supported. -1.8 Allow SSL (HTTPS) to proxy +1.8 CURLOPT_RESOLVE for any port number - To prevent local users from snooping on your traffic to the proxy. Supported - by Firefox and Chrome already: - https://www.chromium.org/developers/design-documents/secure-web-proxy + This option allows applications to set a replacement IP address for a given + host + port pair. Consider making support for providing a replacement address + for the host name on all port numbers. - See this stale work in progress branch: - https://github.com/curl/curl/tree/HTTPS-proxy based on this PR: - https://github.com/curl/curl/pull/305 + See https://github.com/curl/curl/issues/1264 1.9 Cache negative name resolves A name resolve that has failed is likely to fail when made again within a short period of time. Currently we only cache positive responses. -1.10 Support IDNA2008 - - International Domain Names are supported in libcurl since years back, powered - by libidn. libidn implements IDNA2003 which has been superseded by IDNA2008. - libidn2 is an existing library offering support for IDNA2008. - 1.11 minimize dependencies with dynamicly loaded modules We can create a system with loadable modules/plug-ins, where these modules @@ -360,6 +365,38 @@ An API could allow a forced flush or just a forced loop that would properly close all connections that have been closed by the server already. +1.24 TCP Fast Open for windows + + libcurl supports the CURLOPT_TCP_FASTOPEN option since 7.49.0 for Linux and + Mac OS. Windows supports TCP Fast Open starting with Windows 10, version 1607 + and we should add support for it. + +1.25 Remove the generated include file + + When curl and libcurl are built, one of the public include files are + generated and is populated with a set of defines that are derevid from sizes + and constants for the particular target architecture that build is made. For + platforms that can select between 32 bit and 64 bit at build time, this + approach makes the libcurl build only create a set of public headers suitable + for one of the architectures and not both. If you build libcurl for such a + platform and you want to allow applications to get built using either 32/64 + version, you must generate the libcurl headers once for each setup and you + must then add a replacement curl header that would itself select the correct + 32 or 64 bit specific header as necessary. + + Your curl/curl.h alternative could then look like (replace with suitable CPP + variable to check): + + #ifdef ARCH_32bit + #include + #else /* ARCH_64bit */ + #include + #endif + + A fix would either (A) fix the 32/64 setup automatically or even better (B) + work away the architecture specific defines from the headers so that they can + be used for all architectures independently of what libcurl was built for. + 2. libcurl - multi interface @@ -368,8 +405,7 @@ Make sure we don't ever loop because of non-blocking sockets returning EWOULDBLOCK or similar. Blocking cases include: - - Name resolves on non-windows unless c-ares is used - - NSS SSL connections + - Name resolves on non-windows unless c-ares or the threaded resolver is used - HTTP proxy CONNECT operations - SOCKS proxy handshakes - file:// transfers @@ -491,12 +527,14 @@ This is not detailed in any FTP specification. headers use a default value so only headers that need to be moved have to be specified. -5.4 Use huge HTTP/2 windows +5.4 HTTP Digest using SHA-256 + + RFC 7616 introduces an update to the HTTP Digest authentication + specification, which amongst other thing defines how new digest algorithms + can be used instead of MD5 which is considered old and not recommanded. - We're currently using nghttp2's default window size which is terribly small - (64K). This becomes a bottle neck over high bandwidth networks. We should - instead make the window size to be very big (512MB?) as we really don't do - much flow control anyway. + See https://tools.ietf.org/html/rfc7616 and + https://github.com/curl/curl/issues/1018 5.5 auth= in URLs @@ -519,11 +557,9 @@ This is not detailed in any FTP specification. 5.7 Brotli compression - Compression algorithms that perform better than gzip are being considered for - use and inclusion in existing browsers. For example 'brotli'. If servers - follow along it is a good reason for us to also allow users to take advantage - of this. The algorithm: https://github.com/google/brotli The Firefox bug: - https://bugzilla.mozilla.org/show_bug.cgi?id=366559 + Brotli compression performs better than gzip and is being implemented by + browsers and servers widely. The algorithm: https://github.com/google/brotli + The Firefox bug: https://bugzilla.mozilla.org/show_bug.cgi?id=366559 5.8 QUIC @@ -535,6 +571,46 @@ This is not detailed in any FTP specification. implemented. This, to allow other projects to benefit from the work and to thus broaden the interest and chance of others to participate. +5.9 Improve formpost API + + Revamp the formpost API and making something that is easier to use and + understand: + + https://github.com/curl/curl/wiki/formpost-API-redesigned + +5.10 Leave secure cookies alone + + Non-secure origins (HTTP sites) should not be allowed to set or modify + cookies with the 'secure' property: + + https://tools.ietf.org/html/draft-ietf-httpbis-cookie-alone-01 + +5.11 Chunked transfer multipart formpost + + For a case where the file is being made during the upload is progressing + (like passed on stdin to the curl tool), we cannot know the size before-hand + and we rather not read the entire thing into memory before it can start the + upload. + + https://github.com/curl/curl/issues/1139 + +5.12 OPTIONS * + + HTTP defines an OPTIONS method that can be sent with an asterisk option like + "OPTIONS *" to ask about options from the server and not a specific URL + resource. https://tools.ietf.org/html/rfc7230#section-5.3.4 + + libcurl as it currently works will always sent HTTP methods with a path that + starts with a slash so there's no way for an application to send a proper + "OPTIONS *" using libcurl. This should be fixed. + + I can't think of any other non-slash paths we should support so it will + probably make sense to add a new boolean option for issuign an "OPTIONS *" + request. CURLOPT_OPTIONSASTERISK perhaps (and a corresponding command line + option)? + + See https://github.com/curl/curl/issues/1280 + 6. TELNET @@ -655,7 +731,7 @@ that doesn't exist on the server, just like --ftp-create-dirs. Evaluate/apply Gertjan van Wingerde's SSL patches: https://curl.haxx.se/mail/lib-2004-03/0087.html -13.4 Cache OpenSSL contexts +13.4 Cache/share OpenSSL contexts "Look at SSL cafile - quick traces look to me like these are done on every request as well, when they should only be necessary once per SSL context (or @@ -665,6 +741,12 @@ that doesn't exist on the server, just like --ftp-create-dirs. style connections are re-used. It will make us use slightly more memory but it will libcurl do less creations and deletions of SSL contexts. + Technically, the "caching" is probably best implemented by getting added to + the share interface so that easy handles who want to and can reuse the + context specify that by sharing with the right properties set. + + https://github.com/curl/curl/issues/1110 + 13.5 Export session ids Add an interface to libcurl that enables "session IDs" to get @@ -699,14 +781,51 @@ that doesn't exist on the server, just like --ftp-create-dirs. Björn Stenberg wrote a separate initial take on DANE that was never completed. -13.9 Support TLS v1.3 +13.10 Support SSLKEYLOGFILE - TLS version 1.3 is about to ship and is getting implemented by TLS libraries - as we speak. We should start to support the symbol and make sure all backends - handle it accordingly, then gradually add support as the TLS libraries add - the corresponding support. There may be a need to add some additional options - to allow libcurl to take advantage of the new features in 1.3. + When used, Firefox and Chrome dumps their master TLS keys to the file name + this environment variable specifies. This allows tools like for example + Wireshark to capture and decipher TLS traffic to/from those clients. libcurl + could be made to support this more widely (presumably this already works when + built with NSS). Peter Wu made a OpenSSL preload to make possible that can be + used as inspiration and guidance + https://git.lekensteyn.nl/peter/wireshark-notes/tree/src/sslkeylog.c +13.11 Support intermediate & root pinning for PINNEDPUBLICKEY + + CURLOPT_PINNEDPUBLICKEY does not consider the hashes of intermediate & root + certificates when comparing the pinned keys. Therefore it is not compatible + with "HTTP Public Key Pinning" as there also intermediate and root certificates + can be pinned. This is very useful as it prevents webadmins from "locking + themself out of their servers". + + Adding this feature would make curls pinning 100% compatible to HPKP and allow + more flexible pinning. + +13.12 Support HSTS + + "HTTP Strict Transport Security" is TOFU (trust on first use), time-based + features indicated by a HTTP header send by the webserver. It is widely used + in browsers and it's purpose is to prevent insecure HTTP connections after + a previous HTTPS connection. It protects against SSLStripping attacks. + + Doc: https://developer.mozilla.org/en-US/docs/Web/Security/HTTP_strict_transport_security + RFC 6797: https://tools.ietf.org/html/rfc6797 + +13.13 Support HPKP + + "HTTP Public Key Pinning" is TOFU (trust on first use), time-based + features indicated by a HTTP header send by the webserver. It's purpose is + to prevent Man-in-the-middle attacks by trusted CAs by allowing webadmins + to specify which CAs/certificates/public keys to trust when connection to + their websites. + + It can be build based on PINNEDPUBLICKEY. + + Wikipedia: https://en.wikipedia.org/wiki/HTTP_Public_Key_Pinning + OWASP: https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning + Doc: https://developer.mozilla.org/de/docs/Web/Security/Public_Key_Pinning + RFC: https://tools.ietf.org/html/draft-ietf-websec-key-pinning-21 14. GnuTLS @@ -791,6 +910,16 @@ that doesn't exist on the server, just like --ftp-create-dirs. libcurl's SFTP transfer performance is sub par and can be improved, mostly by the approach mentioned in "1.6 Modified buffer size approach". +17.3 Support better than MD5 hostkey hash + + libcurl offers the CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 option for verifying the + server's key. MD5 is generally being deprecated so we should implement + support for stronger hashing algorithms. libssh2 itself is what provides this + underlying functionality and it supports at least SHA-1 as an alternative. + SHA-1 is also being deprecated these days so we should consider workign with + libssh2 to instead offer support for SHA-256 or similar. + + 18. Command line tool 18.1 sync @@ -809,7 +938,7 @@ that doesn't exist on the server, just like --ftp-create-dirs. 18.3 prevent file overwriting - Add an option that prevents cURL from overwriting existing local files. When + Add an option that prevents curl from overwriting existing local files. When used, and there already is an existing file with the target file name (either -O or -o), a number should be appended (and increased if already existing). So that index.html becomes first index.html.1 and then @@ -914,6 +1043,42 @@ that doesn't exist on the server, just like --ftp-create-dirs. way to implement this is probably to add that new logic in the command line tool only and not in the underlying CURLOPT_FAILONERROR logic. +18.15 --retry should resume + + When --retry is used and curl actually retries transfer, it should use the + already transfered data and do a resumed transfer for the rest (when + possible) so that it doesn't have to transfer the same data again that was + already tranfered before the retry. + + See https://github.com/curl/curl/issues/1084 + +18.16 send only part of --data + + When the user only wants to send a small piece of the data provided with + --data or --data-binary, like when that data is a huge file, consider a way + to specify that curl should only send a piece of that. One suggested syntax + would be: "--data-binary @largefile.zip!1073741823-2147483647". + + See https://github.com/curl/curl/issues/1200 + +18.17 consider file name from the redirected URL with -O ? + + When a user gives a URL and uses -O, and curl follows a redirect to a new + URL, the file name is not extracted and used from the newly redirected-to URL + even if the new URL may have a much more sensible file name. + + This is clearly documented and helps for security since there's no surprise + to users which file name that might get overwritten. But maybe a new option + could allow for this or maybe -J should imply such a treatment as well as -J + already allows for the server to decide what file name to use so it already + provides the "may overwrite any file" risk. + + This is extra tricky if the original URL has no file name part at all since + then the current code path will error out with an error message, and we can't + *know* already at that point if curl will be redirected to a URL that has a + file name... + + See https://github.com/curl/curl/issues/1241 19. Build @@ -922,6 +1087,19 @@ that doesn't exist on the server, just like --ftp-create-dirs. Consider extending 'roffit' to produce decent ASCII output, and use that instead of (g)nroff when building src/tool_hugehelp.c +19.2 Enable PIE and RELRO by default + + Especially when having programs that execute curl via the command line, PIE + renders the exploitation of memory corruption vulnerabilities a lot more + difficult. This can be attributed to the additional information leaks being + required to conduct a successful attack. RELRO, on the other hand, masks + different binary sections like the GOT as read-only and thus kills a handful + of techniques that come in handy when attackers are able to arbitrarily + overwrite memory. A few tests showed that enabling these features had close + to no impact, neither on the performance nor on the general functionality of + curl. + + 20. Test suite 20.1 SSL tunnel diff --git a/docs/TheArtOfHttpScripting b/docs/TheArtOfHttpScripting index 047db80..b2bd9db 100644 --- a/docs/TheArtOfHttpScripting +++ b/docs/TheArtOfHttpScripting @@ -145,7 +145,7 @@ The Art Of Scripting HTTP Requests Using Curl address and that's what curl will communicate with. Alternatively you specify the IP address directly in the URL instead of a name. - For development and other trying out situation, you can point out a different + For development and other trying out situations, you can point to a different IP address for a host name than what would otherwise be used, by using curl's --resolve option: @@ -153,7 +153,7 @@ The Art Of Scripting HTTP Requests Using Curl 2.3 Port number - Each protocol curl supports operate on a default port number, be it over TCP + Each protocol curl supports operates on a default port number, be it over TCP or in some cases UDP. Normally you don't have to take that into consideration, but at times you run test servers on other ports or similar. Then you can specify the port number in the URL with a colon and a @@ -164,7 +164,7 @@ The Art Of Scripting HTTP Requests Using Curl The port number you specify in the URL is the number that the server uses to offer its services. Sometimes you may use a local proxy, and then you may - need to specify that proxy's port number separate on what curl needs to + need to specify that proxy's port number separately for what curl needs to connect to locally. Like when using a HTTP proxy on port 4321: curl --proxy http://proxy.example.org:4321 http://remote.example.org/ @@ -172,7 +172,7 @@ The Art Of Scripting HTTP Requests Using Curl 2.4 User name and password Some services are setup to require HTTP authentication and then you need to - provide name and password which then is transferred to the remote site in + provide name and password which is then transferred to the remote site in various ways depending on the exact authentication protocol used. You can opt to either insert the user and password in the URL or you can @@ -198,7 +198,7 @@ The Art Of Scripting HTTP Requests Using Curl 3.1 GET - The simplest and most common request/operation made using HTTP is to get a + The simplest and most common request/operation made using HTTP is to GET a URL. The URL could itself refer to a web page, an image or a file. The client issues a GET request to the server and receives the document it asked for. If you issue the command line @@ -269,14 +269,14 @@ The Art Of Scripting HTTP Requests Using Curl 4.1 Forms explained Forms are the general way a web site can present a HTML page with fields for - the user to enter data in, and then press some kind of 'OK' or 'submit' + the user to enter data in, and then press some kind of 'OK' or 'Submit' button to get that data sent to the server. The server then typically uses the posted data to decide how to act. Like using the entered words to search - in a database, or to add the info in a bug track system, display the entered + in a database, or to add the info in a bug tracking system, display the entered address on a map or using the info as a login-prompt verifying that the user is allowed to see what it is about to see. - Of course there has to be some kind of program in the server end to receive + Of course there has to be some kind of program on the server end to receive the data you send. You cannot just invent something out of the air. 4.2 GET @@ -369,7 +369,7 @@ The Art Of Scripting HTTP Requests Using Curl 4.5 Hidden Fields - A very common way for HTML based application to pass state information + A very common way for HTML based applications to pass state information between pages is to add hidden fields to the forms. Hidden fields are already filled in, they aren't displayed to the user and they get passed along just as all the other fields. @@ -383,7 +383,7 @@ The Art Of Scripting HTTP Requests Using Curl - To post this with curl, you won't have to think about if the fields are + To POST this with curl, you won't have to think about if the fields are hidden or not. To curl they're all the same: curl --data "birthyear=1905&press=OK&person=daniel" [URL] @@ -405,7 +405,7 @@ The Art Of Scripting HTTP Requests Using Curl 5.1 PUT - The perhaps best way to upload data to a HTTP server is to use PUT. Then + Perhaps the best way to upload data to a HTTP server is to use PUT. Then again, this of course requires that someone put a program or script on the server end that knows how to receive a HTTP PUT stream. @@ -446,7 +446,7 @@ The Art Of Scripting HTTP Requests Using Curl If your proxy requires the authentication to be done using the NTLM method, use --proxy-ntlm, if it requires Digest use --proxy-digest. - If you use any one these user+password options but leave out the password + If you use any one of these user+password options but leave out the password part, curl will prompt for the password interactively. 6.4 Hiding credentials @@ -508,7 +508,7 @@ The Art Of Scripting HTTP Requests Using Curl to redirect is Location:. Curl does not follow Location: headers by default, but will simply display - such pages in the same manner it display all HTTP replies. It does however + such pages in the same manner it displays all HTTP replies. It does however feature an option that will make it attempt to follow the Location: pointers. To tell curl to follow a Location: @@ -562,7 +562,7 @@ The Art Of Scripting HTTP Requests Using Curl (Take note that the --cookie-jar option described below is a better way to store cookies.) - Curl has a full blown cookie parsing engine built-in that comes to use if you + Curl has a full blown cookie parsing engine built-in that comes in use if you want to reconnect to a server and use cookies that were stored from a previous connection (or hand-crafted manually to fool the server into believing you had a previous connection). To use previously stored cookies, @@ -592,7 +592,7 @@ The Art Of Scripting HTTP Requests Using Curl 10.1 HTTPS is HTTP secure - There are a few ways to do secure HTTP transfers. The by far most common + There are a few ways to do secure HTTP transfers. By far the most common protocol for doing this is what is generally known as HTTPS, HTTP over SSL. SSL encrypts all the data that is sent and received over the network and thus makes it harder for attackers to spy on sensitive information. @@ -680,7 +680,7 @@ The Art Of Scripting HTTP Requests Using Curl 12.1 Some login tricks - While not strictly just HTTP related, it still cause a lot of people problems + While not strictly just HTTP related, it still causes a lot of people problems so here's the executive run-down of how the vast majority of all login forms work and how to login to them using curl. @@ -693,7 +693,7 @@ The Art Of Scripting HTTP Requests Using Curl make sure you got there through their login page) so you should make a habit of first getting the login-form page to capture the cookies set there. - Some web-based login systems features various amounts of javascript, and + Some web-based login systems feature various amounts of javascript, and sometimes they use such code to set or modify cookie contents. Possibly they do that to prevent programmed logins, like this manual describes how to... Anyway, if reading the code isn't enough to let you repeat the behavior @@ -755,4 +755,4 @@ The Art Of Scripting HTTP Requests Using Curl 14.2 Sites - https://curl.haxx.se is the home of the cURL project + https://curl.haxx.se is the home of the curl project diff --git a/docs/cmdline-opts/MANPAGE.md b/docs/cmdline-opts/MANPAGE.md new file mode 100644 index 0000000..1ba00c8 --- /dev/null +++ b/docs/cmdline-opts/MANPAGE.md @@ -0,0 +1,52 @@ +# curl man page generator + +This is the curl man page generator. It generates a single nroff man page +output from the set of sources files in this directory. + +There is one source file for each supported command line option. The format is +described below. + +## Option files + +Each command line option is described in a file named `.d`, where +option name is written without any prefixing dashes. Like the file name for +the -v, --verbose option is named `verbose.d`. + +Each file has a set of meta-data and a body of text. + +### Meta-data + + Short: (single letter, without dash) + Long: (long form name, without dashes) + Arg: (the argument the option takes) + Magic: (description of "magic" options) + Tags: (space separated list) + Protocols: (space separated list for which protocols this option works) + Added: (version number in which this was added) + Mutexed: (space separated list of options this overrides) + Requires: (space separated list of features this option requires) + See-also: (space separated list of related options) + Help: (short text for the --help output for this option) + --- (end of meta-data) + +### Body + +The body of the description. Only refer to options with their long form option +version, like --verbose. The output generator will replace such with the +correct markup that shows both short and long version. + +## Header + +`page-header` is the nroff formatted file that will be output before the +generated options output for the master man page. + +## Generate + +`./gen.pl mainpage` + +This command outputs a single huge nroff file, meant to become `curl.1`. The +full curl man page. + +`./gen.pl listhelp` + +Generates a full `curl --help` output for all known command line options. diff --git a/docs/cmdline-opts/Makefile.am b/docs/cmdline-opts/Makefile.am new file mode 100644 index 0000000..c844bca --- /dev/null +++ b/docs/cmdline-opts/Makefile.am @@ -0,0 +1,76 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) 1998 - 2017, 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.haxx.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. +# +########################################################################### + +AUTOMAKE_OPTIONS = foreign no-dependencies + +MANPAGE = $(top_builddir)/docs/curl.1 + +DPAGES = abstract-unix-socket.d anyauth.d append.d basic.d cacert.d capath.d cert.d \ + cert-status.d cert-type.d ciphers.d compressed.d config.d \ + connect-timeout.d connect-to.d continue-at.d cookie.d cookie-jar.d \ + create-dirs.d crlf.d crlfile.d data-ascii.d data-binary.d data.d \ + data-raw.d data-urlencode.d delegation.d digest.d disable.d \ + disable-eprt.d disable-epsv.d dns-interface.d dns-ipv4-addr.d \ + dns-ipv6-addr.d dns-servers.d dump-header.d egd-file.d engine.d \ + environment.d expect100-timeout.d fail.d fail-early.d false-start.d \ + form.d form-string.d ftp-account.d ftp-alternative-to-user.d \ + ftp-create-dirs.d ftp-method.d ftp-pasv.d ftp-port.d ftp-pret.d \ + ftp-skip-pasv-ip.d ftp-ssl-ccc.d ftp-ssl-ccc-mode.d ftp-ssl-control.d \ + get.d globoff.d head.d header.d help.d hostpubmd5.d http1.0.d \ + http1.1.d http2.d http2-prior-knowledge.d ignore-content-length.d \ + include.d insecure.d interface.d ipv4.d ipv6.d junk-session-cookies.d \ + keepalive-time.d key.d key-type.d krb.d libcurl.d limit-rate.d \ + list-only.d local-port.d location.d location-trusted.d \ + login-options.d mail-auth.d mail-from.d mail-rcpt.d manual.d \ + max-filesize.d max-redirs.d max-time.d metalink.d negotiate.d netrc.d \ + netrc-file.d netrc-optional.d next.d no-alpn.d no-buffer.d \ + no-keepalive.d no-npn.d noproxy.d no-sessionid.d ntlm.d ntlm-wb.d \ + oauth2-bearer.d output.d pass.d path-as-is.d pinnedpubkey.d post301.d \ + post302.d post303.d preproxy.d progress-bar.d proto.d proto-default.d \ + proto-redir.d proxy1.0.d proxy-anyauth.d proxy-basic.d proxy-cacert.d \ + proxy-capath.d proxy-cert.d proxy-cert-type.d proxy-ciphers.d \ + proxy-crlfile.d proxy.d proxy-digest.d proxy-header.d \ + proxy-insecure.d proxy-key.d proxy-key-type.d proxy-negotiate.d \ + proxy-ntlm.d proxy-pass.d proxy-service-name.d \ + proxy-ssl-allow-beast.d proxy-tlsauthtype.d proxy-tlspassword.d \ + proxy-tlsuser.d proxy-tlsv1.d proxytunnel.d proxy-user.d pubkey.d \ + quote.d random-file.d range.d raw.d referer.d remote-header-name.d \ + remote-name-all.d remote-name.d remote-time.d request.d resolve.d \ + retry-connrefused.d retry.d retry-delay.d retry-max-time.d sasl-ir.d \ + service-name.d show-error.d silent.d socks4a.d socks4.d socks5.d \ + socks5-gssapi-nec.d socks5-gssapi-service.d socks5-hostname.d \ + speed-limit.d speed-time.d ssl-allow-beast.d ssl.d ssl-no-revoke.d \ + ssl-reqd.d sslv2.d sslv3.d stderr.d tcp-fastopen.d tcp-nodelay.d \ + telnet-option.d tftp-blksize.d tftp-no-options.d time-cond.d \ + tlsauthtype.d tlspassword.d tlsuser.d tlsv1.0.d tlsv1.1.d tlsv1.2.d \ + tlsv1.3.d tlsv1.d trace-ascii.d trace.d trace-time.d tr-encoding.d \ + unix-socket.d upload-file.d url.d use-ascii.d user-agent.d user.d \ + verbose.d version.d write-out.d xattr.d + +OTHERPAGES = page-footer page-header + +EXTRA_DIST = $(DPAGES) MANPAGE.md gen.pl $(OTHERPAGES) + +all: $(MANPAGE) + +$(MANPAGE): $(DPAGES) $(OTHERPAGES) + @PERL@ $(srcdir)/gen.pl mainpage $(srcdir) > $(MANPAGE) diff --git a/docs/cmdline-opts/Makefile.in b/docs/cmdline-opts/Makefile.in new file mode 100644 index 0000000..fb2a689 --- /dev/null +++ b/docs/cmdline-opts/Makefile.in @@ -0,0 +1,598 @@ +# Makefile.in generated by automake 1.15 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2014 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) 1998 - 2017, 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.haxx.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. +# +########################################################################### +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = docs/cmdline-opts +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/curl-compilers.m4 \ + $(top_srcdir)/m4/curl-confopts.m4 \ + $(top_srcdir)/m4/curl-functions.m4 \ + $(top_srcdir)/m4/curl-openssl.m4 \ + $(top_srcdir)/m4/curl-override.m4 \ + $(top_srcdir)/m4/curl-reentrant.m4 $(top_srcdir)/m4/libtool.m4 \ + $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ + $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/xc-am-iface.m4 \ + $(top_srcdir)/m4/xc-cc-check.m4 \ + $(top_srcdir)/m4/xc-lt-iface.m4 \ + $(top_srcdir)/m4/xc-translit.m4 \ + $(top_srcdir)/m4/xc-val-flgs.m4 \ + $(top_srcdir)/m4/zz40-xc-ovr.m4 \ + $(top_srcdir)/m4/zz50-xc-ovr.m4 \ + $(top_srcdir)/m4/zz60-xc-ovr.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/lib/curl_config.h \ + $(top_builddir)/include/curl/curlbuild.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +depcomp = +am__depfiles_maybe = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLANK_AT_MAKETIME = @BLANK_AT_MAKETIME@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CFLAG_CURL_SYMBOL_HIDING = @CFLAG_CURL_SYMBOL_HIDING@ +CONFIGURE_OPTIONS = @CONFIGURE_OPTIONS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CPPFLAG_CURL_STATICLIB = @CPPFLAG_CURL_STATICLIB@ +CURLVERSION = @CURLVERSION@ +CURL_CA_BUNDLE = @CURL_CA_BUNDLE@ +CURL_CFLAG_EXTRAS = @CURL_CFLAG_EXTRAS@ +CURL_DISABLE_DICT = @CURL_DISABLE_DICT@ +CURL_DISABLE_FILE = @CURL_DISABLE_FILE@ +CURL_DISABLE_FTP = @CURL_DISABLE_FTP@ +CURL_DISABLE_GOPHER = @CURL_DISABLE_GOPHER@ +CURL_DISABLE_HTTP = @CURL_DISABLE_HTTP@ +CURL_DISABLE_IMAP = @CURL_DISABLE_IMAP@ +CURL_DISABLE_LDAP = @CURL_DISABLE_LDAP@ +CURL_DISABLE_LDAPS = @CURL_DISABLE_LDAPS@ +CURL_DISABLE_POP3 = @CURL_DISABLE_POP3@ +CURL_DISABLE_PROXY = @CURL_DISABLE_PROXY@ +CURL_DISABLE_RTSP = @CURL_DISABLE_RTSP@ +CURL_DISABLE_SMB = @CURL_DISABLE_SMB@ +CURL_DISABLE_SMTP = @CURL_DISABLE_SMTP@ +CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@ +CURL_DISABLE_TFTP = @CURL_DISABLE_TFTP@ +CURL_LT_SHLIB_VERSIONED_FLAVOUR = @CURL_LT_SHLIB_VERSIONED_FLAVOUR@ +CURL_NETWORK_AND_TIME_LIBS = @CURL_NETWORK_AND_TIME_LIBS@ +CURL_NETWORK_LIBS = @CURL_NETWORK_LIBS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +ENABLE_SHARED = @ENABLE_SHARED@ +ENABLE_STATIC = @ENABLE_STATIC@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +HAVE_GNUTLS_SRP = @HAVE_GNUTLS_SRP@ +HAVE_LDAP_SSL = @HAVE_LDAP_SSL@ +HAVE_LIBZ = @HAVE_LIBZ@ +HAVE_OPENSSL_SRP = @HAVE_OPENSSL_SRP@ +IDN_ENABLED = @IDN_ENABLED@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +IPV6_ENABLED = @IPV6_ENABLED@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBCURL_LIBS = @LIBCURL_LIBS@ +LIBMETALINK_CPPFLAGS = @LIBMETALINK_CPPFLAGS@ +LIBMETALINK_LDFLAGS = @LIBMETALINK_LDFLAGS@ +LIBMETALINK_LIBS = @LIBMETALINK_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MANOPT = @MANOPT@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +NROFF = @NROFF@ +NSS_LIBS = @NSS_LIBS@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PERL = @PERL@ +PKGADD_NAME = @PKGADD_NAME@ +PKGADD_PKG = @PKGADD_PKG@ +PKGADD_VENDOR = @PKGADD_VENDOR@ +PKGCONFIG = @PKGCONFIG@ +RANDOM_FILE = @RANDOM_FILE@ +RANLIB = @RANLIB@ +REQUIRE_LIB_DEPS = @REQUIRE_LIB_DEPS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SSL_ENABLED = @SSL_ENABLED@ +SSL_LIBS = @SSL_LIBS@ +STRIP = @STRIP@ +SUPPORT_FEATURES = @SUPPORT_FEATURES@ +SUPPORT_PROTOCOLS = @SUPPORT_PROTOCOLS@ +USE_ARES = @USE_ARES@ +USE_AXTLS = @USE_AXTLS@ +USE_CYASSL = @USE_CYASSL@ +USE_DARWINSSL = @USE_DARWINSSL@ +USE_GNUTLS = @USE_GNUTLS@ +USE_GNUTLS_NETTLE = @USE_GNUTLS_NETTLE@ +USE_LIBRTMP = @USE_LIBRTMP@ +USE_LIBSSH2 = @USE_LIBSSH2@ +USE_MBEDTLS = @USE_MBEDTLS@ +USE_NGHTTP2 = @USE_NGHTTP2@ +USE_NSS = @USE_NSS@ +USE_OPENLDAP = @USE_OPENLDAP@ +USE_POLARSSL = @USE_POLARSSL@ +USE_SCHANNEL = @USE_SCHANNEL@ +USE_UNIX_SOCKETS = @USE_UNIX_SOCKETS@ +USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ +VERSION = @VERSION@ +VERSIONNUM = @VERSIONNUM@ +ZLIB_LIBS = @ZLIB_LIBS@ +ZSH_FUNCTIONS_DIR = @ZSH_FUNCTIONS_DIR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +libext = @libext@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +subdirs = @subdirs@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUTOMAKE_OPTIONS = foreign no-dependencies +MANPAGE = $(top_builddir)/docs/curl.1 +DPAGES = abstract-unix-socket.d anyauth.d append.d basic.d cacert.d capath.d cert.d \ + cert-status.d cert-type.d ciphers.d compressed.d config.d \ + connect-timeout.d connect-to.d continue-at.d cookie.d cookie-jar.d \ + create-dirs.d crlf.d crlfile.d data-ascii.d data-binary.d data.d \ + data-raw.d data-urlencode.d delegation.d digest.d disable.d \ + disable-eprt.d disable-epsv.d dns-interface.d dns-ipv4-addr.d \ + dns-ipv6-addr.d dns-servers.d dump-header.d egd-file.d engine.d \ + environment.d expect100-timeout.d fail.d fail-early.d false-start.d \ + form.d form-string.d ftp-account.d ftp-alternative-to-user.d \ + ftp-create-dirs.d ftp-method.d ftp-pasv.d ftp-port.d ftp-pret.d \ + ftp-skip-pasv-ip.d ftp-ssl-ccc.d ftp-ssl-ccc-mode.d ftp-ssl-control.d \ + get.d globoff.d head.d header.d help.d hostpubmd5.d http1.0.d \ + http1.1.d http2.d http2-prior-knowledge.d ignore-content-length.d \ + include.d insecure.d interface.d ipv4.d ipv6.d junk-session-cookies.d \ + keepalive-time.d key.d key-type.d krb.d libcurl.d limit-rate.d \ + list-only.d local-port.d location.d location-trusted.d \ + login-options.d mail-auth.d mail-from.d mail-rcpt.d manual.d \ + max-filesize.d max-redirs.d max-time.d metalink.d negotiate.d netrc.d \ + netrc-file.d netrc-optional.d next.d no-alpn.d no-buffer.d \ + no-keepalive.d no-npn.d noproxy.d no-sessionid.d ntlm.d ntlm-wb.d \ + oauth2-bearer.d output.d pass.d path-as-is.d pinnedpubkey.d post301.d \ + post302.d post303.d preproxy.d progress-bar.d proto.d proto-default.d \ + proto-redir.d proxy1.0.d proxy-anyauth.d proxy-basic.d proxy-cacert.d \ + proxy-capath.d proxy-cert.d proxy-cert-type.d proxy-ciphers.d \ + proxy-crlfile.d proxy.d proxy-digest.d proxy-header.d \ + proxy-insecure.d proxy-key.d proxy-key-type.d proxy-negotiate.d \ + proxy-ntlm.d proxy-pass.d proxy-service-name.d \ + proxy-ssl-allow-beast.d proxy-tlsauthtype.d proxy-tlspassword.d \ + proxy-tlsuser.d proxy-tlsv1.d proxytunnel.d proxy-user.d pubkey.d \ + quote.d random-file.d range.d raw.d referer.d remote-header-name.d \ + remote-name-all.d remote-name.d remote-time.d request.d resolve.d \ + retry-connrefused.d retry.d retry-delay.d retry-max-time.d sasl-ir.d \ + service-name.d show-error.d silent.d socks4a.d socks4.d socks5.d \ + socks5-gssapi-nec.d socks5-gssapi-service.d socks5-hostname.d \ + speed-limit.d speed-time.d ssl-allow-beast.d ssl.d ssl-no-revoke.d \ + ssl-reqd.d sslv2.d sslv3.d stderr.d tcp-fastopen.d tcp-nodelay.d \ + telnet-option.d tftp-blksize.d tftp-no-options.d time-cond.d \ + tlsauthtype.d tlspassword.d tlsuser.d tlsv1.0.d tlsv1.1.d tlsv1.2.d \ + tlsv1.3.d tlsv1.d trace-ascii.d trace.d trace-time.d tr-encoding.d \ + unix-socket.d upload-file.d url.d use-ascii.d user-agent.d user.d \ + verbose.d version.d write-out.d xattr.d + +OTHERPAGES = page-footer page-header +EXTRA_DIST = $(DPAGES) MANPAGE.md gen.pl $(OTHERPAGES) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign docs/cmdline-opts/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign docs/cmdline-opts/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + cscopelist-am ctags-am distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags-am uninstall uninstall-am + +.PRECIOUS: Makefile + + +all: $(MANPAGE) + +$(MANPAGE): $(DPAGES) $(OTHERPAGES) + @PERL@ $(srcdir)/gen.pl mainpage $(srcdir) > $(MANPAGE) + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/docs/cmdline-opts/abstract-unix-socket.d b/docs/cmdline-opts/abstract-unix-socket.d new file mode 100644 index 0000000..bb4467b --- /dev/null +++ b/docs/cmdline-opts/abstract-unix-socket.d @@ -0,0 +1,9 @@ +Long: abstract-unix-socket +Arg: +Help: Connect through an abstract Unix domain socket +Added: 7.53.0 +Protocols: HTTP +--- +Connect through an abstract Unix domain socket, instead of using the network. +Note: netstat shows the path of an abstract socket prefixed with '@', however +the argument should not have this leading character. diff --git a/docs/cmdline-opts/anyauth.d b/docs/cmdline-opts/anyauth.d new file mode 100644 index 0000000..c32d1ed --- /dev/null +++ b/docs/cmdline-opts/anyauth.d @@ -0,0 +1,17 @@ +Long: anyauth +Help: Pick any authentication method +Protocols: HTTP +See-also: proxy-anyauth basic digest +--- +Tells curl to figure out authentication method by itself, and use the most +secure one the remote site claims to support. This is done by first doing a +request and checking the response-headers, thus possibly inducing an extra +network round-trip. This is used instead of setting a specific authentication +method, which you can do with --basic, --digest, --ntlm, and --negotiate. + +Using --anyauth is not recommended if you do uploads from stdin, since it may +require data to be sent twice and then the client must be able to rewind. If +the need should arise when uploading from stdin, the upload operation will +fail. + +Used together with --user. diff --git a/docs/cmdline-opts/append.d b/docs/cmdline-opts/append.d new file mode 100644 index 0000000..f001b12 --- /dev/null +++ b/docs/cmdline-opts/append.d @@ -0,0 +1,8 @@ +Short: a +Long: append +Help: Append to target file when uploading +Protocols: FTP SFTP +--- +When used in an upload, this makes curl append to the target file instead of +overwriting it. If the remote file doesn't exist, it will be created. Note +that this flag is ignored by some SFTP servers (including OpenSSH). diff --git a/docs/cmdline-opts/basic.d b/docs/cmdline-opts/basic.d new file mode 100644 index 0000000..09d42af --- /dev/null +++ b/docs/cmdline-opts/basic.d @@ -0,0 +1,11 @@ +Long: basic +Help: Use HTTP Basic Authentication +See-also: proxy-basic +Protocols: HTTP +--- +Tells curl to use HTTP Basic authentication with the remote host. This is the +default and this option is usually pointless, unless you use it to override a +previously set option that sets a different authentication method (such as +--ntlm, --digest, or --negotiate). + +Used together with --user. diff --git a/docs/cmdline-opts/cacert.d b/docs/cmdline-opts/cacert.d new file mode 100644 index 0000000..04e1139 --- /dev/null +++ b/docs/cmdline-opts/cacert.d @@ -0,0 +1,28 @@ +Long: cacert +Arg: +Help: CA certificate to verify peer against +Protocols: TLS +--- +Tells curl to use the specified certificate file to verify the peer. The file +may contain multiple CA certificates. The certificate(s) must be in PEM +format. Normally curl is built to use a default file for this, so this option +is typically used to alter that default file. + +curl recognizes the environment variable named 'CURL_CA_BUNDLE' if it is +set, and uses the given path as a path to a CA cert bundle. This option +overrides that variable. + +The windows version of curl will automatically look for a CA certs file named +\'curl-ca-bundle.crt\', either in the same directory as curl.exe, or in the +Current Working Directory, or in any folder along your PATH. + +If curl is built against the NSS SSL library, the NSS PEM PKCS#11 module +(libnsspem.so) needs to be available for this option to work properly. + +(iOS and macOS only) If curl is built against Secure Transport, then this +option is supported for backward compatibility with other SSL engines, but it +should not be set. If the option is not set, then curl will use the +certificates in the system and user Keychain to verify the peer, which is the +preferred method of verifying the peer's certificate chain. + +If this option is used several times, the last one will be used. diff --git a/docs/cmdline-opts/capath.d b/docs/cmdline-opts/capath.d new file mode 100644 index 0000000..0763f7a --- /dev/null +++ b/docs/cmdline-opts/capath.d @@ -0,0 +1,15 @@ +Long: capath +Arg: +Help: CA directory to verify peer against +Protocols: TLS +--- +Tells curl to use the specified certificate directory to verify the +peer. Multiple paths can be provided by separating them with ":" (e.g. +\&"path1:path2:path3"). The certificates must be in PEM format, and if curl is +built against OpenSSL, the directory must have been processed using the +c_rehash utility supplied with OpenSSL. Using --capath can allow +OpenSSL-powered curl to make SSL-connections much more efficiently than using +--cacert if the --cacert file contains many CA certificates. + +If this option is set, the default capath value will be ignored, and if it is +used several times, the last one will be used. diff --git a/docs/cmdline-opts/cert-status.d b/docs/cmdline-opts/cert-status.d new file mode 100644 index 0000000..f1aaa21 --- /dev/null +++ b/docs/cmdline-opts/cert-status.d @@ -0,0 +1,13 @@ +Long: cert-status +Protocols: TLS +Added: 7.41.0 +Help: Verify the status of the server certificate +--- +Tells curl to verify the status of the server certificate by using the +Certificate Status Request (aka. OCSP stapling) TLS extension. + +If this option is enabled and the server sends an invalid (e.g. expired) +response, if the response suggests that the server certificate has been revoked, +or no response at all is received, the verification fails. + +This is currently only implemented in the OpenSSL, GnuTLS and NSS backends. diff --git a/docs/cmdline-opts/cert-type.d b/docs/cmdline-opts/cert-type.d new file mode 100644 index 0000000..a04bdce --- /dev/null +++ b/docs/cmdline-opts/cert-type.d @@ -0,0 +1,10 @@ +Long: cert-type +Protocols: TLS +Arg: +Help: Certificate file type (DER/PEM/ENG) +See-also: cert key key-type +--- +Tells curl what certificate type the provided certificate is in. PEM, DER and +ENG are recognized types. If not specified, PEM is assumed. + +If this option is used several times, the last one will be used. diff --git a/docs/cmdline-opts/cert.d b/docs/cmdline-opts/cert.d new file mode 100644 index 0000000..0cd5d53 --- /dev/null +++ b/docs/cmdline-opts/cert.d @@ -0,0 +1,32 @@ +Short: E +Long: cert +Arg: +Help: Client certificate file and password +Protocols: TLS +See-also: cert-type key key-type +--- +Tells curl to use the specified client certificate file when getting a file +with HTTPS, FTPS or another SSL-based protocol. The certificate must be in +PKCS#12 format if using Secure Transport, or PEM format if using any other +engine. If the optional password isn't specified, it will be queried for on +the terminal. Note that this option assumes a \&"certificate" file that is the +private key and the client certificate concatenated! See --cert and --key to +specify them independently. + +If curl is built against the NSS SSL library then this option can tell +curl the nickname of the certificate to use within the NSS database defined +by the environment variable SSL_DIR (or by default /etc/pki/nssdb). If the +NSS PEM PKCS#11 module (libnsspem.so) is available then PEM files may be +loaded. If you want to use a file from the current directory, please precede +it with "./" prefix, in order to avoid confusion with a nickname. If the +nickname contains ":", it needs to be preceded by "\\" so that it is not +recognized as password delimiter. If the nickname contains "\\", it needs to +be escaped as "\\\\" so that it is not recognized as an escape character. + +(iOS and macOS only) If curl is built against Secure Transport, then the +certificate string can either be the name of a certificate/private key in the +system or user keychain, or the path to a PKCS#12-encoded certificate and +private key. If you want to use a file from the current directory, please +precede it with "./" prefix, in order to avoid confusion with a nickname. + +If this option is used several times, the last one will be used. diff --git a/docs/cmdline-opts/ciphers.d b/docs/cmdline-opts/ciphers.d new file mode 100644 index 0000000..d3bac60 --- /dev/null +++ b/docs/cmdline-opts/ciphers.d @@ -0,0 +1,11 @@ +Long: ciphers +Arg: +help: SSL ciphers to use +Protocols: TLS +--- +Specifies which ciphers to use in the connection. The list of ciphers must +specify valid ciphers. Read up on SSL cipher list details on this URL: + + https://curl.haxx.se/docs/ssl-ciphers.html + +If this option is used several times, the last one will be used. diff --git a/docs/cmdline-opts/compressed.d b/docs/cmdline-opts/compressed.d new file mode 100644 index 0000000..dc130c1 --- /dev/null +++ b/docs/cmdline-opts/compressed.d @@ -0,0 +1,7 @@ +Long: compressed +Help: Request compressed response +Protocols: HTTP +--- +Request a compressed response using one of the algorithms curl supports, and +save the uncompressed document. If this option is used and the server sends +an unsupported encoding, curl will report an error. diff --git a/docs/cmdline-opts/config.d b/docs/cmdline-opts/config.d new file mode 100644 index 0000000..4a32512 --- /dev/null +++ b/docs/cmdline-opts/config.d @@ -0,0 +1,60 @@ +Long: config +Arg: +Help: Read config from a file +Short: K +--- +Specify which config file to read curl arguments from. The config file is a +text file in which command line arguments can be written which then will be +used as if they were written on the actual command line. + +Options and their parameters must be specified on the same config file line, +separated by whitespace, colon, or the equals sign. Long option names can +optionally be given in the config file without the initial double dashes and +if so, the colon or equals characters can be used as separators. If the option +is specified with one or two dashes, there can be no colon or equals character +between the option and its parameter. + +If the parameter is to contain whitespace, the parameter must be enclosed +within quotes. Within double quotes, the following escape sequences are +available: \\\\, \\", \\t, \\n, \\r and \\v. A backslash preceding any other +letter is ignored. If the first column of a config line is a '#' character, +the rest of the line will be treated as a comment. Only write one option per +physical line in the config file. + +Specify the filename to --config as '-' to make curl read the file from stdin. + +Note that to be able to specify a URL in the config file, you need to specify +it using the --url option, and not by simply writing the URL on its own +line. So, it could look similar to this: + +url = "https://curl.haxx.se/docs/" + +When curl is invoked, it always (unless --disable is used) checks for a +default config file and uses it if found. The default config file is checked +for in the following places in this order: + +1) curl tries to find the "home dir": It first checks for the CURL_HOME and +then the HOME environment variables. Failing that, it uses getpwuid() on +Unix-like systems (which returns the home dir given the current user in your +system). On Windows, it then checks for the APPDATA variable, or as a last +resort the '%USERPROFILE%\\Application Data'. + +2) On windows, if there is no _curlrc file in the home dir, it checks for one +in the same dir the curl executable is placed. On Unix-like systems, it will +simply try to load .curlrc from the determined home dir. + +.nf +# --- Example file --- +# this is a comment +url = "example.com" +output = "curlhere.html" +user-agent = "superagent/1.0" + +# and fetch another URL too +url = "example.com/docs/manpage.html" +-O +referer = "http://nowhereatall.example.com/" +# --- End of example file --- +.fi + +This option can be used multiple times to load multiple config files. diff --git a/docs/cmdline-opts/connect-timeout.d b/docs/cmdline-opts/connect-timeout.d new file mode 100644 index 0000000..3a32d86 --- /dev/null +++ b/docs/cmdline-opts/connect-timeout.d @@ -0,0 +1,11 @@ +Long: connect-timeout +Arg: +Help: Maximum time allowed for connection +See-also: max-time +--- +Maximum time in seconds that you allow curl's connection to take. This only +limits the connection phase, so if curl connects within the given period it +will continue - if not it will exit. Since version 7.32.0, this option +accepts decimal values. + +If this option is used several times, the last one will be used. diff --git a/docs/cmdline-opts/connect-to.d b/docs/cmdline-opts/connect-to.d new file mode 100644 index 0000000..3fa0568 --- /dev/null +++ b/docs/cmdline-opts/connect-to.d @@ -0,0 +1,18 @@ +Long: connect-to +Arg: +Help: Connect to host +Added: 7.49.0 +See-also: resolve header +--- + +For a request to the given HOST:PORT pair, connect to +CONNECT-TO-HOST:CONNECT-TO-PORT instead. This option is suitable to direct +requests at a specific server, e.g. at a specific cluster node in a cluster of +servers. This option is only used to establish the network connection. It +does NOT affect the hostname/port that is used for TLS/SSL (e.g. SNI, +certificate verification) or for the application protocols. "host" and "port" +may be the empty string, meaning "any host/port". "connect-to-host" and +"connect-to-port" may also be the empty string, meaning "use the request's +original host/port". + +This option can be used many times to add many connect rules. diff --git a/docs/cmdline-opts/continue-at.d b/docs/cmdline-opts/continue-at.d new file mode 100644 index 0000000..733f494 --- /dev/null +++ b/docs/cmdline-opts/continue-at.d @@ -0,0 +1,15 @@ +Short: C +Long: continue-at +Arg: +Help: Resumed transfer offset +See-also: range +--- +Continue/Resume a previous file transfer at the given offset. The given offset +is the exact number of bytes that will be skipped, counting from the beginning +of the source file before it is transferred to the destination. If used with +uploads, the FTP server command SIZE will not be used by curl. + +Use "-C -" to tell curl to automatically find out where/how to resume the +transfer. It then uses the given output/input files to figure that out. + +If this option is used several times, the last one will be used. diff --git a/docs/cmdline-opts/cookie-jar.d b/docs/cmdline-opts/cookie-jar.d new file mode 100644 index 0000000..da79777 --- /dev/null +++ b/docs/cmdline-opts/cookie-jar.d @@ -0,0 +1,24 @@ +Short: c +Long: cookie-jar +Arg: +Protocols: HTTP +Help: Write cookies to after operation +--- +Specify to which file you want curl to write all cookies after a completed +operation. Curl writes all cookies from its in-memory cookie storage to the +given file at the end of operations. If no cookies are known, no data will be +written. The file will be written using the Netscape cookie file format. If +you set the file name to a single dash, "-", the cookies will be written to +stdout. + +This command line option will activate the cookie engine that makes curl +record and use cookies. Another way to activate it is to use the --cookie +option. + +If the cookie jar can't be created or written to, the whole curl operation +won't fail or even report an error clearly. Using --verbose will get a warning +displayed, but that is the only visible feedback you get about this possibly +lethal situation. + +If this option is used several times, the last specified file name will be +used. diff --git a/docs/cmdline-opts/cookie.d b/docs/cmdline-opts/cookie.d new file mode 100644 index 0000000..383adda --- /dev/null +++ b/docs/cmdline-opts/cookie.d @@ -0,0 +1,36 @@ +Short: b +Long: cookie +Arg: +Protocols: HTTP +Help: Send cookies from string/file +--- +Pass the data to the HTTP server in the Cookie header. It is supposedly +the data previously received from the server in a "Set-Cookie:" line. The +data should be in the format "NAME1=VALUE1; NAME2=VALUE2". + +If no '=' symbol is used in the argument, it is instead treated as a filename +to read previously stored cookie from. This option also activates the cookie +engine which will make curl record incoming cookies, which may be handy if +you're using this in combination with the --location option or do multiple URL +transfers on the same invoke. + +The file format of the file to read cookies from should be plain HTTP headers +(Set-Cookie style) or the Netscape/Mozilla cookie file format. + +The file specified with --cookie is only used as input. No cookies will be +written to the file. To store cookies, use the --cookie-jar option. + +Exercise caution if you are using this option and multiple transfers may +occur. If you use the NAME1=VALUE1; format, or in a file use the Set-Cookie +format and don't specify a domain, then the cookie is sent for any domain +(even after redirects are followed) and cannot be modified by a server-set +cookie. If the cookie engine is enabled and a server sets a cookie of the same +name then both will be sent on a future transfer to that server, likely not +what you intended. To address these issues set a domain in Set-Cookie (doing +that will include sub domains) or use the Netscape format. + +If this option is used several times, the last one will be used. + +Users very often want to both read cookies from a file and write updated +cookies back to a file, so using both --cookie and --cookie-jar in the same +command line is common. diff --git a/docs/cmdline-opts/create-dirs.d b/docs/cmdline-opts/create-dirs.d new file mode 100644 index 0000000..49e22e7 --- /dev/null +++ b/docs/cmdline-opts/create-dirs.d @@ -0,0 +1,9 @@ +Long: create-dirs +Help: Create necessary local directory hierarchy +--- +When used in conjunction with the --output option, curl will create the +necessary local directory hierarchy as needed. This option creates the dirs +mentioned with the --output option, nothing else. If the --output file name +uses no dir or if the dirs it mentions already exist, no dir will be created. + +To create remote directories when using FTP or SFTP, try --ftp-create-dirs. diff --git a/docs/cmdline-opts/crlf.d b/docs/cmdline-opts/crlf.d new file mode 100644 index 0000000..f6694b6 --- /dev/null +++ b/docs/cmdline-opts/crlf.d @@ -0,0 +1,7 @@ +Long: crlf +Help: Convert LF to CRLF in upload +Protocols: FTP SMTP +--- +Convert LF to CRLF in upload. Useful for MVS (OS/390). + +(SMTP added in 7.40.0) diff --git a/docs/cmdline-opts/crlfile.d b/docs/cmdline-opts/crlfile.d new file mode 100644 index 0000000..0fcc63c --- /dev/null +++ b/docs/cmdline-opts/crlfile.d @@ -0,0 +1,10 @@ +Long: crlfile +Arg: +Protocols: TLS +Help: Get a CRL list in PEM format from the given file +Added: 7.19.7 +--- +Provide a file using PEM format with a Certificate Revocation List that may +specify peer certificates that are to be considered revoked. + +If this option is used several times, the last one will be used. diff --git a/docs/cmdline-opts/data-ascii.d b/docs/cmdline-opts/data-ascii.d new file mode 100644 index 0000000..bda4abc --- /dev/null +++ b/docs/cmdline-opts/data-ascii.d @@ -0,0 +1,6 @@ +Long: data-ascii +Arg: +Help: HTTP POST ASCII data +Protocols: HTTP +--- +This is just an alias for --data. diff --git a/docs/cmdline-opts/data-binary.d b/docs/cmdline-opts/data-binary.d new file mode 100644 index 0000000..c6721c6 --- /dev/null +++ b/docs/cmdline-opts/data-binary.d @@ -0,0 +1,13 @@ +Long: data-binary +Arg: +Help: HTTP POST binary data +Protocols: HTTP +--- +This posts data exactly as specified with no extra processing whatsoever. + +If you start the data with the letter @, the rest should be a filename. Data +is posted in a similar manner as --data does, except that newlines and +carriage returns are preserved and conversions are never done. + +If this option is used several times, the ones following the first will append +data as described in --data. diff --git a/docs/cmdline-opts/data-raw.d b/docs/cmdline-opts/data-raw.d new file mode 100644 index 0000000..7669b4a --- /dev/null +++ b/docs/cmdline-opts/data-raw.d @@ -0,0 +1,9 @@ +Long: data-raw +Arg: +Protocols: HTTP +Help: HTTP POST data, '@' allowed +Added: 7.43.0 +See-also: data +--- +This posts data similarly to --data but without the special +interpretation of the @ character. diff --git a/docs/cmdline-opts/data-urlencode.d b/docs/cmdline-opts/data-urlencode.d new file mode 100644 index 0000000..9873f33 --- /dev/null +++ b/docs/cmdline-opts/data-urlencode.d @@ -0,0 +1,33 @@ +Long: data-urlencode +Arg: +Help: HTTP POST data url encoded +Protocols: HTTP +See-also: data data-raw +Added: 7.18.0 +--- +This posts data, similar to the other --data options with the exception +that this performs URL-encoding. + +To be CGI-compliant, the part should begin with a \fIname\fP followed +by a separator and a content specification. The part can be passed to +curl using one of the following syntaxes: +.RS +.IP "content" +This will make curl URL-encode the content and pass that on. Just be careful +so that the content doesn't contain any = or @ symbols, as that will then make +the syntax match one of the other cases below! +.IP "=content" +This will make curl URL-encode the content and pass that on. The preceding = +symbol is not included in the data. +.IP "name=content" +This will make curl URL-encode the content part and pass that on. Note that +the name part is expected to be URL-encoded already. +.IP "@filename" +This will make curl load data from the given file (including any newlines), +URL-encode that data and pass it on in the POST. +.IP "name@filename" +This will make curl load data from the given file (including any newlines), +URL-encode that data and pass it on in the POST. The name part gets an equal +sign appended, resulting in \fIname=urlencoded-file-content\fP. Note that the +name is expected to be URL-encoded already. +.RE diff --git a/docs/cmdline-opts/data.d b/docs/cmdline-opts/data.d new file mode 100644 index 0000000..1572858 --- /dev/null +++ b/docs/cmdline-opts/data.d @@ -0,0 +1,30 @@ +Long: data +Short: d +Arg: +Help: HTTP POST data +Protocols: HTTP +See-also: data-binary data-urlencode data-raw +Mutexed: form head upload +--- +Sends the specified data in a POST request to the HTTP server, in the same way +that a browser does when a user has filled in an HTML form and presses the +submit button. This will cause curl to pass the data to the server using the +content-type application/x-www-form-urlencoded. Compare to --form. + +--data-raw is almost the same but does not have a special interpretation of +the @ character. To post data purely binary, you should instead use the +--data-binary option. To URL-encode the value of a form field you may use +--data-urlencode. + +If any of these options is used more than once on the same command line, the +data pieces specified will be merged together with a separating +&-symbol. Thus, using '-d name=daniel -d skill=lousy' would generate a post +chunk that looks like \&'name=daniel&skill=lousy'. + +If you start the data with the letter @, the rest should be a file name to +read the data from, or - if you want curl to read the data from +stdin. Multiple files can also be specified. Posting data from a file named +'foobar' would thus be done with --data @foobar. When --data is told to read +from a file like that, carriage returns and newlines will be stripped out. If +you don't want the @ character to have a special interpretation use --data-raw +instead. diff --git a/docs/cmdline-opts/delegation.d b/docs/cmdline-opts/delegation.d new file mode 100644 index 0000000..138d823 --- /dev/null +++ b/docs/cmdline-opts/delegation.d @@ -0,0 +1,16 @@ +Long: delegation +Arg: +Help: GSS-API delegation permission +Protocols: GSS/kerberos +--- +Set LEVEL to tell the server what it is allowed to delegate when it +comes to user credentials. +.RS +.IP "none" +Don't allow any delegation. +.IP "policy" +Delegates if and only if the OK-AS-DELEGATE flag is set in the Kerberos +service ticket, which is a matter of realm policy. +.IP "always" +Unconditionally allow the server to delegate. +.RE diff --git a/docs/cmdline-opts/digest.d b/docs/cmdline-opts/digest.d new file mode 100644 index 0000000..5cdd925 --- /dev/null +++ b/docs/cmdline-opts/digest.d @@ -0,0 +1,11 @@ +Long: digest +Help: Use HTTP Digest Authentication +Protocols: HTTP +Mutexed: basic ntlm negotiate +See-also: user proxy-digest anyauth +--- +Enables HTTP Digest authentication. This is an authentication scheme that +prevents the password from being sent over the wire in clear text. Use this in +combination with the normal --user option to set user name and password. + +If this option is used several times, only the first one is used. diff --git a/docs/cmdline-opts/disable-eprt.d b/docs/cmdline-opts/disable-eprt.d new file mode 100644 index 0000000..a1e53c0 --- /dev/null +++ b/docs/cmdline-opts/disable-eprt.d @@ -0,0 +1,19 @@ +Long: disable-eprt +Help: Inhibit using EPRT or LPRT +Protocols: FTP +--- +Tell curl to disable the use of the EPRT and LPRT commands when doing active +FTP transfers. Curl will normally always first attempt to use EPRT, then LPRT +before using PORT, but with this option, it will use PORT right away. EPRT and +LPRT are extensions to the original FTP protocol, and may not work on all +servers, but they enable more functionality in a better way than the +traditional PORT command. + +--eprt can be used to explicitly enable EPRT again and --no-eprt is an alias +for --disable-eprt. + +If the server is accessed using IPv6, this option will have no effect as EPRT +is necessary then. + +Disabling EPRT only changes the active behavior. If you want to switch to +passive mode you need to not use --ftp-port or force it with --ftp-pasv. diff --git a/docs/cmdline-opts/disable-epsv.d b/docs/cmdline-opts/disable-epsv.d new file mode 100644 index 0000000..6d2cb70 --- /dev/null +++ b/docs/cmdline-opts/disable-epsv.d @@ -0,0 +1,16 @@ +Long: disable-epsv +Help: Inhibit using EPSV +Protocols: FTP +--- +(FTP) Tell curl to disable the use of the EPSV command when doing passive FTP +transfers. Curl will normally always first attempt to use EPSV before PASV, +but with this option, it will not try using EPSV. + +--epsv can be used to explicitly enable EPSV again and --no-epsv is an alias +for --disable-epsv. + +If the server is an IPv6 host, this option will have no effect as EPSV is +necessary then. + +Disabling EPSV only changes the passive behavior. If you want to switch to +active mode you need to use --ftp-port. diff --git a/docs/cmdline-opts/disable.d b/docs/cmdline-opts/disable.d new file mode 100644 index 0000000..20b27b4 --- /dev/null +++ b/docs/cmdline-opts/disable.d @@ -0,0 +1,7 @@ +Long: disable +Short: q +Help: Disable .curlrc +--- +If used as the first parameter on the command line, the \fIcurlrc\fP config +file will not be read and used. See the --config for details on the default +config file search path. diff --git a/docs/cmdline-opts/dns-interface.d b/docs/cmdline-opts/dns-interface.d new file mode 100644 index 0000000..45e5af2 --- /dev/null +++ b/docs/cmdline-opts/dns-interface.d @@ -0,0 +1,11 @@ +Long: dns-interface +Arg: +Help: Interface to use for DNS requests +Protocols: DNS +See-also: dns-ipv4-addr dns-ipv6-addr +Added: 7.33.0 +Requires: c-ares +--- +Tell curl to send outgoing DNS requests through . This option is a +counterpart to --interface (which does not affect DNS). The supplied string +must be an interface name (not an address). diff --git a/docs/cmdline-opts/dns-ipv4-addr.d b/docs/cmdline-opts/dns-ipv4-addr.d new file mode 100644 index 0000000..597b858 --- /dev/null +++ b/docs/cmdline-opts/dns-ipv4-addr.d @@ -0,0 +1,11 @@ +Long: dns-ipv4-addr +Arg:
+Help: IPv4 address to use for DNS requests +Protocols: DNS +See-also: dns-interface dns-ipv6-addr +Added: 7.33.0 +Requires: c-ares +--- +Tell curl to bind to when making IPv4 DNS requests, so that +the DNS requests originate from this address. The argument should be a +single IPv4 address. diff --git a/docs/cmdline-opts/dns-ipv6-addr.d b/docs/cmdline-opts/dns-ipv6-addr.d new file mode 100644 index 0000000..581f019 --- /dev/null +++ b/docs/cmdline-opts/dns-ipv6-addr.d @@ -0,0 +1,11 @@ +Long: dns-ipv6-addr +Arg:
+Help: IPv6 address to use for DNS requests +Protocols: DNS +See-also: dns-interface dns-ipv4-addr +Added: 7.33.0 +Requires: c-ares +--- +Tell curl to bind to when making IPv6 DNS requests, so that +the DNS requests originate from this address. The argument should be a +single IPv6 address. diff --git a/docs/cmdline-opts/dns-servers.d b/docs/cmdline-opts/dns-servers.d new file mode 100644 index 0000000..a98fd07 --- /dev/null +++ b/docs/cmdline-opts/dns-servers.d @@ -0,0 +1,10 @@ +Long: dns-servers +Arg: +Help: DNS server addrs to use +Requires: c-ares +Added: 7.33.0 +--- +Set the list of DNS servers to be used instead of the system default. +The list of IP addresses should be separated with commas. Port numbers +may also optionally be given as \fI:\fP after each IP +address. diff --git a/docs/cmdline-opts/dump-header.d b/docs/cmdline-opts/dump-header.d new file mode 100644 index 0000000..05c10af --- /dev/null +++ b/docs/cmdline-opts/dump-header.d @@ -0,0 +1,18 @@ +Long: dump-header +Short: D +Arg: +Help: Write the received headers to +Protocols: HTTP FTP +See-also: output +--- +Write the received protocol headers to the specified file. + +This option is handy to use when you want to store the headers that an HTTP +site sends to you. Cookies from the headers could then be read in a second +curl invocation by using the --cookie option! The --cookie-jar option is a +better way to store cookies. + +When used in FTP, the FTP server response lines are considered being "headers" +and thus are saved there. + +If this option is used several times, the last one will be used. diff --git a/docs/cmdline-opts/egd-file.d b/docs/cmdline-opts/egd-file.d new file mode 100644 index 0000000..c22790f --- /dev/null +++ b/docs/cmdline-opts/egd-file.d @@ -0,0 +1,8 @@ +Long: egd-file +Arg: +Help: EGD socket path for random data +Protocols: TLS +See-also: random-file +--- +Specify the path name to the Entropy Gathering Daemon socket. The socket is +used to seed the random engine for SSL connections. diff --git a/docs/cmdline-opts/engine.d b/docs/cmdline-opts/engine.d new file mode 100644 index 0000000..cde1a47 --- /dev/null +++ b/docs/cmdline-opts/engine.d @@ -0,0 +1,8 @@ +Long: engine +Arg: +Help: Crypto engine to use +Protocols: TLS +--- +Select the OpenSSL crypto engine to use for cipher operations. Use --engine +list to print a list of build-time supported engines. Note that not all (or +none) of the engines may be available at run-time. diff --git a/docs/cmdline-opts/environment.d b/docs/cmdline-opts/environment.d new file mode 100644 index 0000000..6289e53 --- /dev/null +++ b/docs/cmdline-opts/environment.d @@ -0,0 +1,7 @@ +Long: environment +Help: Write results to environment variables +Requires: RISC OS +--- +Sets a range of environment variables, using the names the --write-out option +supports, to allow easier extraction of useful information after having run +curl. diff --git a/docs/cmdline-opts/expect100-timeout.d b/docs/cmdline-opts/expect100-timeout.d new file mode 100644 index 0000000..c88f0b8 --- /dev/null +++ b/docs/cmdline-opts/expect100-timeout.d @@ -0,0 +1,11 @@ +Long: expect100-timeout +Arg: +Help: How long to wait for 100-continue +Protocols: HTTP +Added: 7.47.0 +See-also: connect-timeout +--- +Maximum time in seconds that you allow curl to wait for a 100-continue +response when curl emits an Expects: 100-continue header in its request. By +default curl will wait one second. This option accepts decimal values! When +curl stops waiting, it will continue as if the response has been received. diff --git a/docs/cmdline-opts/fail-early.d b/docs/cmdline-opts/fail-early.d new file mode 100644 index 0000000..4489b4f --- /dev/null +++ b/docs/cmdline-opts/fail-early.d @@ -0,0 +1,18 @@ +Long: fail-early +Help: Fail on first transfer error, do not continue +Added: 7.52.0 +--- +Fail and exit on first detected error. + +When curl is used to do multiple transfers on the command line, it will +attempt to operate on each given URL, one by one. By default, it will ignore +errors if there are more URLs given and the last URL's success will determine +the error code curl returns. So early failures will be "hidden" by subsequent +successful transfers. + +Using this option, curl will instead return an error on the first transfers +that fails, independent on the amount of more URLs that are given on the +command line. This way, no transfer failures go undetected by scripts and +similar. + +This option will apply for all given URLs even if you use --next. diff --git a/docs/cmdline-opts/fail.d b/docs/cmdline-opts/fail.d new file mode 100644 index 0000000..c46c571 --- /dev/null +++ b/docs/cmdline-opts/fail.d @@ -0,0 +1,14 @@ +Long: fail +Short: f +Protocols: HTTP +Help: Fail silently (no output at all) on HTTP errors +--- +Fail silently (no output at all) on server errors. This is mostly done to +better enable scripts etc to better deal with failed attempts. In normal cases +when an HTTP server fails to deliver a document, it returns an HTML document +stating so (which often also describes why and more). This flag will prevent +curl from outputting that and return error 22. + +This method is not fail-safe and there are occasions where non-successful +response codes will slip through, especially when authentication is involved +(response codes 401 and 407). diff --git a/docs/cmdline-opts/false-start.d b/docs/cmdline-opts/false-start.d new file mode 100644 index 0000000..65a8afb --- /dev/null +++ b/docs/cmdline-opts/false-start.d @@ -0,0 +1,12 @@ +Long: false-start +Help: Enable TLS False Start +Protocols: TLS +Added: 7.42.0 +--- +Tells curl to use false start during the TLS handshake. False start is a mode +where a TLS client will start sending application data before verifying the +server's Finished message, thus saving a round trip when performing a full +handshake. + +This is currently only implemented in the NSS and Secure Transport (on iOS 7.0 +or later, or OS X 10.9 or later) backends. diff --git a/docs/cmdline-opts/form-string.d b/docs/cmdline-opts/form-string.d new file mode 100644 index 0000000..8079055 --- /dev/null +++ b/docs/cmdline-opts/form-string.d @@ -0,0 +1,11 @@ +Long: form-string +Help: Specify HTTP multipart POST data +Protocols: HTTP +Arg: +See-also: form +--- +Similar to --form except that the value string for the named parameter is used +literally. Leading \&'@' and \&'<' characters, and the \&';type=' string in +the value have no special meaning. Use this in preference to --form if +there's any possibility that the string value may accidentally trigger the +\&'@' or \&'<' features of --form. diff --git a/docs/cmdline-opts/form.d b/docs/cmdline-opts/form.d new file mode 100644 index 0000000..87a7d07 --- /dev/null +++ b/docs/cmdline-opts/form.d @@ -0,0 +1,54 @@ +Long: form +Short: F +Arg: +Help: Specify HTTP multipart POST data +Protocols: HTTP +Mutexed: data head upload +--- +This lets curl emulate a filled-in form in which a user has pressed the submit +button. This causes curl to POST data using the Content-Type +multipart/form-data according to RFC 2388. This enables uploading of binary +files etc. To force the 'content' part to be a file, prefix the file name with +an @ sign. To just get the content part from a file, prefix the file name with +the symbol <. The difference between @ and < is then that @ makes a file get +attached in the post as a file upload, while the < makes a text field and just +get the contents for that text field from a file. + +Example: to send an image to a server, where \&'profile' is the name of the +form-field to which portrait.jpg will be the input: + + curl -F profile=@portrait.jpg https://example.com/upload.cgi + +To read content from stdin instead of a file, use - as the filename. This goes +for both @ and < constructs. Unfortunately it does not support reading the +file from a named pipe or similar, as it needs the full size before the +transfer starts. + +You can also tell curl what Content-Type to use by using 'type=', in a manner +similar to: + + curl -F "web=@index.html;type=text/html" example.com + +or + + curl -F "name=daniel;type=text/foo" example.com + +You can also explicitly change the name field of a file upload part by setting +filename=, like this: + + curl -F "file=@localfile;filename=nameinpost" example.com + +If filename/path contains ',' or ';', it must be quoted by double-quotes like: + + curl -F "file=@\\"localfile\\";filename=\\"nameinpost\\"" example.com + +or + + curl -F 'file=@"localfile";filename="nameinpost"' example.com + +Note that if a filename/path is quoted by double-quotes, any double-quote +or backslash within the filename must be escaped by backslash. + +See further examples and details in the MANUAL. + +This option can be used multiple times. diff --git a/docs/cmdline-opts/ftp-account.d b/docs/cmdline-opts/ftp-account.d new file mode 100644 index 0000000..013c4f3 --- /dev/null +++ b/docs/cmdline-opts/ftp-account.d @@ -0,0 +1,10 @@ +Long: ftp-account +Arg: +Help: Account data string +Protocols: FTP +Added: 7.13.0 +--- +When an FTP server asks for "account data" after user name and password has +been provided, this data is sent off using the ACCT command. + +If this option is used several times, the last one will be used. diff --git a/docs/cmdline-opts/ftp-alternative-to-user.d b/docs/cmdline-opts/ftp-alternative-to-user.d new file mode 100644 index 0000000..8982ba8 --- /dev/null +++ b/docs/cmdline-opts/ftp-alternative-to-user.d @@ -0,0 +1,10 @@ +Long: ftp-alternative-to-user +Arg: +Help: String to replace USER [name] +Protocols: FTP +Added: 7.15.5 +--- +If authenticating with the USER and PASS commands fails, send this command. +When connecting to Tumbleweed's Secure Transport server over FTPS using a +client certificate, using "SITE AUTH" will tell the server to retrieve the +username from the certificate. diff --git a/docs/cmdline-opts/ftp-create-dirs.d b/docs/cmdline-opts/ftp-create-dirs.d new file mode 100644 index 0000000..ede5710 --- /dev/null +++ b/docs/cmdline-opts/ftp-create-dirs.d @@ -0,0 +1,8 @@ +Long: ftp-create-dirs +Protocols: FTP SFTP +Help: Create the remote dirs if not present +See-also: create-dirs +--- +When an FTP or SFTP URL/operation uses a path that doesn't currently exist on +the server, the standard behavior of curl is to fail. Using this option, curl +will instead attempt to create missing directories. diff --git a/docs/cmdline-opts/ftp-method.d b/docs/cmdline-opts/ftp-method.d new file mode 100644 index 0000000..95aa522 --- /dev/null +++ b/docs/cmdline-opts/ftp-method.d @@ -0,0 +1,21 @@ +Long: ftp-method +Arg: +Help: Control CWD usage +Protocols: FTP +Added: 7.15.1 +--- +Control what method curl should use to reach a file on an FTP(S) +server. The method argument should be one of the following alternatives: +.RS +.IP multicwd +curl does a single CWD operation for each path part in the given URL. For deep +hierarchies this means very many commands. This is how RFC 1738 says it should +be done. This is the default but the slowest behavior. +.IP nocwd +curl does no CWD at all. curl will do SIZE, RETR, STOR etc and give a full +path to the server for all these commands. This is the fastest behavior. +.IP singlecwd +curl does one CWD with the full target directory and then operates on the file +\&"normally" (like in the multicwd case). This is somewhat more standards +compliant than 'nocwd' but without the full penalty of 'multicwd'. +.RE diff --git a/docs/cmdline-opts/ftp-pasv.d b/docs/cmdline-opts/ftp-pasv.d new file mode 100644 index 0000000..44103e2 --- /dev/null +++ b/docs/cmdline-opts/ftp-pasv.d @@ -0,0 +1,16 @@ +Long: ftp-pasv +Help: Use PASV/EPSV instead of PORT +Protocols: FTP +Added: 7.11.0 +See-also: disable-epsv +--- +Use passive mode for the data connection. Passive is the internal default +behavior, but using this option can be used to override a previous --ftp-port +option. + +If this option is used several times, only the first one is used. Undoing an +enforced passive really isn't doable but you must then instead enforce the +correct --ftp-port again. + +Passive mode means that curl will try the EPSV command first and then PASV, +unless --disable-epsv is used. diff --git a/docs/cmdline-opts/ftp-port.d b/docs/cmdline-opts/ftp-port.d new file mode 100644 index 0000000..a852e90 --- /dev/null +++ b/docs/cmdline-opts/ftp-port.d @@ -0,0 +1,32 @@ +Long: ftp-port +Arg:
+Help: Use PORT instead of PASV +Short: P +Protocols: FTP +See-also: ftp-pasv disable-eprt +--- +Reverses the default initiator/listener roles when connecting with FTP. This +option makes curl use active mode. curl then tells the server to connect back +to the client's specified address and port, while passive mode asks the server +to setup an IP address and port for it to connect to.
should be one +of: +.RS +.IP interface +i.e "eth0" to specify which interface's IP address you want to use (Unix only) +.IP "IP address" +i.e "192.168.10.1" to specify the exact IP address +.IP "host name" +i.e "my.host.domain" to specify the machine +.IP "-" +make curl pick the same IP address that is already used for the control +connection +.RE + +If this option is used several times, the last one will be used. Disable the +use of PORT with --ftp-pasv. Disable the attempt to use the EPRT command +instead of PORT by using --disable-eprt. EPRT is really PORT++. + +Since 7.19.5, you can append \&":[start]-[end]\&" to the right of the address, +to tell curl what TCP port range to use. That means you specify a port range, +from a lower to a higher number. A single number works as well, but do note +that it increases the risk of failure since the port may not be available. diff --git a/docs/cmdline-opts/ftp-pret.d b/docs/cmdline-opts/ftp-pret.d new file mode 100644 index 0000000..dac4c35 --- /dev/null +++ b/docs/cmdline-opts/ftp-pret.d @@ -0,0 +1,8 @@ +Long: ftp-pret +Help: Send PRET before PASV +Protocols: FTP +Added: 7.20.0 +--- +Tell curl to send a PRET command before PASV (and EPSV). Certain FTP servers, +mainly drftpd, require this non-standard command for directory listings as +well as up and downloads in PASV mode. diff --git a/docs/cmdline-opts/ftp-skip-pasv-ip.d b/docs/cmdline-opts/ftp-skip-pasv-ip.d new file mode 100644 index 0000000..da6ab11 --- /dev/null +++ b/docs/cmdline-opts/ftp-skip-pasv-ip.d @@ -0,0 +1,12 @@ +Long: ftp-skip-pasv-ip +Help: Skip the IP address for PASV +Protocols: FTP +Added: 7.14.2 +See-also: ftp-pasv +--- +Tell curl to not use the IP address the server suggests in its response +to curl's PASV command when curl connects the data connection. Instead curl +will re-use the same IP address it already uses for the control +connection. + +This option has no effect if PORT, EPRT or EPSV is used instead of PASV. diff --git a/docs/cmdline-opts/ftp-ssl-ccc-mode.d b/docs/cmdline-opts/ftp-ssl-ccc-mode.d new file mode 100644 index 0000000..be10294 --- /dev/null +++ b/docs/cmdline-opts/ftp-ssl-ccc-mode.d @@ -0,0 +1,11 @@ +Long: ftp-ssl-ccc-mode +Arg: +Help: Set CCC mode +Protocols: FTP +Added: 7.16.2 +See-also: ftp-ssl-ccc +--- +Sets the CCC mode. The passive mode will not initiate the shutdown, but +instead wait for the server to do it, and will not reply to the shutdown from +the server. The active mode initiates the shutdown and waits for a reply from +the server. diff --git a/docs/cmdline-opts/ftp-ssl-ccc.d b/docs/cmdline-opts/ftp-ssl-ccc.d new file mode 100644 index 0000000..c6edc5b --- /dev/null +++ b/docs/cmdline-opts/ftp-ssl-ccc.d @@ -0,0 +1,10 @@ +Long: ftp-ssl-ccc +Help: Send CCC after authenticating +Protocols: FTP +See-also: ssl ftp-ssl-ccc-mode +Added: 7.16.1 +--- +Use CCC (Clear Command Channel) Shuts down the SSL/TLS layer after +authenticating. The rest of the control channel communication will be +unencrypted. This allows NAT routers to follow the FTP transaction. The +default mode is passive. diff --git a/docs/cmdline-opts/ftp-ssl-control.d b/docs/cmdline-opts/ftp-ssl-control.d new file mode 100644 index 0000000..87a8225 --- /dev/null +++ b/docs/cmdline-opts/ftp-ssl-control.d @@ -0,0 +1,8 @@ +Long: ftp-ssl-control +Help: Require SSL/TLS for FTP login, clear for transfer +Protocols: FTP +Added: 7.16.0 +--- +Require SSL/TLS for the FTP login, clear for transfer. Allows secure +authentication, but non-encrypted data transfers for efficiency. Fails the +transfer if the server doesn't support SSL/TLS. diff --git a/docs/cmdline-opts/gen.pl b/docs/cmdline-opts/gen.pl new file mode 100755 index 0000000..91e893f --- /dev/null +++ b/docs/cmdline-opts/gen.pl @@ -0,0 +1,383 @@ +#!/usr/bin/perl + +=begin comment + +This script generates the manpage. + +Example: gen.pl mainpage > curl.1 + +Dev notes: + +We open *input* files in :crlf translation (a no-op on many platforms) in +case we have CRLF line endings in Windows but a perl that defaults to LF. +Unfortunately it seems some perls like msysgit can't handle a global input-only +:crlf so it has to be specified on each file open for text input. + +=end comment +=cut + +my $some_dir=$ARGV[1] || "."; + +opendir(my $dh, $some_dir) || die "Can't opendir $some_dir: $!"; +my @s = grep { /\.d$/ && -f "$some_dir/$_" } readdir($dh); +closedir $dh; + +my %optshort; +my %optlong; +my %helplong; +my %arglong; +my %redirlong; +my %protolong; + +# get the long name version, return the man page string +sub manpageify { + my ($k)=@_; + my $l; + if($optlong{$k} ne "") { + # both short + long + $l = "\\fI-".$optlong{$k}.", --$k\\fP"; + } + else { + # only long + $l = "\\fI--$k\\fP"; + } + return $l; +} + +sub printdesc { + my @desc = @_; + for my $d (@desc) { + # skip lines starting with space (examples) + if($d =~ /^[^ ]/) { + for my $k (keys %optlong) { + my $l = manpageify($k); + $d =~ s/--$k([^a-z0-9_-])/$l$1/; + } + } + print $d; + } +} + +sub seealso { + my($standalone, $data)=@_; + if($standalone) { + return sprintf + ".SH \"SEE ALSO\"\n$data\n"; + } + else { + return "See also $data. "; + } +} + +sub overrides { + my ($standalone, $data)=@_; + if($standalone) { + return ".SH \"OVERRIDES\"\n$data\n"; + } + else { + return $data; + } +} + +sub protocols { + my ($standalone, $data)=@_; + if($standalone) { + return ".SH \"PROTOCOLS\"\n$data\n"; + } + else { + return "($data) "; + } +} + +sub added { + my ($standalone, $data)=@_; + if($standalone) { + return ".SH \"ADDED\"\nAdded in curl version $data\n"; + } + else { + return "Added in $data. "; + } +} + +sub single { + my ($f, $standalone)=@_; + open(F, "<:crlf", "$some_dir/$f") || + return 1; + my $short; + my $long; + my $tags; + my $added; + my $protocols; + my $arg; + my $mutexed; + my $requires; + my $seealso; + my $magic; # cmdline special option + while() { + if(/^Short: *(.)/i) { + $short=$1; + } + elsif(/^Long: *(.*)/i) { + $long=$1; + } + elsif(/^Added: *(.*)/i) { + $added=$1; + } + elsif(/^Tags: *(.*)/i) { + $tags=$1; + } + elsif(/^Arg: *(.*)/i) { + $arg=$1; + } + elsif(/^Magic: *(.*)/i) { + $magic=$1; + } + elsif(/^Mutexed: *(.*)/i) { + $mutexed=$1; + } + elsif(/^Protocols: *(.*)/i) { + $protocols=$1; + } + elsif(/^See-also: *(.*)/i) { + $seealso=$1; + } + elsif(/^Requires: *(.*)/i) { + $requires=$1; + } + elsif(/^Help: *(.*)/i) { + ; + } + elsif(/^---/) { + if(!$long) { + print STDERR "WARN: no 'Long:' in $f\n"; + } + last; + } + else { + chomp; + print STDERR "WARN: unrecognized line in $f, ignoring:\n:'$_';" + } + } + my @dest; + while() { + push @desc, $_; + } + close(F); + my $opt; + if(defined($short) && $long) { + $opt = "-$short, --$long"; + } + elsif($short && !$long) { + $opt = "-$short"; + } + elsif($long && !$short) { + $opt = "--$long"; + } + + if($arg) { + $opt .= " $arg"; + } + + if($standalone) { + print ".TH curl 1 \"30 Nov 2016\" \"curl 7.52.0\" \"curl manual\"\n"; + print ".SH OPTION\n"; + print "curl $opt\n"; + } + else { + print ".IP \"$opt\"\n"; + } + if($protocols) { + print protocols($standalone, $protocols); + } + + if($standalone) { + print ".SH DESCRIPTION\n"; + } + + printdesc(@desc); + undef @desc; + + my @foot; + if($seealso) { + my @m=split(/ /, $seealso); + my $mstr; + for my $k (@m) { + my $l = manpageify($k); + $mstr .= sprintf "%s$l", $mstr?" and ":""; + } + push @foot, seealso($standalone, $mstr); + } + if($requires) { + my $l = manpageify($long); + push @foot, "$l requires that the underlying libcurl". + " was built to support $requires. "; + } + if($mutexed) { + my @m=split(/ /, $mutexed); + my $mstr; + for my $k (@m) { + my $l = manpageify($k); + $mstr .= sprintf "%s$l", $mstr?" and ":""; + } + push @foot, overrides($standalone, "This option overrides $mstr. "); + } + if($added) { + push @foot, added($standalone, $added); + } + if($foot[0]) { + print "\n"; + my $f = join("", @foot); + $f =~ s/ +\z//; # remove trailing space + print "$f\n"; + } + return 0; +} + +sub getshortlong { + my ($f)=@_; + open(F, "<:crlf", "$some_dir/$f"); + my $short; + my $long; + my $help; + my $arg; + my $protocols; + while() { + if(/^Short: (.)/i) { + $short=$1; + } + elsif(/^Long: (.*)/i) { + $long=$1; + } + elsif(/^Help: (.*)/i) { + $help=$1; + } + elsif(/^Arg: (.*)/i) { + $arg=$1; + } + elsif(/^Protocols: (.*)/i) { + $protocols=$1; + } + elsif(/^---/) { + last; + } + } + close(F); + if($short) { + $optshort{$short}=$long; + } + if($long) { + $optlong{$long}=$short; + $helplong{$long}=$help; + $arglong{$long}=$arg; + $protolong{$long}=$protocols; + } +} + +sub indexoptions { + foreach my $f (@s) { + getshortlong($f); + } +} + +sub header { + my ($f)=@_; + open(F, "<:crlf", "$some_dir/$f"); + my @d; + while() { + push @d, $_; + } + close(F); + printdesc(@d); +} + +sub listhelp { + foreach my $f (sort keys %helplong) { + my $long = $f; + my $short = $optlong{$long}; + my $opt; + + if(defined($short) && $long) { + $opt = "-$short, --$long"; + } + elsif($long && !$short) { + $opt = " --$long"; + } + + my $arg = $arglong{$long}; + if($arg) { + $opt .= " $arg"; + } + + my $line = sprintf " %-19s %s\n", $opt, $helplong{$f}; + + if(length($line) > 79) { + print STDERR "WARN: the --$long line is too long\n"; + } + print $line; + } +} + +sub mainpage { + # show the page header + header("page-header"); + + # output docs for all options + foreach my $f (sort @s) { + single($f, 0); + } + + header("page-footer"); +} + +sub showonly { + my ($f) = @_; + if(single($f, 1)) { + print STDERR "$f: failed\n"; + } +} + +sub showprotocols { + my %prots; + foreach my $f (keys %optlong) { + my @p = split(/ /, $protolong{$f}); + for my $p (@p) { + $prots{$p}++; + } + } + for(sort keys %prots) { + printf "$_ (%d options)\n", $prots{$_}; + } +} + +sub getargs { + my $f; + do { + $f = shift @ARGV; + if($f eq "mainpage") { + mainpage(); + return; + } + elsif($f eq "listhelp") { + listhelp(); + return; + } + elsif($f eq "single") { + showonly(shift @ARGV); + return; + } + elsif($f eq "protos") { + showprotocols(); + return; + } + } while($f); + + print "Usage: gen.pl [srcdir]\n"; +} + +#------------------------------------------------------------------------ + +# learn all existing options +indexoptions(); + +getargs(); + diff --git a/docs/cmdline-opts/get.d b/docs/cmdline-opts/get.d new file mode 100644 index 0000000..be7cb25 --- /dev/null +++ b/docs/cmdline-opts/get.d @@ -0,0 +1,15 @@ +Long: get +Short: G +Help: Put the post data in the URL and use GET +--- +When used, this option will make all data specified with --data, --data-binary +or --data-urlencode to be used in an HTTP GET request instead of the POST +request that otherwise would be used. The data will be appended to the URL +with a '?' separator. + +If used in combination with --head, the POST data will instead be appended to +the URL with a HEAD request. + +If this option is used several times, only the first one is used. This is +because undoing a GET doesn't make sense, but you should then instead enforce +the alternative method you prefer. diff --git a/docs/cmdline-opts/globoff.d b/docs/cmdline-opts/globoff.d new file mode 100644 index 0000000..fff6516 --- /dev/null +++ b/docs/cmdline-opts/globoff.d @@ -0,0 +1,8 @@ +Long: globoff +Short: g +Help: Disable URL sequences and ranges using {} and [] +--- +This option switches off the "URL globbing parser". When you set this option, +you can specify URLs that contain the letters {}[] without having them being +interpreted by curl itself. Note that these letters are not normal legal URL +contents but they should be encoded according to the URI standard. diff --git a/docs/cmdline-opts/head.d b/docs/cmdline-opts/head.d new file mode 100644 index 0000000..350a100 --- /dev/null +++ b/docs/cmdline-opts/head.d @@ -0,0 +1,8 @@ +Long: head +Short: I +Help: Show document info only +Protocols: HTTP FTP FILE +--- +Fetch the headers only! HTTP-servers feature the command HEAD which this uses +to get nothing but the header of a document. When used on an FTP or FILE file, +curl displays the file size and last modification time only. diff --git a/docs/cmdline-opts/header.d b/docs/cmdline-opts/header.d new file mode 100644 index 0000000..90af735 --- /dev/null +++ b/docs/cmdline-opts/header.d @@ -0,0 +1,38 @@ +Long: header +Short: H +Arg:
+Help: Pass custom header LINE to server +Protocols: HTTP +--- + +Extra header to include in the request when sending HTTP to a server. You may +specify any number of extra headers. Note that if you should add a custom +header that has the same name as one of the internal ones curl would use, your +externally set header will be used instead of the internal one. This allows +you to make even trickier stuff than curl would normally do. You should not +replace internally set headers without knowing perfectly well what you're +doing. Remove an internal header by giving a replacement without content on +the right side of the colon, as in: -H \&"Host:". If you send the custom +header with no-value then its header must be terminated with a semicolon, such +as \-H \&"X-Custom-Header;" to send "X-Custom-Header:". + +curl will make sure that each header you add/replace is sent with the proper +end-of-line marker, you should thus \fBnot\fP add that as a part of the header +content: do not add newlines or carriage returns, they will only mess things up +for you. + +See also the --user-agent and --referer options. + +Starting in 7.37.0, you need --proxy-header to send custom headers intended +for a proxy. + +Example: + + curl -H "X-First-Name: Joe" http://example.com/ + +\fBWARNING\fP: headers set with this option will be set in all requests - even +after redirects are followed, like when told with --location. This can lead to +the header being sent to other hosts than the original host, so sensitive +headers should be used with caution combined with following redirects. + +This option can be used multiple times to add/replace/remove multiple headers. diff --git a/docs/cmdline-opts/help.d b/docs/cmdline-opts/help.d new file mode 100644 index 0000000..64aa696 --- /dev/null +++ b/docs/cmdline-opts/help.d @@ -0,0 +1,6 @@ +Long: help +Short: h +Help: This help text +--- +Usage help. This lists all current command line options with a short +description. diff --git a/docs/cmdline-opts/hostpubmd5.d b/docs/cmdline-opts/hostpubmd5.d new file mode 100644 index 0000000..a851158 --- /dev/null +++ b/docs/cmdline-opts/hostpubmd5.d @@ -0,0 +1,9 @@ +Long: hostpubmd5 +Arg: +Help: Acceptable MD5 hash of the host public key +Protocols: SFTP SCP +Added: 7.17.1 +--- +Pass a string containing 32 hexadecimal digits. The string should +be the 128 bit MD5 checksum of the remote host's public key, curl will refuse +the connection with the host unless the md5sums match. diff --git a/docs/cmdline-opts/http1.0.d b/docs/cmdline-opts/http1.0.d new file mode 100644 index 0000000..d9bbd76 --- /dev/null +++ b/docs/cmdline-opts/http1.0.d @@ -0,0 +1,10 @@ +Short: 0 +Long: http1.0 +Tags: Versions +Protocols: HTTP +Added: +Mutexed: http1.1 http2 +Help: Use HTTP 1.0 +--- +Tells curl to use HTTP version 1.0 instead of using its internally preferred +HTTP version. diff --git a/docs/cmdline-opts/http1.1.d b/docs/cmdline-opts/http1.1.d new file mode 100644 index 0000000..f1e6b5c --- /dev/null +++ b/docs/cmdline-opts/http1.1.d @@ -0,0 +1,8 @@ +Long: http1.1 +Tags: Versions +Protocols: HTTP +Added: 7.33.0 +Mutexed: http1.0 http2 +Help: Use HTTP 1.1 +--- +Tells curl to use HTTP version 1.1. diff --git a/docs/cmdline-opts/http2-prior-knowledge.d b/docs/cmdline-opts/http2-prior-knowledge.d new file mode 100644 index 0000000..f793f77 --- /dev/null +++ b/docs/cmdline-opts/http2-prior-knowledge.d @@ -0,0 +1,12 @@ +Long: http2-prior-knowledge +Tags: Versions +Protocols: HTTP +Added: 7.49.0 +Mutexed: http1.1 http1.0 http2 +Requires: HTTP/2 +Help: Use HTTP 2 without HTTP/1.1 Upgrade +--- +Tells curl to issue its non-TLS HTTP requests using HTTP/2 without HTTP/1.1 +Upgrade. It requires prior knowledge that the server supports HTTP/2 straight +away. HTTPS requests will still do HTTP/2 the standard way with negotiated +protocol version in the TLS handshake. diff --git a/docs/cmdline-opts/http2.d b/docs/cmdline-opts/http2.d new file mode 100644 index 0000000..04cff00 --- /dev/null +++ b/docs/cmdline-opts/http2.d @@ -0,0 +1,10 @@ +Long: http2 +Tags: Versions +Protocols: HTTP +Added: 7.33.0 +Mutexed: http1.1 http1.0 http2-prior-knowledge +Requires: HTTP/2 +See-also: no-alpn +Help: Use HTTP 2 +--- +Tells curl to use HTTP version 2. diff --git a/docs/cmdline-opts/ignore-content-length.d b/docs/cmdline-opts/ignore-content-length.d new file mode 100644 index 0000000..53524f5 --- /dev/null +++ b/docs/cmdline-opts/ignore-content-length.d @@ -0,0 +1,10 @@ +Long: ignore-content-length +Help: Ignore the size of the remote resource +Protocols: FTP HTTP +--- +For HTTP, Ignore the Content-Length header. This is particularly useful for +servers running Apache 1.x, which will report incorrect Content-Length for +files larger than 2 gigabytes. + +For FTP (since 7.46.0), skip the RETR command to figure out the size before +downloading a file. diff --git a/docs/cmdline-opts/include.d b/docs/cmdline-opts/include.d new file mode 100644 index 0000000..e55d516 --- /dev/null +++ b/docs/cmdline-opts/include.d @@ -0,0 +1,7 @@ +Long: include +Short: i +Help: Include protocol headers in the output +See-also: verbose +--- +Include the HTTP-header in the output. The HTTP-header includes things like +server-name, date of the document, HTTP-version and more... diff --git a/docs/cmdline-opts/insecure.d b/docs/cmdline-opts/insecure.d new file mode 100644 index 0000000..1dd0fa8 --- /dev/null +++ b/docs/cmdline-opts/insecure.d @@ -0,0 +1,12 @@ +Long: insecure +Short: k +Help: Allow insecure connections when using SSL +Protocols: TLS +--- +This option explicitly allows curl to perform "insecure" SSL connections and +transfers. All SSL connections are attempted to be made secure by using the CA +certificate bundle installed by default. This makes all connections considered +\&"insecure" fail unless --insecure is used. + +See this online resource for further details: + https://curl.haxx.se/docs/sslcerts.html diff --git a/docs/cmdline-opts/interface.d b/docs/cmdline-opts/interface.d new file mode 100644 index 0000000..da84cd2 --- /dev/null +++ b/docs/cmdline-opts/interface.d @@ -0,0 +1,12 @@ +Long: interface +Arg: +Help: Use network INTERFACE (or address) +See-also: dns-interface +--- + +Perform an operation using a specified interface. You can enter interface +name, IP address or host name. An example could look like: + + curl --interface eth0:1 https://www.example.com/ + +If this option is used several times, the last one will be used. diff --git a/docs/cmdline-opts/ipv4.d b/docs/cmdline-opts/ipv4.d new file mode 100644 index 0000000..9c40c8c --- /dev/null +++ b/docs/cmdline-opts/ipv4.d @@ -0,0 +1,12 @@ +Short: 4 +Long: ipv4 +Tags: Versions +Protocols: +Added: +Mutexed: ipv6 +Requires: +See-also: http1.1 http2 +Help: Resolve names to IPv4 addresses +--- +This option tells curl to resolve names to IPv4 addresses only, and not for +example try IPv6. diff --git a/docs/cmdline-opts/ipv6.d b/docs/cmdline-opts/ipv6.d new file mode 100644 index 0000000..c2392e7 --- /dev/null +++ b/docs/cmdline-opts/ipv6.d @@ -0,0 +1,12 @@ +Short: 6 +Long: ipv6 +Tags: Versions +Protocols: +Added: +Mutexed: ipv6 +Requires: +See-also: http1.1 http2 +Help: Resolve names to IPv6 addresses +--- +This option tells curl to resolve names to IPv6 addresses only, and not for +example try IPv4. diff --git a/docs/cmdline-opts/junk-session-cookies.d b/docs/cmdline-opts/junk-session-cookies.d new file mode 100644 index 0000000..40ccd9c --- /dev/null +++ b/docs/cmdline-opts/junk-session-cookies.d @@ -0,0 +1,10 @@ +Long: junk-session-cookies +Short: j +Help: Ignore session cookies read from file +Protocols: HTTP +See-also: cookie cookie-jar +--- +When curl is told to read cookies from a given file, this option will make it +discard all "session cookies". This will basically have the same effect as if +a new session is started. Typical browsers always discard session cookies when +they're closed down. diff --git a/docs/cmdline-opts/keepalive-time.d b/docs/cmdline-opts/keepalive-time.d new file mode 100644 index 0000000..c816e13 --- /dev/null +++ b/docs/cmdline-opts/keepalive-time.d @@ -0,0 +1,13 @@ +Long: keepalive-time +Arg: +Help: Interval time for keepalive probes +Added: 7.18.0 +--- +This option sets the time a connection needs to remain idle before sending +keepalive probes and the time between individual keepalive probes. It is +currently effective on operating systems offering the TCP_KEEPIDLE and +TCP_KEEPINTVL socket options (meaning Linux, recent AIX, HP-UX and more). This +option has no effect if --no-keepalive is used. + +If this option is used several times, the last one will be used. If +unspecified, the option defaults to 60 seconds. diff --git a/docs/cmdline-opts/key-type.d b/docs/cmdline-opts/key-type.d new file mode 100644 index 0000000..bf39bcd --- /dev/null +++ b/docs/cmdline-opts/key-type.d @@ -0,0 +1,9 @@ +Long: key-type +Arg: +Help: Private key file type (DER/PEM/ENG) +Protocols: TLS +--- +Private key file type. Specify which type your --key provided private key +is. DER, PEM, and ENG are supported. If not specified, PEM is assumed. + +If this option is used several times, the last one will be used. diff --git a/docs/cmdline-opts/key.d b/docs/cmdline-opts/key.d new file mode 100644 index 0000000..fbf583a --- /dev/null +++ b/docs/cmdline-opts/key.d @@ -0,0 +1,10 @@ +Long: key +Arg: +Protocols: TLS SSH +Help: Private key file name +--- +Private key file name. Allows you to provide your private key in this separate +file. For SSH, if not specified, curl tries the following candidates in order: +'~/.ssh/id_rsa', '~/.ssh/id_dsa', './id_rsa', './id_dsa'. + +If this option is used several times, the last one will be used. diff --git a/docs/cmdline-opts/krb.d b/docs/cmdline-opts/krb.d new file mode 100644 index 0000000..19547af --- /dev/null +++ b/docs/cmdline-opts/krb.d @@ -0,0 +1,11 @@ +Long: krb +Arg: +Help: Enable Kerberos with security +Protocols: FTP +Requires: Kerberos +--- +Enable Kerberos authentication and use. The level must be entered and should +be one of 'clear', 'safe', 'confidential', or 'private'. Should you use a +level that is not one of these, 'private' will instead be used. + +If this option is used several times, the last one will be used. diff --git a/docs/cmdline-opts/libcurl.d b/docs/cmdline-opts/libcurl.d new file mode 100644 index 0000000..ef132fe --- /dev/null +++ b/docs/cmdline-opts/libcurl.d @@ -0,0 +1,11 @@ +Long: libcurl +Arg: +Help: Dump libcurl equivalent code of this command line +Added: 7.16.1 +--- +Append this option to any ordinary curl command line, and you will get a +libcurl-using C source code written to the file that does the equivalent +of what your command-line operation does! + +If this option is used several times, the last given file name will be +used. diff --git a/docs/cmdline-opts/limit-rate.d b/docs/cmdline-opts/limit-rate.d new file mode 100644 index 0000000..8784a84 --- /dev/null +++ b/docs/cmdline-opts/limit-rate.d @@ -0,0 +1,18 @@ +Long: limit-rate +Arg: +Help: Limit transfer speed to RATE +--- +Specify the maximum transfer rate you want curl to use - for both downloads +and uploads. This feature is useful if you have a limited pipe and you'd like +your transfer not to use your entire bandwidth. To make it slower than it +otherwise would be. + +The given speed is measured in bytes/second, unless a suffix is appended. +Appending 'k' or 'K' will count the number as kilobytes, 'm' or M' makes it +megabytes, while 'g' or 'G' makes it gigabytes. Examples: 200K, 3m and 1G. + +If you also use the --speed-limit option, that option will take precedence and +might cripple the rate-limiting slightly, to help keeping the speed-limit +logic working. + +If this option is used several times, the last one will be used. diff --git a/docs/cmdline-opts/list-only.d b/docs/cmdline-opts/list-only.d new file mode 100644 index 0000000..4c56304 --- /dev/null +++ b/docs/cmdline-opts/list-only.d @@ -0,0 +1,24 @@ +Long: list-only +Short: l +Protocols: FTP POP3 +Help: List only mode +Added: 7.21.5 +--- +(FTP) +When listing an FTP directory, this switch forces a name-only view. This is +especially useful if the user wants to machine-parse the contents of an FTP +directory since the normal directory view doesn't use a standard look or +format. When used like this, the option causes a NLST command to be sent to +the server instead of LIST. + +Note: Some FTP servers list only files in their response to NLST; they do not +include sub-directories and symbolic links. + +(POP3) +When retrieving a specific email from POP3, this switch forces a LIST command +to be performed instead of RETR. This is particularly useful if the user wants +to see if a specific message id exists on the server and what size it is. + +Note: When combined with --request, this option can be used to send an UIDL +command instead, so the user may use the email's unique identifier rather than +it's message id to make the request. diff --git a/docs/cmdline-opts/local-port.d b/docs/cmdline-opts/local-port.d new file mode 100644 index 0000000..d96b46e --- /dev/null +++ b/docs/cmdline-opts/local-port.d @@ -0,0 +1,9 @@ +Long: local-port +Arg: +Help: Force use of RANGE for local port numbers +Added: 7.15.2 +--- +Set a preferred single number or range (FROM-TO) of local port numbers to use +for the connection(s). Note that port numbers by nature are a scarce resource +that will be busy at times so setting this range to something too narrow might +cause unnecessary connection setup failures. diff --git a/docs/cmdline-opts/location-trusted.d b/docs/cmdline-opts/location-trusted.d new file mode 100644 index 0000000..995a871 --- /dev/null +++ b/docs/cmdline-opts/location-trusted.d @@ -0,0 +1,9 @@ +Long: location-trusted +Help: Like --location, and send auth to other hosts +Protocols: HTTP +See-also: user +--- +Like --location, but will allow sending the name + password to all hosts that +the site may redirect to. This may or may not introduce a security breach if +the site redirects you to a site to which you'll send your authentication info +(which is plaintext in the case of HTTP Basic authentication). diff --git a/docs/cmdline-opts/location.d b/docs/cmdline-opts/location.d new file mode 100644 index 0000000..7c70e69 --- /dev/null +++ b/docs/cmdline-opts/location.d @@ -0,0 +1,23 @@ +Long: location +Short: L +Help: Follow redirects +Protocols: HTTP +--- +If the server reports that the requested page has moved to a different +location (indicated with a Location: header and a 3XX response code), this +option will make curl redo the request on the new place. If used together with +--include or --head, headers from all requested pages will be shown. When +authentication is used, curl only sends its credentials to the initial +host. If a redirect takes curl to a different host, it won't be able to +intercept the user+password. See also --location-trusted on how to change +this. You can limit the amount of redirects to follow by using the +--max-redirs option. + +When curl follows a redirect and the request is not a plain GET (for example +POST or PUT), it will do the following request with a GET if the HTTP response +was 301, 302, or 303. If the response code was any other 3xx code, curl will +re-send the following request using the same unmodified method. + +You can tell curl to not change the non-GET request method to GET after a 30x +response by using the dedicated options for that: --post301, --post302 and +--post303. diff --git a/docs/cmdline-opts/login-options.d b/docs/cmdline-opts/login-options.d new file mode 100644 index 0000000..8bad051 --- /dev/null +++ b/docs/cmdline-opts/login-options.d @@ -0,0 +1,14 @@ +Long: login-options +Arg: +Protocols: IMAP POP3 SMTP +Help: Server login options +Added: 7.34.0 +--- +Specify the login options to use during server authentication. + +You can use the login options to specify protocol specific options that may +be used during authentication. At present only IMAP, POP3 and SMTP support +login options. For more information about the login options please see +RFC 2384, RFC 5092 and IETF draft draft-earhart-url-smtp-00.txt + +If this option is used several times, the last one will be used. diff --git a/docs/cmdline-opts/mail-auth.d b/docs/cmdline-opts/mail-auth.d new file mode 100644 index 0000000..70cf0ed --- /dev/null +++ b/docs/cmdline-opts/mail-auth.d @@ -0,0 +1,10 @@ +Long: mail-auth +Arg:
+Protocols: SMTP +Help: Originator address of the original email +Added: 7.25.0 +See-also: mail-rcpt mail-from +--- +Specify a single address. This will be used to specify the authentication +address (identity) of a submitted message that is being relayed to another +server. diff --git a/docs/cmdline-opts/mail-from.d b/docs/cmdline-opts/mail-from.d new file mode 100644 index 0000000..1d93234 --- /dev/null +++ b/docs/cmdline-opts/mail-from.d @@ -0,0 +1,8 @@ +Long: mail-from +Arg:
+Help: Mail from this address +Protocols: SMTP +Added: 7.20.0 +See-also: mail-rcpt mail-auth +--- +Specify a single address that the given mail should get sent from. diff --git a/docs/cmdline-opts/mail-rcpt.d b/docs/cmdline-opts/mail-rcpt.d new file mode 100644 index 0000000..d747cea --- /dev/null +++ b/docs/cmdline-opts/mail-rcpt.d @@ -0,0 +1,19 @@ +Long: mail-rcpt +Arg:
+Help: Mail from this address +Protocols: SMTP +Added: 7.20.0 +--- +Specify a single address, user name or mailing list name. Repeat this +option several times to send to multiple recipients. + +When performing a mail transfer, the recipient should specify a valid email +address to send the mail to. + +When performing an address verification (VRFY command), the recipient should be +specified as the user name or user name and domain (as per Section 3.5 of +RFC5321). (Added in 7.34.0) + +When performing a mailing list expand (EXPN command), the recipient should be +specified using the mailing list name, such as "Friends" or "London-Office". +(Added in 7.34.0) diff --git a/docs/cmdline-opts/manual.d b/docs/cmdline-opts/manual.d new file mode 100644 index 0000000..a9dbb0c --- /dev/null +++ b/docs/cmdline-opts/manual.d @@ -0,0 +1,5 @@ +Long: manual +Short: M +Help: Display the full manual +--- +Manual. Display the huge help text. diff --git a/docs/cmdline-opts/max-filesize.d b/docs/cmdline-opts/max-filesize.d new file mode 100644 index 0000000..e92ef58 --- /dev/null +++ b/docs/cmdline-opts/max-filesize.d @@ -0,0 +1,12 @@ +Long: max-filesize +Arg: +Help: Maximum file size to download +See-also: limit-rate +--- +Specify the maximum size (in bytes) of a file to download. If the file +requested is larger than this value, the transfer will not start and curl will +return with exit code 63. + +\fBNOTE:\fP The file size is not always known prior to download, and for such +files this option has no effect even if the file transfer ends up being larger +than this given limit. This concerns both FTP and HTTP transfers. diff --git a/docs/cmdline-opts/max-redirs.d b/docs/cmdline-opts/max-redirs.d new file mode 100644 index 0000000..04b824b --- /dev/null +++ b/docs/cmdline-opts/max-redirs.d @@ -0,0 +1,11 @@ +Long: max-redirs +Arg: +Help: Maximum number of redirects allowed +Protocols: HTTP +--- +Set maximum number of redirection-followings allowed. When --location is used, +is used to prevent curl from following redirections \&"in absurdum". By +default, the limit is set to 50 redirections. Set this option to -1 to make it +unlimited. + +If this option is used several times, the last one will be used. diff --git a/docs/cmdline-opts/max-time.d b/docs/cmdline-opts/max-time.d new file mode 100644 index 0000000..c22343d --- /dev/null +++ b/docs/cmdline-opts/max-time.d @@ -0,0 +1,13 @@ +Long: max-time +Short: m +Arg: