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