* Make "make install-strip" works properly, and "make install"
[rsync/rsync.git] / TODO
diff --git a/TODO b/TODO
index 456cd7b..2253147 100644 (file)
--- a/TODO
+++ b/TODO
@@ -5,16 +5,6 @@ URGENT ---------------------------------------------------------------
 
 IMPORTANT ------------------------------------------------------------
 
-Cross-test versions
-
-  Part of the regression suite should be making sure that we don't
-  break backwards compatibility: old clients vs new servers and so
-  on.  Ideally we would test the cross product of versions.  
-
-  It might be sufficient to test downloads from well-known public
-  rsync servers running different versions of rsync.  This will give
-  some testing and also be the most common case for having different
-  versions and not being able to upgrade.
 
 use chroot
 
@@ -32,6 +22,17 @@ use chroot
   for people who want to generate the file list using a find(1)
   command or a script.
 
+File list structure in memory
+
+  Rather than one big array, perhaps have a tree in memory mirroring
+  the directory tree.  
+
+  This might make sorting much faster!  (I'm not sure it's a big CPU
+  problem, mind you.)  
+
+  It might also reduce memory use in storing repeated directory names
+  -- again I'm not sure this is a problem.
+
 Performance
 
   Traverse just one directory at a time.  Tridge says it's possible.
@@ -40,6 +41,9 @@ Performance
   start, which makes us use a lot of memory and also not pipeline
   network access as much as we could.
 
+
+Handling duplicate names
+
   We need to be careful of duplicate names getting into the file list.
   See clean_flist().  This could happen if multiple arguments include
   the same file.  Bad.
@@ -77,6 +81,11 @@ Performance
   I think even if we're using a different symlink mode we don't need
   to worry.
 
+  Unless we're really clever this will introduce a protocol
+  incompatibility, so we need to be able to accept the old format as
+  well.
+
+
 Memory accounting
 
   At exit, show how much memory was used for the file list, etc.
@@ -85,11 +94,16 @@ Memory accounting
   not sure this makes sense with modern mallocs.  At any rate it will
   make us allocate a huge amount of memory for large file lists.
 
+
 Hard-link handling
 
   At the moment hardlink handling is very expensive, so it's off by
   default.  It does not need to be so.  
 
+  Since most of the solutions are rather intertwined with the file
+  list it is probably better to fix that first, although fixing
+  hardlinks is possibly simpler.
+
   We can rule out hardlinked directories since they will probably
   screw us up in all kinds of ways.  They simply should not be used.
 
@@ -170,6 +184,7 @@ IPv6
 
   which should just take a small change to the parser code.
 
+
 Errors
 
   If we hang or get SIGINT, then explain where we were up to.  Perhaps
@@ -181,6 +196,16 @@ Errors
   eof" give a message that is more detailed if possible and also more
   helpful.  
 
+  If we get an error writing to a socket, then we should perhaps
+  continue trying to read to see if an error message comes across
+  explaining why the socket is closed.  I'm not sure if this would
+  work, but it would certainly make our messages more helpful.
+
+  What happens if a directory is missing -x attributes.  Do we lose
+  our load?  (Debian #28416)  Probably fixed now, but a test case
+  would be good.
+
+
 File attributes
 
   Device major/minor numbers should be at least 32 bits each.  See
@@ -196,10 +221,30 @@ Empty directories
   can end up with many empty directories.  We might avoid this by
   lazily creating such directories.
 
+
 zlib
 
-  Perhaps don't use our own zlib.  Will we actually be incompatible,
-  or just be slightly less efficient?
+  Perhaps don't use our own zlib.  
+
+  Advantages:
+   
+    - will automatically be up to date with bugfixes in zlib
+
+    - can leave it out for small rsync on e.g. recovery disks
+
+    - can use a shared library
+
+    - avoids people breaking rsync by trying to do this themselves and
+      messing up
+
+  Should we ship zlib for systems that don't have it, or require
+  people to install it separately?
+
+  Apparently this will make us incompatible with versions of rsync
+  that use the patched version of rsync.  Probably the simplest way to
+  do this is to just disable gzip (with a warning) when talking to old
+  versions.
+
 
 logging
 
@@ -207,10 +252,108 @@ logging
   monitor progress in a log file can do so more easily.  See
   http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=48108
 
+  At the connections that just get a list of modules are not logged,
+  but they should be.
+
+  If a child of the rsync daemon dies with a signal, we should notice
+  that when we reap it and log a message.
+
+  Keep stderr and stdout properly separated (Debian #23626)
+
+
 rsyncd over ssh
 
   There are already some patches to do this.
 
+proxy authentication
+
+  Allow RSYNC_PROXY to be http://user:pass@proxy.foo:3128/, and do
+  HTTP Basic Proxy-Authentication.  
+
+  Multiple schemes are possible, up to and including the insanity that
+  is NTLM, but Basic probably covers most cases.
+
+SOCKS
+
+  Add --with-socks, and then perhaps a command-line option to put them
+  on or off.  This might be more reliable than LD_PRELOAD hacks.
+
+Better statistics:
+
+  <Rasmus> mbp: hey, how about an rsync option that just gives you the
+  summary without the list of files?  And perhaps gives more
+  information like the number of new files, number of changed,
+  deleted, etc. ?
+  <mbp> Rasmus: nice idea
+  <mbp> there is --stats
+  <mbp> but at the moment it's very tridge-oriented
+  <mbp> rather than user-friendly
+  <mbp> it would be nice to improve it
+  <mbp> that would also work well with --dryrun
+
+TDB:
+
+  Rather than storing the file list in memory, store it in a TDB.
+
+  This *might* make memory usage lower while building the file list.
+
+  Hashtable lookup will mean files are not transmitted in order,
+  though... hm.
+
+  This would neatly eliminate one of the major post-fork shared data
+  structures.
+
+
+chmod:
+
+  On 12 Mar 2002, Dave Dykstra <dwd@bell-labs.com> wrote:
+  > If we would add an option to do that functionality, I would vote for one
+  > that was more general which could mask off any set of permission bits and
+  > possibly add any set of bits.  Perhaps a chmod-like syntax if it could be
+  > implemented simply.
+
+  I think that would be good too.  For example, people uploading files   
+  to a web server might like to say
+
+  rsync -avzP --chmod a+rX ./ sourcefrog.net:/home/www/sourcefrog/
+
+  Ideally the patch would implement as many of the gnu chmod semantics
+  as possible.  I think the mode parser should be a separate function
+  that passes back something like (mask,set) description to the rest of
+  the program.  For bonus points there would be a test case for the  
+  parser.
+
+  (Debian #23628)
+
+
+--diff
+
+  Allow people to specify the diff command.  (Might want to use wdiff,
+  gnudiff, etc.)
+
+  Just diff the temporary file with the destination file, and delete
+  the tmp file rather than moving it into place.
+
+  Interaction with --partial.
+
+  Security interactions with daemon mode?
+
+  (Suggestion from david.e.sewell)
+
+
+Incorrect timestamps (Debian #100295)
+
+  A bit hard to believe, but apparently it happens.
+
+
+Check "refuse options works"
+
+  We need a test case for this...
+
+  Was this broken when we changed to popt?
+         
+
+
 PLATFORMS ------------------------------------------------------------
 
 Win32
@@ -226,10 +369,71 @@ Win32
   we are correct to call close(), because shutdown() discards
   untransmitted data.
 
+DEVELOPMENT ----------------------------------------------------------
+
+Splint
+
+  Build rsync with SPLINT to try to find security holes.  Add
+  annotations as necessary.  Keep track of the number of warnings
+  found initially, and see how many of them are real bugs, or real
+  security bugs.  Knowing the percentage of likely hits would be
+  really interesting for other projects.
+
+Torture test
+
+  Something that just keeps running rsync continuously over a data set
+  likely to generate problems.
+
+Cross-testing
+
+  Run current rsync versions against significant past releases.
+
+Memory debugger
+
+  jra recommends Valgrind:
+
+    http://devel-home.kde.org/~sewardj/
+
+TESTING --------------------------------------------------------------
+
+Cross-test versions
+
+  Part of the regression suite should be making sure that we don't
+  break backwards compatibility: old clients vs new servers and so
+  on.  Ideally we would test the cross product of versions.  
+
+  It might be sufficient to test downloads from well-known public
+  rsync servers running different versions of rsync.  This will give
+  some testing and also be the most common case for having different
+  versions and not being able to upgrade.
+
+Test large files
+
+  Sparse and non-sparse
+
+Mutator program
+
+  Insert bytes, delete bytes, swap blocks, ...
+
+configure option to enable dangerous tests
+
+If tests are skipped, say why.
+
+Test daemon feature to disallow particular options.
+
+Pipe program that makes slow/jerky connections.
+
+Versions of read() and write() that corrupt the stream, or abruptly fail
+
+
 DOCUMENTATION --------------------------------------------------------
 
 Update README
 
+Keep list of open issues and todos on the web site
+
+Update web site from CVS
+
 BUILD FARM -----------------------------------------------------------
 
 Add machines
@@ -244,10 +448,6 @@ Add machines
 
 NICE -----------------------------------------------------------------
 
-SIGHUP
-
-  Re-read config file (just exec() ourselves) rather than exiting.
-
 --no-detach and --no-fork options
 
   Very useful for debugging.  Also good when running under a
@@ -260,6 +460,9 @@ verbose output
   
   Indicate whether files are new, updated, or deleted
 
+  At end of transfer, show how many files were or were not transferred
+  correctly.
+
 internationalization
 
   Change to using gettext().  Probably need to ship this for platforms
@@ -276,5 +479,3 @@ rsyncsh
    fairly directly into rsync commands: it just needs to remember the
    current host, directory and so on.  We can probably even do
    completion of remote filenames.
-
-%K%