xref: /aosp_15_r20/external/curl/docs/TODO (revision 6236dae45794135f37c4eb022389c904c8b0090d)
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