1*6236dae4SAndroid Build Coastguard Worker _ _ ____ _ 2*6236dae4SAndroid Build Coastguard Worker ___| | | | _ \| | 3*6236dae4SAndroid Build Coastguard Worker / __| | | | |_) | | 4*6236dae4SAndroid Build Coastguard Worker | (__| |_| | _ <| |___ 5*6236dae4SAndroid Build Coastguard Worker \___|\___/|_| \_\_____| 6*6236dae4SAndroid Build Coastguard Worker 7*6236dae4SAndroid Build Coastguard Worker Things that could be nice to do in the future 8*6236dae4SAndroid Build Coastguard Worker 9*6236dae4SAndroid Build Coastguard Worker Things to do in project curl. Please tell us what you think, contribute and 10*6236dae4SAndroid Build Coastguard Worker send us patches that improve things. 11*6236dae4SAndroid Build Coastguard Worker 12*6236dae4SAndroid Build Coastguard Worker Be aware that these are things that we could do, or have once been considered 13*6236dae4SAndroid Build Coastguard Worker things we could do. If you want to work on any of these areas, please 14*6236dae4SAndroid Build Coastguard Worker consider bringing it up for discussions first on the mailing list so that we 15*6236dae4SAndroid Build Coastguard Worker all agree it is still a good idea for the project. 16*6236dae4SAndroid Build Coastguard Worker 17*6236dae4SAndroid Build Coastguard Worker All bugs documented in the KNOWN_BUGS document are subject for fixing. 18*6236dae4SAndroid Build Coastguard Worker 19*6236dae4SAndroid Build Coastguard Worker 1. libcurl 20*6236dae4SAndroid Build Coastguard Worker 1.1 TFO support on Windows 21*6236dae4SAndroid Build Coastguard Worker 1.2 Consult %APPDATA% also for .netrc 22*6236dae4SAndroid Build Coastguard Worker 1.3 struct lifreq 23*6236dae4SAndroid Build Coastguard Worker 1.4 alt-svc sharing 24*6236dae4SAndroid Build Coastguard Worker 1.5 get rid of PATH_MAX 25*6236dae4SAndroid Build Coastguard Worker 1.6 thread-safe sharing 26*6236dae4SAndroid Build Coastguard Worker 1.8 CURLOPT_RESOLVE for any port number 27*6236dae4SAndroid Build Coastguard Worker 1.9 Cache negative name resolves 28*6236dae4SAndroid Build Coastguard Worker 1.10 auto-detect proxy 29*6236dae4SAndroid Build Coastguard Worker 1.11 minimize dependencies with dynamically loaded modules 30*6236dae4SAndroid Build Coastguard Worker 1.12 updated DNS server while running 31*6236dae4SAndroid Build Coastguard Worker 1.13 c-ares and CURLOPT_OPENSOCKETFUNCTION 32*6236dae4SAndroid Build Coastguard Worker 1.14 connect to multiple IPs in parallel 33*6236dae4SAndroid Build Coastguard Worker 1.15 Monitor connections in the connection pool 34*6236dae4SAndroid Build Coastguard Worker 1.16 Try to URL encode given URL 35*6236dae4SAndroid Build Coastguard Worker 1.17 Add support for IRIs 36*6236dae4SAndroid Build Coastguard Worker 1.18 try next proxy if one does not work 37*6236dae4SAndroid Build Coastguard Worker 1.19 provide timing info for each redirect 38*6236dae4SAndroid Build Coastguard Worker 1.20 SRV and URI DNS records 39*6236dae4SAndroid Build Coastguard Worker 1.21 netrc caching and sharing 40*6236dae4SAndroid Build Coastguard Worker 1.22 CURLINFO_PAUSE_STATE 41*6236dae4SAndroid Build Coastguard Worker 1.23 Offer API to flush the connection pool 42*6236dae4SAndroid Build Coastguard Worker 1.25 Expose tried IP addresses that failed 43*6236dae4SAndroid Build Coastguard Worker 1.28 FD_CLOEXEC 44*6236dae4SAndroid Build Coastguard Worker 1.29 WebSocket read callback 45*6236dae4SAndroid Build Coastguard Worker 1.30 config file parsing 46*6236dae4SAndroid Build Coastguard Worker 1.31 erase secrets from heap/stack after use 47*6236dae4SAndroid Build Coastguard Worker 1.32 add asynch getaddrinfo support 48*6236dae4SAndroid Build Coastguard Worker 1.33 make DoH inherit more transfer properties 49*6236dae4SAndroid Build Coastguard Worker 50*6236dae4SAndroid Build Coastguard Worker 2. libcurl - multi interface 51*6236dae4SAndroid Build Coastguard Worker 2.1 More non-blocking 52*6236dae4SAndroid Build Coastguard Worker 2.2 Better support for same name resolves 53*6236dae4SAndroid Build Coastguard Worker 2.3 Non-blocking curl_multi_remove_handle() 54*6236dae4SAndroid Build Coastguard Worker 2.4 Split connect and authentication process 55*6236dae4SAndroid Build Coastguard Worker 2.5 Edge-triggered sockets should work 56*6236dae4SAndroid Build Coastguard Worker 2.6 multi upkeep 57*6236dae4SAndroid Build Coastguard Worker 2.7 Virtual external sockets 58*6236dae4SAndroid Build Coastguard Worker 2.8 dynamically decide to use socketpair 59*6236dae4SAndroid Build Coastguard Worker 60*6236dae4SAndroid Build Coastguard Worker 3. Documentation 61*6236dae4SAndroid Build Coastguard Worker 3.1 Improve documentation about fork safety 62*6236dae4SAndroid Build Coastguard Worker 63*6236dae4SAndroid Build Coastguard Worker 4. FTP 64*6236dae4SAndroid Build Coastguard Worker 4.1 HOST 65*6236dae4SAndroid Build Coastguard Worker 4.4 Support CURLOPT_PREQUOTE for directories listings 66*6236dae4SAndroid Build Coastguard Worker 4.6 GSSAPI via Windows SSPI 67*6236dae4SAndroid Build Coastguard Worker 4.7 STAT for LIST without data connection 68*6236dae4SAndroid Build Coastguard Worker 4.8 Passive transfer could try other IP addresses 69*6236dae4SAndroid Build Coastguard Worker 70*6236dae4SAndroid Build Coastguard Worker 5. HTTP 71*6236dae4SAndroid Build Coastguard Worker 5.1 Provide the error body from a CONNECT response 72*6236dae4SAndroid Build Coastguard Worker 5.2 Obey Retry-After in redirects 73*6236dae4SAndroid Build Coastguard Worker 5.3 Rearrange request header order 74*6236dae4SAndroid Build Coastguard Worker 5.4 Allow SAN names in HTTP/2 server push 75*6236dae4SAndroid Build Coastguard Worker 5.5 auth= in URLs 76*6236dae4SAndroid Build Coastguard Worker 5.6 alt-svc should fallback if alt-svc does not work 77*6236dae4SAndroid Build Coastguard Worker 5.7 Require HTTP version X or higher 78*6236dae4SAndroid Build Coastguard Worker 79*6236dae4SAndroid Build Coastguard Worker 6. TELNET 80*6236dae4SAndroid Build Coastguard Worker 6.1 ditch stdin 81*6236dae4SAndroid Build Coastguard Worker 6.2 ditch telnet-specific select 82*6236dae4SAndroid Build Coastguard Worker 6.3 feature negotiation debug data 83*6236dae4SAndroid Build Coastguard Worker 6.4 exit immediately upon connection if stdin is /dev/null 84*6236dae4SAndroid Build Coastguard Worker 85*6236dae4SAndroid Build Coastguard Worker 7. SMTP 86*6236dae4SAndroid Build Coastguard Worker 7.1 Passing NOTIFY option to CURLOPT_MAIL_RCPT 87*6236dae4SAndroid Build Coastguard Worker 7.2 Enhanced capability support 88*6236dae4SAndroid Build Coastguard Worker 7.3 Add CURLOPT_MAIL_CLIENT option 89*6236dae4SAndroid Build Coastguard Worker 90*6236dae4SAndroid Build Coastguard Worker 8. POP3 91*6236dae4SAndroid Build Coastguard Worker 8.2 Enhanced capability support 92*6236dae4SAndroid Build Coastguard Worker 93*6236dae4SAndroid Build Coastguard Worker 9. IMAP 94*6236dae4SAndroid Build Coastguard Worker 9.1 Enhanced capability support 95*6236dae4SAndroid Build Coastguard Worker 9.2 upload unread 96*6236dae4SAndroid Build Coastguard Worker 97*6236dae4SAndroid Build Coastguard Worker 10. LDAP 98*6236dae4SAndroid Build Coastguard Worker 10.1 SASL based authentication mechanisms 99*6236dae4SAndroid Build Coastguard Worker 10.2 CURLOPT_SSL_CTX_FUNCTION for LDAPS 100*6236dae4SAndroid Build Coastguard Worker 10.3 Paged searches on LDAP server 101*6236dae4SAndroid Build Coastguard Worker 10.4 Certificate-Based Authentication 102*6236dae4SAndroid Build Coastguard Worker 103*6236dae4SAndroid Build Coastguard Worker 11. SMB 104*6236dae4SAndroid Build Coastguard Worker 11.1 File listing support 105*6236dae4SAndroid Build Coastguard Worker 11.2 Honor file timestamps 106*6236dae4SAndroid Build Coastguard Worker 11.3 Use NTLMv2 107*6236dae4SAndroid Build Coastguard Worker 11.4 Create remote directories 108*6236dae4SAndroid Build Coastguard Worker 109*6236dae4SAndroid Build Coastguard Worker 12. FILE 110*6236dae4SAndroid Build Coastguard Worker 12.1 Directory listing on non-POSIX 111*6236dae4SAndroid Build Coastguard Worker 112*6236dae4SAndroid Build Coastguard Worker 13. TLS 113*6236dae4SAndroid Build Coastguard Worker 13.1 TLS-PSK with OpenSSL 114*6236dae4SAndroid Build Coastguard Worker 13.2 TLS channel binding 115*6236dae4SAndroid Build Coastguard Worker 13.3 Defeat TLS fingerprinting 116*6236dae4SAndroid Build Coastguard Worker 13.5 Export session ids 117*6236dae4SAndroid Build Coastguard Worker 13.6 Provide callback for cert verification 118*6236dae4SAndroid Build Coastguard Worker 13.7 Less memory massaging with Schannel 119*6236dae4SAndroid Build Coastguard Worker 13.8 Support DANE 120*6236dae4SAndroid Build Coastguard Worker 13.9 TLS record padding 121*6236dae4SAndroid Build Coastguard Worker 13.10 Support Authority Information Access certificate extension (AIA) 122*6236dae4SAndroid Build Coastguard Worker 13.11 Some TLS options are not offered for HTTPS proxies 123*6236dae4SAndroid Build Coastguard Worker 13.13 Make sure we forbid TLS 1.3 post-handshake authentication 124*6236dae4SAndroid Build Coastguard Worker 13.14 Support the clienthello extension 125*6236dae4SAndroid Build Coastguard Worker 13.15 Select signature algorithms 126*6236dae4SAndroid Build Coastguard Worker 13.16 Share the CA cache 127*6236dae4SAndroid Build Coastguard Worker 13.17 Add missing features to TLS backends 128*6236dae4SAndroid Build Coastguard Worker 129*6236dae4SAndroid Build Coastguard Worker 15. Schannel 130*6236dae4SAndroid Build Coastguard Worker 15.1 Extend support for client certificate authentication 131*6236dae4SAndroid Build Coastguard Worker 15.2 Extend support for the --ciphers option 132*6236dae4SAndroid Build Coastguard Worker 15.4 Add option to allow abrupt server closure 133*6236dae4SAndroid Build Coastguard Worker 134*6236dae4SAndroid Build Coastguard Worker 16. SASL 135*6236dae4SAndroid Build Coastguard Worker 16.1 Other authentication mechanisms 136*6236dae4SAndroid Build Coastguard Worker 16.2 Add QOP support to GSSAPI authentication 137*6236dae4SAndroid Build Coastguard Worker 138*6236dae4SAndroid Build Coastguard Worker 17. SSH protocols 139*6236dae4SAndroid Build Coastguard Worker 17.1 Multiplexing 140*6236dae4SAndroid Build Coastguard Worker 17.2 Handle growing SFTP files 141*6236dae4SAndroid Build Coastguard Worker 17.3 Read keys from ~/.ssh/id_ecdsa, id_ed25519 142*6236dae4SAndroid Build Coastguard Worker 17.4 Support CURLOPT_PREQUOTE 143*6236dae4SAndroid Build Coastguard Worker 17.5 SSH over HTTPS proxy with more backends 144*6236dae4SAndroid Build Coastguard Worker 17.6 SFTP with SCP:// 145*6236dae4SAndroid Build Coastguard Worker 146*6236dae4SAndroid Build Coastguard Worker 18. Command line tool 147*6236dae4SAndroid Build Coastguard Worker 18.1 sync 148*6236dae4SAndroid Build Coastguard Worker 18.2 glob posts 149*6236dae4SAndroid Build Coastguard Worker 18.4 --proxycommand 150*6236dae4SAndroid Build Coastguard Worker 18.5 UTF-8 filenames in Content-Disposition 151*6236dae4SAndroid Build Coastguard Worker 18.6 Option to make -Z merge lined based outputs on stdout 152*6236dae4SAndroid Build Coastguard Worker 18.7 specify which response codes that make -f/--fail return error 153*6236dae4SAndroid Build Coastguard Worker 18.9 Choose the name of file in braces for complex URLs 154*6236dae4SAndroid Build Coastguard Worker 18.10 improve how curl works in a Windows console window 155*6236dae4SAndroid Build Coastguard Worker 18.11 Windows: set attribute 'archive' for completed downloads 156*6236dae4SAndroid Build Coastguard Worker 18.12 keep running, read instructions from pipe/socket 157*6236dae4SAndroid Build Coastguard Worker 18.13 Acknowledge Ratelimit headers 158*6236dae4SAndroid Build Coastguard Worker 18.14 --dry-run 159*6236dae4SAndroid Build Coastguard Worker 18.15 --retry should resume 160*6236dae4SAndroid Build Coastguard Worker 18.16 send only part of --data 161*6236dae4SAndroid Build Coastguard Worker 18.17 consider filename from the redirected URL with -O ? 162*6236dae4SAndroid Build Coastguard Worker 18.18 retry on network is unreachable 163*6236dae4SAndroid Build Coastguard Worker 18.19 expand ~/ in config files 164*6236dae4SAndroid Build Coastguard Worker 18.20 hostname sections in config files 165*6236dae4SAndroid Build Coastguard Worker 18.21 retry on the redirected-to URL 166*6236dae4SAndroid Build Coastguard Worker 18.23 Set the modification date on an uploaded file 167*6236dae4SAndroid Build Coastguard Worker 18.24 Use multiple parallel transfers for a single download 168*6236dae4SAndroid Build Coastguard Worker 18.25 Prevent terminal injection when writing to terminal 169*6236dae4SAndroid Build Coastguard Worker 18.26 Custom progress meter update interval 170*6236dae4SAndroid Build Coastguard Worker 18.27 -J and -O with %-encoded filenames 171*6236dae4SAndroid Build Coastguard Worker 18.28 -J with -C - 172*6236dae4SAndroid Build Coastguard Worker 18.29 --retry and transfer timeouts 173*6236dae4SAndroid Build Coastguard Worker 174*6236dae4SAndroid Build Coastguard Worker 19. Build 175*6236dae4SAndroid Build Coastguard Worker 19.2 Enable PIE and RELRO by default 176*6236dae4SAndroid Build Coastguard Worker 19.3 Do not use GNU libtool on OpenBSD 177*6236dae4SAndroid Build Coastguard Worker 19.4 Package curl for Windows in a signed installer 178*6236dae4SAndroid Build Coastguard Worker 19.5 make configure use --cache-file more and better 179*6236dae4SAndroid Build Coastguard Worker 180*6236dae4SAndroid Build Coastguard Worker 20. Test suite 181*6236dae4SAndroid Build Coastguard Worker 20.1 SSL tunnel 182*6236dae4SAndroid Build Coastguard Worker 20.2 nicer lacking perl message 183*6236dae4SAndroid Build Coastguard Worker 20.3 more protocols supported 184*6236dae4SAndroid Build Coastguard Worker 20.4 more platforms supported 185*6236dae4SAndroid Build Coastguard Worker 20.6 Use the RFC 6265 test suite 186*6236dae4SAndroid Build Coastguard Worker 20.8 Run web-platform-tests URL tests 187*6236dae4SAndroid Build Coastguard Worker 188*6236dae4SAndroid Build Coastguard Worker 21. MQTT 189*6236dae4SAndroid Build Coastguard Worker 21.1 Support rate-limiting 190*6236dae4SAndroid Build Coastguard Worker 21.2 Support MQTTS 191*6236dae4SAndroid Build Coastguard Worker 21.3 Handle network blocks 192*6236dae4SAndroid Build Coastguard Worker 193*6236dae4SAndroid Build Coastguard Worker 22. TFTP 194*6236dae4SAndroid Build Coastguard Worker 22.1 TFTP does not convert LF to CRLF for mode=netascii 195*6236dae4SAndroid Build Coastguard Worker 196*6236dae4SAndroid Build Coastguard Worker 23. Gopher 197*6236dae4SAndroid Build Coastguard Worker 23.1 Handle network blocks 198*6236dae4SAndroid Build Coastguard Worker 199*6236dae4SAndroid Build Coastguard Worker============================================================================== 200*6236dae4SAndroid Build Coastguard Worker 201*6236dae4SAndroid Build Coastguard Worker1. libcurl 202*6236dae4SAndroid Build Coastguard Worker 203*6236dae4SAndroid Build Coastguard Worker1.1 TFO support on Windows 204*6236dae4SAndroid Build Coastguard Worker 205*6236dae4SAndroid Build Coastguard Worker libcurl supports the CURLOPT_TCP_FASTOPEN option since 7.49.0 for Linux and 206*6236dae4SAndroid Build Coastguard Worker macOS. Windows supports TCP Fast Open starting with Windows 10, version 1607 207*6236dae4SAndroid Build Coastguard Worker and we should add support for it. 208*6236dae4SAndroid Build Coastguard Worker 209*6236dae4SAndroid Build Coastguard Worker TCP Fast Open is supported on several platforms but not on Windows. Work on 210*6236dae4SAndroid Build Coastguard Worker this was once started but never finished. 211*6236dae4SAndroid Build Coastguard Worker 212*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/pull/3378 213*6236dae4SAndroid Build Coastguard Worker 214*6236dae4SAndroid Build Coastguard Worker1.2 Consult %APPDATA% also for .netrc 215*6236dae4SAndroid Build Coastguard Worker 216*6236dae4SAndroid Build Coastguard Worker %APPDATA%\.netrc is not considered when running on Windows. should not it? 217*6236dae4SAndroid Build Coastguard Worker 218*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/4016 219*6236dae4SAndroid Build Coastguard Worker 220*6236dae4SAndroid Build Coastguard Worker1.3 struct lifreq 221*6236dae4SAndroid Build Coastguard Worker 222*6236dae4SAndroid Build Coastguard Worker Use 'struct lifreq' and SIOCGLIFADDR instead of 'struct ifreq' and 223*6236dae4SAndroid Build Coastguard Worker SIOCGIFADDR on newer Solaris versions as they claim the latter is obsolete. 224*6236dae4SAndroid Build Coastguard Worker To support IPv6 interface addresses for network interfaces properly. 225*6236dae4SAndroid Build Coastguard Worker 226*6236dae4SAndroid Build Coastguard Worker1.4 alt-svc sharing 227*6236dae4SAndroid Build Coastguard Worker 228*6236dae4SAndroid Build Coastguard Worker The share interface could benefit from allowing the alt-svc cache to be 229*6236dae4SAndroid Build Coastguard Worker possible to share between easy handles. 230*6236dae4SAndroid Build Coastguard Worker 231*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/4476 232*6236dae4SAndroid Build Coastguard Worker 233*6236dae4SAndroid Build Coastguard Worker The share interface offers CURL_LOCK_DATA_CONNECT to have multiple easy 234*6236dae4SAndroid Build Coastguard Worker handle share a connection cache, but due to how connections are used they are 235*6236dae4SAndroid Build Coastguard Worker still not thread-safe when used shared. 236*6236dae4SAndroid Build Coastguard Worker 237*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/4915 and lib1541.c 238*6236dae4SAndroid Build Coastguard Worker 239*6236dae4SAndroid Build Coastguard Worker The share interface offers CURL_LOCK_DATA_HSTS to have multiple easy handle 240*6236dae4SAndroid Build Coastguard Worker share a HSTS cache, but this is not thread-safe. 241*6236dae4SAndroid Build Coastguard Worker 242*6236dae4SAndroid Build Coastguard Worker1.5 get rid of PATH_MAX 243*6236dae4SAndroid Build Coastguard Worker 244*6236dae4SAndroid Build Coastguard Worker Having code use and rely on PATH_MAX is not nice: 245*6236dae4SAndroid Build Coastguard Worker https://insanecoding.blogspot.com/2007/11/pathmax-simply-isnt.html 246*6236dae4SAndroid Build Coastguard Worker 247*6236dae4SAndroid Build Coastguard Worker Currently the libssh2 SSH based code uses it, but to remove PATH_MAX from 248*6236dae4SAndroid Build Coastguard Worker there we need libssh2 to properly tell us when we pass in a too small buffer 249*6236dae4SAndroid Build Coastguard Worker and its current API (as of libssh2 1.2.7) does not. 250*6236dae4SAndroid Build Coastguard Worker 251*6236dae4SAndroid Build Coastguard Worker1.6 thread-safe sharing 252*6236dae4SAndroid Build Coastguard Worker 253*6236dae4SAndroid Build Coastguard Worker Using the share interface users can share some data between easy handles but 254*6236dae4SAndroid Build Coastguard Worker several of the sharing options are documented as not safe and supported to 255*6236dae4SAndroid Build Coastguard Worker share between multiple concurrent threads. Fixing this would enable more 256*6236dae4SAndroid Build Coastguard Worker users to share data in more powerful ways. 257*6236dae4SAndroid Build Coastguard Worker 258*6236dae4SAndroid Build Coastguard Worker1.8 CURLOPT_RESOLVE for any port number 259*6236dae4SAndroid Build Coastguard Worker 260*6236dae4SAndroid Build Coastguard Worker This option allows applications to set a replacement IP address for a given 261*6236dae4SAndroid Build Coastguard Worker host + port pair. Consider making support for providing a replacement address 262*6236dae4SAndroid Build Coastguard Worker for the hostname on all port numbers. 263*6236dae4SAndroid Build Coastguard Worker 264*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/1264 265*6236dae4SAndroid Build Coastguard Worker 266*6236dae4SAndroid Build Coastguard Worker1.9 Cache negative name resolves 267*6236dae4SAndroid Build Coastguard Worker 268*6236dae4SAndroid Build Coastguard Worker A name resolve that has failed is likely to fail when made again within a 269*6236dae4SAndroid Build Coastguard Worker short period of time. Currently we only cache positive responses. 270*6236dae4SAndroid Build Coastguard Worker 271*6236dae4SAndroid Build Coastguard Worker1.10 auto-detect proxy 272*6236dae4SAndroid Build Coastguard Worker 273*6236dae4SAndroid Build Coastguard Worker libcurl could be made to detect the system proxy setup automatically and use 274*6236dae4SAndroid Build Coastguard Worker that. On Windows, macOS and Linux desktops for example. 275*6236dae4SAndroid Build Coastguard Worker 276*6236dae4SAndroid Build Coastguard Worker The pull-request to use libproxy for this was deferred due to doubts on the 277*6236dae4SAndroid Build Coastguard Worker reliability of the dependency and how to use it: 278*6236dae4SAndroid Build Coastguard Worker https://github.com/curl/curl/pull/977 279*6236dae4SAndroid Build Coastguard Worker 280*6236dae4SAndroid Build Coastguard Worker libdetectproxy is a (C++) library for detecting the proxy on Windows 281*6236dae4SAndroid Build Coastguard Worker https://github.com/paulharris/libdetectproxy 282*6236dae4SAndroid Build Coastguard Worker 283*6236dae4SAndroid Build Coastguard Worker1.11 minimize dependencies with dynamically loaded modules 284*6236dae4SAndroid Build Coastguard Worker 285*6236dae4SAndroid Build Coastguard Worker We can create a system with loadable modules/plug-ins, where these modules 286*6236dae4SAndroid Build Coastguard Worker would be the ones that link to 3rd party libs. That would allow us to avoid 287*6236dae4SAndroid Build Coastguard Worker having to load ALL dependencies since only the necessary ones for this 288*6236dae4SAndroid Build Coastguard Worker app/invoke/used protocols would be necessary to load. See 289*6236dae4SAndroid Build Coastguard Worker https://github.com/curl/curl/issues/349 290*6236dae4SAndroid Build Coastguard Worker 291*6236dae4SAndroid Build Coastguard Worker1.12 updated DNS server while running 292*6236dae4SAndroid Build Coastguard Worker 293*6236dae4SAndroid Build Coastguard Worker If /etc/resolv.conf gets updated while a program using libcurl is running, it 294*6236dae4SAndroid Build Coastguard Worker is may cause name resolves to fail unless res_init() is called. We should 295*6236dae4SAndroid Build Coastguard Worker consider calling res_init() + retry once unconditionally on all name resolve 296*6236dae4SAndroid Build Coastguard Worker failures to mitigate against this. Firefox works like that. Note that Windows 297*6236dae4SAndroid Build Coastguard Worker does not have res_init() or an alternative. 298*6236dae4SAndroid Build Coastguard Worker 299*6236dae4SAndroid Build Coastguard Worker https://github.com/curl/curl/issues/2251 300*6236dae4SAndroid Build Coastguard Worker 301*6236dae4SAndroid Build Coastguard Worker1.13 c-ares and CURLOPT_OPENSOCKETFUNCTION 302*6236dae4SAndroid Build Coastguard Worker 303*6236dae4SAndroid Build Coastguard Worker curl creates most sockets via the CURLOPT_OPENSOCKETFUNCTION callback and 304*6236dae4SAndroid Build Coastguard Worker close them with the CURLOPT_CLOSESOCKETFUNCTION callback. However, c-ares 305*6236dae4SAndroid Build Coastguard Worker does not use those functions and instead opens and closes the sockets itself. 306*6236dae4SAndroid Build Coastguard Worker This means that when curl passes the c-ares socket to the 307*6236dae4SAndroid Build Coastguard Worker CURLMOPT_SOCKETFUNCTION it is not owned by the application like other 308*6236dae4SAndroid Build Coastguard Worker sockets. 309*6236dae4SAndroid Build Coastguard Worker 310*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/2734 311*6236dae4SAndroid Build Coastguard Worker 312*6236dae4SAndroid Build Coastguard Worker1.14 connect to multiple IPs in parallel 313*6236dae4SAndroid Build Coastguard Worker 314*6236dae4SAndroid Build Coastguard Worker curl currently implements the happy eyeball algorithm for connecting to the 315*6236dae4SAndroid Build Coastguard Worker IPv4 and IPv6 alternatives for a host in parallel, sticking with the 316*6236dae4SAndroid Build Coastguard Worker connection that "wins". We could implement a similar algorithm per individual 317*6236dae4SAndroid Build Coastguard Worker IP family as well when there are multiple available addresses: start with the 318*6236dae4SAndroid Build Coastguard Worker first address, then start a second attempt N milliseconds after and then a 319*6236dae4SAndroid Build Coastguard Worker third another N milliseconds later. That way there would be less waiting when 320*6236dae4SAndroid Build Coastguard Worker the first IP has problems. It also improves the connection timeout value 321*6236dae4SAndroid Build Coastguard Worker handling for multiple address situations. 322*6236dae4SAndroid Build Coastguard Worker 323*6236dae4SAndroid Build Coastguard Worker1.15 Monitor connections in the connection pool 324*6236dae4SAndroid Build Coastguard Worker 325*6236dae4SAndroid Build Coastguard Worker libcurl's connection cache or pool holds a number of open connections for the 326*6236dae4SAndroid Build Coastguard Worker purpose of possible subsequent connection reuse. It may contain a few up to a 327*6236dae4SAndroid Build Coastguard Worker significant amount of connections. Currently, libcurl leaves all connections 328*6236dae4SAndroid Build Coastguard Worker as they are and first when a connection is iterated over for matching or 329*6236dae4SAndroid Build Coastguard Worker reuse purpose it is verified that it is still alive. 330*6236dae4SAndroid Build Coastguard Worker 331*6236dae4SAndroid Build Coastguard Worker Those connections may get closed by the server side for idleness or they may 332*6236dae4SAndroid Build Coastguard Worker get an HTTP/2 ping from the peer to verify that they are still alive. By 333*6236dae4SAndroid Build Coastguard Worker adding monitoring of the connections while in the pool, libcurl can detect 334*6236dae4SAndroid Build Coastguard Worker dead connections (and close them) better and earlier, and it can handle 335*6236dae4SAndroid Build Coastguard Worker HTTP/2 pings to keep such ones alive even when not actively doing transfers 336*6236dae4SAndroid Build Coastguard Worker on them. 337*6236dae4SAndroid Build Coastguard Worker 338*6236dae4SAndroid Build Coastguard Worker1.16 Try to URL encode given URL 339*6236dae4SAndroid Build Coastguard Worker 340*6236dae4SAndroid Build Coastguard Worker Given a URL that for example contains spaces, libcurl could have an option 341*6236dae4SAndroid Build Coastguard Worker that would try somewhat harder than it does now and convert spaces to %20 and 342*6236dae4SAndroid Build Coastguard Worker perhaps URL encoded byte values over 128 etc (basically do what the redirect 343*6236dae4SAndroid Build Coastguard Worker following code already does). 344*6236dae4SAndroid Build Coastguard Worker 345*6236dae4SAndroid Build Coastguard Worker https://github.com/curl/curl/issues/514 346*6236dae4SAndroid Build Coastguard Worker 347*6236dae4SAndroid Build Coastguard Worker1.17 Add support for IRIs 348*6236dae4SAndroid Build Coastguard Worker 349*6236dae4SAndroid Build Coastguard Worker IRIs (RFC 3987) allow localized, non-ASCII, names in the URL. To properly 350*6236dae4SAndroid Build Coastguard Worker support this, curl/libcurl would need to translate/encode the given input 351*6236dae4SAndroid Build Coastguard Worker from the input string encoding into percent encoded output "over the wire". 352*6236dae4SAndroid Build Coastguard Worker 353*6236dae4SAndroid Build Coastguard Worker To make that work smoothly for curl users even on Windows, curl would 354*6236dae4SAndroid Build Coastguard Worker probably need to be able to convert from several input encodings. 355*6236dae4SAndroid Build Coastguard Worker 356*6236dae4SAndroid Build Coastguard Worker1.18 try next proxy if one does not work 357*6236dae4SAndroid Build Coastguard Worker 358*6236dae4SAndroid Build Coastguard Worker Allow an application to specify a list of proxies to try, and failing to 359*6236dae4SAndroid Build Coastguard Worker connect to the first go on and try the next instead until the list is 360*6236dae4SAndroid Build Coastguard Worker exhausted. Browsers support this feature at least when they specify proxies 361*6236dae4SAndroid Build Coastguard Worker using PACs. 362*6236dae4SAndroid Build Coastguard Worker 363*6236dae4SAndroid Build Coastguard Worker https://github.com/curl/curl/issues/896 364*6236dae4SAndroid Build Coastguard Worker 365*6236dae4SAndroid Build Coastguard Worker1.19 provide timing info for each redirect 366*6236dae4SAndroid Build Coastguard Worker 367*6236dae4SAndroid Build Coastguard Worker curl and libcurl provide timing information via a set of different 368*6236dae4SAndroid Build Coastguard Worker time-stamps (CURLINFO_*_TIME). When curl is following redirects, those 369*6236dae4SAndroid Build Coastguard Worker returned time value are the accumulated sums. An improvement could be to 370*6236dae4SAndroid Build Coastguard Worker offer separate timings for each redirect. 371*6236dae4SAndroid Build Coastguard Worker 372*6236dae4SAndroid Build Coastguard Worker https://github.com/curl/curl/issues/6743 373*6236dae4SAndroid Build Coastguard Worker 374*6236dae4SAndroid Build Coastguard Worker1.20 SRV and URI DNS records 375*6236dae4SAndroid Build Coastguard Worker 376*6236dae4SAndroid Build Coastguard Worker Offer support for resolving SRV and URI DNS records for libcurl to know which 377*6236dae4SAndroid Build Coastguard Worker server to connect to for various protocols (including HTTP). 378*6236dae4SAndroid Build Coastguard Worker 379*6236dae4SAndroid Build Coastguard Worker1.21 netrc caching and sharing 380*6236dae4SAndroid Build Coastguard Worker 381*6236dae4SAndroid Build Coastguard Worker The netrc file is read and parsed each time a connection is setup, which 382*6236dae4SAndroid Build Coastguard Worker means that if a transfer needs multiple connections for authentication or 383*6236dae4SAndroid Build Coastguard Worker redirects, the file might be reread (and parsed) multiple times. This makes 384*6236dae4SAndroid Build Coastguard Worker it impossible to provide the file as a pipe. 385*6236dae4SAndroid Build Coastguard Worker 386*6236dae4SAndroid Build Coastguard Worker1.22 CURLINFO_PAUSE_STATE 387*6236dae4SAndroid Build Coastguard Worker 388*6236dae4SAndroid Build Coastguard Worker Return information about the transfer's current pause state, in both 389*6236dae4SAndroid Build Coastguard Worker directions. https://github.com/curl/curl/issues/2588 390*6236dae4SAndroid Build Coastguard Worker 391*6236dae4SAndroid Build Coastguard Worker1.23 Offer API to flush the connection pool 392*6236dae4SAndroid Build Coastguard Worker 393*6236dae4SAndroid Build Coastguard Worker Sometimes applications want to flush all the existing connections kept alive. 394*6236dae4SAndroid Build Coastguard Worker An API could allow a forced flush or just a forced loop that would properly 395*6236dae4SAndroid Build Coastguard Worker close all connections that have been closed by the server already. 396*6236dae4SAndroid Build Coastguard Worker 397*6236dae4SAndroid Build Coastguard Worker1.25 Expose tried IP addresses that failed 398*6236dae4SAndroid Build Coastguard Worker 399*6236dae4SAndroid Build Coastguard Worker When libcurl fails to connect to a host, it could offer the application the 400*6236dae4SAndroid Build Coastguard Worker addresses that were used in the attempt. Source + dest IP, source + dest port 401*6236dae4SAndroid Build Coastguard Worker and protocol (UDP or TCP) for each failure. Possibly as a callback. Perhaps 402*6236dae4SAndroid Build Coastguard Worker also provide "reason". 403*6236dae4SAndroid Build Coastguard Worker 404*6236dae4SAndroid Build Coastguard Worker https://github.com/curl/curl/issues/2126 405*6236dae4SAndroid Build Coastguard Worker 406*6236dae4SAndroid Build Coastguard Worker1.28 FD_CLOEXEC 407*6236dae4SAndroid Build Coastguard Worker 408*6236dae4SAndroid Build Coastguard Worker It sets the close-on-exec flag for the file descriptor, which causes the file 409*6236dae4SAndroid Build Coastguard Worker descriptor to be automatically (and atomically) closed when any of the 410*6236dae4SAndroid Build Coastguard Worker exec-family functions succeed. Should probably be set by default? 411*6236dae4SAndroid Build Coastguard Worker 412*6236dae4SAndroid Build Coastguard Worker https://github.com/curl/curl/issues/2252 413*6236dae4SAndroid Build Coastguard Worker 414*6236dae4SAndroid Build Coastguard Worker1.29 WebSocket read callback 415*6236dae4SAndroid Build Coastguard Worker 416*6236dae4SAndroid Build Coastguard Worker Call the read callback once the connection is established to allow sending 417*6236dae4SAndroid Build Coastguard Worker the first message in the connection. 418*6236dae4SAndroid Build Coastguard Worker 419*6236dae4SAndroid Build Coastguard Worker https://github.com/curl/curl/issues/11402 420*6236dae4SAndroid Build Coastguard Worker 421*6236dae4SAndroid Build Coastguard Worker1.30 config file parsing 422*6236dae4SAndroid Build Coastguard Worker 423*6236dae4SAndroid Build Coastguard Worker Consider providing an API, possibly in a separate companion library, for 424*6236dae4SAndroid Build Coastguard Worker parsing a config file like curl's -K/--config option to allow applications to 425*6236dae4SAndroid Build Coastguard Worker get the same ability to read curl options from files. 426*6236dae4SAndroid Build Coastguard Worker 427*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/3698 428*6236dae4SAndroid Build Coastguard Worker 429*6236dae4SAndroid Build Coastguard Worker1.31 erase secrets from heap/stack after use 430*6236dae4SAndroid Build Coastguard Worker 431*6236dae4SAndroid Build Coastguard Worker Introducing a concept and system to erase secrets from memory after use, it 432*6236dae4SAndroid Build Coastguard Worker could help mitigate and lessen the impact of (future) security problems etc. 433*6236dae4SAndroid Build Coastguard Worker However: most secrets are passed to libcurl as clear text from the 434*6236dae4SAndroid Build Coastguard Worker application and then clearing them within the library adds nothing... 435*6236dae4SAndroid Build Coastguard Worker 436*6236dae4SAndroid Build Coastguard Worker https://github.com/curl/curl/issues/7268 437*6236dae4SAndroid Build Coastguard Worker 438*6236dae4SAndroid Build Coastguard Worker1.32 add asynch getaddrinfo support 439*6236dae4SAndroid Build Coastguard Worker 440*6236dae4SAndroid Build Coastguard Worker Use getaddrinfo_a() to provide an asynch name resolver backend to libcurl 441*6236dae4SAndroid Build Coastguard Worker that does not use threads and does not depend on c-ares. The getaddrinfo_a 442*6236dae4SAndroid Build Coastguard Worker function is (probably?) glibc specific but that is a widely used libc among 443*6236dae4SAndroid Build Coastguard Worker our users. 444*6236dae4SAndroid Build Coastguard Worker 445*6236dae4SAndroid Build Coastguard Worker https://github.com/curl/curl/pull/6746 446*6236dae4SAndroid Build Coastguard Worker 447*6236dae4SAndroid Build Coastguard Worker1.33 make DoH inherit more transfer properties 448*6236dae4SAndroid Build Coastguard Worker 449*6236dae4SAndroid Build Coastguard Worker Some options are not inherited because they are not relevant for the DoH SSL 450*6236dae4SAndroid Build Coastguard Worker connections, or inheriting the option may result in unexpected behavior. For 451*6236dae4SAndroid Build Coastguard Worker example the user's debug function callback is not inherited because it would 452*6236dae4SAndroid Build Coastguard Worker be unexpected for internal handles (ie DoH handles) to be passed to that 453*6236dae4SAndroid Build Coastguard Worker callback. 454*6236dae4SAndroid Build Coastguard Worker 455*6236dae4SAndroid Build Coastguard Worker If an option is not inherited then it is not possible to set it separately 456*6236dae4SAndroid Build Coastguard Worker for DoH without a DoH-specific option. For example: 457*6236dae4SAndroid Build Coastguard Worker CURLOPT_DOH_SSL_VERIFYHOST, CURLOPT_DOH_SSL_VERIFYPEER and 458*6236dae4SAndroid Build Coastguard Worker CURLOPT_DOH_SSL_VERIFYSTATUS. 459*6236dae4SAndroid Build Coastguard Worker 460*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/6605 461*6236dae4SAndroid Build Coastguard Worker 462*6236dae4SAndroid Build Coastguard Worker2. libcurl - multi interface 463*6236dae4SAndroid Build Coastguard Worker 464*6236dae4SAndroid Build Coastguard Worker2.1 More non-blocking 465*6236dae4SAndroid Build Coastguard Worker 466*6236dae4SAndroid Build Coastguard Worker Make sure we do not ever loop because of non-blocking sockets returning 467*6236dae4SAndroid Build Coastguard Worker EWOULDBLOCK or similar. Blocking cases include: 468*6236dae4SAndroid Build Coastguard Worker 469*6236dae4SAndroid Build Coastguard Worker - Name resolves on non-Windows unless c-ares or the threaded resolver is used. 470*6236dae4SAndroid Build Coastguard Worker 471*6236dae4SAndroid Build Coastguard Worker - The threaded resolver may block on cleanup: 472*6236dae4SAndroid Build Coastguard Worker https://github.com/curl/curl/issues/4852 473*6236dae4SAndroid Build Coastguard Worker 474*6236dae4SAndroid Build Coastguard Worker - file:// transfers 475*6236dae4SAndroid Build Coastguard Worker 476*6236dae4SAndroid Build Coastguard Worker - TELNET transfers 477*6236dae4SAndroid Build Coastguard Worker 478*6236dae4SAndroid Build Coastguard Worker - GSSAPI authentication for FTP transfers 479*6236dae4SAndroid Build Coastguard Worker 480*6236dae4SAndroid Build Coastguard Worker - The "DONE" operation (post transfer protocol-specific actions) for the 481*6236dae4SAndroid Build Coastguard Worker protocols SFTP, SMTP, FTP. Fixing multi_done() for this is a worthy task. 482*6236dae4SAndroid Build Coastguard Worker 483*6236dae4SAndroid Build Coastguard Worker - curl_multi_remove_handle for any of the above. See section 2.3. 484*6236dae4SAndroid Build Coastguard Worker 485*6236dae4SAndroid Build Coastguard Worker - Calling curl_ws_send() from a callback 486*6236dae4SAndroid Build Coastguard Worker 487*6236dae4SAndroid Build Coastguard Worker2.2 Better support for same name resolves 488*6236dae4SAndroid Build Coastguard Worker 489*6236dae4SAndroid Build Coastguard Worker If a name resolve has been initiated for name NN and a second easy handle 490*6236dae4SAndroid Build Coastguard Worker wants to resolve that name as well, make it wait for the first resolve to end 491*6236dae4SAndroid Build Coastguard Worker up in the cache instead of doing a second separate resolve. This is 492*6236dae4SAndroid Build Coastguard Worker especially needed when adding many simultaneous handles using the same host 493*6236dae4SAndroid Build Coastguard Worker name when the DNS resolver can get flooded. 494*6236dae4SAndroid Build Coastguard Worker 495*6236dae4SAndroid Build Coastguard Worker2.3 Non-blocking curl_multi_remove_handle() 496*6236dae4SAndroid Build Coastguard Worker 497*6236dae4SAndroid Build Coastguard Worker The multi interface has a few API calls that assume a blocking behavior, like 498*6236dae4SAndroid Build Coastguard Worker add_handle() and remove_handle() which limits what we can do internally. The 499*6236dae4SAndroid Build Coastguard Worker multi API need to be moved even more into a single function that "drives" 500*6236dae4SAndroid Build Coastguard Worker everything in a non-blocking manner and signals when something is done. A 501*6236dae4SAndroid Build Coastguard Worker remove or add would then only ask for the action to get started and then 502*6236dae4SAndroid Build Coastguard Worker multi_perform() etc still be called until the add/remove is completed. 503*6236dae4SAndroid Build Coastguard Worker 504*6236dae4SAndroid Build Coastguard Worker2.4 Split connect and authentication process 505*6236dae4SAndroid Build Coastguard Worker 506*6236dae4SAndroid Build Coastguard Worker The multi interface treats the authentication process as part of the connect 507*6236dae4SAndroid Build Coastguard Worker phase. As such any failures during authentication does not trigger the 508*6236dae4SAndroid Build Coastguard Worker relevant QUIT or LOGOFF for protocols such as IMAP, POP3 and SMTP. 509*6236dae4SAndroid Build Coastguard Worker 510*6236dae4SAndroid Build Coastguard Worker2.5 Edge-triggered sockets should work 511*6236dae4SAndroid Build Coastguard Worker 512*6236dae4SAndroid Build Coastguard Worker The multi_socket API should work with edge-triggered socket events. One of 513*6236dae4SAndroid Build Coastguard Worker the internal actions that need to be improved for this to work perfectly is 514*6236dae4SAndroid Build Coastguard Worker the 'maxloops' handling in transfer.c:readwrite_data(). 515*6236dae4SAndroid Build Coastguard Worker 516*6236dae4SAndroid Build Coastguard Worker2.6 multi upkeep 517*6236dae4SAndroid Build Coastguard Worker 518*6236dae4SAndroid Build Coastguard Worker In libcurl 7.62.0 we introduced curl_easy_upkeep. It unfortunately only works 519*6236dae4SAndroid Build Coastguard Worker on easy handles. We should introduces a version of that for the multi handle, 520*6236dae4SAndroid Build Coastguard Worker and also consider doing "upkeep" automatically on connections in the 521*6236dae4SAndroid Build Coastguard Worker connection pool when the multi handle is in used. 522*6236dae4SAndroid Build Coastguard Worker 523*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/3199 524*6236dae4SAndroid Build Coastguard Worker 525*6236dae4SAndroid Build Coastguard Worker2.7 Virtual external sockets 526*6236dae4SAndroid Build Coastguard Worker 527*6236dae4SAndroid Build Coastguard Worker libcurl performs operations on the given file descriptor that presumes it is 528*6236dae4SAndroid Build Coastguard Worker a socket and an application cannot replace them at the moment. Allowing an 529*6236dae4SAndroid Build Coastguard Worker application to fully replace those would allow a larger degree of freedom and 530*6236dae4SAndroid Build Coastguard Worker flexibility. 531*6236dae4SAndroid Build Coastguard Worker 532*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/5835 533*6236dae4SAndroid Build Coastguard Worker 534*6236dae4SAndroid Build Coastguard Worker2.8 dynamically decide to use socketpair 535*6236dae4SAndroid Build Coastguard Worker 536*6236dae4SAndroid Build Coastguard Worker For users who do not use curl_multi_wait() or do not care for 537*6236dae4SAndroid Build Coastguard Worker curl_multi_wakeup(), we could introduce a way to make libcurl NOT 538*6236dae4SAndroid Build Coastguard Worker create a socketpair in the multi handle. 539*6236dae4SAndroid Build Coastguard Worker 540*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/4829 541*6236dae4SAndroid Build Coastguard Worker 542*6236dae4SAndroid Build Coastguard Worker3. Documentation 543*6236dae4SAndroid Build Coastguard Worker 544*6236dae4SAndroid Build Coastguard Worker3.1 Improve documentation about fork safety 545*6236dae4SAndroid Build Coastguard Worker 546*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/6968 547*6236dae4SAndroid Build Coastguard Worker 548*6236dae4SAndroid Build Coastguard Worker4. FTP 549*6236dae4SAndroid Build Coastguard Worker 550*6236dae4SAndroid Build Coastguard Worker4.1 HOST 551*6236dae4SAndroid Build Coastguard Worker 552*6236dae4SAndroid Build Coastguard Worker HOST is a command for a client to tell which hostname to use, to offer FTP 553*6236dae4SAndroid Build Coastguard Worker servers named-based virtual hosting: 554*6236dae4SAndroid Build Coastguard Worker 555*6236dae4SAndroid Build Coastguard Worker https://datatracker.ietf.org/doc/html/rfc7151 556*6236dae4SAndroid Build Coastguard Worker 557*6236dae4SAndroid Build Coastguard Worker4.4 Support CURLOPT_PREQUOTE for directions listings 558*6236dae4SAndroid Build Coastguard Worker 559*6236dae4SAndroid Build Coastguard Worker The lack of support is mostly an oversight and requires the FTP state machine 560*6236dae4SAndroid Build Coastguard Worker to get updated to get fixed. 561*6236dae4SAndroid Build Coastguard Worker 562*6236dae4SAndroid Build Coastguard Worker https://github.com/curl/curl/issues/8602 563*6236dae4SAndroid Build Coastguard Worker 564*6236dae4SAndroid Build Coastguard Worker4.6 GSSAPI via Windows SSPI 565*6236dae4SAndroid Build Coastguard Worker 566*6236dae4SAndroid Build Coastguard Worker In addition to currently supporting the SASL GSSAPI mechanism (Kerberos V5) 567*6236dae4SAndroid Build Coastguard Worker via third-party GSS-API libraries, such as Heimdal or MIT Kerberos, also add 568*6236dae4SAndroid Build Coastguard Worker support for GSSAPI authentication via Windows SSPI. 569*6236dae4SAndroid Build Coastguard Worker 570*6236dae4SAndroid Build Coastguard Worker4.7 STAT for LIST without data connection 571*6236dae4SAndroid Build Coastguard Worker 572*6236dae4SAndroid Build Coastguard Worker Some FTP servers allow STAT for listing directories instead of using LIST, 573*6236dae4SAndroid Build Coastguard Worker and the response is then sent over the control connection instead of as the 574*6236dae4SAndroid Build Coastguard Worker otherwise usedw data connection: https://www.nsftools.com/tips/RawFTP.htm#STAT 575*6236dae4SAndroid Build Coastguard Worker 576*6236dae4SAndroid Build Coastguard Worker This is not detailed in any FTP specification. 577*6236dae4SAndroid Build Coastguard Worker 578*6236dae4SAndroid Build Coastguard Worker4.8 Passive transfer could try other IP addresses 579*6236dae4SAndroid Build Coastguard Worker 580*6236dae4SAndroid Build Coastguard Worker When doing FTP operations through a proxy at localhost, the reported spotted 581*6236dae4SAndroid Build Coastguard Worker that curl only tried to connect once to the proxy, while it had multiple 582*6236dae4SAndroid Build Coastguard Worker addresses and a failed connect on one address should make it try the next. 583*6236dae4SAndroid Build Coastguard Worker 584*6236dae4SAndroid Build Coastguard Worker After switching to passive mode (EPSV), curl could try all IP addresses for 585*6236dae4SAndroid Build Coastguard Worker "localhost". Currently it tries ::1, but it should also try 127.0.0.1. 586*6236dae4SAndroid Build Coastguard Worker 587*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/1508 588*6236dae4SAndroid Build Coastguard Worker 589*6236dae4SAndroid Build Coastguard Worker5. HTTP 590*6236dae4SAndroid Build Coastguard Worker 591*6236dae4SAndroid Build Coastguard Worker5.1 Provide the error body from a CONNECT response 592*6236dae4SAndroid Build Coastguard Worker 593*6236dae4SAndroid Build Coastguard Worker When curl receives a body response from a CONNECT request to a proxy, it 594*6236dae4SAndroid Build Coastguard Worker always just reads and ignores it. It would make some users happy if curl 595*6236dae4SAndroid Build Coastguard Worker instead optionally would be able to make that responsible available. Via a 596*6236dae4SAndroid Build Coastguard Worker new callback? Through some other means? 597*6236dae4SAndroid Build Coastguard Worker 598*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/9513 599*6236dae4SAndroid Build Coastguard Worker 600*6236dae4SAndroid Build Coastguard Worker5.2 Obey Retry-After in redirects 601*6236dae4SAndroid Build Coastguard Worker 602*6236dae4SAndroid Build Coastguard Worker The Retry-After is said to dicate "the minimum time that the user agent is 603*6236dae4SAndroid Build Coastguard Worker asked to wait before issuing the redirected request" and libcurl does not 604*6236dae4SAndroid Build Coastguard Worker obey this. 605*6236dae4SAndroid Build Coastguard Worker 606*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/11447 607*6236dae4SAndroid Build Coastguard Worker 608*6236dae4SAndroid Build Coastguard Worker5.3 Rearrange request header order 609*6236dae4SAndroid Build Coastguard Worker 610*6236dae4SAndroid Build Coastguard Worker Server implementers often make an effort to detect browser and to reject 611*6236dae4SAndroid Build Coastguard Worker clients it can detect to not match. One of the last details we cannot yet 612*6236dae4SAndroid Build Coastguard Worker control in libcurl's HTTP requests, which also can be exploited to detect 613*6236dae4SAndroid Build Coastguard Worker that libcurl is in fact used even when it tries to impersonate a browser, is 614*6236dae4SAndroid Build Coastguard Worker the order of the request headers. I propose that we introduce a new option in 615*6236dae4SAndroid Build Coastguard Worker which you give headers a value, and then when the HTTP request is built it 616*6236dae4SAndroid Build Coastguard Worker sorts the headers based on that number. We could then have internally created 617*6236dae4SAndroid Build Coastguard Worker headers use a default value so only headers that need to be moved have to be 618*6236dae4SAndroid Build Coastguard Worker specified. 619*6236dae4SAndroid Build Coastguard Worker 620*6236dae4SAndroid Build Coastguard Worker5.4 Allow SAN names in HTTP/2 server push 621*6236dae4SAndroid Build Coastguard Worker 622*6236dae4SAndroid Build Coastguard Worker curl only allows HTTP/2 push promise if the provided :authority header value 623*6236dae4SAndroid Build Coastguard Worker exactly matches the hostname given in the URL. It could be extended to allow 624*6236dae4SAndroid Build Coastguard Worker any name that would match the Subject Alternative Names in the server's TLS 625*6236dae4SAndroid Build Coastguard Worker certificate. 626*6236dae4SAndroid Build Coastguard Worker 627*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/pull/3581 628*6236dae4SAndroid Build Coastguard Worker 629*6236dae4SAndroid Build Coastguard Worker5.5 auth= in URLs 630*6236dae4SAndroid Build Coastguard Worker 631*6236dae4SAndroid Build Coastguard Worker Add the ability to specify the preferred authentication mechanism to use by 632*6236dae4SAndroid Build Coastguard Worker using ;auth=<mech> in the login part of the URL. 633*6236dae4SAndroid Build Coastguard Worker 634*6236dae4SAndroid Build Coastguard Worker For example: 635*6236dae4SAndroid Build Coastguard Worker 636*6236dae4SAndroid Build Coastguard Worker http://test:pass;[email protected] would be equivalent to specifying 637*6236dae4SAndroid Build Coastguard Worker --user test:pass;auth=NTLM or --user test:pass --ntlm from the command line. 638*6236dae4SAndroid Build Coastguard Worker 639*6236dae4SAndroid Build Coastguard Worker Additionally this should be implemented for proxy base URLs as well. 640*6236dae4SAndroid Build Coastguard Worker 641*6236dae4SAndroid Build Coastguard Worker5.6 alt-svc should fallback if alt-svc does not work 642*6236dae4SAndroid Build Coastguard Worker 643*6236dae4SAndroid Build Coastguard Worker The alt-svc: header provides a set of alternative services for curl to use 644*6236dae4SAndroid Build Coastguard Worker instead of the original. If the first attempted one fails, it should try the 645*6236dae4SAndroid Build Coastguard Worker next etc and if all alternatives fail go back to the original. 646*6236dae4SAndroid Build Coastguard Worker 647*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/4908 648*6236dae4SAndroid Build Coastguard Worker 649*6236dae4SAndroid Build Coastguard Worker5.7 Require HTTP version X or higher 650*6236dae4SAndroid Build Coastguard Worker 651*6236dae4SAndroid Build Coastguard Worker curl and libcurl provide options for trying higher HTTP versions (for example 652*6236dae4SAndroid Build Coastguard Worker HTTP/2) but then still allows the server to pick version 1.1. We could 653*6236dae4SAndroid Build Coastguard Worker consider adding a way to require a minimum version. 654*6236dae4SAndroid Build Coastguard Worker 655*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/7980 656*6236dae4SAndroid Build Coastguard Worker 657*6236dae4SAndroid Build Coastguard Worker6. TELNET 658*6236dae4SAndroid Build Coastguard Worker 659*6236dae4SAndroid Build Coastguard Worker6.1 ditch stdin 660*6236dae4SAndroid Build Coastguard Worker 661*6236dae4SAndroid Build Coastguard Worker Reading input (to send to the remote server) on stdin is a crappy solution 662*6236dae4SAndroid Build Coastguard Worker for library purposes. We need to invent a good way for the application to be 663*6236dae4SAndroid Build Coastguard Worker able to provide the data to send. 664*6236dae4SAndroid Build Coastguard Worker 665*6236dae4SAndroid Build Coastguard Worker6.2 ditch telnet-specific select 666*6236dae4SAndroid Build Coastguard Worker 667*6236dae4SAndroid Build Coastguard Worker Move the telnet support's network select() loop go away and merge the code 668*6236dae4SAndroid Build Coastguard Worker into the main transfer loop. Until this is done, the multi interface does not 669*6236dae4SAndroid Build Coastguard Worker work for telnet. 670*6236dae4SAndroid Build Coastguard Worker 671*6236dae4SAndroid Build Coastguard Worker6.3 feature negotiation debug data 672*6236dae4SAndroid Build Coastguard Worker 673*6236dae4SAndroid Build Coastguard Worker Add telnet feature negotiation data to the debug callback as header data. 674*6236dae4SAndroid Build Coastguard Worker 675*6236dae4SAndroid Build Coastguard Worker6.4 exit immediately upon connection if stdin is /dev/null 676*6236dae4SAndroid Build Coastguard Worker 677*6236dae4SAndroid Build Coastguard Worker If it did, curl could be used to probe if there is an server there listening 678*6236dae4SAndroid Build Coastguard Worker on a specific port. That is, the following command would exit immediately 679*6236dae4SAndroid Build Coastguard Worker after the connection is established with exit code 0: 680*6236dae4SAndroid Build Coastguard Worker 681*6236dae4SAndroid Build Coastguard Worker curl -s --connect-timeout 2 telnet://example.com:80 </dev/null 682*6236dae4SAndroid Build Coastguard Worker 683*6236dae4SAndroid Build Coastguard Worker7. SMTP 684*6236dae4SAndroid Build Coastguard Worker 685*6236dae4SAndroid Build Coastguard Worker7.1 Passing NOTIFY option to CURLOPT_MAIL_RCPT 686*6236dae4SAndroid Build Coastguard Worker 687*6236dae4SAndroid Build Coastguard Worker Is there a way to pass the NOTIFY option to the CURLOPT_MAIL_RCPT option ? I 688*6236dae4SAndroid Build Coastguard Worker set a string that already contains a bracket. For instance something like 689*6236dae4SAndroid Build Coastguard Worker that: curl_slist_append( recipients, "<foo@bar> NOTIFY=SUCCESS,FAILURE" ); 690*6236dae4SAndroid Build Coastguard Worker 691*6236dae4SAndroid Build Coastguard Worker https://github.com/curl/curl/issues/8232 692*6236dae4SAndroid Build Coastguard Worker 693*6236dae4SAndroid Build Coastguard Worker7.2 Enhanced capability support 694*6236dae4SAndroid Build Coastguard Worker 695*6236dae4SAndroid Build Coastguard Worker Add the ability, for an application that uses libcurl, to obtain the list of 696*6236dae4SAndroid Build Coastguard Worker capabilities returned from the EHLO command. 697*6236dae4SAndroid Build Coastguard Worker 698*6236dae4SAndroid Build Coastguard Worker7.3 Add CURLOPT_MAIL_CLIENT option 699*6236dae4SAndroid Build Coastguard Worker 700*6236dae4SAndroid Build Coastguard Worker Rather than use the URL to specify the mail client string to present in the 701*6236dae4SAndroid Build Coastguard Worker HELO and EHLO commands, libcurl should support a new CURLOPT specifically for 702*6236dae4SAndroid Build Coastguard Worker specifying this data as the URL is non-standard and to be honest a bit of a 703*6236dae4SAndroid Build Coastguard Worker hack ;-) 704*6236dae4SAndroid Build Coastguard Worker 705*6236dae4SAndroid Build Coastguard Worker Please see the following thread for more information: 706*6236dae4SAndroid Build Coastguard Worker https://curl.se/mail/lib-2012-05/0178.html 707*6236dae4SAndroid Build Coastguard Worker 708*6236dae4SAndroid Build Coastguard Worker 709*6236dae4SAndroid Build Coastguard Worker8. POP3 710*6236dae4SAndroid Build Coastguard Worker 711*6236dae4SAndroid Build Coastguard Worker8.2 Enhanced capability support 712*6236dae4SAndroid Build Coastguard Worker 713*6236dae4SAndroid Build Coastguard Worker Add the ability, for an application that uses libcurl, to obtain the list of 714*6236dae4SAndroid Build Coastguard Worker capabilities returned from the CAPA command. 715*6236dae4SAndroid Build Coastguard Worker 716*6236dae4SAndroid Build Coastguard Worker9. IMAP 717*6236dae4SAndroid Build Coastguard Worker 718*6236dae4SAndroid Build Coastguard Worker9.1 Enhanced capability support 719*6236dae4SAndroid Build Coastguard Worker 720*6236dae4SAndroid Build Coastguard Worker Add the ability, for an application that uses libcurl, to obtain the list of 721*6236dae4SAndroid Build Coastguard Worker capabilities returned from the CAPABILITY command. 722*6236dae4SAndroid Build Coastguard Worker 723*6236dae4SAndroid Build Coastguard Worker9.2 upload unread 724*6236dae4SAndroid Build Coastguard Worker 725*6236dae4SAndroid Build Coastguard Worker Uploads over IMAP currently always set the email as "read" (or "seen"). It 726*6236dae4SAndroid Build Coastguard Worker would be good to offer a way for users to select for uploads to remain 727*6236dae4SAndroid Build Coastguard Worker unread. 728*6236dae4SAndroid Build Coastguard Worker 729*6236dae4SAndroid Build Coastguard Worker10. LDAP 730*6236dae4SAndroid Build Coastguard Worker 731*6236dae4SAndroid Build Coastguard Worker10.1 SASL based authentication mechanisms 732*6236dae4SAndroid Build Coastguard Worker 733*6236dae4SAndroid Build Coastguard Worker Currently the LDAP module only supports ldap_simple_bind_s() in order to bind 734*6236dae4SAndroid Build Coastguard Worker to an LDAP server. However, this function sends username and password details 735*6236dae4SAndroid Build Coastguard Worker using the simple authentication mechanism (as clear text). However, it should 736*6236dae4SAndroid Build Coastguard Worker be possible to use ldap_bind_s() instead specifying the security context 737*6236dae4SAndroid Build Coastguard Worker information ourselves. 738*6236dae4SAndroid Build Coastguard Worker 739*6236dae4SAndroid Build Coastguard Worker10.2 CURLOPT_SSL_CTX_FUNCTION for LDAPS 740*6236dae4SAndroid Build Coastguard Worker 741*6236dae4SAndroid Build Coastguard Worker CURLOPT_SSL_CTX_FUNCTION works perfectly for HTTPS and email protocols, but 742*6236dae4SAndroid Build Coastguard Worker it has no effect for LDAPS connections. 743*6236dae4SAndroid Build Coastguard Worker 744*6236dae4SAndroid Build Coastguard Worker https://github.com/curl/curl/issues/4108 745*6236dae4SAndroid Build Coastguard Worker 746*6236dae4SAndroid Build Coastguard Worker10.3 Paged searches on LDAP server 747*6236dae4SAndroid Build Coastguard Worker 748*6236dae4SAndroid Build Coastguard Worker https://github.com/curl/curl/issues/4452 749*6236dae4SAndroid Build Coastguard Worker 750*6236dae4SAndroid Build Coastguard Worker10.4 Certificate-Based Authentication 751*6236dae4SAndroid Build Coastguard Worker 752*6236dae4SAndroid Build Coastguard Worker LDAPS not possible with macOS and Windows with Certificate-Based Authentication 753*6236dae4SAndroid Build Coastguard Worker 754*6236dae4SAndroid Build Coastguard Worker https://github.com/curl/curl/issues/9641 755*6236dae4SAndroid Build Coastguard Worker 756*6236dae4SAndroid Build Coastguard Worker11. SMB 757*6236dae4SAndroid Build Coastguard Worker 758*6236dae4SAndroid Build Coastguard Worker11.1 File listing support 759*6236dae4SAndroid Build Coastguard Worker 760*6236dae4SAndroid Build Coastguard Worker Add support for listing the contents of a SMB share. The output should 761*6236dae4SAndroid Build Coastguard Worker probably be the same as/similar to FTP. 762*6236dae4SAndroid Build Coastguard Worker 763*6236dae4SAndroid Build Coastguard Worker11.2 Honor file timestamps 764*6236dae4SAndroid Build Coastguard Worker 765*6236dae4SAndroid Build Coastguard Worker The timestamp of the transferred file should reflect that of the original 766*6236dae4SAndroid Build Coastguard Worker file. 767*6236dae4SAndroid Build Coastguard Worker 768*6236dae4SAndroid Build Coastguard Worker11.3 Use NTLMv2 769*6236dae4SAndroid Build Coastguard Worker 770*6236dae4SAndroid Build Coastguard Worker Currently the SMB authentication uses NTLMv1. 771*6236dae4SAndroid Build Coastguard Worker 772*6236dae4SAndroid Build Coastguard Worker11.4 Create remote directories 773*6236dae4SAndroid Build Coastguard Worker 774*6236dae4SAndroid Build Coastguard Worker Support for creating remote directories when uploading a file to a directory 775*6236dae4SAndroid Build Coastguard Worker that does not exist on the server, just like --ftp-create-dirs. 776*6236dae4SAndroid Build Coastguard Worker 777*6236dae4SAndroid Build Coastguard Worker 778*6236dae4SAndroid Build Coastguard Worker12. FILE 779*6236dae4SAndroid Build Coastguard Worker 780*6236dae4SAndroid Build Coastguard Worker12.1 Directory listing on non-POSIX 781*6236dae4SAndroid Build Coastguard Worker 782*6236dae4SAndroid Build Coastguard Worker Listing the contents of a directory accessed with FILE only works on 783*6236dae4SAndroid Build Coastguard Worker platforms with opendir. Support could be added for more systems, like 784*6236dae4SAndroid Build Coastguard Worker Windows. 785*6236dae4SAndroid Build Coastguard Worker 786*6236dae4SAndroid Build Coastguard Worker13. TLS 787*6236dae4SAndroid Build Coastguard Worker 788*6236dae4SAndroid Build Coastguard Worker13.1 TLS-PSK with OpenSSL 789*6236dae4SAndroid Build Coastguard Worker 790*6236dae4SAndroid Build Coastguard Worker Transport Layer Security pre-shared key ciphersuites (TLS-PSK) is a set of 791*6236dae4SAndroid Build Coastguard Worker cryptographic protocols that provide secure communication based on pre-shared 792*6236dae4SAndroid Build Coastguard Worker keys (PSKs). These pre-shared keys are symmetric keys shared in advance among 793*6236dae4SAndroid Build Coastguard Worker the communicating parties. 794*6236dae4SAndroid Build Coastguard Worker 795*6236dae4SAndroid Build Coastguard Worker https://github.com/curl/curl/issues/5081 796*6236dae4SAndroid Build Coastguard Worker 797*6236dae4SAndroid Build Coastguard Worker13.2 TLS channel binding 798*6236dae4SAndroid Build Coastguard Worker 799*6236dae4SAndroid Build Coastguard Worker TLS 1.2 and 1.3 provide the ability to extract some secret data from the TLS 800*6236dae4SAndroid Build Coastguard Worker connection and use it in the client request (usually in some sort of 801*6236dae4SAndroid Build Coastguard Worker authentication) to ensure that the data sent is bound to the specific TLS 802*6236dae4SAndroid Build Coastguard Worker connection and cannot be successfully intercepted by a proxy. This 803*6236dae4SAndroid Build Coastguard Worker functionality can be used in a standard authentication mechanism such as 804*6236dae4SAndroid Build Coastguard Worker GSS-API or SCRAM, or in custom approaches like custom HTTP Authentication 805*6236dae4SAndroid Build Coastguard Worker headers. 806*6236dae4SAndroid Build Coastguard Worker 807*6236dae4SAndroid Build Coastguard Worker For TLS 1.2, the binding type is usually tls-unique, and for TLS 1.3 it is 808*6236dae4SAndroid Build Coastguard Worker tls-exporter. 809*6236dae4SAndroid Build Coastguard Worker 810*6236dae4SAndroid Build Coastguard Worker https://datatracker.ietf.org/doc/html/rfc5929 811*6236dae4SAndroid Build Coastguard Worker https://datatracker.ietf.org/doc/html/rfc9266 812*6236dae4SAndroid Build Coastguard Worker https://github.com/curl/curl/issues/9226 813*6236dae4SAndroid Build Coastguard Worker 814*6236dae4SAndroid Build Coastguard Worker13.3 Defeat TLS fingerprinting 815*6236dae4SAndroid Build Coastguard Worker 816*6236dae4SAndroid Build Coastguard Worker By changing the order of TLS extensions provided in the TLS handshake, it is 817*6236dae4SAndroid Build Coastguard Worker sometimes possible to circumvent TLS fingerprinting by servers. The TLS 818*6236dae4SAndroid Build Coastguard Worker extension order is of course not the only way to fingerprint a client. 819*6236dae4SAndroid Build Coastguard Worker 820*6236dae4SAndroid Build Coastguard Worker13.5 Export session ids 821*6236dae4SAndroid Build Coastguard Worker 822*6236dae4SAndroid Build Coastguard Worker Add an interface to libcurl that enables "session IDs" to get 823*6236dae4SAndroid Build Coastguard Worker exported/imported. Cris Bailiff said: "OpenSSL has functions which can 824*6236dae4SAndroid Build Coastguard Worker serialise the current SSL state to a buffer of your choice, and recover/reset 825*6236dae4SAndroid Build Coastguard Worker the state from such a buffer at a later date - this is used by mod_ssl for 826*6236dae4SAndroid Build Coastguard Worker apache to implement and SSL session ID cache". 827*6236dae4SAndroid Build Coastguard Worker 828*6236dae4SAndroid Build Coastguard Worker13.6 Provide callback for cert verification 829*6236dae4SAndroid Build Coastguard Worker 830*6236dae4SAndroid Build Coastguard Worker OpenSSL supports a callback for customised verification of the peer 831*6236dae4SAndroid Build Coastguard Worker certificate, but this does not seem to be exposed in the libcurl APIs. Could 832*6236dae4SAndroid Build Coastguard Worker it be? There is so much that could be done if it were. 833*6236dae4SAndroid Build Coastguard Worker 834*6236dae4SAndroid Build Coastguard Worker13.7 Less memory massaging with Schannel 835*6236dae4SAndroid Build Coastguard Worker 836*6236dae4SAndroid Build Coastguard Worker The Schannel backend does a lot of custom memory management we would rather 837*6236dae4SAndroid Build Coastguard Worker avoid: the repeated alloc + free in sends and the custom memory + realloc 838*6236dae4SAndroid Build Coastguard Worker system for encrypted and decrypted data. That should be avoided and reduced 839*6236dae4SAndroid Build Coastguard Worker for 1) efficiency and 2) safety. 840*6236dae4SAndroid Build Coastguard Worker 841*6236dae4SAndroid Build Coastguard Worker13.8 Support DANE 842*6236dae4SAndroid Build Coastguard Worker 843*6236dae4SAndroid Build Coastguard Worker DNS-Based Authentication of Named Entities (DANE) is a way to provide SSL 844*6236dae4SAndroid Build Coastguard Worker keys and certs over DNS using DNSSEC as an alternative to the CA model. 845*6236dae4SAndroid Build Coastguard Worker https://www.rfc-editor.org/rfc/rfc6698.txt 846*6236dae4SAndroid Build Coastguard Worker 847*6236dae4SAndroid Build Coastguard Worker An initial patch was posted by Suresh Krishnaswamy on March 7th 2013 848*6236dae4SAndroid Build Coastguard Worker (https://curl.se/mail/lib-2013-03/0075.html) but it was a too simple 849*6236dae4SAndroid Build Coastguard Worker approach. See Daniel's comments: 850*6236dae4SAndroid Build Coastguard Worker https://curl.se/mail/lib-2013-03/0103.html . libunbound may be the 851*6236dae4SAndroid Build Coastguard Worker correct library to base this development on. 852*6236dae4SAndroid Build Coastguard Worker 853*6236dae4SAndroid Build Coastguard Worker Björn Stenberg wrote a separate initial take on DANE that was never 854*6236dae4SAndroid Build Coastguard Worker completed. 855*6236dae4SAndroid Build Coastguard Worker 856*6236dae4SAndroid Build Coastguard Worker13.9 TLS record padding 857*6236dae4SAndroid Build Coastguard Worker 858*6236dae4SAndroid Build Coastguard Worker TLS (1.3) offers optional record padding and OpenSSL provides an API for it. 859*6236dae4SAndroid Build Coastguard Worker I could make sense for libcurl to offer this ability to applications to make 860*6236dae4SAndroid Build Coastguard Worker traffic patterns harder to figure out by network traffic observers. 861*6236dae4SAndroid Build Coastguard Worker 862*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/5398 863*6236dae4SAndroid Build Coastguard Worker 864*6236dae4SAndroid Build Coastguard Worker13.10 Support Authority Information Access certificate extension (AIA) 865*6236dae4SAndroid Build Coastguard Worker 866*6236dae4SAndroid Build Coastguard Worker AIA can provide various things like CRLs but more importantly information 867*6236dae4SAndroid Build Coastguard Worker about intermediate CA certificates that can allow validation path to be 868*6236dae4SAndroid Build Coastguard Worker fulfilled when the HTTPS server does not itself provide them. 869*6236dae4SAndroid Build Coastguard Worker 870*6236dae4SAndroid Build Coastguard Worker Since AIA is about downloading certs on demand to complete a TLS handshake, 871*6236dae4SAndroid Build Coastguard Worker it is probably a bit tricky to get done right. 872*6236dae4SAndroid Build Coastguard Worker 873*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/2793 874*6236dae4SAndroid Build Coastguard Worker 875*6236dae4SAndroid Build Coastguard Worker13.11 Some TLS options are not offered for HTTPS proxies 876*6236dae4SAndroid Build Coastguard Worker 877*6236dae4SAndroid Build Coastguard Worker Some TLS related options to the command line tool and libcurl are only 878*6236dae4SAndroid Build Coastguard Worker provided for the server and not for HTTPS proxies. --proxy-tls-max, 879*6236dae4SAndroid Build Coastguard Worker --proxy-tlsv1.3, --proxy-curves and a few more. 880*6236dae4SAndroid Build Coastguard Worker For more Documentation on this see: 881*6236dae4SAndroid Build Coastguard Worker https://curl.se/libcurl/c/tls-options.html 882*6236dae4SAndroid Build Coastguard Worker 883*6236dae4SAndroid Build Coastguard Worker https://github.com/curl/curl/issues/12286 884*6236dae4SAndroid Build Coastguard Worker 885*6236dae4SAndroid Build Coastguard Worker13.13 Make sure we forbid TLS 1.3 post-handshake authentication 886*6236dae4SAndroid Build Coastguard Worker 887*6236dae4SAndroid Build Coastguard Worker RFC 8740 explains how using HTTP/2 must forbid the use of TLS 1.3 888*6236dae4SAndroid Build Coastguard Worker post-handshake authentication. We should make sure to live up to that. 889*6236dae4SAndroid Build Coastguard Worker 890*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/5396 891*6236dae4SAndroid Build Coastguard Worker 892*6236dae4SAndroid Build Coastguard Worker13.14 Support the clienthello extension 893*6236dae4SAndroid Build Coastguard Worker 894*6236dae4SAndroid Build Coastguard Worker Certain stupid networks and middle boxes have a problem with SSL handshake 895*6236dae4SAndroid Build Coastguard Worker packets that are within a certain size range because how that sets some bits 896*6236dae4SAndroid Build Coastguard Worker that previously (in older TLS version) were not set. The clienthello 897*6236dae4SAndroid Build Coastguard Worker extension adds padding to avoid that size range. 898*6236dae4SAndroid Build Coastguard Worker 899*6236dae4SAndroid Build Coastguard Worker https://datatracker.ietf.org/doc/html/rfc7685 900*6236dae4SAndroid Build Coastguard Worker https://github.com/curl/curl/issues/2299 901*6236dae4SAndroid Build Coastguard Worker 902*6236dae4SAndroid Build Coastguard Worker13.15 Select signature algorithms 903*6236dae4SAndroid Build Coastguard Worker 904*6236dae4SAndroid Build Coastguard Worker Consider adding an option or a way for users to select TLS signature 905*6236dae4SAndroid Build Coastguard Worker algorithm. The signature algorithms set by a client are used directly in the 906*6236dae4SAndroid Build Coastguard Worker supported signature algorithm in the client hello message. 907*6236dae4SAndroid Build Coastguard Worker 908*6236dae4SAndroid Build Coastguard Worker https://github.com/curl/curl/issues/12982 909*6236dae4SAndroid Build Coastguard Worker 910*6236dae4SAndroid Build Coastguard Worker13.16 Share the CA cache 911*6236dae4SAndroid Build Coastguard Worker 912*6236dae4SAndroid Build Coastguard Worker For TLS backends that supports CA caching, it makes sense to allow the share 913*6236dae4SAndroid Build Coastguard Worker object to be used to store the CA cache as well via the share API. Would 914*6236dae4SAndroid Build Coastguard Worker allow multiple easy handles to reuse the CA cache and save themselves from a 915*6236dae4SAndroid Build Coastguard Worker lot of extra processing overhead. 916*6236dae4SAndroid Build Coastguard Worker 917*6236dae4SAndroid Build Coastguard Worker13.17 Add missing features to TLS backends 918*6236dae4SAndroid Build Coastguard Worker 919*6236dae4SAndroid Build Coastguard Worker The feature matrix at https://curl.se/libcurl/c/tls-options.html shows which 920*6236dae4SAndroid Build Coastguard Worker features are supported by which TLS backends, and thus also where there are 921*6236dae4SAndroid Build Coastguard Worker feature gaps. 922*6236dae4SAndroid Build Coastguard Worker 923*6236dae4SAndroid Build Coastguard Worker15. Schannel 924*6236dae4SAndroid Build Coastguard Worker 925*6236dae4SAndroid Build Coastguard Worker15.1 Extend support for client certificate authentication 926*6236dae4SAndroid Build Coastguard Worker 927*6236dae4SAndroid Build Coastguard Worker The existing support for the -E/--cert and --key options could be 928*6236dae4SAndroid Build Coastguard Worker extended by supplying a custom certificate and key in PEM format, see: 929*6236dae4SAndroid Build Coastguard Worker - Getting a Certificate for Schannel 930*6236dae4SAndroid Build Coastguard Worker https://msdn.microsoft.com/en-us/library/windows/desktop/aa375447.aspx 931*6236dae4SAndroid Build Coastguard Worker 932*6236dae4SAndroid Build Coastguard Worker15.2 Extend support for the --ciphers option 933*6236dae4SAndroid Build Coastguard Worker 934*6236dae4SAndroid Build Coastguard Worker The existing support for the --ciphers option could be extended 935*6236dae4SAndroid Build Coastguard Worker by mapping the OpenSSL/GnuTLS cipher suites to the Schannel APIs, see 936*6236dae4SAndroid Build Coastguard Worker - Specifying Schannel Ciphers and Cipher Strengths 937*6236dae4SAndroid Build Coastguard Worker https://msdn.microsoft.com/en-us/library/windows/desktop/aa380161.aspx 938*6236dae4SAndroid Build Coastguard Worker 939*6236dae4SAndroid Build Coastguard Worker15.4 Add option to allow abrupt server closure 940*6236dae4SAndroid Build Coastguard Worker 941*6236dae4SAndroid Build Coastguard Worker libcurl with Schannel errors without a known termination point from the server 942*6236dae4SAndroid Build Coastguard Worker (such as length of transfer, or SSL "close notify" alert) to prevent against 943*6236dae4SAndroid Build Coastguard Worker a truncation attack. Really old servers may neglect to send any termination 944*6236dae4SAndroid Build Coastguard Worker point. An option could be added to ignore such abrupt closures. 945*6236dae4SAndroid Build Coastguard Worker 946*6236dae4SAndroid Build Coastguard Worker https://github.com/curl/curl/issues/4427 947*6236dae4SAndroid Build Coastguard Worker 948*6236dae4SAndroid Build Coastguard Worker16. SASL 949*6236dae4SAndroid Build Coastguard Worker 950*6236dae4SAndroid Build Coastguard Worker16.1 Other authentication mechanisms 951*6236dae4SAndroid Build Coastguard Worker 952*6236dae4SAndroid Build Coastguard Worker Add support for other authentication mechanisms such as OLP, 953*6236dae4SAndroid Build Coastguard Worker GSS-SPNEGO and others. 954*6236dae4SAndroid Build Coastguard Worker 955*6236dae4SAndroid Build Coastguard Worker16.2 Add QOP support to GSSAPI authentication 956*6236dae4SAndroid Build Coastguard Worker 957*6236dae4SAndroid Build Coastguard Worker Currently the GSSAPI authentication only supports the default QOP of auth 958*6236dae4SAndroid Build Coastguard Worker (Authentication), whilst Kerberos V5 supports both auth-int (Authentication 959*6236dae4SAndroid Build Coastguard Worker with integrity protection) and auth-conf (Authentication with integrity and 960*6236dae4SAndroid Build Coastguard Worker privacy protection). 961*6236dae4SAndroid Build Coastguard Worker 962*6236dae4SAndroid Build Coastguard Worker 963*6236dae4SAndroid Build Coastguard Worker17. SSH protocols 964*6236dae4SAndroid Build Coastguard Worker 965*6236dae4SAndroid Build Coastguard Worker17.1 Multiplexing 966*6236dae4SAndroid Build Coastguard Worker 967*6236dae4SAndroid Build Coastguard Worker SSH is a perfectly fine multiplexed protocols which would allow libcurl to do 968*6236dae4SAndroid Build Coastguard Worker multiple parallel transfers from the same host using the same connection, 969*6236dae4SAndroid Build Coastguard Worker much in the same spirit as HTTP/2 does. libcurl however does not take 970*6236dae4SAndroid Build Coastguard Worker advantage of that ability but does instead always create a new connection for 971*6236dae4SAndroid Build Coastguard Worker new transfers even if an existing connection already exists to the host. 972*6236dae4SAndroid Build Coastguard Worker 973*6236dae4SAndroid Build Coastguard Worker To fix this, libcurl would have to detect an existing connection and "attach" 974*6236dae4SAndroid Build Coastguard Worker the new transfer to the existing one. 975*6236dae4SAndroid Build Coastguard Worker 976*6236dae4SAndroid Build Coastguard Worker17.2 Handle growing SFTP files 977*6236dae4SAndroid Build Coastguard Worker 978*6236dae4SAndroid Build Coastguard Worker The SFTP code in libcurl checks the file size *before* a transfer starts and 979*6236dae4SAndroid Build Coastguard Worker then proceeds to transfer exactly that amount of data. If the remote file 980*6236dae4SAndroid Build Coastguard Worker grows while the transfer is in progress libcurl does not notice and does not 981*6236dae4SAndroid Build Coastguard Worker adapt. The OpenSSH SFTP command line tool does and libcurl could also just 982*6236dae4SAndroid Build Coastguard Worker attempt to download more to see if there is more to get... 983*6236dae4SAndroid Build Coastguard Worker 984*6236dae4SAndroid Build Coastguard Worker https://github.com/curl/curl/issues/4344 985*6236dae4SAndroid Build Coastguard Worker 986*6236dae4SAndroid Build Coastguard Worker17.3 Read keys from ~/.ssh/id_ecdsa, id_ed25519 987*6236dae4SAndroid Build Coastguard Worker 988*6236dae4SAndroid Build Coastguard Worker The libssh2 backend in curl is limited to only reading keys from id_rsa and 989*6236dae4SAndroid Build Coastguard Worker id_dsa, which makes it fail connecting to servers that use more modern key 990*6236dae4SAndroid Build Coastguard Worker types. 991*6236dae4SAndroid Build Coastguard Worker 992*6236dae4SAndroid Build Coastguard Worker https://github.com/curl/curl/issues/8586 993*6236dae4SAndroid Build Coastguard Worker 994*6236dae4SAndroid Build Coastguard Worker17.4 Support CURLOPT_PREQUOTE 995*6236dae4SAndroid Build Coastguard Worker 996*6236dae4SAndroid Build Coastguard Worker The two other QUOTE options are supported for SFTP, but this was left out for 997*6236dae4SAndroid Build Coastguard Worker unknown reasons. 998*6236dae4SAndroid Build Coastguard Worker 999*6236dae4SAndroid Build Coastguard Worker17.5 SSH over HTTPS proxy with more backends 1000*6236dae4SAndroid Build Coastguard Worker 1001*6236dae4SAndroid Build Coastguard Worker The SSH based protocols SFTP and SCP did not work over HTTPS proxy at 1002*6236dae4SAndroid Build Coastguard Worker all until PR https://github.com/curl/curl/pull/6021 brought the 1003*6236dae4SAndroid Build Coastguard Worker functionality with the libssh2 backend. Presumably, this support 1004*6236dae4SAndroid Build Coastguard Worker can/could be added for the other backends as well. 1005*6236dae4SAndroid Build Coastguard Worker 1006*6236dae4SAndroid Build Coastguard Worker17.6 SFTP with SCP:// 1007*6236dae4SAndroid Build Coastguard Worker 1008*6236dae4SAndroid Build Coastguard Worker OpenSSH 9 switched their 'scp' tool to speak SFTP under the hood. Going 1009*6236dae4SAndroid Build Coastguard Worker forward it might be worth having curl or libcurl attempt SFTP if SCP fails to 1010*6236dae4SAndroid Build Coastguard Worker follow suite. 1011*6236dae4SAndroid Build Coastguard Worker 1012*6236dae4SAndroid Build Coastguard Worker18. Command line tool 1013*6236dae4SAndroid Build Coastguard Worker 1014*6236dae4SAndroid Build Coastguard Worker18.1 sync 1015*6236dae4SAndroid Build Coastguard Worker 1016*6236dae4SAndroid Build Coastguard Worker "curl --sync http://example.com/feed[1-100].rss" or 1017*6236dae4SAndroid Build Coastguard Worker "curl --sync http://example.net/{index,calendar,history}.html" 1018*6236dae4SAndroid Build Coastguard Worker 1019*6236dae4SAndroid Build Coastguard Worker Downloads a range or set of URLs using the remote name, but only if the 1020*6236dae4SAndroid Build Coastguard Worker remote file is newer than the local file. A Last-Modified HTTP date header 1021*6236dae4SAndroid Build Coastguard Worker should also be used to set the mod date on the downloaded file. 1022*6236dae4SAndroid Build Coastguard Worker 1023*6236dae4SAndroid Build Coastguard Worker18.2 glob posts 1024*6236dae4SAndroid Build Coastguard Worker 1025*6236dae4SAndroid Build Coastguard Worker Globbing support for -d and -F, as in 'curl -d "name=foo[0-9]" URL'. 1026*6236dae4SAndroid Build Coastguard Worker This is easily scripted though. 1027*6236dae4SAndroid Build Coastguard Worker 1028*6236dae4SAndroid Build Coastguard Worker18.4 --proxycommand 1029*6236dae4SAndroid Build Coastguard Worker 1030*6236dae4SAndroid Build Coastguard Worker Allow the user to make curl run a command and use its stdio to make requests 1031*6236dae4SAndroid Build Coastguard Worker and not do any network connection by itself. Example: 1032*6236dae4SAndroid Build Coastguard Worker 1033*6236dae4SAndroid Build Coastguard Worker curl --proxycommand 'ssh [email protected] -W 10.1.1.75 80' \ 1034*6236dae4SAndroid Build Coastguard Worker http://some/otherwise/unavailable/service.php 1035*6236dae4SAndroid Build Coastguard Worker 1036*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/4941 1037*6236dae4SAndroid Build Coastguard Worker 1038*6236dae4SAndroid Build Coastguard Worker18.5 UTF-8 filenames in Content-Disposition 1039*6236dae4SAndroid Build Coastguard Worker 1040*6236dae4SAndroid Build Coastguard Worker RFC 6266 documents how UTF-8 names can be passed to a client in the 1041*6236dae4SAndroid Build Coastguard Worker Content-Disposition header, and curl does not support this. 1042*6236dae4SAndroid Build Coastguard Worker 1043*6236dae4SAndroid Build Coastguard Worker https://github.com/curl/curl/issues/1888 1044*6236dae4SAndroid Build Coastguard Worker 1045*6236dae4SAndroid Build Coastguard Worker18.6 Option to make -Z merge lined based outputs on stdout 1046*6236dae4SAndroid Build Coastguard Worker 1047*6236dae4SAndroid Build Coastguard Worker When a user requests multiple lined based files using -Z and sends them to 1048*6236dae4SAndroid Build Coastguard Worker stdout, curl does not "merge" and send complete lines fine but may send 1049*6236dae4SAndroid Build Coastguard Worker partial lines from several sources. 1050*6236dae4SAndroid Build Coastguard Worker 1051*6236dae4SAndroid Build Coastguard Worker https://github.com/curl/curl/issues/5175 1052*6236dae4SAndroid Build Coastguard Worker 1053*6236dae4SAndroid Build Coastguard Worker18.7 specify which response codes that make -f/--fail return error 1054*6236dae4SAndroid Build Coastguard Worker 1055*6236dae4SAndroid Build Coastguard Worker Allows a user to better specify exactly which error code(s) that are fine 1056*6236dae4SAndroid Build Coastguard Worker and which are errors for their specific uses cases 1057*6236dae4SAndroid Build Coastguard Worker 1058*6236dae4SAndroid Build Coastguard Worker18.9 Choose the name of file in braces for complex URLs 1059*6236dae4SAndroid Build Coastguard Worker 1060*6236dae4SAndroid Build Coastguard Worker When using braces to download a list of URLs and you use complicated names 1061*6236dae4SAndroid Build Coastguard Worker in the list of alternatives, it could be handy to allow curl to use other 1062*6236dae4SAndroid Build Coastguard Worker names when saving. 1063*6236dae4SAndroid Build Coastguard Worker 1064*6236dae4SAndroid Build Coastguard Worker Consider a way to offer that. Possibly like 1065*6236dae4SAndroid Build Coastguard Worker {partURL1:name1,partURL2:name2,partURL3:name3} where the name following the 1066*6236dae4SAndroid Build Coastguard Worker colon is the output name. 1067*6236dae4SAndroid Build Coastguard Worker 1068*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/221 1069*6236dae4SAndroid Build Coastguard Worker 1070*6236dae4SAndroid Build Coastguard Worker18.10 improve how curl works in a Windows console window 1071*6236dae4SAndroid Build Coastguard Worker 1072*6236dae4SAndroid Build Coastguard Worker If you pull the scrollbar when transferring with curl in a Windows console 1073*6236dae4SAndroid Build Coastguard Worker window, the transfer is interrupted and can get disconnected. This can 1074*6236dae4SAndroid Build Coastguard Worker probably be improved. See https://github.com/curl/curl/issues/322 1075*6236dae4SAndroid Build Coastguard Worker 1076*6236dae4SAndroid Build Coastguard Worker18.11 Windows: set attribute 'archive' for completed downloads 1077*6236dae4SAndroid Build Coastguard Worker 1078*6236dae4SAndroid Build Coastguard Worker The archive bit (FILE_ATTRIBUTE_ARCHIVE, 0x20) separates files that shall be 1079*6236dae4SAndroid Build Coastguard Worker backed up from those that are either not ready or have not changed. 1080*6236dae4SAndroid Build Coastguard Worker 1081*6236dae4SAndroid Build Coastguard Worker Downloads in progress are neither ready to be backed up, nor should they be 1082*6236dae4SAndroid Build Coastguard Worker opened by a different process. Only after a download has been completed it is 1083*6236dae4SAndroid Build Coastguard Worker sensible to include it in any integer snapshot or backup of the system. 1084*6236dae4SAndroid Build Coastguard Worker 1085*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/3354 1086*6236dae4SAndroid Build Coastguard Worker 1087*6236dae4SAndroid Build Coastguard Worker18.12 keep running, read instructions from pipe/socket 1088*6236dae4SAndroid Build Coastguard Worker 1089*6236dae4SAndroid Build Coastguard Worker Provide an option that makes curl not exit after the last URL (or even work 1090*6236dae4SAndroid Build Coastguard Worker without a given URL), and then make it read instructions passed on a pipe or 1091*6236dae4SAndroid Build Coastguard Worker over a socket to make further instructions so that a second subsequent curl 1092*6236dae4SAndroid Build Coastguard Worker invoke can talk to the still running instance and ask for transfers to get 1093*6236dae4SAndroid Build Coastguard Worker done, and thus maintain its connection pool, DNS cache and more. 1094*6236dae4SAndroid Build Coastguard Worker 1095*6236dae4SAndroid Build Coastguard Worker18.13 Acknowledge Ratelimit headers 1096*6236dae4SAndroid Build Coastguard Worker 1097*6236dae4SAndroid Build Coastguard Worker Consider a command line option that can make curl do multiple serial requests 1098*6236dae4SAndroid Build Coastguard Worker while acknowledging server specified rate limits: 1099*6236dae4SAndroid Build Coastguard Worker https://datatracker.ietf.org/doc/draft-ietf-httpapi-ratelimit-headers/ 1100*6236dae4SAndroid Build Coastguard Worker 1101*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/5406 1102*6236dae4SAndroid Build Coastguard Worker 1103*6236dae4SAndroid Build Coastguard Worker18.14 --dry-run 1104*6236dae4SAndroid Build Coastguard Worker 1105*6236dae4SAndroid Build Coastguard Worker A command line option that makes curl show exactly what it would do and send 1106*6236dae4SAndroid Build Coastguard Worker if it would run for real. 1107*6236dae4SAndroid Build Coastguard Worker 1108*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/5426 1109*6236dae4SAndroid Build Coastguard Worker 1110*6236dae4SAndroid Build Coastguard Worker18.15 --retry should resume 1111*6236dae4SAndroid Build Coastguard Worker 1112*6236dae4SAndroid Build Coastguard Worker When --retry is used and curl actually retries transfer, it should use the 1113*6236dae4SAndroid Build Coastguard Worker already transferred data and do a resumed transfer for the rest (when 1114*6236dae4SAndroid Build Coastguard Worker possible) so that it does not have to transfer the same data again that was 1115*6236dae4SAndroid Build Coastguard Worker already transferred before the retry. 1116*6236dae4SAndroid Build Coastguard Worker 1117*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/1084 1118*6236dae4SAndroid Build Coastguard Worker 1119*6236dae4SAndroid Build Coastguard Worker18.16 send only part of --data 1120*6236dae4SAndroid Build Coastguard Worker 1121*6236dae4SAndroid Build Coastguard Worker When the user only wants to send a small piece of the data provided with 1122*6236dae4SAndroid Build Coastguard Worker --data or --data-binary, like when that data is a huge file, consider a way 1123*6236dae4SAndroid Build Coastguard Worker to specify that curl should only send a piece of that. One suggested syntax 1124*6236dae4SAndroid Build Coastguard Worker would be: "--data-binary @largefile.zip!1073741823-2147483647". 1125*6236dae4SAndroid Build Coastguard Worker 1126*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/1200 1127*6236dae4SAndroid Build Coastguard Worker 1128*6236dae4SAndroid Build Coastguard Worker18.17 consider filename from the redirected URL with -O ? 1129*6236dae4SAndroid Build Coastguard Worker 1130*6236dae4SAndroid Build Coastguard Worker When a user gives a URL and uses -O, and curl follows a redirect to a new 1131*6236dae4SAndroid Build Coastguard Worker URL, the filename is not extracted and used from the newly redirected-to URL 1132*6236dae4SAndroid Build Coastguard Worker even if the new URL may have a much more sensible filename. 1133*6236dae4SAndroid Build Coastguard Worker 1134*6236dae4SAndroid Build Coastguard Worker This is clearly documented and helps for security since there is no surprise 1135*6236dae4SAndroid Build Coastguard Worker to users which filename that might get overwritten, but maybe a new option 1136*6236dae4SAndroid Build Coastguard Worker could allow for this or maybe -J should imply such a treatment as well as -J 1137*6236dae4SAndroid Build Coastguard Worker already allows for the server to decide what filename to use so it already 1138*6236dae4SAndroid Build Coastguard Worker provides the "may overwrite any file" risk. 1139*6236dae4SAndroid Build Coastguard Worker 1140*6236dae4SAndroid Build Coastguard Worker This is extra tricky if the original URL has no filename part at all since 1141*6236dae4SAndroid Build Coastguard Worker then the current code path does error out with an error message, and we 1142*6236dae4SAndroid Build Coastguard Worker cannot *know* already at that point if curl is redirected to a URL that has a 1143*6236dae4SAndroid Build Coastguard Worker filename... 1144*6236dae4SAndroid Build Coastguard Worker 1145*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/1241 1146*6236dae4SAndroid Build Coastguard Worker 1147*6236dae4SAndroid Build Coastguard Worker18.18 retry on network is unreachable 1148*6236dae4SAndroid Build Coastguard Worker 1149*6236dae4SAndroid Build Coastguard Worker The --retry option retries transfers on "transient failures". We later added 1150*6236dae4SAndroid Build Coastguard Worker --retry-connrefused to also retry for "connection refused" errors. 1151*6236dae4SAndroid Build Coastguard Worker 1152*6236dae4SAndroid Build Coastguard Worker Suggestions have been brought to also allow retry on "network is unreachable" 1153*6236dae4SAndroid Build Coastguard Worker errors and while totally reasonable, maybe we should consider a way to make 1154*6236dae4SAndroid Build Coastguard Worker this more configurable than to add a new option for every new error people 1155*6236dae4SAndroid Build Coastguard Worker want to retry for? 1156*6236dae4SAndroid Build Coastguard Worker 1157*6236dae4SAndroid Build Coastguard Worker https://github.com/curl/curl/issues/1603 1158*6236dae4SAndroid Build Coastguard Worker 1159*6236dae4SAndroid Build Coastguard Worker18.19 expand ~/ in config files 1160*6236dae4SAndroid Build Coastguard Worker 1161*6236dae4SAndroid Build Coastguard Worker For example .curlrc could benefit from being able to do this. 1162*6236dae4SAndroid Build Coastguard Worker 1163*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/2317 1164*6236dae4SAndroid Build Coastguard Worker 1165*6236dae4SAndroid Build Coastguard Worker18.20 hostname sections in config files 1166*6236dae4SAndroid Build Coastguard Worker 1167*6236dae4SAndroid Build Coastguard Worker config files would be more powerful if they could set different 1168*6236dae4SAndroid Build Coastguard Worker configurations depending on used URLs, hostname or possibly origin. Then a 1169*6236dae4SAndroid Build Coastguard Worker default .curlrc could a specific user-agent only when doing requests against 1170*6236dae4SAndroid Build Coastguard Worker a certain site. 1171*6236dae4SAndroid Build Coastguard Worker 1172*6236dae4SAndroid Build Coastguard Worker18.21 retry on the redirected-to URL 1173*6236dae4SAndroid Build Coastguard Worker 1174*6236dae4SAndroid Build Coastguard Worker When curl is told to --retry a failed transfer and follows redirects, it 1175*6236dae4SAndroid Build Coastguard Worker might get an HTTP 429 response from the redirected-to URL and not the 1176*6236dae4SAndroid Build Coastguard Worker original one, which then could make curl decide to rather retry the transfer 1177*6236dae4SAndroid Build Coastguard Worker on that URL only instead of the original operation to the original URL. 1178*6236dae4SAndroid Build Coastguard Worker 1179*6236dae4SAndroid Build Coastguard Worker Perhaps extra emphasized if the original transfer is a large POST that 1180*6236dae4SAndroid Build Coastguard Worker redirects to a separate GET, and that GET is what gets the 529 1181*6236dae4SAndroid Build Coastguard Worker 1182*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/5462 1183*6236dae4SAndroid Build Coastguard Worker 1184*6236dae4SAndroid Build Coastguard Worker18.23 Set the modification date on an uploaded file 1185*6236dae4SAndroid Build Coastguard Worker 1186*6236dae4SAndroid Build Coastguard Worker For SFTP and possibly FTP, curl could offer an option to set the 1187*6236dae4SAndroid Build Coastguard Worker modification time for the uploaded file. 1188*6236dae4SAndroid Build Coastguard Worker 1189*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/5768 1190*6236dae4SAndroid Build Coastguard Worker 1191*6236dae4SAndroid Build Coastguard Worker18.24 Use multiple parallel transfers for a single download 1192*6236dae4SAndroid Build Coastguard Worker 1193*6236dae4SAndroid Build Coastguard Worker To enhance transfer speed, downloading a single URL can be split up into 1194*6236dae4SAndroid Build Coastguard Worker multiple separate range downloads that get combined into a single final 1195*6236dae4SAndroid Build Coastguard Worker result. 1196*6236dae4SAndroid Build Coastguard Worker 1197*6236dae4SAndroid Build Coastguard Worker An ideal implementation would not use a specified number of parallel 1198*6236dae4SAndroid Build Coastguard Worker transfers, but curl could: 1199*6236dae4SAndroid Build Coastguard Worker - First start getting the full file as transfer A 1200*6236dae4SAndroid Build Coastguard Worker - If after N seconds have passed and the transfer is expected to continue for 1201*6236dae4SAndroid Build Coastguard Worker M seconds or more, add a new transfer (B) that asks for the second half of 1202*6236dae4SAndroid Build Coastguard Worker A's content (and stop A at the middle). 1203*6236dae4SAndroid Build Coastguard Worker - If splitting up the work improves the transfer rate, it could then be done 1204*6236dae4SAndroid Build Coastguard Worker again. Then again, etc up to a limit. 1205*6236dae4SAndroid Build Coastguard Worker 1206*6236dae4SAndroid Build Coastguard Worker This way, if transfer B fails (because Range: is not supported) it lets 1207*6236dae4SAndroid Build Coastguard Worker transfer A remain the single one. N and M could be set to some sensible 1208*6236dae4SAndroid Build Coastguard Worker defaults. 1209*6236dae4SAndroid Build Coastguard Worker 1210*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/5774 1211*6236dae4SAndroid Build Coastguard Worker 1212*6236dae4SAndroid Build Coastguard Worker18.25 Prevent terminal injection when writing to terminal 1213*6236dae4SAndroid Build Coastguard Worker 1214*6236dae4SAndroid Build Coastguard Worker curl could offer an option to make escape sequence either non-functional or 1215*6236dae4SAndroid Build Coastguard Worker avoid cursor moves or similar to reduce the risk of a user getting tricked by 1216*6236dae4SAndroid Build Coastguard Worker clever tricks. 1217*6236dae4SAndroid Build Coastguard Worker 1218*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/6150 1219*6236dae4SAndroid Build Coastguard Worker 1220*6236dae4SAndroid Build Coastguard Worker18.26 Custom progress meter update interval 1221*6236dae4SAndroid Build Coastguard Worker 1222*6236dae4SAndroid Build Coastguard Worker Users who are for example doing large downloads in CI or remote setups might 1223*6236dae4SAndroid Build Coastguard Worker want the occasional progress meter update to see that the transfer is 1224*6236dae4SAndroid Build Coastguard Worker progressing and has not stuck, but they may not appreciate the 1225*6236dae4SAndroid Build Coastguard Worker many-times-a-second frequency curl can end up doing it with now. 1226*6236dae4SAndroid Build Coastguard Worker 1227*6236dae4SAndroid Build Coastguard Worker18.27 -J and -O with %-encoded filenames 1228*6236dae4SAndroid Build Coastguard Worker 1229*6236dae4SAndroid Build Coastguard Worker -J/--remote-header-name does not decode %-encoded filenames. RFC 6266 details 1230*6236dae4SAndroid Build Coastguard Worker how it should be done. The can of worm is basically that we have no charset 1231*6236dae4SAndroid Build Coastguard Worker handling in curl and ASCII >=128 is a challenge for us. Not to mention that 1232*6236dae4SAndroid Build Coastguard Worker decoding also means that we need to check for nastiness that is attempted, 1233*6236dae4SAndroid Build Coastguard Worker like "../" sequences and the like. Probably everything to the left of any 1234*6236dae4SAndroid Build Coastguard Worker embedded slashes should be cut off. 1235*6236dae4SAndroid Build Coastguard Worker https://curl.se/bug/view.cgi?id=1294 1236*6236dae4SAndroid Build Coastguard Worker 1237*6236dae4SAndroid Build Coastguard Worker -O also does not decode %-encoded names, and while it has even less 1238*6236dae4SAndroid Build Coastguard Worker information about the charset involved the process is similar to the -J case. 1239*6236dae4SAndroid Build Coastguard Worker 1240*6236dae4SAndroid Build Coastguard Worker Note that we do not decode -O without the user asking for it with some other 1241*6236dae4SAndroid Build Coastguard Worker means, since -O has always been documented to use the name exactly as 1242*6236dae4SAndroid Build Coastguard Worker specified in the URL. 1243*6236dae4SAndroid Build Coastguard Worker 1244*6236dae4SAndroid Build Coastguard Worker18.28 -J with -C - 1245*6236dae4SAndroid Build Coastguard Worker 1246*6236dae4SAndroid Build Coastguard Worker When using -J (with -O), automatically resumed downloading together with "-C 1247*6236dae4SAndroid Build Coastguard Worker -" fails. Without -J the same command line works. This happens because the 1248*6236dae4SAndroid Build Coastguard Worker resume logic is worked out before the target filename (and thus its 1249*6236dae4SAndroid Build Coastguard Worker pre-transfer size) has been figured out. This can be improved. 1250*6236dae4SAndroid Build Coastguard Worker 1251*6236dae4SAndroid Build Coastguard Worker https://curl.se/bug/view.cgi?id=1169 1252*6236dae4SAndroid Build Coastguard Worker 1253*6236dae4SAndroid Build Coastguard Worker18.29 --retry and transfer timeouts 1254*6236dae4SAndroid Build Coastguard Worker 1255*6236dae4SAndroid Build Coastguard Worker If using --retry and the transfer timeouts (possibly due to using -m or 1256*6236dae4SAndroid Build Coastguard Worker -y/-Y) the next attempt does not resume the transfer properly from what was 1257*6236dae4SAndroid Build Coastguard Worker downloaded in the previous attempt but truncates and restarts at the original 1258*6236dae4SAndroid Build Coastguard Worker position where it was at before the previous failed attempt. See 1259*6236dae4SAndroid Build Coastguard Worker https://curl.se/mail/lib-2008-01/0080.html and Mandriva bug report 1260*6236dae4SAndroid Build Coastguard Worker https://qa.mandriva.com/show_bug.cgi?id=22565 1261*6236dae4SAndroid Build Coastguard Worker 1262*6236dae4SAndroid Build Coastguard Worker 1263*6236dae4SAndroid Build Coastguard Worker19. Build 1264*6236dae4SAndroid Build Coastguard Worker 1265*6236dae4SAndroid Build Coastguard Worker19.2 Enable PIE and RELRO by default 1266*6236dae4SAndroid Build Coastguard Worker 1267*6236dae4SAndroid Build Coastguard Worker Especially when having programs that execute curl via the command line, PIE 1268*6236dae4SAndroid Build Coastguard Worker renders the exploitation of memory corruption vulnerabilities a lot more 1269*6236dae4SAndroid Build Coastguard Worker difficult. This can be attributed to the additional information leaks being 1270*6236dae4SAndroid Build Coastguard Worker required to conduct a successful attack. RELRO, on the other hand, masks 1271*6236dae4SAndroid Build Coastguard Worker different binary sections like the GOT as read-only and thus kills a handful 1272*6236dae4SAndroid Build Coastguard Worker of techniques that come in handy when attackers are able to arbitrarily 1273*6236dae4SAndroid Build Coastguard Worker overwrite memory. A few tests showed that enabling these features had close 1274*6236dae4SAndroid Build Coastguard Worker to no impact, neither on the performance nor on the general functionality of 1275*6236dae4SAndroid Build Coastguard Worker curl. 1276*6236dae4SAndroid Build Coastguard Worker 1277*6236dae4SAndroid Build Coastguard Worker19.3 Do not use GNU libtool on OpenBSD 1278*6236dae4SAndroid Build Coastguard Worker 1279*6236dae4SAndroid Build Coastguard Worker When compiling curl on OpenBSD with "--enable-debug" it gives linking errors 1280*6236dae4SAndroid Build Coastguard Worker when you use GNU libtool. This can be fixed by using the libtool provided by 1281*6236dae4SAndroid Build Coastguard Worker OpenBSD itself. However for this the user always needs to invoke make with 1282*6236dae4SAndroid Build Coastguard Worker "LIBTOOL=/usr/bin/libtool". It would be nice if the script could have some 1283*6236dae4SAndroid Build Coastguard Worker magic to detect if this system is an OpenBSD host and then use the OpenBSD 1284*6236dae4SAndroid Build Coastguard Worker libtool instead. 1285*6236dae4SAndroid Build Coastguard Worker 1286*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/5862 1287*6236dae4SAndroid Build Coastguard Worker 1288*6236dae4SAndroid Build Coastguard Worker19.4 Package curl for Windows in a signed installer 1289*6236dae4SAndroid Build Coastguard Worker 1290*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/5424 1291*6236dae4SAndroid Build Coastguard Worker 1292*6236dae4SAndroid Build Coastguard Worker19.5 make configure use --cache-file more and better 1293*6236dae4SAndroid Build Coastguard Worker 1294*6236dae4SAndroid Build Coastguard Worker The configure script can be improved to cache more values so that repeated 1295*6236dae4SAndroid Build Coastguard Worker invokes run much faster. 1296*6236dae4SAndroid Build Coastguard Worker 1297*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/7753 1298*6236dae4SAndroid Build Coastguard Worker 1299*6236dae4SAndroid Build Coastguard Worker20. Test suite 1300*6236dae4SAndroid Build Coastguard Worker 1301*6236dae4SAndroid Build Coastguard Worker20.1 SSL tunnel 1302*6236dae4SAndroid Build Coastguard Worker 1303*6236dae4SAndroid Build Coastguard Worker Make our own version of stunnel for simple port forwarding to enable HTTPS 1304*6236dae4SAndroid Build Coastguard Worker and FTP-SSL tests without the stunnel dependency, and it could allow us to 1305*6236dae4SAndroid Build Coastguard Worker provide test tools built with either OpenSSL or GnuTLS 1306*6236dae4SAndroid Build Coastguard Worker 1307*6236dae4SAndroid Build Coastguard Worker20.2 nicer lacking perl message 1308*6236dae4SAndroid Build Coastguard Worker 1309*6236dae4SAndroid Build Coastguard Worker If perl was not found by the configure script, do not attempt to run the tests 1310*6236dae4SAndroid Build Coastguard Worker but explain something nice why it does not. 1311*6236dae4SAndroid Build Coastguard Worker 1312*6236dae4SAndroid Build Coastguard Worker20.3 more protocols supported 1313*6236dae4SAndroid Build Coastguard Worker 1314*6236dae4SAndroid Build Coastguard Worker Extend the test suite to include more protocols. The telnet could just do FTP 1315*6236dae4SAndroid Build Coastguard Worker or http operations (for which we have test servers). 1316*6236dae4SAndroid Build Coastguard Worker 1317*6236dae4SAndroid Build Coastguard Worker20.4 more platforms supported 1318*6236dae4SAndroid Build Coastguard Worker 1319*6236dae4SAndroid Build Coastguard Worker Make the test suite work on more platforms. OpenBSD and macOS. Remove 1320*6236dae4SAndroid Build Coastguard Worker fork()s and it should become even more portable. 1321*6236dae4SAndroid Build Coastguard Worker 1322*6236dae4SAndroid Build Coastguard Worker20.6 Use the RFC 6265 test suite 1323*6236dae4SAndroid Build Coastguard Worker 1324*6236dae4SAndroid Build Coastguard Worker A test suite made for HTTP cookies (RFC 6265) by Adam Barth is available at 1325*6236dae4SAndroid Build Coastguard Worker https://github.com/abarth/http-state/tree/master/tests 1326*6236dae4SAndroid Build Coastguard Worker 1327*6236dae4SAndroid Build Coastguard Worker It would be good if someone would write a script/setup that would run curl 1328*6236dae4SAndroid Build Coastguard Worker with that test suite and detect deviances. Ideally, that would even be 1329*6236dae4SAndroid Build Coastguard Worker incorporated into our regular test suite. 1330*6236dae4SAndroid Build Coastguard Worker 1331*6236dae4SAndroid Build Coastguard Worker20.8 Run web-platform-tests URL tests 1332*6236dae4SAndroid Build Coastguard Worker 1333*6236dae4SAndroid Build Coastguard Worker Run web-platform-tests URL tests and compare results with browsers on wpt.fyi 1334*6236dae4SAndroid Build Coastguard Worker 1335*6236dae4SAndroid Build Coastguard Worker It would help us find issues to fix and help us document where our parser 1336*6236dae4SAndroid Build Coastguard Worker differs from the WHATWG URL spec parsers. 1337*6236dae4SAndroid Build Coastguard Worker 1338*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/4477 1339*6236dae4SAndroid Build Coastguard Worker 1340*6236dae4SAndroid Build Coastguard Worker21. MQTT 1341*6236dae4SAndroid Build Coastguard Worker 1342*6236dae4SAndroid Build Coastguard Worker21.1 Support rate-limiting 1343*6236dae4SAndroid Build Coastguard Worker 1344*6236dae4SAndroid Build Coastguard Worker The rate-limiting logic is done in the PERFORMING state in multi.c but MQTT 1345*6236dae4SAndroid Build Coastguard Worker is not (yet) implemented to use that. 1346*6236dae4SAndroid Build Coastguard Worker 1347*6236dae4SAndroid Build Coastguard Worker21.2 Support MQTTS 1348*6236dae4SAndroid Build Coastguard Worker 1349*6236dae4SAndroid Build Coastguard Worker21.3 Handle network blocks 1350*6236dae4SAndroid Build Coastguard Worker 1351*6236dae4SAndroid Build Coastguard Worker Running test suite with 1352*6236dae4SAndroid Build Coastguard Worker `CURL_DBG_SOCK_WBLOCK=90 ./runtests.pl -a mqtt` makes several 1353*6236dae4SAndroid Build Coastguard Worker MQTT test cases fail where they should not. 1354*6236dae4SAndroid Build Coastguard Worker 1355*6236dae4SAndroid Build Coastguard Worker22. TFTP 1356*6236dae4SAndroid Build Coastguard Worker 1357*6236dae4SAndroid Build Coastguard Worker22.1 TFTP does not convert LF to CRLF for mode=netascii 1358*6236dae4SAndroid Build Coastguard Worker 1359*6236dae4SAndroid Build Coastguard Worker RFC 3617 defines that an TFTP transfer can be done using "netascii" 1360*6236dae4SAndroid Build Coastguard Worker mode. curl does not support extracting that mode from the URL nor does it treat 1361*6236dae4SAndroid Build Coastguard Worker such transfers specifically. It should probably do LF to CRLF translations 1362*6236dae4SAndroid Build Coastguard Worker for them. 1363*6236dae4SAndroid Build Coastguard Worker 1364*6236dae4SAndroid Build Coastguard Worker See https://github.com/curl/curl/issues/12655 1365*6236dae4SAndroid Build Coastguard Worker 1366*6236dae4SAndroid Build Coastguard Worker23. Gopher 1367*6236dae4SAndroid Build Coastguard Worker 1368*6236dae4SAndroid Build Coastguard Worker23.1 Handle network blocks 1369*6236dae4SAndroid Build Coastguard Worker 1370*6236dae4SAndroid Build Coastguard Worker Running test suite with 1371*6236dae4SAndroid Build Coastguard Worker `CURL_DBG_SOCK_WBLOCK=90 ./runtests.pl -a 1200 to 1300` makes several 1372*6236dae4SAndroid Build Coastguard Worker Gopher test cases fail where they should not. 1373