�ɲɾ�����ӯ�����һ��ˣ��������С���˴��ͣ�������P���ҹ��ñ˽��ά�Բ��������˸߸ԣ�������ơ��ҹ��ñ�����ά�Բ���ˡ���˳^�ӣ������ӡ� ���ͯj�ӣ��ƺ���ӣ� ? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!usr/share/doc/libmcrypt/TODO000064400000000151152525604560011730 0ustar00- Documentation- documentation-... - Find test vectors for PANAMA and WAKE and check the implementation. usr/share/doc/gzip/TODO000064400000006613152526002230010670 0ustar00TODO file for gzip. Some of the planned features include: - Remove some of the old porting cruft, since we no longer support it. - Separate out the shell scripts like gzexe into a new little package; these scripts are less used and less reliable and should be optional. - Internationalize by using gettext and setlocale. - Structure the sources so that the compression and decompression code form a library usable by any program, and write both gzip and zip on top of this library. This would ideally be a reentrant (thread safe) library, but this would degrade performance. In the meantime, you can look at the sample program zread.c. The library should have one mode in which compressed data is sent as soon as input is available, instead of waiting for complete blocks. This can be useful for sending compressed data to/from interactive programs. - Make it convenient to define alternative user interfaces (in particular for windowing environments). - Support in-memory compression for arbitrarily large amounts of data (zip currently supports in-memory compression only for a single buffer.) - Map files in memory when possible, this is generally much faster than read/write. (zip currently maps entire files at once, this should be done in chunks to reduce memory usage.) - Add a super-fast compression method, suitable for implementing file systems with transparent compression. The lzrw series of algorithms are available at http://www.ross.net/compression/. - Add a super-tight (but slow) compression method, suitable for long term archives. See, for example, US Patents 4,286,256 4,295,125 4,463,342 4,467,317 4,633,490 4,652,856 4,891,643 4,905,297 4,935,882 4,973,961 5,023,611 5,025,258, which have all expired. More recent patent-free techniques may also be available. Note: I will introduce new compression methods only if they are significantly better in either speed or compression ratio than the existing method(s). So the total number of different methods should reasonably not exceed 3. (The current 9 compression levels are just tuning parameters for a single method, deflation.) - Add optional error correction. One problem is that the current version of ecc cannot recover from inserted or missing bytes. It would be nice to recover from the most common error (transfer of a binary file in ascii mode). - Add a block size (-b) option to improve error recovery in case of failure of a complete sector. Each block could be extracted independently, but this reduces the compression ratio. For one possible approach to this, please see: https://ozlabs.org/~rusty/gzip.rsync.patch - Use a larger window size to deal with some large redundant files that 'compress' currently handles better than gzip. - Implement the -e (encrypt) option. Send comments to . ======================================================================== Copyright (C) 1999, 2001, 2006, 2009-2018 Free Software Foundation, Inc. Copyright (C) 1992, 1993 Jean-loup Gailly Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the ``GNU Free Documentation License'' file as part of this distribution. usr/share/doc/yajl/TODO000064400000000514152526027250010661 0ustar00* add a test for 0x1F bug * numeric overflow in integers and double * line and char offsets in the lexer and in error messages * testing: a. the permuter b. some performance comparison against json_checker. * investigate pull instead of push parsing * Handle memory allocation failures gracefully * cygwin/msys support on win32 usr/share/doc/kmod/TODO000064400000003676152526326540010674 0ustar00Features: ========= * Add command for signing modules - There is a script to sign modules in kernel tree, but we should be able to sign modules by ourselves * Stop using NOFAIL() and fatal() * Protect index against OOM * Implement actions in kmod tool like 'insert', 'remove', 'info', etc * testsuite: - when fake delete_module() succeeds, remove its entry from /sys/module - improve coverage (use --enable-coverage to check the current state) * Stop using system() inside the library and use fork + exec instead * config: configs that do not need to be matched by fnmatch() could be using a vector instead of a list. This way we could search in it by calling bsearch(). * config: implement the config handling in shared/ and use it in both depmod and libkmod * review API, maybe unify all of these getters: - kmod_module_version_get_symbol() - kmod_module_version_get_crc() - kmod_module_symbol_get_symbol() - kmod_module_symbol_get_crc() - kmod_module_dependency_symbol_get_symbol() - kmod_module_dependency_symbol_get_crc() - kmod_module_versions_free_list() - kmod_module_symbols_free_list() - kmod_module_dependency_symbols_free_list() * index: drop the "open(), seek(), read()" implementation and use another one with mmap(). When lookup() is called and the file is not mmaped, mmap it. Another possibility is to drop the mmap implementation relying on VFS to have the pages cached. This would simplify the interface exported by libkmod. Measure performance before deciding. * depmod: - join functions for text/binary outputs - use new O_TMPFILE for tmp file creation Things to be added/removed in kernel (check what is really needed): =================================================================== * list of currently loaded modules - readdir() in /sys/modules: dir without a 'initstate' file means the module is builtin. * kill /proc/modules ? - Unlikely, given other tools might depend on it usr/share/doc/libtool/TODO000064400000033761152526561220011400 0ustar00GNU Libtool *********** 1. In the near future ===================== 1.1. libtool ------------ * Rather than looking up the linker's hardcode characteristics in a table of shell code, use objdump or equivalent to probe a test program at configure time. * Eliminate the warnings from autoconf -Wobsolete. * Hook the various language dependencies into the autoconf _AC_LANG framework. * Work out what to do when the dynamic linker loads needed dependencies. * We could have an option to hardcode paths into libraries, as well as binaries: '... -Wl,-soname -Wl,/tmp/libtest.so.0 ...'. This is not possible on all platforms, and is in part obviated by the ability of linking libtool libraries specified with -lname, but it might still be desirable. * Lists of exported symbols should be stored in the pseudo library so that the size of lt_preloaded_symbols can be reduced. * Have some option to tell libtool not to include -L flags that point into a certain tree in the dependence list of an installed library. For example: -L-$top_builddir would let one link with libtool libraries in sibling subdirectories within a project, using the -L notation, without getting builddir pathnames ever mentioned in .la files that get installed. * Eric Lemings writes: Because of a growing number of config scripts for packages in GNOME 1.2 (e.g. glib-config, xml-config, orbit-config. etc), development of GNOME 2.0 spawned a separate tool called pkg-config that allows all packages to use one tool rather than several different scripts to query compile flags, link flags, and other configuration data. The functionality of pkg-config seems to me to have a lot of overlap with the goals of libtool. I was wondering if anyone had considered adding an eighth mode to libtool that just queries the installed library for the same information that pkg-config provides. Since most packages that use pkg-config also use libtool, I think this would be a good way to reduce maintainer and developer dependencies. * Have libtoolize install 'install-sh' if a newer version is available, and/or Automake is not used. * Allow to specify linking some dependent libraries statically and some dynamically, where possible. * Improve support for C++ with templates. * Audit file listing in libtool.m4. * Fix deplibs_check_method=pass_all (which is wrong!) on GNU/Linux. * Fix -dlopen "self" on AIX. Reported by Gary Kumfert . * Fix denial of service if using installed 'libtool' on a different mount point together with a compiler that does not understand '-c -o'. Reported by Marcin Siennicki. * Look at better -no-undefined support, maybe along the idea of [support #103719] for CC. 1.2. libltdl ------------ * Change libltdl interface: add separate functions for function pointers. This will allow porting to systems where function pointers are incompatible with data pointer C-wise. * Fix the following bugs in libltdl: - error reporting of tryall_dlopen(): if the file actually doesn't exist (stat() fails or it wasn't dlpreopened) -> report 'file not found' if it cannot be loaded (e.g. due to missing dependencies) -> report dlerror open question: what error should be reported if all dlloaders fail or if a specific module type can only be loaded by one of them, how report its dlerror? Also report dlerror() for dlclose and dlsym if available - Make sure that the dependency_libs of a dlpreopened module won't be loaded. - Fix mdemo failures on mingw. - Fix the last memleak. Reported by Jeff Squyres . - Fix LTDL_CONVENIENCE. Reported by Bob Friesenhahn and Patrick Welche . 1.3. libtoolize --------------- * Rewrite the func_copy_* functions so that instead of forking 2 tar processes per copied file, a list of files to copy is built and all files copied with a single pair of tar processes. * Write test case that adds libtool macros to aclocal.m4. 2. In the future ================ 2.1. Documentation ------------------ * Need to finalize the documentation, and give a specification of '.la' files so that people can depend on their format. This would be a good thing to put before the maintainance notes. * Document the installed 'libtool' and its limitations clearly (maybe implement --disable-script-install as well). Or, even better, remove its limitations. * Platform notes redo. 2.2. test suite --------------- * Rewrite the whole thing in Autotest. This will enable us to remove all the tests/*demo noise, and duplication; and thus speed up bootstrap and make writing new tests a whole lot more pleasant. * We should include tests with reloadable objects in the testsuite. * Write a test case for linkage with gnu ld scripts (per 2004-08-25 patch from Paolo Bonzini). * Test everything: - cross compile - dirs with ~ - multiple input files 2.3. libtool ------------ * Fix cross-compiling. * Fix threads. * Support multilibbing. * If not cross-compiling, have the static flag test run the resulting binary to make sure everything works. * Another form of convenience library is to have undocumented utility libraries, where only the shared version is installed. * We could use libtool object convenience libraries that resolve symbols to be included in a libtool archive. This would require some sort of -whole-archive option, as well. * Currently, convenience libraries (.al) are built from .lo objects, except when --disable-shared. When we can build both shared and static libraries, we should probably create a .al out of .lo objects and also a .a out of .o objects. The .al would only be used to create shared libraries, whereas the .a would be used for creating static libraries and programs. We could also explicitly support 'empty' convenience libraries, that behave as macros that expand to a set of -Rs, -Ls and -ls switches. * Audit use of object names so we can allow '$' not only within source file names. Necessary especially for java. * We could introduce a mechanism to allow for soname rewriting, to ease multi-libc support. Installers could specify a prefix, suffix or sed command to modify the soname, and libtool would create the corresponding link. This would allow for rebuilding a library with the same version number, but depending on different versions of libc, for example. In the future, we might even have an option to encode the sonames of all dependencies of a library into its soname. * Look again at a binary C libtool, or byte-compiled libtool to improve speed. * Generate some "platform specific" shell functions with config.status, for example, there is no need to have the C source code for the wrapper script on non-windows platforms, this will make the generated libtool script smaller and easier to follow, maybe a little faster too? * Audit the GCJ tag section in libtool.m4. * Add caching mechanism. Look at 'libtool-cache' from Robert Ögren. 2.4. libtool autoconf macros ---------------------------- * Sort out the macro mess in libtool.m4. We've started this already by refactoring chunks into separate files, but I never did completely untangle the mess of macros imported from ltconfig. * The definitions for LT_SYS_MODULE_EXT, LT_SYS_MODULE_PATH and LT_SYS_DLSEARCH_PATH should not rely on the _LT_SYS_DYNAMIC_LINKER macro. This involves moving the code that sets the variables library_names_spec, shlibpath_var and sys_lib_dlsearch_path_spec from into a separate macro, and AC_REQUIRING the newly extracted macro in the respective ltdl.m4 macros. 2.5. libtool automake integration --------------------------------- * Unify locks between libtool and compile. * Fix relinking. 2.6. libltdl ------------ * Finish the rewrite of the core libltdl. The loaders are fine, and the outlying code is now good. Ralf is starting to pick away at a lot of the remaining nasties already, but the code for finding .la/.so files and reading/loading them could use a lot more improvement. * I think we could factor out a little path management support module from existing libltdl. This would be useful for M4 at least -- keeping track of FOO_PATH environment contents, searching for files in paths etc. * Try to find a work-around for -[all-]static and libltdl on platforms that will fail to find dlopening functions in this case. Maybe creating an alternate libltdl that provides only for dlpreopening, or creating an additional static library to provide dummy implementations of the functions that can't be linked statically. This could hardly be made completely transparent, though. * In conjunction with above, fix the failures on *BSD when linked to static libc. Reported by Guilhem Lavaux . * Add i18n strings to libltdl, ensuring that package developers can ignore any i18n when they libtoolize. 2.7. win32 support ------------------ * Arrange that EXEEXT suffixes are stripped from wrapper script names only when needed, and that a timestamp file or a wrapper program is created with the EXEEXT suffix, so that 'make' doesn't build it every time. * Figure out how to use data items in dlls with win32. The difficult part is compiling each object that will be linked with an import lib differently than if it will be linked with a static lib. This will almost definitely require that automake pass some hints about linkage in to each object compilation line. * jeffdb@goodnet.com writes: all you need to do for mutually dependent .dll's is to create an implib from a .def file so it appears that we might need to detect and handle mutual dependencies specially on win32 =(O| * QoI for file name and path conversion functions. Currently, these are implemented as MxN different functions; this has quadratic complexity. If possible, it would be preferred to implement then as M+N functions. However: http://lists.gnu.org/archive/html/libtool-patches/2010-08/msg00224.html The main issue is you don't know what the "native" (e.g. "central") path-type is; e.g. "from-X (to what?)" and "(from what?) to-Y". Right now there are only four "platforms" involved: *nix, mingw, msys, and cygwin. That's actually the break-even point, given the vagaries and optimizations involved in these particular four platforms. We have exactly five basic file name conversion functions (not counting the wrappers that handle paths). For a non-quadratic M+N (from-X|to-Y) solution, we'd need, I think, the same number of conversion functions: brute force suggests nine (four to_*, four from_*, plus the noop), but then many of the from_* and to_* would actually BE noop. I'm assuming here that the "central" path-type is implicitly some sort of unixish -- maybe cyg, maybe msys, maybe unix -- path-type. The issue is that each of the five conversion functions use a different TOOL to perform the conversion, with different syntax. So, trying to combine, e.g. msys_to_mingw cygwin_to_mingw unix_to_mingw into an all-encompassing "central_unixish_to_mingw" would require additional m4 magic to basically replace the guts depending on whether $build was msys, cygwin, or unix. Worse, you can't really do a set of {msys|cygwin|unix}_to_central_unixish that isn't simply a no-op -- because (A) they already are all unixish, and (B) what tool would you use? How would the later to_mingw function "know" how to covert this new representation to mingw. So, {msys|cygwin|unix}_to_central_unixish would simply be a no-op and central_unixish_to_mingw would still do all the work (with its guts customized based on $build). For more reasonable cross environments (e.g. linux-gnu->some_embedded) I think you could probably work out a general M+N scheme, since most embedded $hosts aren't as strange as the win32 variants -- even VxWorks and INTEGRITY have basic, unix-like file systems (although INTEGRITY does have multiple roots). Aggressive use of the m4 function_replace machinery WOULD be appropriate for /these/ conversion functions. OTOH...(a) you can't run the $host apps on $build anyway, in these embedded situations. At best you'd use $TARGETSHELL and "run" them via a remote connection, and (b) they don't use the C wrapper! So...I don't think it makes much difference *right now* in the amount of code required, or the number of functions implemented. At some point in the future we might want to generalize to an M+N scheme. For the existing win32 $hosts, all of the funtionality would be on "one side" of the 2-step conversion; the "other side" would be noop. But we won't worry about the implicit quadratic complexity of the existing scheme for now. 3. Wish List ============ * Maybe implement full support for other orthogonal library types (libhello_g, libhello_p, 64 vs 32-bit ABI's, etc). Make these types configurable. * Perhaps the use of libltdl could be made cleaner by allowing registration of hook functions to call at various points. This would hopefully free the user from having to maintain a parallel module list with user data. This would likely involve being able to carry additional per user module data in the lt_dlmodule structure -- perhaps in the form of an associative array keyed by user name? * Figure out how to make pkg-config aware of the information libtool knows about libraries and their dependencies, and send a patch. * Generate a libtool.m4 from a bunch of individual files, one per platform, to make the job of a "platform maintainer" easier and make it easier to add new platforms. -- Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software Foundation, Inc. Written by Gary V. Vaughan, 2004 This file is part of GNU Libtool. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Local Variables: mode: text fill-column: 72 End: usr/share/doc/zip/TODO000064400000015023152527034420010523 0ustar00Todo list (last updated 12 June 2008). Features for next official version: - Extended attributes for Windows, Linux, and Mac OS X. - Win32 ACL rewrite to use backup api to create new and more useful extra field (need unzip support) (Kai). - Allow -d@ to read in a list of names to delete (11/17/2005). - AES encryption (3/19/05). Features that may make the next release: - Allow reading in list of files using @filename. - When -R, -x, or -i pattern ends in a directory add / to the end (11/5/2004 Nehal). - Decide if -R, -i and -x should use external rather than internal patterns. Also, change pattern matching to not do ex2in() and then in2ex() if appropriate. (12/26/2005 SMS) - Though Unicode paths have been implemented and tested, Unicode comments are not yet supported (except for comments on UTF-8 native systems which are supported). - Verbose mode -v may still need work. - Add C# example for Zip 3.0 (need to be converted to new DLLs) - original C# example added with note. - Path Prefix maybe, so entries added to an archive can have a directory path string prepended to each path so can zip multiple drives and avoid name conflicts (4/17/2006). - UNC paths like \\server\path (4/26/2005). - Support for other languages maybe. - Add About page option similar to -h2 and -v but lists Info-ZIP information (could be -sa) (4/29/2006). - Update utilities ZipSplit, ZipNote, and ZipCloak to handle split archives. - Update ziperr and finish if needed. - Review memory allocation and fill in memory leaks if any. - Enhance -FF to fix common problems such as archives ftp in text mode and fixing checksums so entries can be extracted if that makes sense (6/17/2007). - Add \ to / conversion in zipsplit to fix problem in 1/29/2004 email. - Encryption bug with small stored file (12/27/2005) (fixed?). - When updating large archives with few entries being updated maybe display something in large periods of quiet (1/23/2006). - Windows OEM comments (5/17/2006). - Example of using MVS zip and unzip (3/30/2004) (Need one). - UTF-8 comments need to be implemented (6/17/2007) - Maybe convert ../ in archive (5/20/2006). - Per so many buffers dll callback (12/23/2005 Ale). - Allow rename stdin "-" to something else (12/27/2005 gregor). - Check for possible buffer overrun weaknesses while reading zip files. - Do Active Template Library (ATL) (4/27/2005). - Flush Win16 support - to be determined (Mike). - Way to convert file names on input, converting foo.c to dir/foo_bar.c for instance (4/8/2004, 3/12/2004). - French WiZ (not a Zip thing actually but dependent on zip and unzip). - Then there is that wierd ^D being converted to \000 error reported in 6/21/2003 email when Zip is outputted into a pipe on Windows ports. Old list: Main features still missing for next official version (last updated 2/11/2001): - what about the binary/text detection ? (seems done) - -b and -t options in help screen (covered in -h2) - findfirst/findnext and after that LSSTAT (performance!!) - use IS_EXEC from djgpp stat.h - use install in unix/Makefile instead of mkdir -p, look at install sh script. - #elif for those ports that can handle it. - what about zopen vs. fopen ? - Add zcreate or zfcreate for win32. - Assembler stuff in match.S (subexpressions) - zipping huge files (> 2G, unsigned 32bit) (done) - Testsuite for zip and unzip (John D. Mitchell) - make a version.c or version.h that includes all the compiler names - run utils with dmalloc(). - what to do with zip -F and zip -FF (readzipfile2()) ? (done?) - profiling of the code - multi disk zip files (could be done) - zipfile modification tool (Greg) - Implement -- option (Thomas Klauser, wiz@danbala.tuwien.ac.at) (could be done) - don't add files with "Archive bit" or add files with "Archive bit" (uwe.becher@metronet.de) (could be done with -AS and -AC) - 32 bit file attributes - generate output without having to seek at all (this seems to be stream output) - remove contractions from zip error messages, make them clearer (Steve) - display "[text]" for ascii files when not quiet (no -q) (Timo Salmi) - does zipnote accept names with version number? - for a WORM, zip should create temp file only when updating; new archives should be created directly. - APPNOTE.TXT specifies "4) The entries in the central directory may not necessarily be in the same order that files appear in the zipfile" but readzipfile() relies on same order. (new read does not, and now the read for -FF searches for central directory matches rather than rely on the order) - on Mac, MPW C 3.3.1 requires #if (a || b) ["#if a || b" taken as "#if a"] - on Unix, let -S be "include non-regular files without reading from them" (as pkzip on Unix). This requires unzip support. - zip -l should do ebcdic->ascii translation on CMS and MVS - zip as subroutine (zdig/241) (some work done on this) - accept k and M in zipsplit - store / (part of file name) as ! in OS/2 (problem only with -E ?) - in addition to -l (LF to CR LF) and -ll (CR LF to LF) add -lc (LF to CR LF but CR LF remains unchanged) Known bugs: - On VMS, zip fails reading some files with "byte record too large for user's buffer". You must use the "-V" option for such files. (many changes to VMS so may be fixed) - on MSDOS, zip386.exe does not like "zip -bc: foo ..." - on MSDOS, zip386.exe is sometimes much slower than zip.exe. This is probably a problem with DJGPP (to be investigated). - on NT with C shell, zip should not do file name expansion again. - zip zipfile ... ignores existing zipfile if name does not have an extension (except for the -A option, generally used on self-extracting files). (archives should probably have extensions. Things like archive.jar work) - For an sfx file without extension, "zip -A sfx" works but "zip sfx -A" doesn't. (because options were required first, but now both OK) - When storing files in a zipfile (-0), zip marks all of them as binary. - On VMS, some indexed files are not restored correctly after zip -V and unzip. (This is now known to be a problem of UnZip. The workaround for Zip 2.2 and newer is to use PK-style VMS extra fields; this is now the default. NOTE that UnZip 5.32 has been fixed [971019]!) (many VMS changes so this may be fixed) - zip and unzip should use the same pattern matching rules, particularly on MSDOS and OS/2. On OS/2, "zip foo *.*" should also match files without extension. Partially DONE (OS/2 "*.*" matches "*".) - there should be a way to avoid updating archive members (only addition of new files allowed) usr/share/doc/kexec-tools/TODO000064400000001020152527107110012143 0ustar00- x86 handle x86 vmlinux parameter header allocation issues. There is a bug where it can get stomped but the current code does not allow us much flexibility in what we do with it. - Restore enough state that DOS/arbitrary BIOS calls can be run on some platforms. Currently disk-related calls are quite likely to blow up. - x86 filling in other kernel parameters. - Merge reboot via kexec functionality into /sbin/reboot - Improve the documentation - Add support for loading a boot sector - Autobuilding of initramfs ### usr/share/doc/libaio/TODO000064400000000172152527144620011163 0ustar00- Write man pages. - Make -static links against libaio work. - Fallback on userspace if the kernel calls return -ENOSYS. usr/share/doc/coreutils-common/TODO000064400000014761152527161570013237 0ustar00If you're interested in helping, here are some tasks that we've considered over the years. Beware: some are quite old and no longer valid. To avoid wasting your time by duplicating work or by working on a task that is no longer pertinent, please search the mailing list and post your intent before embarking on a big project. ================================================== Modify chmod so that it does not change an inode's st_ctime when the selected operation would have no other effect. First suggested by Hans Ecke in https://lists.gnu.org/r/bug-coreutils/2004-09/msg00145.html Discussed more recently on . document the following in coreutils.texi: [ pinky Suggestion from Paul Eggert: More generally, there's not that much use for imaxtostr nowadays, since the inttypes module and newer versions of gettext allow things like _("truncating %s at %" PRIdMAX " bytes") to work portably. I suspect that (if someone cares to take the time) we can remove all instances of imaxtostr and umaxtostr in coreutils and gnulib. cp --recursive: use fts and *at functions to perform directory traversals in source and destination hierarchy rather than forming full file names. The latter (current) approach fails unnecessarily when the names become very long, and requires space and time that is quadratic in the depth of the hierarchy. [Bo Borgerson is working on this] printf: Now that gnulib supports *printf("%a"), import one of the *printf-posix modules so that printf(1) will support %a even on platforms where the native *printf(3) is deficient. Suggestion from Eric Blake. consider adding some implementation of the "col" utility Suggested by Karl Berry. doc/coreutils.texi: Address this comment: FIXME: mv's behavior in this case is system-dependent Better still: fix the code so it's *not* system-dependent. ls: add --format=FORMAT option that controls how each line is printed. copy.c: Address the FIXME-maybe comment in copy_internal. And once that's done, add an exclusion so that 'cp --link' no longer incurs the overhead of saving src. dev/ino and dest. filename in the hash table. Write an autoconf test to work around build failure in HPUX's 64-bit mode. See notes in README -- and remove them once there's a work-around. Integrate use of sendfile, suggested here: https://lists.gnu.org/r/bug-fileutils/2003-03/msg00030.html I don't plan to do that, since a few tests demonstrate no significant benefit. printf: consider adapting builtins/printf.def from bash tail: don't use xlseek; it *exits*. Instead, maybe use a macro and return nonzero. tr: support nontrivial equivalence classes, e.g. [=e=] with LC_COLLATE=fr_FR lib/strftime.c: Since %N is the only format that we need but that glibc's strftime doesn't support, consider using a wrapper that would expand /%(-_)?\d*N/ to the desired string and then pass the resulting string to glibc's strftime. sort: Investigate better sorting algorithms; see Knuth vol. 3. We tried list merge sort, but it was about 50% slower than the recursive algorithm currently used by sortlines, and it used more comparisons. We're not sure why this was, as the theory suggests it should do fewer comparisons, so perhaps this should be revisited. List merge sort was implemented in the style of Knuth algorithm 5.2.4L, with the optimization suggested by exercise 5.2.4-22. The test case was 140,213,394 bytes, 426,4424 lines, text taken from the GCC 3.3 distribution, sort.c compiled with GCC 2.95.4 and running on Debian 3.0r1 GNU/Linux, 2.4GHz Pentium 4, single pass with no temporary files and plenty of RAM. Since comparisons seem to be the bottleneck, perhaps the best algorithm to try next should be merge insertion. See Knuth section 5.3.1, who credits Lester Ford, Jr. and Selmer Johnson, American Mathematical Monthly 66 (1959), 387-389. shred: Update shred as described here to conform to DoD 5220 rules: https://lists.gnu.org/r/bug-coreutils/2007-05/msg00075.html Remove suspicious uses of alloca (ones that may allocate more than about 4k) Improve test coverage. See HACKING for instructions on generating an html test coverage report. Find a program that has poor coverage and improve. Changes expected to go in, someday. ====================================== dd patch from Olivier Delhomme test/mv/*: clean up $other_partition_tmpdir in all cases ls: when both -l and --dereference-command-line-symlink-to-dir are specified, consider whether to let the latter select whether to dereference command line symlinks to directories. Since -l has an implicit --NO-dereference-command-line-symlink-to-dir meaning. Pointed out by Karl Berry. Pending copyright papers: ------------------------ getpwnam from Bruce Korb pb (progress bar) from Miika Pekkarinen ------------------------------ Remove long-deprecated options. Search case-insensitive for 'deprecated' and 'remove in '. Automate this. Add a distcheck-time test to ensure that every distributed file is either read-only(indicating generated) or is version-controlled and up to date. remove all uses of the 'register' keyword: Done. add a maint.mk rule for this, too. remove or adjust chown's --changes option, since it can't always do what it currently says it does. Support arbitrary-precision arithmetic in those tools for which it makes sense. Factor and expr already support this via libgmp. The "test" program is covered via its string-based comparison of integers. To be converted: seq. Adapt tools like wc, tr, fmt, etc. (most of the textutils) to be multibyte aware. The problem is that I want to avoid duplicating significant blocks of logic, yet I also want to incur only minimal (preferably 'no') cost when operating in single-byte mode. pr's use of nstrftime can make it malloc a very large (up to SIZE_MAX) buffer ----- Copyright (C) 2002-2018 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . usr/share/doc/perl-Math-BigRat/TODO000064400000000605152527432560012727 0ustar00 * Make blog() handle exact cases correctly. E.g., (8/27) ** (2/3) = 4/9, so Math::BigRat -> new("4/9") -> blog("8/27") should return 2/3. * Rounding needs a new definiton: rounding to nearest fraction (see Knuth and fixed-slash fractions) * bmod(), bmodpow(), bmodinv() not fully/properly implemented yet. * BigRat does not handle modify() yet or in a very incomplete manner. usr/share/doc/libuser/TODO000064400000003015152527625230011371 0ustar00Easy: * Workalikes for various apps on other OSs: http://docs.sun.com/ab2/coll.40.6/REFMAN1/@Ab2PageView/169291 http://docs.sun.com/ab2/coll.40.6/REFMAN1/@Ab2PageView/64438 http://docs.sun.com/ab2/coll.40.6/REFMAN1/@Ab2PageView/64530 http://www.uwsg.iu.edu/usail/man/solaris/logins.1.html Medium: * Add the -o option to luseradd/lusermod/lgroupadd/lgroupmod (bad idea?) * Create variants of the apps that are hard-coded to use files only, for use in batch environments like post-package-install, or maybe add a --local flag, which will be interpreted as "shadow files"/"files".... * Add a shadowGroup schema file if RFC 2307bis doesn't include one, or ask Luke about adding one, and document what we expect an LDAP directory to have in order for the ldap module to not get confused (for now, that's the RFC 2307 schema + inetOrgPerson + TLS). * Make the LDAP module check the server schema for allowed object classes and attributes for new user additions and so on; right now it's kind of a crap shoot to see if the server will reject an operation due to a schema error. Hard: * Figure out how to reconcile lckpwdf() and fcntl() locking when the files being locked may not even be the system's main files. * Write a RADIUS back-end. * Write an NIS or NIS+ back-end using yppasswd.x in glibc, or maybe using the routines declared in /usr/include/rpcsvc/libnis.h * Write a libdbi or ODBC back-end. * Write a hesiod back-end. * Implement an lgpasswd command for local group administration by the group's administrators. usr/share/doc/libxml2/TODO000064400000026146152527762500011311 0ustar00124907 HTML parse buffer problem when parsing larse in-memory docs 124110 DTD validation && wrong namespace 123564 xmllint --html --format TODO for the XML parser and stuff: ================================== $Id$ this tend to be outdated :-\ ... DOCS: ===== - use case of using XInclude to load for example a description. order document + product base -(XSLT)-> quote with XIncludes | HTML output with description of parts <---(XSLT)-- TODO: ===== - XInclude at the SAX level (libSRVG) - fix the C code prototype to bring back doc/libxml-undocumented.txt to a reasonable level - Computation of base when HTTP redirect occurs, might affect HTTP interfaces. - Computation of base in XInclude. Relativization of URIs. - listing all attributes in a node. - Better checking of external parsed entities TAG 1234 - Go through erratas and do the cleanup. http://www.w3.org/XML/xml-19980210-errata ... started ... - jamesh suggestion: SAX like functions to save a document ie. call a function to open a new element with given attributes, write character data, close last element, etc + inversted SAX, initial patch in April 2002 archives. - htmlParseDoc has parameter encoding which is not used. Function htmlCreateDocParserCtxt ignore it. - fix realloc() usage. - Stricten the UTF8 conformance (Martin Duerst): http://www.w3.org/2001/06/utf-8-test/. The bad files are in http://www.w3.org/2001/06/utf-8-wrong/. - xml:id normalized value TODO: ===== - move all string manipulation functions (xmlStrdup, xmlStrlen, etc.) to global.c. Bjorn noted that the following files depends on parser.o solely because of these string functions: entities.o, global.o, hash.o, tree.o, xmlIO.o, and xpath.o. - Optimization of tag strings allocation ? - maintain coherency of namespace when doing cut'n paste operations => the functions are coded, but need testing - function to rebuild the ID table - functions to rebuild the DTD hash tables (after DTD changes). EXTENSIONS: =========== - Tools to produce man pages from the SGML docs. - Add Xpointer recognition/API - Add Xlink recognition/API => started adding an xlink.[ch] with a unified API for XML and HTML. it's crap :-( - Implement XSchemas => Really need to be done - datatype are complete, but structure support is very limited. - extend the shell with: - edit - load/save - mv (yum, yum, but it's harder because directories are ordered in our case, mvup and mvdown would be required) Done: ===== - Add HTML validation using the XHTML DTD - problem: do we want to keep and maintain the code for handling DTD/System ID cache directly in libxml ? => not really done that way, but there are new APIs to check elements or attributes. Otherwise XHTML validation directly ... - XML Schemas datatypes except Base64 and BinHex - Relax NG validation - XmlTextReader streaming API + validation - Add a DTD cache prefilled with xhtml DTDs and entities and a program to manage them -> like the /usr/bin/install-catalog from SGML right place seems $datadir/xmldtds Maybe this is better left to user apps => use a catalog instead , and xhtml1-dtd package - Add output to XHTML => XML serializer automatically recognize the DTd and apply the specific rules. - Fix output of - compliance to XML-Namespace checking, see section 6 of http://www.w3.org/TR/REC-xml-names/ - Correct standalone checking/emitting (hard) 2.9 Standalone Document Declaration - Implement OASIS XML Catalog support http://www.oasis-open.org/committees/entity/ - Get OASIS testsuite to a more friendly result, check all the results once stable. the check-xml-test-suite.py script does this - Implement XSLT => libxslt - Finish XPath => attributes addressing troubles => defaulted attributes handling => namespace axis ? done as XSLT got debugged - bug reported by Michael Meallin on validation problems => Actually means I need to add support (and warn) for non-deterministic content model. - Handle undefined namespaces in entity contents better ... at least issue a warning - DOM needs int xmlPruneProp(xmlNodePtr node, xmlAtttrPtr attr); => done it's actually xmlRemoveProp xmlUnsetProp xmlUnsetNsProp - HTML: handling of Script and style data elements, need special code in the parser and saving functions (handling of < > " ' ...): http://www.w3.org/TR/html4/types.html#type-script Attributes are no problems since entities are accepted. - DOM needs xmlAttrPtr xmlNewDocProp(xmlDocPtr doc, const xmlChar *name, const xmlChar *value) - problem when parsing hrefs with & with the HTML parser (IRC ac) - If the internal encoding is not UTF8 saving to a given encoding doesn't work => fix to force UTF8 encoding ... done, added documentation too - Add an ASCII I/O encoder (asciiToUTF8 and UTF8Toascii) - Issue warning when using non-absolute namespaces URI. - the html parser should add and if they don't exist started, not finished. Done, the automatic closing is added and 3 testcases were inserted - Command to force the parser to stop parsing and ignore the rest of the file. xmlStopParser() should allow this, mostly untested - support for HTML empty attributes like
- plugged iconv() in for support of a large set of encodings. - xmlSwitchToEncoding() rewrite done - URI checkings (no fragments) rfc2396.txt - Added a clean mechanism for overload or added input methods: xmlRegisterInputCallbacks() - dynamically adapt the alloc entry point to use g_alloc()/g_free() if the programmer wants it: - use xmlMemSetup() to reset the routines used. - Check attribute normalization especially xmlGetProp() - Validity checking problems for NOTATIONS attributes - Validity checking problems for ENTITY ENTITIES attributes - Parsing of a well balanced chunk xmlParseBalancedChunkMemory() - URI module: validation, base, etc ... see uri.[ch] - turn tester into a generic program xmllint installed with libxml - extend validity checks to go through entities content instead of just labelling them PCDATA - Save Dtds using the children list instead of dumping the tables, order is preserved as well as comments and PIs - Wrote a notice of changes requires to go from 1.x to 2.x - make sure that all SAX callbacks are disabled if a WF error is detected - checking/handling of newline normalization http://localhost/www.xml.com/axml/target.html#sec-line-ends - correct checking of '&' '%' on entities content. - checking of PE/Nesting on entities declaration - checking/handling of xml:space - checking done. - handling done, not well tested - Language identification code, productions [33] to [38] => done, the check has been added and report WFness errors - Conditional sections in DTDs [61] to [65] => should this crap be really implemented ??? => Yep OASIS testsuite uses them - Allow parsed entities defined in the internal subset to override the ones defined in the external subset (DtD customization). => This mean that the entity content should be computed only at use time, i.e. keep the orig string only at parse time and expand only when referenced from the external subset :-( Needed for complete use of most DTD from Eve Maler - Add regression tests for all WFC errors => did some in test/WFC => added OASIS testsuite routines http://xmlsoft.org/conf/result.html - I18N: http://wap.trondheim.com/vaer/index.phtml is not XML and accepted by the XML parser, UTF-8 should be checked when there is no "encoding" declared ! - Support for UTF-8 and UTF-16 encoding => added some convertion routines provided by Martin Durst patched them, got fixes from @@@ I plan to keep everything internally as UTF-8 (or ISO-Latin-X) this is slightly more costly but more compact, and recent processors efficiency is cache related. The key for good performances is keeping the data set small, so will I. => the new progressive reading routines call the detection code is enabled, tested the ISO->UTF-8 stuff - External entities loading: - allow override by client code - make sure it is alled for all external entities referenced Done, client code should use xmlSetExternalEntityLoader() to set the default loading routine. It will be called each time an external entity entity resolution is triggered. - maintain ID coherency when removing/changing attributes The function used to deallocate attributes now check for it being an ID and removes it from the table. - push mode parsing i.e. non-blocking state based parser done, both for XML and HTML parsers. Use xmlCreatePushParserCtxt() and xmlParseChunk() and html counterparts. The tester program now has a --push option to select that parser front-end. Douplicated tests to use both and check results are similar. - Most of XPath, still see some troubles and occasionnal memleaks. - an XML shell, allowing to traverse/manipulate an XML document with a shell like interface, and using XPath for the anming syntax - use of readline and history added when available - the shell interface has been cleanly separated and moved to debugXML.c - HTML parser, should be fairly stable now - API to search the lang of an attribute - Collect IDs at parsing and maintain a table. PBM: maintain the table coherency PBM: how to detect ID types in absence of DtD ! - Use it for XPath ID support - Add validity checking Should be finished now ! - Add regression tests with entity substitutions - External Parsed entities, either XML or external Subset [78] and [79] parsing the xmllang DtD now works, so it should be sufficient for most cases ! - progressive reading. The entity support is a first step toward asbtraction of an input stream. A large part of the context is still located on the stack, moving to a state machine and putting everyting in the parsing context should provide an adequate solution. => Rather than progressive parsing, give more power to the SAX-like interface. Currently the DOM-like representation is built but => it should be possible to define that only as a set of SAX callbacks and remove the tree creation from the parser code. DONE - DOM support, instead of using a proprietary in memory format for the document representation, the parser should call a DOM API to actually build the resulting document. Then the parser becomes independent of the in-memory representation of the document. Even better using RPC's the parser can actually build the document in another program. => Work started, now the internal representation is by default very near a direct DOM implementation. The DOM glue is implemented as a separate module. See the GNOME gdome module. - C++ support : John Ehresman - Updated code to follow more recent specs, added compatibility flag - Better error handling, use a dedicated, overridable error handling function. - Support for CDATA. - Keep track of line numbers for better error reporting. - Support for PI (SAX one). - Support for Comments (bad, should be in ASAP, they are parsed but not stored), should be configurable. - Improve the support of entities on save (+SAX). usr/share/doc/curl/TODO000064400000133531152530020740010665 0ustar00 _ _ ____ _ ___| | | | _ \| | / __| | | | |_) | | | (__| |_| | _ <| |___ \___|\___/|_| \_\_____| Things that could be nice to do in the future Things to do in project curl. Please tell us what you think, contribute and send us patches that improve things! Be aware that these are things that we could do, or have once been considered things we could do. If you want to work on any of these areas, please consider bringing it up for discussions first on the mailing list so that we all agree it is still a good idea for the project! All bugs documented in the KNOWN_BUGS document are subject for fixing! 1. libcurl 1.2 More data sharing 1.3 struct lifreq 1.4 signal-based resolver timeouts 1.5 get rid of PATH_MAX 1.6 Modified buffer size approach 1.7 Support HTTP/2 for HTTP(S) proxies 1.8 CURLOPT_RESOLVE for any port number 1.9 Cache negative name resolves 1.10 auto-detect proxy 1.11 minimize dependencies with dynamically loaded modules 1.12 updated DNS server while running 1.13 DNS-over-HTTPS 1.14 Typesafe curl_easy_setopt() 1.15 Monitor connections in the connection pool 1.16 Try to URL encode given URL 1.17 Add support for IRIs 1.18 try next proxy if one doesn't work 1.19 Timeout idle connections from the pool 1.20 SRV and URI DNS records 1.21 API for URL parsing/splitting 1.22 CURLINFO_PAUSE_STATE 1.23 Offer API to flush the connection pool 1.24 TCP Fast Open for windows 1.25 Expose tried IP addresses that failed 1.26 CURL_REFUSE_CLEARTEXT 1.27 hardcode the "localhost" addresses 1.28 FD_CLOEXEC 2. libcurl - multi interface 2.1 More non-blocking 2.2 Better support for same name resolves 2.3 Non-blocking curl_multi_remove_handle() 2.4 Split connect and authentication process 2.5 Edge-triggered sockets should work 3. Documentation 3.2 Provide cmake config-file 4. FTP 4.1 HOST 4.2 Alter passive/active on failure and retry 4.3 Earlier bad letter detection 4.4 REST for large files 4.5 ASCII support 4.6 GSSAPI via Windows SSPI 4.7 STAT for LIST without data connection 4.8 Option to ignore private IP addresses in PASV response 5. HTTP 5.1 Better persistency for HTTP 1.0 5.2 support FF3 sqlite cookie files 5.3 Rearrange request header order 5.5 auth= in URLs 5.6 Refuse "downgrade" redirects 5.7 QUIC 5.8 Leave secure cookies alone 6. TELNET 6.1 ditch stdin 6.2 ditch telnet-specific select 6.3 feature negotiation debug data 7. SMTP 7.1 Pipelining 7.2 Enhanced capability support 7.3 Add CURLOPT_MAIL_CLIENT option 8. POP3 8.1 Pipelining 8.2 Enhanced capability support 9. IMAP 9.1 Enhanced capability support 10. LDAP 10.1 SASL based authentication mechanisms 11. SMB 11.1 File listing support 11.2 Honor file timestamps 11.3 Use NTLMv2 11.4 Create remote directories 12. New protocols 12.1 RSYNC 13. SSL 13.1 Disable specific versions 13.2 Provide mutex locking API 13.3 Support in-memory certs/ca certs/keys 13.4 Cache/share OpenSSL contexts 13.5 Export session ids 13.6 Provide callback for cert verification 13.7 improve configure --with-ssl 13.8 Support DANE 13.9 Configurable loading of OpenSSL configuration file 13.10 Support Authority Information Access certificate extension (AIA) 13.11 Support intermediate & root pinning for PINNEDPUBLICKEY 13.12 Support HSTS 13.13 Support HPKP 13.14 Support the clienthello extension 14. GnuTLS 14.1 SSL engine stuff 14.2 check connection 15. WinSSL/SChannel 15.1 Add support for client certificate authentication 15.3 Add support for the --ciphers option 16. SASL 16.1 Other authentication mechanisms 16.2 Add QOP support to GSSAPI authentication 16.3 Support binary messages (i.e.: non-base64) 17. SSH protocols 17.1 Multiplexing 17.2 SFTP performance 17.3 Support better than MD5 hostkey hash 17.4 Support CURLOPT_PREQUOTE 18. Command line tool 18.1 sync 18.2 glob posts 18.3 prevent file overwriting 18.4 simultaneous parallel transfers 18.5 UTF-8 filenames in Content-Disposition 18.6 warning when setting an option 18.7 warning if curl version is not in sync with libcurl version 18.8 offer color-coded HTTP header output 18.9 Choose the name of file in braces for complex URLs 18.10 improve how curl works in a windows console window 18.11 -w output to stderr 18.12 keep running, read instructions from pipe/socket 18.13 support metalink in http headers 18.14 --fail without --location should treat 3xx as a failure 18.15 --retry should resume 18.16 send only part of --data 18.17 consider file name from the redirected URL with -O ? 18.18 retry on network is unreachable 18.19 expand ~/ in config files 18.20 host name sections in config files 19. Build 19.1 roffit 19.2 Enable PIE and RELRO by default 20. Test suite 20.1 SSL tunnel 20.2 nicer lacking perl message 20.3 more protocols supported 20.4 more platforms supported 20.5 Add support for concurrent connections 20.6 Use the RFC6265 test suite 21. Next SONAME bump 21.1 http-style HEAD output for FTP 21.2 combine error codes 21.3 extend CURLOPT_SOCKOPTFUNCTION prototype 22. Next major release 22.1 cleanup return codes 22.2 remove obsolete defines 22.3 size_t 22.4 remove several functions 22.5 remove CURLOPT_FAILONERROR 22.6 remove CURLOPT_DNS_USE_GLOBAL_CACHE 22.7 remove progress meter from libcurl 22.8 remove 'curl_httppost' from public ============================================================================== 1. libcurl 1.2 More data sharing curl_share_* functions already exist and work, and they can be extended to share more. For example, enable sharing of the ares channel. 1.3 struct lifreq Use 'struct lifreq' and SIOCGLIFADDR instead of 'struct ifreq' and SIOCGIFADDR on newer Solaris versions as they claim the latter is obsolete. To support IPv6 interface addresses for network interfaces properly. 1.4 signal-based resolver timeouts libcurl built without an asynchronous resolver library uses alarm() to time out DNS lookups. When a timeout occurs, this causes libcurl to jump from the signal handler back into the library with a sigsetjmp, which effectively causes libcurl to continue running within the signal handler. This is non-portable and could cause problems on some platforms. A discussion on the problem is available at https://curl.haxx.se/mail/lib-2008-09/0197.html Also, alarm() provides timeout resolution only to the nearest second. alarm ought to be replaced by setitimer on systems that support it. 1.5 get rid of PATH_MAX Having code use and rely on PATH_MAX is not nice: https://insanecoding.blogspot.com/2007/11/pathmax-simply-isnt.html Currently the SSH based code uses it a bit, but to remove PATH_MAX from there we need libssh2 to properly tell us when we pass in a too small buffer and its current API (as of libssh2 1.2.7) doesn't. 1.6 Modified buffer size approach Current libcurl allocates a fixed 16K size buffer for download and an additional 16K for upload. They are always unconditionally part of the easy handle. If CRLF translations are requested, an additional 32K "scratch buffer" is allocated. A total of 64K transfer buffers in the worst case. First, while the handles are not actually in use these buffers could be freed so that lingering handles just kept in queues or whatever waste less memory. Secondly, SFTP is a protocol that needs to handle many ~30K blocks at once since each need to be individually acked and therefore libssh2 must be allowed to send (or receive) many separate ones in parallel to achieve high transfer speeds. A current libcurl build with a 16K buffer makes that impossible, but one with a 512K buffer will reach MUCH faster transfers. But allocating 512K unconditionally for all buffers just in case they would like to do fast SFTP transfers at some point is not a good solution either. Dynamically allocate buffer size depending on protocol in use in combination with freeing it after each individual transfer? Other suggestions? 1.7 Support HTTP/2 for HTTP(S) proxies Support for doing HTTP/2 to HTTP and HTTPS proxies is still missing. 1.8 CURLOPT_RESOLVE for any port number This option allows applications to set a replacement IP address for a given host + port pair. Consider making support for providing a replacement address for the host name on all port numbers. See https://github.com/curl/curl/issues/1264 1.9 Cache negative name resolves A name resolve that has failed is likely to fail when made again within a short period of time. Currently we only cache positive responses. 1.10 auto-detect proxy libcurl could be made to detect the system proxy setup automatically and use that. On Windows, macOS and Linux desktops for example. The pull-request to use libproxy for this was deferred due to doubts on the reliability of the dependency and how to use it: https://github.com/curl/curl/pull/977 libdetectproxy is a (C++) library for detecting the proxy on Windows https://github.com/paulharris/libdetectproxy 1.11 minimize dependencies with dynamically loaded modules We can create a system with loadable modules/plug-ins, where these modules would be the ones that link to 3rd party libs. That would allow us to avoid having to load ALL dependencies since only the necessary ones for this app/invoke/used protocols would be necessary to load. See https://github.com/curl/curl/issues/349 1.12 updated DNS server while running If /etc/resolv.conf gets updated while a program using libcurl is running, it is may cause name resolves to fail unless res_init() is called. We should consider calling res_init() + retry once unconditionally on all name resolve failures to mitigate against this. Firefox works like that. Note that Windows doesn't have res_init() or an alternative. https://github.com/curl/curl/issues/2251 1.13 DNS-over-HTTPS By adding support for DNS-over-HTTPS curl could resolve host names using a totally separate name server than the standard system resolver, while at the same time doing so over a communication channel that enhances privacy and security. https://github.com/curl/curl/wiki/DNS-over-HTTPS 1.14 Typesafe curl_easy_setopt() One of the most common problems in libcurl using applications is the lack of type checks for curl_easy_setopt() which happens because it accepts varargs and thus can take any type. One possible solution to this is to introduce a few different versions of the setopt version for the different kinds of data you can set. curl_easy_set_num() - sets a long value curl_easy_set_large() - sets a curl_off_t value curl_easy_set_ptr() - sets a pointer curl_easy_set_cb() - sets a callback PLUS its callback data 1.15 Monitor connections in the connection pool libcurl's connection cache or pool holds a number of open connections for the purpose of possible subsequent connection reuse. It may contain a few up to a significant amount of connections. Currently, libcurl leaves all connections as they are and first when a connection is iterated over for matching or reuse purpose it is verified that it is still alive. Those connections may get closed by the server side for idleness or they may get a HTTP/2 ping from the peer to verify that they're still alive. By adding monitoring of the connections while in the pool, libcurl can detect dead connections (and close them) better and earlier, and it can handle HTTP/2 pings to keep such ones alive even when not actively doing transfers on them. 1.16 Try to URL encode given URL Given a URL that for example contains spaces, libcurl could have an option that would try somewhat harder than it does now and convert spaces to %20 and perhaps URL encoded byte values over 128 etc (basically do what the redirect following code already does). https://github.com/curl/curl/issues/514 1.17 Add support for IRIs IRIs (RFC 3987) allow localized, non-ascii, names in the URL. To properly support this, curl/libcurl would need to translate/encode the given input from the input string encoding into percent encoded output "over the wire". To make that work smoothly for curl users even on Windows, curl would probably need to be able to convert from several input encodings. 1.18 try next proxy if one doesn't work Allow an application to specify a list of proxies to try, and failing to connect to the first go on and try the next instead until the list is exhausted. Browsers support this feature at least when they specify proxies using PACs. https://github.com/curl/curl/issues/896 1.19 Timeout idle connections from the pool libcurl currently keeps connections in its connection pool for an indefinite period of time, until it either gets reused, gets noticed that it has been closed by the server or gets pruned to make room for a new connection. To reduce overhead (especially for when we add monitoring of the connections in the pool), we should introduce a timeout so that connections that have been idle for N seconds get closed. 1.20 SRV and URI DNS records Offer support for resolving SRV and URI DNS records for libcurl to know which server to connect to for various protocols (including HTTP!). 1.21 API for URL parsing/splitting libcurl has always parsed URLs internally and never exposed any API or features to allow applications to do it. Still most or many applications using libcurl need that ability. In polls to users, we've learned that many libcurl users would like to see and use such an API. 1.22 CURLINFO_PAUSE_STATE Return information about the transfer's current pause state, in both directions. https://github.com/curl/curl/issues/2588 1.23 Offer API to flush the connection pool Sometimes applications want to flush all the existing connections kept alive. An API could allow a forced flush or just a forced loop that would properly close all connections that have been closed by the server already. 1.24 TCP Fast Open for windows libcurl supports the CURLOPT_TCP_FASTOPEN option since 7.49.0 for Linux and Mac OS. Windows supports TCP Fast Open starting with Windows 10, version 1607 and we should add support for it. 1.25 Expose tried IP addresses that failed When libcurl fails to connect to a host, it should be able to offer the application the list of IP addresses that were used in the attempt. https://github.com/curl/curl/issues/2126 1.26 CURL_REFUSE_CLEARTEXT An environment variable that when set will make libcurl refuse to use any cleartext network protocol. That's all non-encrypted ones (FTP, HTTP, Gopher, etc). By adding the check to libcurl and not just curl, this environment variable can then help users to block all libcurl-using programs from accessing the network using unsafe protocols. The variable could be given some sort of syntax or different levels and be used to also allow for example users to refuse libcurl to do transfers with HTTPS certificate checks disabled. It could also offer to refuse usernames in URLs (see TODO 1.1) 1.27 hardcode the "localhost" addresses There's this new spec getting adopted that says "localhost" should always and unconditionally be a local address and not get resolved by a DNS server. A fine way for curl to fix this would be to simply hard-code the response to 127.0.0.1 and/or ::1 (depending on what IP versions that are requested). This is what the browsers probably will do with this hostname. https://bugzilla.mozilla.org/show_bug.cgi?id=1220810 https://tools.ietf.org/html/draft-ietf-dnsop-let-localhost-be-localhost-02 1.28 FD_CLOEXEC It sets the close-on-exec flag for the file descriptor, which causes the file descriptor to be automatically (and atomically) closed when any of the exec-family functions succeed. Should probably be set by default? https://github.com/curl/curl/issues/2252 2. libcurl - multi interface 2.1 More non-blocking Make sure we don't ever loop because of non-blocking sockets returning EWOULDBLOCK or similar. Blocking cases include: - Name resolves on non-windows unless c-ares or the threaded resolver is used - SOCKS proxy handshakes - file:// transfers - TELNET transfers - The "DONE" operation (post transfer protocol-specific actions) for the protocols SFTP, SMTP, FTP. Fixing Curl_done() for this is a worthy task. 2.2 Better support for same name resolves If a name resolve has been initiated for name NN and a second easy handle wants to resolve that name as well, make it wait for the first resolve to end up in the cache instead of doing a second separate resolve. This is especially needed when adding many simultaneous handles using the same host name when the DNS resolver can get flooded. 2.3 Non-blocking curl_multi_remove_handle() The multi interface has a few API calls that assume a blocking behavior, like add_handle() and remove_handle() which limits what we can do internally. The multi API need to be moved even more into a single function that "drives" everything in a non-blocking manner and signals when something is done. A remove or add would then only ask for the action to get started and then multi_perform() etc still be called until the add/remove is completed. 2.4 Split connect and authentication process The multi interface treats the authentication process as part of the connect phase. As such any failures during authentication won't trigger the relevant QUIT or LOGOFF for protocols such as IMAP, POP3 and SMTP. 2.5 Edge-triggered sockets should work The multi_socket API should work with edge-triggered socket events. One of the internal actions that need to be improved for this to work perfectly is the 'maxloops' handling in transfer.c:readwrite_data(). 3. Documentation 3.2 Provide cmake config-file A config-file package is a set of files provided by us to allow applications to write cmake scripts to find and use libcurl easier. See https://github.com/curl/curl/issues/885 4. FTP 4.1 HOST HOST is a command for a client to tell which host name to use, to offer FTP servers named-based virtual hosting: https://tools.ietf.org/html/rfc7151 4.2 Alter passive/active on failure and retry When trying to connect passively to a server which only supports active connections, libcurl returns CURLE_FTP_WEIRD_PASV_REPLY and closes the connection. There could be a way to fallback to an active connection (and vice versa). https://curl.haxx.se/bug/feature.cgi?id=1754793 4.3 Earlier bad letter detection Make the detection of (bad) %0d and %0a codes in FTP URL parts earlier in the process to avoid doing a resolve and connect in vain. 4.4 REST for large files REST fix for servers not behaving well on >2GB requests. This should fail if the server doesn't set the pointer to the requested index. The tricky (impossible?) part is to figure out if the server did the right thing or not. 4.5 ASCII support FTP ASCII transfers do not follow RFC959. They don't convert the data accordingly. 4.6 GSSAPI via Windows SSPI In addition to currently supporting the SASL GSSAPI mechanism (Kerberos V5) via third-party GSS-API libraries, such as Heimdal or MIT Kerberos, also add support for GSSAPI authentication via Windows SSPI. 4.7 STAT for LIST without data connection Some FTP servers allow STAT for listing directories instead of using LIST, and the response is then sent over the control connection instead of as the otherwise usedw data connection: http://www.nsftools.com/tips/RawFTP.htm#STAT This is not detailed in any FTP specification. 4.8 Option to ignore private IP addresses in PASV response Some servers respond with and some other FTP client implementations can ignore private (RFC 1918 style) IP addresses when received in PASV responses. To consider for libcurl as well. See https://github.com/curl/curl/issues/1455 5. HTTP 5.1 Better persistency for HTTP 1.0 "Better" support for persistent connections over HTTP 1.0 https://curl.haxx.se/bug/feature.cgi?id=1089001 5.2 support FF3 sqlite cookie files Firefox 3 is changing from its former format to a a sqlite database instead. We should consider how (lib)curl can/should support this. https://curl.haxx.se/bug/feature.cgi?id=1871388 5.3 Rearrange request header order Server implementors often make an effort to detect browser and to reject clients it can detect to not match. One of the last details we cannot yet control in libcurl's HTTP requests, which also can be exploited to detect that libcurl is in fact used even when it tries to impersonate a browser, is the order of the request headers. I propose that we introduce a new option in which you give headers a value, and then when the HTTP request is built it sorts the headers based on that number. We could then have internally created headers use a default value so only headers that need to be moved have to be specified. 5.5 auth= in URLs Add the ability to specify the preferred authentication mechanism to use by using ;auth= in the login part of the URL. For example: http://test:pass;auth=NTLM@example.com would be equivalent to specifying --user test:pass;auth=NTLM or --user test:pass --ntlm from the command line. Additionally this should be implemented for proxy base URLs as well. 5.6 Refuse "downgrade" redirects See https://github.com/curl/curl/issues/226 Consider a way to tell curl to refuse to "downgrade" protocol with a redirect and/or possibly a bit that refuses redirect to change protocol completely. 5.7 QUIC The standardization process of QUIC has been taken to the IETF and can be followed on the [IETF QUIC Mailing list](https://www.ietf.org/mailman/listinfo/quic). I'd like us to get on the bandwagon. Ideally, this would be done with a separate library/project to handle the binary/framing layer in a similar fashion to how HTTP/2 is implemented. This, to allow other projects to benefit from the work and to thus broaden the interest and chance of others to participate. 5.8 Leave secure cookies alone Non-secure origins (HTTP sites) should not be allowed to set or modify cookies with the 'secure' property: https://tools.ietf.org/html/draft-ietf-httpbis-cookie-alone-01 6. TELNET 6.1 ditch stdin Reading input (to send to the remote server) on stdin is a crappy solution for library purposes. We need to invent a good way for the application to be able to provide the data to send. 6.2 ditch telnet-specific select Move the telnet support's network select() loop go away and merge the code into the main transfer loop. Until this is done, the multi interface won't work for telnet. 6.3 feature negotiation debug data Add telnet feature negotiation data to the debug callback as header data. 7. SMTP 7.1 Pipelining Add support for pipelining emails. 7.2 Enhanced capability support Add the ability, for an application that uses libcurl, to obtain the list of capabilities returned from the EHLO command. 7.3 Add CURLOPT_MAIL_CLIENT option Rather than use the URL to specify the mail client string to present in the HELO and EHLO commands, libcurl should support a new CURLOPT specifically for specifying this data as the URL is non-standard and to be honest a bit of a hack ;-) Please see the following thread for more information: https://curl.haxx.se/mail/lib-2012-05/0178.html 8. POP3 8.1 Pipelining Add support for pipelining commands. 8.2 Enhanced capability support Add the ability, for an application that uses libcurl, to obtain the list of capabilities returned from the CAPA command. 9. IMAP 9.1 Enhanced capability support Add the ability, for an application that uses libcurl, to obtain the list of capabilities returned from the CAPABILITY command. 10. LDAP 10.1 SASL based authentication mechanisms Currently the LDAP module only supports ldap_simple_bind_s() in order to bind to an LDAP server. However, this function sends username and password details using the simple authentication mechanism (as clear text). However, it should be possible to use ldap_bind_s() instead specifying the security context information ourselves. 11. SMB 11.1 File listing support Add support for listing the contents of a SMB share. The output should probably be the same as/similar to FTP. 11.2 Honor file timestamps The timestamp of the transferred file should reflect that of the original file. 11.3 Use NTLMv2 Currently the SMB authentication uses NTLMv1. 11.4 Create remote directories Support for creating remote directories when uploading a file to a directory that doesn't exist on the server, just like --ftp-create-dirs. 12. New protocols 12.1 RSYNC There's no RFC for the protocol or an URI/URL format. An implementation should most probably use an existing rsync library, such as librsync. 13. SSL 13.1 Disable specific versions Provide an option that allows for disabling specific SSL versions, such as SSLv2 https://curl.haxx.se/bug/feature.cgi?id=1767276 13.2 Provide mutex locking API Provide a libcurl API for setting mutex callbacks in the underlying SSL library, so that the same application code can use mutex-locking independently of OpenSSL or GnutTLS being used. 13.3 Support in-memory certs/ca certs/keys You can specify the private and public keys for SSH/SSL as file paths. Some programs want to avoid using files and instead just pass them as in-memory data blobs. There's probably a challenge to make this work across the plethory of different TLS and SSH backends that curl supports. https://github.com/curl/curl/issues/2310 13.4 Cache/share OpenSSL contexts "Look at SSL cafile - quick traces look to me like these are done on every request as well, when they should only be necessary once per SSL context (or once per handle)". The major improvement we can rather easily do is to make sure we don't create and kill a new SSL "context" for every request, but instead make one for every connection and re-use that SSL context in the same style connections are re-used. It will make us use slightly more memory but it will libcurl do less creations and deletions of SSL contexts. Technically, the "caching" is probably best implemented by getting added to the share interface so that easy handles who want to and can reuse the context specify that by sharing with the right properties set. https://github.com/curl/curl/issues/1110 13.5 Export session ids Add an interface to libcurl that enables "session IDs" to get exported/imported. Cris Bailiff said: "OpenSSL has functions which can serialise the current SSL state to a buffer of your choice, and recover/reset the state from such a buffer at a later date - this is used by mod_ssl for apache to implement and SSL session ID cache". 13.6 Provide callback for cert verification OpenSSL supports a callback for customised verification of the peer certificate, but this doesn't seem to be exposed in the libcurl APIs. Could it be? There's so much that could be done if it were! 13.7 improve configure --with-ssl make the configure --with-ssl option first check for OpenSSL, then GnuTLS, then NSS... 13.8 Support DANE DNS-Based Authentication of Named Entities (DANE) is a way to provide SSL keys and certs over DNS using DNSSEC as an alternative to the CA model. https://www.rfc-editor.org/rfc/rfc6698.txt An initial patch was posted by Suresh Krishnaswamy on March 7th 2013 (https://curl.haxx.se/mail/lib-2013-03/0075.html) but it was a too simple approach. See Daniel's comments: https://curl.haxx.se/mail/lib-2013-03/0103.html . libunbound may be the correct library to base this development on. Björn Stenberg wrote a separate initial take on DANE that was never completed. 13.9 Configurable loading of OpenSSL configuration file libcurl calls the OpenSSL function CONF_modules_load_file() in openssl.c, Curl_ossl_init(). "We regard any changes in the OpenSSL configuration as a security risk or at least as unnecessary." Please add a configuration switch or something similar to disable the CONF_modules_load_file() call. See https://github.com/curl/curl/issues/2724 13.10 Support Authority Information Access certificate extension (AIA) AIA can provide various things like CRLs but more importantly information about intermediate CA certificates that can allow validation path to be fullfilled when the HTTPS server doesn't itself provide them. Since AIA is about downloading certs on demand to complete a TLS handshake, it is probably a bit tricky to get done right. See https://github.com/curl/curl/issues/2793 13.11 Support intermediate & root pinning for PINNEDPUBLICKEY CURLOPT_PINNEDPUBLICKEY does not consider the hashes of intermediate & root certificates when comparing the pinned keys. Therefore it is not compatible with "HTTP Public Key Pinning" as there also intermediate and root certificates can be pinned. This is very useful as it prevents webadmins from "locking themself out of their servers". Adding this feature would make curls pinning 100% compatible to HPKP and allow more flexible pinning. 13.12 Support HSTS "HTTP Strict Transport Security" is TOFU (trust on first use), time-based features indicated by a HTTP header send by the webserver. It is widely used in browsers and it's purpose is to prevent insecure HTTP connections after a previous HTTPS connection. It protects against SSLStripping attacks. Doc: https://developer.mozilla.org/en-US/docs/Web/Security/HTTP_strict_transport_security RFC 6797: https://tools.ietf.org/html/rfc6797 13.13 Support HPKP "HTTP Public Key Pinning" is TOFU (trust on first use), time-based features indicated by a HTTP header send by the webserver. It's purpose is to prevent Man-in-the-middle attacks by trusted CAs by allowing webadmins to specify which CAs/certificates/public keys to trust when connection to their websites. It can be build based on PINNEDPUBLICKEY. Wikipedia: https://en.wikipedia.org/wiki/HTTP_Public_Key_Pinning OWASP: https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning Doc: https://developer.mozilla.org/de/docs/Web/Security/Public_Key_Pinning RFC: https://tools.ietf.org/html/draft-ietf-websec-key-pinning-21 13.14 Support the clienthello extension Certain stupid networks and middle boxes have a problem with SSL handshake pakets that are within a certain size range because how that sets some bits that previously (in older TLS version) were not set. The clienthello extension adds padding to avoid that size range. https://tools.ietf.org/html/rfc7685 https://github.com/curl/curl/issues/2299 14. GnuTLS 14.1 SSL engine stuff Is this even possible? 14.2 check connection Add a way to check if the connection seems to be alive, to correspond to the SSL_peak() way we use with OpenSSL. 15. WinSSL/SChannel 15.1 Add support for client certificate authentication WinSSL/SChannel currently makes use of the OS-level system and user certificate and private key stores. This does not allow the application or the user to supply a custom client certificate using curl or libcurl. Therefore support for the existing -E/--cert and --key options should be implemented by supplying a custom certificate to the SChannel APIs, see: - Getting a Certificate for Schannel https://msdn.microsoft.com/en-us/library/windows/desktop/aa375447.aspx 15.3 Add support for the --ciphers option The cipher suites used by WinSSL/SChannel are configured on an OS-level instead of an application-level. This does not allow the application or the user to customize the configured cipher suites using curl or libcurl. Therefore support for the existing --ciphers option should be implemented by mapping the OpenSSL/GnuTLS cipher suites to the SChannel APIs, see - Specifying Schannel Ciphers and Cipher Strengths https://msdn.microsoft.com/en-us/library/windows/desktop/aa380161.aspx 16. SASL 16.1 Other authentication mechanisms Add support for other authentication mechanisms such as OLP, GSS-SPNEGO and others. 16.2 Add QOP support to GSSAPI authentication Currently the GSSAPI authentication only supports the default QOP of auth (Authentication), whilst Kerberos V5 supports both auth-int (Authentication with integrity protection) and auth-conf (Authentication with integrity and privacy protection). 16.3 Support binary messages (i.e.: non-base64) Mandatory to support LDAP SASL authentication. 17. SSH protocols 17.1 Multiplexing SSH is a perfectly fine multiplexed protocols which would allow libcurl to do multiple parallel transfers from the same host using the same connection, much in the same spirit as HTTP/2 does. libcurl however does not take advantage of that ability but will instead always create a new connection for new transfers even if an existing connection already exists to the host. To fix this, libcurl would have to detect an existing connection and "attach" the new transfer to the existing one. 17.2 SFTP performance libcurl's SFTP transfer performance is sub par and can be improved, mostly by the approach mentioned in "1.6 Modified buffer size approach". 17.3 Support better than MD5 hostkey hash libcurl offers the CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 option for verifying the server's key. MD5 is generally being deprecated so we should implement support for stronger hashing algorithms. libssh2 itself is what provides this underlying functionality and it supports at least SHA-1 as an alternative. SHA-1 is also being deprecated these days so we should consider workign with libssh2 to instead offer support for SHA-256 or similar. 17.4 Support CURLOPT_PREQUOTE The two other QUOTE options are supported for SFTP, but this was left out for unknown reasons! 18. Command line tool 18.1 sync "curl --sync http://example.com/feed[1-100].rss" or "curl --sync http://example.net/{index,calendar,history}.html" Downloads a range or set of URLs using the remote name, but only if the remote file is newer than the local file. A Last-Modified HTTP date header should also be used to set the mod date on the downloaded file. 18.2 glob posts Globbing support for -d and -F, as in 'curl -d "name=foo[0-9]" URL'. This is easily scripted though. 18.3 prevent file overwriting Add an option that prevents curl from overwriting existing local files. When used, and there already is an existing file with the target file name (either -O or -o), a number should be appended (and increased if already existing). So that index.html becomes first index.html.1 and then index.html.2 etc. 18.4 simultaneous parallel transfers The client could be told to use maximum N simultaneous parallel transfers and then just make sure that happens. It should of course not make more than one connection to the same remote host. This would require the client to use the multi interface. https://curl.haxx.se/bug/feature.cgi?id=1558595 Using the multi interface would also allow properly using parallel transfers with HTTP/2 and supporting HTTP/2 server push from the command line. 18.5 UTF-8 filenames in Content-Disposition RFC 6266 documents how UTF-8 names can be passed to a client in the Content-Disposition header, and curl does not support this. https://github.com/curl/curl/issues/1888 18.6 warning when setting an option Display a warning when libcurl returns an error when setting an option. This can be useful to tell when support for a particular feature hasn't been compiled into the library. 18.7 warning if curl version is not in sync with libcurl version This is usually a sign of a funny, weird or unexpected install situations that aren't always quickly nor easily detected by users. curl and libcurl are always released in sync and should use the same version numbers unless very special situations. 18.8 offer color-coded HTTP header output By offering different color output on the header name and the header contents, they could be made more readable and thus help users working on HTTP services. 18.9 Choose the name of file in braces for complex URLs When using braces to download a list of URLs and you use complicated names in the list of alternatives, it could be handy to allow curl to use other names when saving. Consider a way to offer that. Possibly like {partURL1:name1,partURL2:name2,partURL3:name3} where the name following the colon is the output name. See https://github.com/curl/curl/issues/221 18.10 improve how curl works in a windows console window If you pull the scrollbar when transferring with curl in a Windows console window, the transfer is interrupted and can get disconnected. This can probably be improved. See https://github.com/curl/curl/issues/322 18.11 -w output to stderr -w is quite useful, but not to those of us who use curl without -o or -O (such as for scripting through a higher level language). It would be nice to have an option that is exactly like -w but sends it to stderr instead. Proposed name: --write-stderr. See https://github.com/curl/curl/issues/613 18.12 keep running, read instructions from pipe/socket Provide an option that makes curl not exit after the last URL (or even work without a given URL), and then make it read instructions passed on a pipe or over a socket to make further instructions so that a second subsequent curl invoke can talk to the still running instance and ask for transfers to get done, and thus maintain its connection pool, DNS cache and more. 18.13 support metalink in http headers Curl has support for downloading a metalink xml file, processing it, and then downloading the target of the metalink. This is done via the --metalink option. It would be nice if metalink also supported downloading via metalink information that is stored in HTTP headers (RFC 6249). Theoretically this could also be supported with the --metalink option. See https://tools.ietf.org/html/rfc6249 See also https://lists.gnu.org/archive/html/bug-wget/2015-06/msg00034.html for an implematation of this in wget. 18.14 --fail without --location should treat 3xx as a failure To allow a command line like this to detect a redirect and consider it a failure: curl -v --fail -O https://example.com/curl-7.48.0.tar.gz ... --fail must treat 3xx responses as failures too. The least problematic way to implement this is probably to add that new logic in the command line tool only and not in the underlying CURLOPT_FAILONERROR logic. 18.15 --retry should resume When --retry is used and curl actually retries transfer, it should use the already transferred data and do a resumed transfer for the rest (when possible) so that it doesn't have to transfer the same data again that was already transferred before the retry. See https://github.com/curl/curl/issues/1084 18.16 send only part of --data When the user only wants to send a small piece of the data provided with --data or --data-binary, like when that data is a huge file, consider a way to specify that curl should only send a piece of that. One suggested syntax would be: "--data-binary @largefile.zip!1073741823-2147483647". See https://github.com/curl/curl/issues/1200 18.17 consider file name from the redirected URL with -O ? When a user gives a URL and uses -O, and curl follows a redirect to a new URL, the file name is not extracted and used from the newly redirected-to URL even if the new URL may have a much more sensible file name. This is clearly documented and helps for security since there's no surprise to users which file name that might get overwritten. But maybe a new option could allow for this or maybe -J should imply such a treatment as well as -J already allows for the server to decide what file name to use so it already provides the "may overwrite any file" risk. This is extra tricky if the original URL has no file name part at all since then the current code path will error out with an error message, and we can't *know* already at that point if curl will be redirected to a URL that has a file name... See https://github.com/curl/curl/issues/1241 18.18 retry on network is unreachable The --retry option retries transfers on "transient failures". We later added --retry-connrefused to also retry for "connection refused" errors. Suggestions have been brought to also allow retry on "network is unreachable" errors and while totally reasonable, maybe we should consider a way to make this more configurable than to add a new option for every new error people want to retry for? https://github.com/curl/curl/issues/1603 18.19 expand ~/ in config files For example .curlrc could benefit from being able to do this. See https://github.com/curl/curl/issues/2317 18.20 host name sections in config files config files would be more powerful if they could set different configurations depending on used URLs, host name or possibly origin. Then a default .curlrc could a specific user-agent only when doing requests against a certain site. 19. Build 19.1 roffit Consider extending 'roffit' to produce decent ASCII output, and use that instead of (g)nroff when building src/tool_hugehelp.c 19.2 Enable PIE and RELRO by default Especially when having programs that execute curl via the command line, PIE renders the exploitation of memory corruption vulnerabilities a lot more difficult. This can be attributed to the additional information leaks being required to conduct a successful attack. RELRO, on the other hand, masks different binary sections like the GOT as read-only and thus kills a handful of techniques that come in handy when attackers are able to arbitrarily overwrite memory. A few tests showed that enabling these features had close to no impact, neither on the performance nor on the general functionality of curl. 20. Test suite 20.1 SSL tunnel Make our own version of stunnel for simple port forwarding to enable HTTPS and FTP-SSL tests without the stunnel dependency, and it could allow us to provide test tools built with either OpenSSL or GnuTLS 20.2 nicer lacking perl message If perl wasn't found by the configure script, don't attempt to run the tests but explain something nice why it doesn't. 20.3 more protocols supported Extend the test suite to include more protocols. The telnet could just do FTP or http operations (for which we have test servers). 20.4 more platforms supported Make the test suite work on more platforms. OpenBSD and Mac OS. Remove fork()s and it should become even more portable. 20.5 Add support for concurrent connections Tests 836, 882 and 938 were designed to verify that separate connections aren't used when using different login credentials in protocols that shouldn't re-use a connection under such circumstances. Unfortunately, ftpserver.pl doesn't appear to support multiple concurrent connections. The read while() loop seems to loop until it receives a disconnect from the client, where it then enters the waiting for connections loop. When the client opens a second connection to the server, the first connection hasn't been dropped (unless it has been forced - which we shouldn't do in these tests) and thus the wait for connections loop is never entered to receive the second connection. 20.6 Use the RFC6265 test suite A test suite made for HTTP cookies (RFC 6265) by Adam Barth is available at https://github.com/abarth/http-state/tree/master/tests It'd be really awesome if someone would write a script/setup that would run curl with that test suite and detect deviances. Ideally, that would even be incorporated into our regular test suite. 21. Next SONAME bump 21.1 http-style HEAD output for FTP #undef CURL_FTP_HTTPSTYLE_HEAD in lib/ftp.c to remove the HTTP-style headers from being output in NOBODY requests over FTP 21.2 combine error codes Combine some of the error codes to remove duplicates. The original numbering should not be changed, and the old identifiers would be macroed to the new ones in an CURL_NO_OLDIES section to help with backward compatibility. Candidates for removal and their replacements: CURLE_FILE_COULDNT_READ_FILE => CURLE_REMOTE_FILE_NOT_FOUND CURLE_FTP_COULDNT_RETR_FILE => CURLE_REMOTE_FILE_NOT_FOUND CURLE_FTP_COULDNT_USE_REST => CURLE_RANGE_ERROR CURLE_FUNCTION_NOT_FOUND => CURLE_FAILED_INIT CURLE_LDAP_INVALID_URL => CURLE_URL_MALFORMAT CURLE_TFTP_NOSUCHUSER => CURLE_TFTP_ILLEGAL CURLE_TFTP_NOTFOUND => CURLE_REMOTE_FILE_NOT_FOUND CURLE_TFTP_PERM => CURLE_REMOTE_ACCESS_DENIED 21.3 extend CURLOPT_SOCKOPTFUNCTION prototype The current prototype only provides 'purpose' that tells what the connection/socket is for, but not any protocol or similar. It makes it hard for applications to differentiate on TCP vs UDP and even HTTP vs FTP and similar. 22. Next major release 22.1 cleanup return codes curl_easy_cleanup() returns void, but curl_multi_cleanup() returns a CURLMcode. These should be changed to be the same. 22.2 remove obsolete defines remove obsolete defines from curl/curl.h 22.3 size_t make several functions use size_t instead of int in their APIs 22.4 remove several functions remove the following functions from the public API: curl_getenv curl_mprintf (and variations) curl_strequal curl_strnequal They will instead become curlx_ - alternatives. That makes the curl app still capable of using them, by building with them from source. These functions have no purpose anymore: curl_multi_socket curl_multi_socket_all 22.5 remove CURLOPT_FAILONERROR Remove support for CURLOPT_FAILONERROR, it has gotten too kludgy and weird internally. Let the app judge success or not for itself. 22.6 remove CURLOPT_DNS_USE_GLOBAL_CACHE Remove support for a global DNS cache. Anything global is silly, and we already offer the share interface for the same functionality but done "right". 22.7 remove progress meter from libcurl The internally provided progress meter output doesn't belong in the library. Basically no application wants it (apart from curl) but instead applications can and should do their own progress meters using the progress callback. The progress callback should then be bumped as well to get proper 64bit variable types passed to it instead of doubles so that big files work correctly. 22.8 remove 'curl_httppost' from public curl_formadd() was made to fill in a public struct, but the fact that the struct is public is never really used by application for their own advantage but instead often restricts how the form functions can or can't be modified. Changing them to return a private handle will benefit the implementation and allow us much greater freedoms while still maintaining a solid API and ABI. usr/share/doc/perl-HTML-Parser/TODO000064400000001777152530211550012665 0ustar00TODO - Check how we compare to the HTML5 parsing rules - limit the length of markup elements that never end. Perhaps by configurable limits on the length that markup can have and still be recognized. Report stuff as 'text' when this happens? - remove 255 char limit on literal argspec strings - implement backslash escapes in literal argspec string - (parameter entities) - make literal tags configurable. The current list is hardcoded to be "script", "style", "title", "iframe", "textarea", "xmp", and "plaintext". SGML FEATURES WE WILL PROBABLY IGNORE FOREVER - Empty tags: <> (repeat previous start tag) - (same as ) - NET tags and