Annotation of embedaddon/rsync/TODO, revision 1.1.1.1
1.1 misho 1: -*- indented-text -*-
2:
3: FEATURES ------------------------------------------------------------
4: Use chroot only if supported
5: Allow supplementary groups in rsyncd.conf 2002/04/09
6: Handling IPv6 on old machines
7: Other IPv6 stuff
8: Add ACL support 2001/12/02
9: proxy authentication 2002/01/23
10: SOCKS 2002/01/23
11: FAT support
12: --diff david.e.sewell 2002/03/15
13: Add daemon --no-fork option
14: Create more granular verbosity 2003/05/15
15:
16: DOCUMENTATION --------------------------------------------------------
17: Keep list of open issues and todos on the web site
18: Perhaps redo manual as SGML
19:
20: LOGGING --------------------------------------------------------------
21: Memory accounting
22: Improve error messages
23: Better statistics Rasmus 2002/03/08
24: Perhaps flush stdout like syslog
25: Log child death on signal
26: verbose output David Stein 2001/12/20
27: internationalization
28:
29: DEVELOPMENT --------------------------------------------------------
30: Handling duplicate names
31: Use generic zlib 2002/02/25
32: TDB 2002/03/12
33: Splint 2002/03/12
34:
35: PERFORMANCE ----------------------------------------------------------
36: Traverse just one directory at a time
37: Allow skipping MD4 file_sum 2002/04/08
38: Accelerate MD4
39:
40: TESTING --------------------------------------------------------------
41: Torture test
42: Cross-test versions 2001/08/22
43: Test on kernel source
44: Test large files
45: Create mutator program for testing
46: Create configure option to enable dangerous tests
47: Create pipe program for testing
48: Create test makefile target for some tests
49:
50: RELATED PROJECTS -----------------------------------------------------
51: rsyncsh
52: http://rsync.samba.org/rsync-and-debian/
53: rsyncable gzip patch
54: rsyncsplit as alternative to real integration with gzip?
55: reverse rsync over HTTP Range
56:
57:
58:
59: FEATURES ------------------------------------------------------------
60:
61:
62: Use chroot only if supported
63:
64: If the platform doesn't support it, then don't even try.
65:
66: If running as non-root, then don't fail, just give a warning.
67: (There was a thread about this a while ago?)
68:
69: http://lists.samba.org/pipermail/rsync/2001-August/thread.html
70: http://lists.samba.org/pipermail/rsync/2001-September/thread.html
71:
72: -- --
73:
74:
75: Allow supplementary groups in rsyncd.conf 2002/04/09
76:
77: Perhaps allow supplementary groups to be specified in rsyncd.conf;
78: then make the first one the primary gid and all the rest be
79: supplementary gids.
80:
81: -- --
82:
83:
84: Handling IPv6 on old machines
85:
86: The KAME IPv6 patch is nice in theory but has proved a bit of a
87: nightmare in practice. The basic idea of their patch is that rsync
88: is rewritten to use the new getaddrinfo()/getnameinfo() interface,
89: rather than gethostbyname()/gethostbyaddr() as in rsync 2.4.6.
90: Systems that don't have the new interface are handled by providing
91: our own implementation in lib/, which is selectively linked in.
92:
93: The problem with this is that it is really hard to get right on
94: platforms that have a half-working implementation, so redefining
95: these functions clashes with system headers, and leaving them out
96: breaks. This affects at least OSF/1, RedHat 5, and Cobalt, which
97: are moderately improtant.
98:
99: Perhaps the simplest solution would be to have two different files
100: implementing the same interface, and choose either the new or the
101: old API. This is probably necessary for systems that e.g. have
102: IPv6, but gethostbyaddr() can't handle it. The Linux manpage claims
103: this is currently the case.
104:
105: In fact, our internal sockets interface (things like
106: open_socket_out(), etc) is much narrower than the getaddrinfo()
107: interface, and so probably simpler to get right. In addition, the
108: old code is known to work well on old machines.
109:
110: We could drop the rather large lib/getaddrinfo files.
111:
112: -- --
113:
114:
115: Other IPv6 stuff
116:
117: Implement suggestions from http://www.kame.net/newsletter/19980604/
118: and ftp://ftp.iij.ad.jp/pub/RFC/rfc2553.txt
119:
120: If a host has multiple addresses, then listen try to connect to all
121: in order until we get through. (getaddrinfo may return multiple
122: addresses.) This is kind of implemented already.
123:
124: Possibly also when starting as a server we may need to listen on
125: multiple passive addresses. This might be a bit harder, because we
126: may need to select on all of them. Hm.
127:
128: -- --
129:
130:
131: Add ACL support 2001/12/02
132:
133: Transfer ACLs. Need to think of a standard representation.
134: Probably better not to even try to convert between NT and POSIX.
135: Possibly can share some code with Samba.
136: NOTE: there is a patch that implements this in the "patches" subdir.
137:
138: -- --
139:
140:
141: proxy authentication 2002/01/23
142:
143: Allow RSYNC_PROXY to be http://user:pass@proxy.foo:3128/, and do
144: HTTP Basic Proxy-Authentication.
145:
146: Multiple schemes are possible, up to and including the insanity that
147: is NTLM, but Basic probably covers most cases.
148:
149: -- --
150:
151:
152: SOCKS 2002/01/23
153:
154: Add --with-socks, and then perhaps a command-line option to put them
155: on or off. This might be more reliable than LD_PRELOAD hacks.
156:
157: -- --
158:
159:
160: FAT support
161:
162: rsync to a FAT partition on a Unix machine doesn't work very well at
163: the moment. I think we get errors about invalid filenames and
164: perhaps also trying to do atomic renames.
165:
166: I guess the code to do this is currently #ifdef'd on Windows;
167: perhaps we ought to intelligently fall back to it on Unix too.
168:
169: -- --
170:
171:
172: --diff david.e.sewell 2002/03/15
173:
174: Allow people to specify the diff command. (Might want to use wdiff,
175: gnudiff, etc.)
176:
177: Just diff the temporary file with the destination file, and delete
178: the tmp file rather than moving it into place.
179:
180: Interaction with --partial.
181:
182: Security interactions with daemon mode?
183:
184: -- --
185:
186:
187: Add daemon --no-fork option
188:
189: Very useful for debugging. Also good when running under a
190: daemon-monitoring process that tries to restart the service when the
191: parent exits.
192:
193: -- --
194:
195:
196: Create more granular verbosity 2003/05/15
197:
198: Control output with the --report option.
199:
200: The option takes as a single argument (no whitespace) a
201: comma delimited lists of keywords.
202:
203: This would separate debugging from "logging" as well as
204: fine grained selection of statistical reporting and what
205: actions are logged.
206:
207: http://lists.samba.org/archive/rsync/2003-May/006059.html
208:
209: -- --
210:
211: DOCUMENTATION --------------------------------------------------------
212:
213:
214: Keep list of open issues and todos on the web site
215:
216: -- --
217:
218:
219: Perhaps redo manual as SGML
220:
221: The man page is getting rather large, and there is more information
222: that ought to be added.
223:
224: TexInfo source is probably a dying format.
225:
226: Linuxdoc looks like the most likely contender. I know DocBook is
227: favoured by some people, but it's so bloody verbose, even with emacs
228: support.
229:
230: -- --
231:
232: LOGGING --------------------------------------------------------------
233:
234:
235: Memory accounting
236:
237: At exit, show how much memory was used for the file list, etc.
238:
239: Also we do a wierd exponential-growth allocation in flist.c. I'm
240: not sure this makes sense with modern mallocs. At any rate it will
241: make us allocate a huge amount of memory for large file lists.
242:
243: -- --
244:
245:
246: Improve error messages
247:
248: If we hang or get SIGINT, then explain where we were up to. Perhaps
249: have a static buffer that contains the current function name, or
250: some kind of description of what we were trying to do. This is a
251: little easier on people than needing to run strace/truss.
252:
253: "The dungeon collapses! You are killed." Rather than "unexpected
254: eof" give a message that is more detailed if possible and also more
255: helpful.
256:
257: If we get an error writing to a socket, then we should perhaps
258: continue trying to read to see if an error message comes across
259: explaining why the socket is closed. I'm not sure if this would
260: work, but it would certainly make our messages more helpful.
261:
262: What happens if a directory is missing -x attributes. Do we lose
263: our load? (Debian #28416) Probably fixed now, but a test case would
264: be good.
265:
266: -- --
267:
268:
269: Better statistics Rasmus 2002/03/08
270:
271: <Rasmus>
272: hey, how about an rsync option that just gives you the
273: summary without the list of files? And perhaps gives
274: more information like the number of new files, number
275: of changed, deleted, etc. ?
276:
277: <mbp>
278: nice idea there is --stats but at the moment it's very
279: tridge-oriented rather than user-friendly it would be
280: nice to improve it that would also work well with
281: --dryrun
282:
283: -- --
284:
285:
286: Perhaps flush stdout like syslog
287:
288: Perhaps flush stdout after each filename, so that people trying to
289: monitor progress in a log file can do so more easily. See
290: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=48108
291:
292: -- --
293:
294:
295: Log child death on signal
296:
297: If a child of the rsync daemon dies with a signal, we should notice
298: that when we reap it and log a message.
299:
300: -- --
301:
302:
303: verbose output David Stein 2001/12/20
304:
305: At end of transfer, show how many files were or were not transferred
306: correctly.
307:
308: -- --
309:
310:
311: internationalization
312:
313: Change to using gettext(). Probably need to ship this for platforms
314: that don't have it.
315:
316: Solicit translations.
317:
318: Does anyone care? Before we bother modifying the code, we ought to
319: get the manual translated first, because that's possibly more useful
320: and at any rate demonstrates desire.
321:
322: -- --
323:
324: DEVELOPMENT --------------------------------------------------------
325:
326: Handling duplicate names
327:
328: Some folks would like rsync to be deterministic in how it handles
329: duplicate names that come from mering multiple source directories
330: into a single destination directory; e.g. the last name wins. We
331: could do this by switching our sort algorithm to one that will
332: guarantee that the names won't be reordered. Alternately, we could
333: assign an ever-increasing number to each item as we insert it into
334: the list and then make sure that we leave the largest number when
335: cleaning the file list (see clean_flist()). Another solution would
336: be to add a hash table, and thus never put any duplicate names into
337: the file list (and bump the protocol to handle this).
338:
339: -- --
340:
341:
342: Use generic zlib 2002/02/25
343:
344: Perhaps don't use our own zlib.
345:
346: Advantages:
347:
348: - will automatically be up to date with bugfixes in zlib
349:
350: - can leave it out for small rsync on e.g. recovery disks
351:
352: - can use a shared library
353:
354: - avoids people breaking rsync by trying to do this themselves and
355: messing up
356:
357: Should we ship zlib for systems that don't have it, or require
358: people to install it separately?
359:
360: Apparently this will make us incompatible with versions of rsync
361: that use the patched version of rsync. Probably the simplest way to
362: do this is to just disable gzip (with a warning) when talking to old
363: versions.
364:
365: -- --
366:
367:
368: Splint 2002/03/12
369:
370: Build rsync with SPLINT to try to find security holes. Add
371: annotations as necessary. Keep track of the number of warnings
372: found initially, and see how many of them are real bugs, or real
373: security bugs. Knowing the percentage of likely hits would be
374: really interesting for other projects.
375:
376: -- --
377:
378: PERFORMANCE ----------------------------------------------------------
379:
380: Allow skipping MD4 file_sum 2002/04/08
381:
382: If we're doing a local transfer, or using -W, then perhaps don't
383: send the file checksum. If we're doing a local transfer, then
384: calculating MD4 checksums uses 90% of CPU and is unlikely to be
385: useful.
386:
387: We should not allow it to be disabled separately from -W, though
388: as it is the only thing that lets us know when the rsync algorithm
389: got out of sync and messed the file up (i.e. if the basis file
390: changed between checksum generation and reception).
391:
392: -- --
393:
394:
395: Accelerate MD4
396:
397: Perhaps borrow an assembler MD4 from someone?
398:
399: Make sure we call MD4 with properly-sized blocks whenever possible
400: to avoid copying into the residue region?
401:
402: -- --
403:
404: TESTING --------------------------------------------------------------
405:
406: Torture test
407:
408: Something that just keeps running rsync continuously over a data set
409: likely to generate problems.
410:
411: -- --
412:
413:
414: Cross-test versions 2001/08/22
415:
416: Part of the regression suite should be making sure that we
417: don't break backwards compatibility: old clients vs new
418: servers and so on. Ideally we would test both up and down
419: from the current release to all old versions.
420:
421: Run current rsync versions against significant past releases.
422:
423: We might need to omit broken old versions, or versions in which
424: particular functionality is broken
425:
426: It might be sufficient to test downloads from well-known public
427: rsync servers running different versions of rsync. This will give
428: some testing and also be the most common case for having different
429: versions and not being able to upgrade.
430:
431: The new --protocol option may help in this.
432:
433: -- --
434:
435:
436: Test on kernel source
437:
438: Download all versions of kernel; unpack, sync between them. Also
439: sync between uncompressed tarballs. Compare directories after
440: transfer.
441:
442: Use local mode; ssh; daemon; --whole-file and --no-whole-file.
443:
444: Use awk to pull out the 'speedup' number for each transfer. Make
445: sure it is >= x.
446:
447: -- --
448:
449:
450: Test large files
451:
452: Sparse and non-sparse
453:
454: -- --
455:
456:
457: Create mutator program for testing
458:
459: Insert bytes, delete bytes, swap blocks, ...
460:
461: -- --
462:
463:
464: Create configure option to enable dangerous tests
465:
466: -- --
467:
468:
469: Create pipe program for testing
470:
471: Create pipe program that makes slow/jerky connections for
472: testing Versions of read() and write() that corrupt the
473: stream, or abruptly fail
474:
475: -- --
476:
477:
478: Create test makefile target for some tests
479:
480: Separate makefile target to run rough tests -- or perhaps
481: just run them every time?
482:
483: -- --
484:
485: RELATED PROJECTS -----------------------------------------------------
486:
487: rsyncsh
488:
489: Write a small emulation of interactive ftp as a Pythonn program
490: that calls rsync. Commands such as "cd", "ls", "ls *.c" etc map
491: fairly directly into rsync commands: it just needs to remember the
492: current host, directory and so on. We can probably even do
493: completion of remote filenames.
494:
495: -- --
496:
497:
498: http://rsync.samba.org/rsync-and-debian/
499:
500:
501: -- --
502:
503:
504: rsyncable gzip patch
505:
506: Exhaustive, tortuous testing
507:
508: Cleanups?
509:
510: -- --
511:
512:
513: rsyncsplit as alternative to real integration with gzip?
514:
515: -- --
516:
517:
518: reverse rsync over HTTP Range
519:
520: Goswin Brederlow suggested this on Debian; I think tridge and I
521: talked about it previous in relation to rproxy.
522:
523: Addendum: It looks like someone is working on a version of this:
524:
525: http://zsync.moria.org.uk/
526:
527: -- --
528:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>