From 2f5fa77e39d1beb21a251e1ca17aa119525f9f68 Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Thu, 22 Jul 2004 00:35:33 +0000 Subject: [PATCH] Got rid of failures and fuzz. --- compare-dest.diff | 34 ++++---- fname-convert.diff | 30 +++---- fuzzy.diff | 20 ++--- g2r-basis-filename.diff | 172 +++++++++++++++------------------------- openssl-support.diff | 24 +++--- time-limit.diff | 14 ++-- 6 files changed, 126 insertions(+), 168 deletions(-) diff --git a/compare-dest.diff b/compare-dest.diff index 342a534..bfc6b88 100644 --- a/compare-dest.diff +++ b/compare-dest.diff @@ -9,7 +9,7 @@ they are suppled). Before compiling, be sure to run "make proto". ---- orig/generator.c 2004-07-17 15:50:09 +--- orig/generator.c 2004-07-22 00:05:38 +++ generator.c 2004-07-19 08:32:53 @@ -42,7 +42,7 @@ extern int size_only; extern int io_timeout; @@ -20,7 +20,7 @@ Before compiling, be sure to run "make proto". extern int link_dest; extern int whole_file; extern int local_server; -@@ -80,13 +80,12 @@ static int skip_file(char *fname, struct +@@ -79,13 +79,12 @@ static int skip_file(char *fname, struct if (always_checksum && S_ISREG(st->st_mode)) { char sum[MD4_SUM_LENGTH]; char fnamecmpdest[MAXPATHLEN]; @@ -39,7 +39,7 @@ Before compiling, be sure to run "make proto". } file_checksum(fname,sum,st->st_size); return memcmp(sum, file->u.sum, protocol_version < 21 ? 2 -@@ -408,13 +407,18 @@ static void recv_generator(char *fname, +@@ -414,13 +413,18 @@ static void recv_generator(char *fname, fnamecmp = fname; @@ -63,9 +63,9 @@ Before compiling, be sure to run "make proto". if (statret == -1) { errno = saveerrno; *fnamecmpbuf = '\0'; ---- orig/main.c 2004-07-17 15:58:11 -+++ main.c 2004-07-17 16:31:30 -@@ -57,7 +57,7 @@ extern int filesfrom_fd; +--- orig/main.c 2004-07-22 00:10:43 ++++ main.c 2004-07-22 00:30:38 +@@ -58,7 +58,7 @@ extern int filesfrom_fd; extern pid_t cleanup_child_pid; extern char *files_from; extern char *remote_filesfrom_file; @@ -74,16 +74,16 @@ Before compiling, be sure to run "make proto". extern char *rsync_path; extern char *shell_cmd; extern char *batch_name; -@@ -446,7 +446,7 @@ static int do_recv(int f_in,int f_out,st +@@ -456,7 +456,7 @@ static int do_recv(int f_in,int f_out,st int pid; int status = 0; int error_pipe[2], name_pipe[2]; -- int need_name_pipe = compare_dest || read_batch; -+ int need_name_pipe = compare_dest[0] || read_batch; +- int need_name_pipe = compare_dest; ++ int need_name_pipe = compare_dest[0]; if (preserve_hard_links) init_hard_links(flist); ---- orig/options.c 2004-07-16 20:07:22 +--- orig/options.c 2004-07-21 23:59:35 +++ options.c 2004-07-03 17:33:30 @@ -118,7 +118,8 @@ unsigned int backup_dir_remainder; @@ -160,7 +160,7 @@ Before compiling, be sure to run "make proto". link_dest = 1; break; #else -@@ -684,6 +714,11 @@ int parse_arguments(int *argc, const cha +@@ -689,6 +719,11 @@ int parse_arguments(int *argc, const cha exit_cleanup(RERR_SYNTAX); } @@ -172,7 +172,7 @@ Before compiling, be sure to run "make proto". if (archive_mode) { if (!files_from) recurse = 1; -@@ -712,8 +747,6 @@ int parse_arguments(int *argc, const cha +@@ -717,8 +752,6 @@ int parse_arguments(int *argc, const cha (*argv)[i] = alloc_sanitize_path((*argv)[i], NULL); if (tmpdir) tmpdir = alloc_sanitize_path(tmpdir, curr_dir); @@ -181,7 +181,7 @@ Before compiling, be sure to run "make proto". if (backup_dir) backup_dir = alloc_sanitize_path(backup_dir, curr_dir); if (files_from) -@@ -819,8 +852,8 @@ int parse_arguments(int *argc, const cha +@@ -824,8 +857,8 @@ int parse_arguments(int *argc, const cha **/ void server_options(char **args,int *argc) { @@ -191,7 +191,7 @@ Before compiling, be sure to run "make proto". char *arg; int i, x; -@@ -998,13 +1031,16 @@ void server_options(char **args,int *arg +@@ -1003,13 +1036,16 @@ void server_options(char **args,int *arg args[ac++] = tmpdir; } @@ -211,9 +211,9 @@ Before compiling, be sure to run "make proto". } if (files_from && (!am_sender || remote_filesfrom_file)) { ---- orig/receiver.c 2004-07-17 21:27:55 +--- orig/receiver.c 2004-07-22 00:20:50 +++ receiver.c 2004-07-03 20:14:37 -@@ -37,7 +37,6 @@ extern int preserve_perms; +@@ -38,7 +38,6 @@ extern int preserve_perms; extern int cvs_exclude; extern int io_error; extern char *tmpdir; @@ -221,7 +221,7 @@ Before compiling, be sure to run "make proto". extern int make_backups; extern int do_progress; extern char *backup_dir; ---- orig/rsync.h 2004-07-16 20:07:23 +--- orig/rsync.h 2004-07-20 21:36:08 +++ rsync.h 2004-07-03 17:33:30 @@ -98,6 +98,8 @@ diff --git a/fname-convert.diff b/fname-convert.diff index 2e20027..052bbeb 100644 --- a/fname-convert.diff +++ b/fname-convert.diff @@ -58,7 +58,7 @@ Note that you'll need to run 'make proto' after applying this patch. DAEMON_OBJ = params.o loadparm.o clientserver.o access.o connection.o authenticate.o popt_OBJS=popt/findme.o popt/popt.o popt/poptconfig.o \ popt/popthelp.o popt/poptparse.o ---- orig/cleanup.c 2004-07-02 18:11:26 +--- orig/cleanup.c 2004-07-20 21:36:07 +++ cleanup.c 2004-07-03 20:18:02 @@ -24,6 +24,7 @@ extern int io_error; @@ -68,7 +68,7 @@ Note that you'll need to run 'make proto' after applying this patch. /** * Close all open sockets and files, allowing a (somewhat) graceful -@@ -124,6 +125,8 @@ void _exit_cleanup(int code, const char +@@ -121,6 +122,8 @@ void _exit_cleanup(int code, const char finish_transfer(cleanup_new_fname, fname, cleanup_file, 0); } io_flush(FULL_FLUSH); @@ -87,7 +87,7 @@ Note that you'll need to run 'make proto' after applying this patch. #define RERR_SIGNAL 20 /* status returned when sent SIGUSR1, SIGINT */ #define RERR_WAITCHILD 21 /* some error returned by waitpid() */ ---- orig/flist.c 2004-07-15 02:21:10 +--- orig/flist.c 2004-07-17 15:20:05 +++ flist.c 2004-07-03 20:18:02 @@ -43,6 +43,7 @@ extern int cvs_exclude; @@ -382,9 +382,9 @@ Note that you'll need to run 'make proto' after applying this patch. + if (verbose > 2) + rprintf(FINFO, "Converted filename: %s -> %s\n", src, dest); +} ---- orig/generator.c 2004-07-16 19:35:29 +--- orig/generator.c 2004-07-21 23:59:35 +++ generator.c 2004-07-03 20:18:02 -@@ -249,6 +249,12 @@ static void generate_and_send_sums(struc +@@ -256,6 +256,12 @@ static void generate_and_send_sums(int f * * @note This comment was added later by mbp who was trying to work it * out. It might be wrong. @@ -407,18 +407,18 @@ Note that you'll need to run 'make proto' after applying this patch. { RERR_SIGNAL , "received SIGUSR1 or SIGINT" }, { RERR_WAITCHILD , "some error returned by waitpid()" }, { RERR_MALLOC , "error allocating core memory buffers" }, ---- orig/main.c 2004-07-15 17:02:03 -+++ main.c 2004-07-03 20:18:02 -@@ -318,7 +318,7 @@ static pid_t do_cmd(char *cmd, char *mac +--- orig/main.c 2004-07-21 23:59:35 ++++ main.c 2004-07-22 00:31:47 +@@ -329,7 +329,7 @@ static pid_t do_cmd(char *cmd, char *mac whole_file = 1; ret = local_child(argc, args, f_in, f_out, child_main); - } else { + } else - ret = piped_child(args,f_in,f_out); + ret = piped_child(args, f_in, f_out, blocking_io, 1); - } if (dir) ---- orig/options.c 2004-07-16 20:07:22 + free(dir); +--- orig/options.c 2004-07-21 23:59:35 +++ options.c 2004-07-03 20:18:02 @@ -128,6 +128,7 @@ char *backup_dir = NULL; char backup_dir_buf[MAXPATHLEN]; @@ -444,7 +444,7 @@ Note that you'll need to run 'make proto' after applying this patch. /* TODO: Should this take an optional int giving the compression level? */ {"compress", 'z', POPT_ARG_NONE, &do_compression, 0, 0, 0 }, {"daemon", 0, POPT_ARG_NONE, &daemon_opt, 0, 0, 0 }, ---- orig/pipe.c 2004-07-15 02:21:11 +--- orig/pipe.c 2004-07-21 23:59:35 +++ pipe.c 2004-07-03 20:18:02 @@ -23,7 +23,6 @@ @@ -452,9 +452,9 @@ Note that you'll need to run 'make proto' after applying this patch. extern int am_server; -extern int blocking_io; extern int orig_umask; - extern int read_batch; extern int write_batch; -@@ -41,8 +40,10 @@ extern int filesfrom_fd; + extern int filesfrom_fd; +@@ -40,8 +39,10 @@ extern int filesfrom_fd; * If blocking_io is set then use blocking io on both fds. That can be * used to cope with badly broken rsh implementations like the one on * Solaris. @@ -466,7 +466,7 @@ Note that you'll need to run 'make proto' after applying this patch. { pid_t pid; int to_child_pipe[2]; -@@ -57,7 +58,7 @@ pid_t piped_child(char **command, int *f +@@ -56,7 +57,7 @@ pid_t piped_child(char **command, int *f exit_cleanup(RERR_IPC); } diff --git a/fuzzy.diff b/fuzzy.diff index fa66efe..98eeaac 100644 --- a/fuzzy.diff +++ b/fuzzy.diff @@ -6,7 +6,7 @@ Very lightly tested. Be sure to run "make proto" before "make". ---- orig/generator.c 2004-07-17 15:50:09 +--- orig/generator.c 2004-07-22 00:05:38 +++ generator.c 2004-07-20 21:49:24 @@ -41,6 +41,7 @@ extern int ignore_times; extern int size_only; @@ -144,8 +144,8 @@ Be sure to run "make proto" before "make". if (!*fnamecmpbuf) set_perms(fname, file, &st, PERMS_REPORT); return; ---- orig/main.c 2004-07-17 15:58:11 -+++ main.c 2004-07-17 16:32:39 +--- orig/main.c 2004-07-22 00:10:43 ++++ main.c 2004-07-22 00:32:31 @@ -47,6 +47,7 @@ extern int keep_dirlinks; extern int preserve_hard_links; extern int protocol_version; @@ -154,16 +154,16 @@ Be sure to run "make proto" before "make". extern int relative_paths; extern int rsync_port; extern int whole_file; -@@ -446,7 +447,7 @@ static int do_recv(int f_in,int f_out,st +@@ -456,7 +457,7 @@ static int do_recv(int f_in,int f_out,st int pid; int status = 0; int error_pipe[2], name_pipe[2]; -- int need_name_pipe = compare_dest || read_batch; -+ int need_name_pipe = compare_dest || fuzzy || read_batch; +- int need_name_pipe = compare_dest; ++ int need_name_pipe = compare_dest || fuzzy; if (preserve_hard_links) init_hard_links(flist); ---- orig/options.c 2004-07-20 21:36:07 +--- orig/options.c 2004-07-21 23:59:35 +++ options.c 2004-07-16 20:14:12 @@ -85,6 +85,7 @@ int safe_symlinks = 0; int copy_unsafe_links = 0; @@ -189,7 +189,7 @@ Be sure to run "make proto" before "make". /* TODO: Should this take an optional int giving the compression level? */ {"compress", 'z', POPT_ARG_NONE, &do_compression, 0, 0, 0 }, {"daemon", 0, POPT_ARG_NONE, &daemon_opt, 0, 0, 0 }, -@@ -1019,6 +1022,9 @@ void server_options(char **args,int *arg +@@ -1024,6 +1027,9 @@ void server_options(char **args,int *arg } } @@ -199,9 +199,9 @@ Be sure to run "make proto" before "make". *argc = ac; return; ---- orig/receiver.c 2004-07-19 16:44:39 +--- orig/receiver.c 2004-07-22 00:20:50 +++ receiver.c 2004-07-03 20:09:05 -@@ -37,7 +37,6 @@ extern int preserve_perms; +@@ -38,7 +38,6 @@ extern int preserve_perms; extern int cvs_exclude; extern int io_error; extern char *tmpdir; diff --git a/g2r-basis-filename.diff b/g2r-basis-filename.diff index fe33676..69d050e 100644 --- a/g2r-basis-filename.diff +++ b/g2r-basis-filename.diff @@ -5,16 +5,10 @@ the receiver and makes future options that do more basis-file searching more efficient (such as the --fuzzy option and the support for multiple --compare-dest options). -Also fixes a potential synchronization problem between the generator -and the receiver in read-batch mode. Should consider making the -sending of the index value the default for this pipe (it's currently -only sent in batch mode due to the sender not listening to the -generator to determine what files get updated). - You must run "make proto" before compiling. ---- orig/generator.c 2004-07-20 21:36:07 -+++ generator.c 2004-07-17 15:50:09 +--- orig/generator.c 2004-07-21 23:59:35 ++++ generator.c 2004-07-22 00:05:38 @@ -258,9 +258,9 @@ static void generate_and_send_sums(int f * out. It might be wrong. */ @@ -27,17 +21,7 @@ You must run "make proto" before compiling. STRUCT_STAT st; int statret; char *fnamecmp; -@@ -404,9 +404,6 @@ static void recv_generator(char *fname, - } - #endif - -- if (read_batch) -- return; -- - if (preserve_hard_links && hard_link_check(file, HL_CHECK_MASTER)) - return; - -@@ -424,8 +421,10 @@ static void recv_generator(char *fname, +@@ -421,8 +421,10 @@ static void recv_generator(char *fname, statret = link_stat(fnamecmpbuf, &st, 0); if (!S_ISREG(st.st_mode)) statret = -1; @@ -49,7 +33,7 @@ You must run "make proto" before compiling. #if HAVE_LINK else if (link_dest && !dry_run) { if (do_link(fnamecmpbuf, fname) != 0) { -@@ -433,22 +432,22 @@ static void recv_generator(char *fname, +@@ -430,22 +432,22 @@ static void recv_generator(char *fname, rsyserr(FINFO, errno, "link %s => %s", fnamecmpbuf, fname); } @@ -71,7 +55,7 @@ You must run "make proto" before compiling. return; - if (errno == ENOENT) { - write_int(f_out,i); -- if (!dry_run) +- if (!dry_run && !read_batch) - write_sum_head(f_out, NULL); - } else if (verbose > 1) { + if (errno == ENOENT) @@ -80,7 +64,7 @@ You must run "make proto" before compiling. rsyserr(FERROR, errno, "recv_generator: failed to open %s", full_fname(fname)); -@@ -457,26 +456,23 @@ static void recv_generator(char *fname, +@@ -454,26 +456,23 @@ static void recv_generator(char *fname, } if (!S_ISREG(st.st_mode)) { @@ -93,7 +77,7 @@ You must run "make proto" before compiling. if (preserve_hard_links && hard_link_check(file, HL_SKIP)) return; - write_int(f_out,i); -- if (!dry_run) +- if (!dry_run && !read_batch) - write_sum_head(f_out, NULL); - return; + statret = -1; @@ -112,7 +96,7 @@ You must run "make proto" before compiling. && cmp_modtime(st.st_mtime, file->modtime) > 0) { if (verbose > 1) rprintf(FINFO,"%s is newer\n",fname); -@@ -484,21 +480,17 @@ static void recv_generator(char *fname, +@@ -481,21 +480,17 @@ static void recv_generator(char *fname, } if (skip_file(fname, file, &st)) { @@ -122,7 +106,7 @@ You must run "make proto" before compiling. return; } -- if (dry_run) { +- if (dry_run || read_batch) { - write_int(f_out,i); - return; - } @@ -140,7 +124,7 @@ You must run "make proto" before compiling. /* open the file */ fd = do_open(fnamecmp, O_RDONLY, 0); -@@ -509,9 +501,8 @@ static void recv_generator(char *fname, +@@ -506,9 +501,8 @@ static void recv_generator(char *fname, /* pretend the file didn't exist */ if (preserve_hard_links && hard_link_check(file, HL_SKIP)) return; @@ -152,7 +136,7 @@ You must run "make proto" before compiling. } if (verbose > 3) { -@@ -522,14 +513,41 @@ static void recv_generator(char *fname, +@@ -519,14 +513,40 @@ static void recv_generator(char *fname, if (verbose > 2) rprintf(FINFO, "generating and sending sums for %d\n", i); @@ -162,8 +146,6 @@ You must run "make proto" before compiling. + if (f_nameout >= 0) { + uchar lenbuf[3], *lb = lenbuf; + int len = statret == -1 ? 0 : strlen(fnamecmpbuf); -+ if (read_batch) -+ write_int(f_nameout, i); + if (len > 0x7F) { +#if MAXPATHLEN > 0x7FFF + *lb++ = len / 0x10000 + 0x80; @@ -177,12 +159,13 @@ You must run "make proto" before compiling. + if (len) + write_buf(f_nameout, fnamecmpbuf, len); + } - -- close(fd); -+ if (read_batch) -+ return; + + write_int(f_out, i); ++ ++ if (read_batch) ++ return; + +- close(fd); + if (statret == 0) { + generate_and_send_sums(fd, st.st_size, f_out); + @@ -198,7 +181,7 @@ You must run "make proto" before compiling. { int i; int phase = 0; -@@ -570,7 +588,7 @@ void generate_files(int f_out, struct fi +@@ -567,7 +587,7 @@ void generate_files(int f_out, struct fi } recv_generator(local_name ? local_name : f_name_to(file, fbuf), @@ -207,15 +190,7 @@ You must run "make proto" before compiling. } phase++; -@@ -581,13 +599,15 @@ void generate_files(int f_out, struct fi - rprintf(FINFO,"generate_files phase=%d\n",phase); - - write_int(f_out, -1); -+ if (read_batch) -+ write_int(f_nameout, flist->count); - - /* files can cycle through the system more than once - * to catch initial checksum errors */ +@@ -584,7 +604,7 @@ void generate_files(int f_out, struct fi while ((i = get_redo_num()) != -1) { struct file_struct *file = flist->files[i]; recv_generator(local_name ? local_name : f_name_to(file, fbuf), @@ -224,16 +199,7 @@ You must run "make proto" before compiling. } phase++; -@@ -595,6 +615,8 @@ void generate_files(int f_out, struct fi - rprintf(FINFO,"generate_files phase=%d\n",phase); - - write_int(f_out, -1); -+ if (read_batch) -+ write_int(f_nameout, flist->count); - - if (preserve_hard_links) - do_hard_links(); -@@ -606,7 +628,7 @@ void generate_files(int f_out, struct fi +@@ -603,7 +623,7 @@ void generate_files(int f_out, struct fi if (!file->basename || !S_ISDIR(file->mode)) continue; recv_generator(local_name ? local_name : f_name(file), @@ -242,9 +208,9 @@ You must run "make proto" before compiling. } if (verbose > 2) ---- orig/main.c 2004-07-19 17:14:44 -+++ main.c 2004-07-17 15:58:11 -@@ -57,6 +57,7 @@ extern int filesfrom_fd; +--- orig/main.c 2004-07-21 23:59:35 ++++ main.c 2004-07-22 00:10:43 +@@ -58,6 +58,7 @@ extern int filesfrom_fd; extern pid_t cleanup_child_pid; extern char *files_from; extern char *remote_filesfrom_file; @@ -252,13 +218,13 @@ You must run "make proto" before compiling. extern char *rsync_path; extern char *shell_cmd; extern char *batch_name; -@@ -444,20 +445,21 @@ static int do_recv(int f_in,int f_out,st +@@ -454,20 +455,21 @@ static int do_recv(int f_in,int f_out,st { int pid; int status = 0; - int error_pipe[2]; + int error_pipe[2], name_pipe[2]; -+ int need_name_pipe = compare_dest || read_batch; ++ int need_name_pipe = compare_dest; if (preserve_hard_links) init_hard_links(flist); @@ -279,7 +245,7 @@ You must run "make proto" before compiling. exit_cleanup(RERR_SOCKETIO); } -@@ -465,6 +467,11 @@ static int do_recv(int f_in,int f_out,st +@@ -475,6 +477,11 @@ static int do_recv(int f_in,int f_out,st if ((pid = do_fork()) == 0) { close(error_pipe[0]); @@ -291,7 +257,7 @@ You must run "make proto" before compiling. if (f_in != f_out) close(f_out); -@@ -474,7 +481,7 @@ static int do_recv(int f_in,int f_out,st +@@ -484,7 +491,7 @@ static int do_recv(int f_in,int f_out,st /* set place to send errors */ set_msg_fd_out(error_pipe[1]); @@ -300,7 +266,7 @@ You must run "make proto" before compiling. io_flush(FULL_FLUSH); report(f_in); -@@ -492,6 +499,11 @@ static int do_recv(int f_in,int f_out,st +@@ -502,6 +509,11 @@ static int do_recv(int f_in,int f_out,st stop_write_batch(); close(error_pipe[1]); @@ -312,7 +278,7 @@ You must run "make proto" before compiling. if (f_in != f_out) close(f_in); -@@ -499,7 +511,7 @@ static int do_recv(int f_in,int f_out,st +@@ -509,7 +521,7 @@ static int do_recv(int f_in,int f_out,st set_msg_fd_in(error_pipe[0]); @@ -321,17 +287,9 @@ You must run "make proto" before compiling. get_redo_num(); /* Read final MSG_DONE and any prior messages. */ report(-1); ---- orig/receiver.c 2004-07-20 21:36:07 -+++ receiver.c 2004-07-19 16:44:39 -@@ -28,6 +28,7 @@ extern int max_delete; - extern int csum_length; - extern struct stats stats; - extern int dry_run; -+extern int read_batch; - extern int am_server; - extern int relative_paths; - extern int keep_dirlinks; -@@ -318,6 +319,30 @@ static int receive_data(int f_in, char * +--- orig/receiver.c 2004-07-22 00:07:20 ++++ receiver.c 2004-07-22 00:20:50 +@@ -320,6 +320,30 @@ static int receive_data(int f_in, char * } @@ -362,7 +320,7 @@ You must run "make proto" before compiling. static void discard_receive_data(int f_in, OFF_T length) { receive_data(f_in, NULL, -1, 0, NULL, -1, length); -@@ -328,8 +353,10 @@ static void discard_receive_data(int f_i +@@ -330,7 +354,8 @@ static void discard_receive_data(int f_i * main routine for receiver process. * * Receiver process runs on the same host as the generator process. */ @@ -370,57 +328,57 @@ You must run "make proto" before compiling. +int recv_files(int f_in, struct file_list *flist, char *local_name, + int f_name_in) { -+ int next_gen_i = -1; + int next_gen_i = -1; int fd1,fd2; - STRUCT_STAT st; - char *fname, fbuf[MAXPATHLEN]; -@@ -355,6 +382,17 @@ int recv_files(int f_in, struct file_lis - +@@ -359,8 +384,15 @@ int recv_files(int f_in, struct file_lis i = read_int(f_in); if (i == -1) { -+ if (read_batch) { -+ if (next_gen_i < 0) -+ next_gen_i = read_int(f_name_in); + if (read_batch) { +- if (next_gen_i != flist->count) +- while (read_int(batch_gen_fd) != -1) {} + while (next_gen_i < flist->count) { -+ read_gen_name(f_name_in, fnamecmpbuf, -+ NULL); ++ if (f_name_in >= 0 && next_gen_i >= 0) { ++ read_gen_name(f_name_in, ++ fnamecmpbuf, NULL); ++ } + next_gen_i = read_int(f_name_in); ++ if (next_gen_i < 0) ++ break; + } -+ next_gen_i = -1; -+ } -+ - if (phase) - break; + next_gen_i = -1; + } -@@ -397,7 +435,26 @@ int recv_files(int f_in, struct file_lis +@@ -406,10 +438,12 @@ int recv_files(int f_in, struct file_lis if (verbose > 2) rprintf(FINFO,"recv_files(%s)\n",fname); - fnamecmp = fname; -+ if (read_batch) { -+ if (next_gen_i < 0) -+ next_gen_i = read_int(f_name_in); -+ while (i > next_gen_i) { -+ read_gen_name(f_name_in, fnamecmpbuf, NULL); -+ next_gen_i = read_int(f_name_in); -+ } -+ if (i < next_gen_i) { -+ rprintf(FINFO, "skipping update for \"%s\"\n", -+ fname); -+ discard_receive_data(f_in, file->length); -+ continue; -+ } +- + if (read_batch) { + while (i > next_gen_i) { ++ if (f_name_in >= 0 && next_gen_i >= 0) { ++ read_gen_name(f_name_in, fnamecmpbuf, ++ NULL); ++ } + next_gen_i = read_int(batch_gen_fd); + if (next_gen_i == -1) + next_gen_i = flist->count; +@@ -420,8 +454,14 @@ int recv_files(int f_in, struct file_lis + discard_receive_data(f_in, file->length); + continue; + } + next_gen_i = -1; -+ } -+ + } + + if (f_name_in >= 0) + fnamecmp = read_gen_name(f_name_in, fnamecmpbuf, fname); + else + fnamecmp = fname; - ++ if (server_exclude_list.head && check_exclude(&server_exclude_list, fname, -@@ -414,14 +471,6 @@ int recv_files(int f_in, struct file_lis + S_ISDIR(file->mode)) < 0) { +@@ -437,14 +477,6 @@ int recv_files(int f_in, struct file_lis /* open the file */ fd1 = do_open(fnamecmp, O_RDONLY, 0); diff --git a/openssl-support.diff b/openssl-support.diff index f8f326a..12c219b 100644 --- a/openssl-support.diff +++ b/openssl-support.diff @@ -48,7 +48,7 @@ can't say if I've left any cleanup/compatibility errors in the code. TLS_OBJ = tls.o syscall.o lib/permstring.o ---- orig/cleanup.c 2004-07-02 18:11:26 +--- orig/cleanup.c 2004-07-20 21:36:07 +++ cleanup.c 2004-07-03 20:22:28 @@ -24,6 +24,9 @@ extern int io_error; @@ -60,7 +60,7 @@ can't say if I've left any cleanup/compatibility errors in the code. /** * Close all open sockets and files, allowing a (somewhat) graceful -@@ -98,6 +101,11 @@ void _exit_cleanup(int code, const char +@@ -97,6 +100,11 @@ void _exit_cleanup(int code, const char signal(SIGUSR1, SIG_IGN); signal(SIGUSR2, SIG_IGN); @@ -72,7 +72,7 @@ can't say if I've left any cleanup/compatibility errors in the code. if (verbose > 3) { rprintf(FINFO,"_exit_cleanup(code=%d, file=%s, line=%d): entered\n", code, file, line); ---- orig/clientserver.c 2004-07-15 02:21:10 +--- orig/clientserver.c 2004-07-17 15:20:05 +++ clientserver.c 2004-07-03 20:22:28 @@ -46,6 +46,9 @@ extern int io_timeout; extern int orig_umask; @@ -168,7 +168,7 @@ can't say if I've left any cleanup/compatibility errors in the code. /* this is called when a connection is established to a client and we want to start talking. The setup of the system is done from here */ -@@ -545,6 +594,20 @@ int start_daemon(int f_in, int f_out) +@@ -547,6 +596,20 @@ int start_daemon(int f_in, int f_out) return -1; } @@ -213,11 +213,11 @@ can't say if I've left any cleanup/compatibility errors in the code. AC_MSG_CHECKING([whether to call shutdown on all sockets]) case $host_os in *cygwin* ) AC_MSG_RESULT(yes) ---- orig/main.c 2004-07-15 17:02:03 +--- orig/main.c 2004-07-21 23:59:35 +++ main.c 2004-07-15 02:40:51 -@@ -54,6 +54,9 @@ extern int read_batch; - extern int write_batch; +@@ -55,6 +55,9 @@ extern int write_batch; extern int batch_fd; + extern int batch_gen_fd; extern int filesfrom_fd; +#ifdef HAVE_OPENSSL +extern int use_ssl; @@ -225,7 +225,7 @@ can't say if I've left any cleanup/compatibility errors in the code. extern pid_t cleanup_child_pid; extern char *files_from; extern char *remote_filesfrom_file; -@@ -748,18 +751,32 @@ static int start_client(int argc, char * +@@ -750,18 +753,32 @@ static int start_client(int argc, char * pid_t pid; int f_in,f_out; int rc; @@ -261,7 +261,7 @@ can't say if I've left any cleanup/compatibility errors in the code. p = strchr(host,'/'); if (p) { *p = 0; -@@ -807,12 +824,27 @@ static int start_client(int argc, char * +@@ -809,12 +826,27 @@ static int start_client(int argc, char * argv++; } else { /* source is local */ am_sender = 1; @@ -291,7 +291,7 @@ can't say if I've left any cleanup/compatibility errors in the code. p = strchr(host,'/'); if (p) { *p = 0; ---- orig/options.c 2004-07-16 20:07:22 +--- orig/options.c 2004-07-21 23:59:35 +++ options.c 2004-07-16 20:19:50 @@ -134,6 +134,14 @@ int quiet = 0; int always_checksum = 0; @@ -390,7 +390,7 @@ can't say if I've left any cleanup/compatibility errors in the code. default: /* A large opt value means that set_refuse_options() * turned this option off (opt-BASE is its index). */ -@@ -756,6 +789,17 @@ int parse_arguments(int *argc, const cha +@@ -761,6 +794,17 @@ int parse_arguments(int *argc, const cha if (do_progress && !verbose) verbose = 1; @@ -408,7 +408,7 @@ can't say if I've left any cleanup/compatibility errors in the code. if (bwlimit) { bwlimit_writemax = (size_t)bwlimit * 128; if (bwlimit_writemax < 512) ---- orig/rsync.h 2004-07-16 20:07:23 +--- orig/rsync.h 2004-07-20 21:36:08 +++ rsync.h 2004-07-03 20:22:28 @@ -32,6 +32,7 @@ diff --git a/time-limit.diff b/time-limit.diff index 0078960..ae2b948 100644 --- a/time-limit.diff +++ b/time-limit.diff @@ -3,7 +3,7 @@ to be simpler and more efficient by Wayne Davison. Do we need configure support for mktime()? ---- orig/io.c 2004-07-17 15:20:05 +--- orig/io.c 2004-07-21 23:59:35 +++ io.c 2004-07-17 15:28:36 @@ -49,6 +49,7 @@ extern int am_sender; extern int eol_nulls; @@ -13,7 +13,7 @@ Do we need configure support for mktime()? extern char *remote_filesfrom_file; extern struct stats stats; -@@ -134,17 +135,22 @@ static void check_timeout(void) +@@ -135,17 +136,22 @@ static void check_timeout(void) { time_t t; @@ -41,7 +41,7 @@ Do we need configure support for mktime()? if (!am_server && !am_daemon) { rprintf(FERROR, "io timeout after %d seconds - exiting\n", (int)(t-last_io)); ---- orig/options.c 2004-07-16 20:07:22 +--- orig/options.c 2004-07-21 23:59:35 +++ options.c 2004-07-15 17:06:09 @@ -96,6 +96,7 @@ int blocking_io = -1; int checksum_seed = 0; @@ -114,7 +114,7 @@ Do we need configure support for mktime()? default: /* A large opt value means that set_refuse_options() * turned this option off (opt-BASE is its index). */ -@@ -930,6 +966,15 @@ void server_options(char **args,int *arg +@@ -935,6 +971,15 @@ void server_options(char **args,int *arg args[ac++] = arg; } @@ -130,7 +130,7 @@ Do we need configure support for mktime()? if (backup_dir) { args[ac++] = "--backup-dir"; args[ac++] = backup_dir; ---- orig/rsync.yo 2004-07-16 20:07:23 +--- orig/rsync.yo 2004-07-20 21:36:08 +++ rsync.yo 2004-07-15 02:44:40 @@ -348,6 +348,8 @@ verb( --log-format=FORMAT log file transfers using specified format @@ -141,7 +141,7 @@ Do we need configure support for mktime()? --write-batch=FILE write a batch to FILE --read-batch=FILE read a batch from FILE --checksum-seed=NUM set block/file checksum seed -@@ -909,6 +911,19 @@ transfer was too fast, it will wait befo +@@ -912,6 +914,19 @@ transfer was too fast, it will wait befo result is an average transfer rate equaling the specified limit. A value of zero specifies no limit. @@ -159,7 +159,7 @@ Do we need configure support for mktime()? +number of minutes rsync will run for. + dit(bf(--write-batch=FILE)) Record a file that can later be applied to - anonther identical destination with --read-batch. See the "BATCH MODE" + another identical destination with --read-batch. See the "BATCH MODE" section for details. --- orig/util.c 2004-06-09 21:54:47 +++ util.c 2004-07-03 20:23:22 -- 2.34.1