X-Git-Url: https://mattmccutchen.net/rsync/rsync-patches.git/blobdiff_plain/fc5573623194fab2a331d1ffc8d284c9e25e06e7..5214a41bbae94607b196b199b483710e1babf292:/db.diff diff --git a/db.diff b/db.diff index 65ba736..6320cba 100644 --- a/db.diff +++ b/db.diff @@ -23,8 +23,8 @@ To use this patch, run these commands for a successful build: ./configure (optional if already run) make +based-on: 24079e988fc31af4eba56cd2701fdc5a4154980d diff --git a/Makefile.in b/Makefile.in -index feacb90..f9da8eb 100644 --- a/Makefile.in +++ b/Makefile.in @@ -36,7 +36,7 @@ ZLIBOBJ=zlib/deflate.o zlib/inffast.o zlib/inflate.o zlib/inftrees.o \ @@ -37,7 +37,6 @@ index feacb90..f9da8eb 100644 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 \ diff --git a/checksum.c b/checksum.c -index 811b5b6..a7617af 100644 --- a/checksum.c +++ b/checksum.c @@ -23,6 +23,7 @@ @@ -81,18 +80,17 @@ index 811b5b6..a7617af 100644 unmap_file(buf); } diff --git a/cleanup.c b/cleanup.c -index 19ef072..ca46868 100644 --- a/cleanup.c +++ b/cleanup.c -@@ -25,6 +25,7 @@ - extern int am_server; - extern int am_daemon; +@@ -27,6 +27,7 @@ extern int am_daemon; + extern int am_sender; + extern int am_generator; extern int io_error; +extern int use_db; extern int keep_partial; extern int got_xfer_error; - extern int output_needs_newline; -@@ -130,6 +131,12 @@ NORETURN void _exit_cleanup(int code, const char *file, int line) + extern int protocol_version; +@@ -139,6 +140,12 @@ NORETURN void _exit_cleanup(int code, const char *file, int line) /* FALLTHROUGH */ #include "case_N.h" @@ -106,7 +104,6 @@ index 19ef072..ca46868 100644 int status; int pid = wait_process(cleanup_child_pid, &status, WNOHANG); diff --git a/clientserver.c b/clientserver.c -index b6afe00..37cad54 100644 --- a/clientserver.c +++ b/clientserver.c @@ -42,13 +42,16 @@ extern int numeric_ids; @@ -126,7 +123,7 @@ index b6afe00..37cad54 100644 extern char *bind_address; extern char *config_file; extern char *logfile_format; -@@ -648,6 +651,9 @@ static int rsync_module(int f_in, int f_out, int i, const char *addr, const char +@@ -667,6 +670,9 @@ static int rsync_module(int f_in, int f_out, int i, const char *addr, const char log_init(1); @@ -135,8 +132,8 @@ index b6afe00..37cad54 100644 + #ifdef HAVE_PUTENV if (*lp_prexfer_exec(i) || *lp_postxfer_exec(i)) { - char *modname, *modpath, *hostaddr, *hostname, *username; -@@ -856,6 +862,10 @@ static int rsync_module(int f_in, int f_out, int i, const char *addr, const char + int status; +@@ -862,6 +868,10 @@ static int rsync_module(int f_in, int f_out, int i, const char *addr, const char am_server = 1; /* Don't let someone try to be tricky. */ quiet = 0; @@ -148,10 +145,9 @@ index b6afe00..37cad54 100644 ignore_errors = 1; if (write_batch < 0) diff --git a/configure.in b/configure.in -index bc7d4a7..43d51ff 100644 --- a/configure.in +++ b/configure.in -@@ -312,7 +312,7 @@ AC_CHECK_HEADERS(sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h \ +@@ -331,7 +331,7 @@ AC_CHECK_HEADERS(sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h \ sys/un.h sys/attr.h mcheck.h arpa/inet.h arpa/nameser.h locale.h \ netdb.h malloc.h float.h limits.h iconv.h libcharset.h langinfo.h \ sys/acl.h acl/libacl.h attr/xattr.h sys/xattr.h sys/extattr.h \ @@ -160,7 +156,7 @@ index bc7d4a7..43d51ff 100644 AC_HEADER_MAJOR AC_CACHE_CHECK([if makedev takes 3 args],rsync_cv_MAKEDEV_TAKES_3_ARGS,[ -@@ -977,6 +977,29 @@ if test x"$enable_acl_support" = x"no" -o x"$enable_xattr_support" = x"no" -o x" +@@ -1013,6 +1013,29 @@ if test x"$enable_acl_support" = x"no" -o x"$enable_xattr_support" = x"no" -o x" fi fi @@ -192,10 +188,9 @@ index bc7d4a7..43d51ff 100644 AC_DEFINE(FORCE_FD_ZERO_MEMSET, 1, [Used to make "checker" understand that FD_ZERO() clears memory.]) diff --git a/db.c b/db.c new file mode 100644 -index 0000000..6855488 --- /dev/null +++ b/db.c -@@ -0,0 +1,566 @@ +@@ -0,0 +1,567 @@ +/* + * Routines to access extended file info via DB. + * @@ -217,6 +212,7 @@ index 0000000..6855488 + +#include "rsync.h" +#include "ifuncs.h" ++#include "itypes.h" + +#if defined HAVE_MYSQL_MYSQL_H && defined HAVE_LIBMYSQLCLIENT +#define USE_MYSQL @@ -763,10 +759,9 @@ index 0000000..6855488 + return 0; +} diff --git a/flist.c b/flist.c -index 09b4fc5..8d280e9 100644 --- a/flist.c +++ b/flist.c -@@ -54,6 +54,7 @@ extern int preserve_specials; +@@ -53,6 +53,7 @@ extern int preserve_specials; extern int missing_args; extern int uid_ndx; extern int gid_ndx; @@ -774,7 +769,7 @@ index 09b4fc5..8d280e9 100644 extern int eol_nulls; extern int relative_paths; extern int implied_dirs; -@@ -1267,11 +1268,8 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, +@@ -1307,11 +1308,8 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, extra_len += EXTRA_LEN; #endif @@ -788,7 +783,7 @@ index 09b4fc5..8d280e9 100644 #if EXTRA_ROUNDING > 0 if (extra_len & (EXTRA_ROUNDING * EXTRA_LEN)) -@@ -1347,8 +1345,12 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, +@@ -1394,8 +1392,12 @@ struct file_struct *make_file(const char *fname, struct file_list *flist, return NULL; } @@ -803,7 +798,7 @@ index 09b4fc5..8d280e9 100644 if (unsort_ndx) F_NDX(file) = stats.num_dirs; -@@ -2010,6 +2012,9 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) +@@ -2060,6 +2062,9 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) | (eol_nulls || reading_remotely ? RL_EOL_NULLS : 0); int implied_dot_dir = 0; @@ -814,7 +809,6 @@ index 09b4fc5..8d280e9 100644 if (show_filelist_p()) start_filelist_progress("building file list"); diff --git a/generator.c b/generator.c -index 12007a1..315463f 100644 --- a/generator.c +++ b/generator.c @@ -60,6 +60,7 @@ extern int human_readable; @@ -835,7 +829,7 @@ index 12007a1..315463f 100644 return memcmp(sum, F_SUM(file), checksum_len) == 0; } -@@ -2022,6 +2024,9 @@ void generate_files(int f_out, const char *local_name) +@@ -2076,6 +2078,9 @@ void generate_files(int f_out, const char *local_name) : "enabled"); } @@ -846,10 +840,9 @@ index 12007a1..315463f 100644 * waiting for the other 2 processes to do their thing, we don't want * to exit on a timeout. If the data stops flowing, the receiver will diff --git a/loadparm.c b/loadparm.c -index 8e48e6d..e6eaec8 100644 --- a/loadparm.c +++ b/loadparm.c -@@ -107,6 +107,7 @@ typedef struct { +@@ -108,6 +108,7 @@ typedef struct { char *auth_users; char *charset; char *comment; @@ -857,7 +850,7 @@ index 8e48e6d..e6eaec8 100644 char *dont_compress; char *exclude; char *exclude_from; -@@ -181,6 +182,7 @@ static const all_vars Defaults = { +@@ -182,6 +183,7 @@ static const all_vars Defaults = { /* auth_users; */ NULL, /* charset; */ NULL, /* comment; */ NULL, @@ -865,7 +858,7 @@ index 8e48e6d..e6eaec8 100644 /* dont_compress; */ DEFAULT_DONT_COMPRESS, /* exclude; */ NULL, /* exclude_from; */ NULL, -@@ -316,6 +318,7 @@ static struct parm_struct parm_table[] = +@@ -317,6 +319,7 @@ static struct parm_struct parm_table[] = {"auth users", P_STRING, P_LOCAL, &Vars.l.auth_users, NULL,0}, {"charset", P_STRING, P_LOCAL, &Vars.l.charset, NULL,0}, {"comment", P_STRING, P_LOCAL, &Vars.l.comment, NULL,0}, @@ -873,7 +866,7 @@ index 8e48e6d..e6eaec8 100644 {"dont compress", P_STRING, P_LOCAL, &Vars.l.dont_compress, NULL,0}, {"exclude from", P_STRING, P_LOCAL, &Vars.l.exclude_from, NULL,0}, {"exclude", P_STRING, P_LOCAL, &Vars.l.exclude, NULL,0}, -@@ -396,6 +399,7 @@ FN_GLOBAL_INTEGER(lp_rsync_port, &Vars.g.rsync_port) +@@ -447,6 +450,7 @@ FN_GLOBAL_INTEGER(lp_rsync_port, &Vars.g.rsync_port) FN_LOCAL_STRING(lp_auth_users, auth_users) FN_LOCAL_STRING(lp_charset, charset) FN_LOCAL_STRING(lp_comment, comment) @@ -882,10 +875,9 @@ index 8e48e6d..e6eaec8 100644 FN_LOCAL_STRING(lp_exclude, exclude) FN_LOCAL_STRING(lp_exclude_from, exclude_from) diff --git a/main.c b/main.c -index 2ef2f47..ac88e12 100644 --- a/main.c +++ b/main.c -@@ -49,6 +49,7 @@ extern int copy_unsafe_links; +@@ -51,6 +51,7 @@ extern int copy_unsafe_links; extern int keep_dirlinks; extern int preserve_hard_links; extern int protocol_version; @@ -893,7 +885,7 @@ index 2ef2f47..ac88e12 100644 extern int file_total; extern int recurse; extern int xfer_dirs; -@@ -74,6 +75,7 @@ extern char *filesfrom_host; +@@ -80,6 +81,7 @@ extern char *filesfrom_host; extern char *partial_dir; extern char *dest_option; extern char *rsync_path; @@ -901,7 +893,7 @@ index 2ef2f47..ac88e12 100644 extern char *shell_cmd; extern char *batch_name; extern char *password_file; -@@ -1565,6 +1567,9 @@ int main(int argc,char *argv[]) +@@ -1593,6 +1595,9 @@ int main(int argc,char *argv[]) exit_cleanup(RERR_SYNTAX); } @@ -912,7 +904,6 @@ index 2ef2f47..ac88e12 100644 set_nonblocking(STDIN_FILENO); set_nonblocking(STDOUT_FILENO); diff --git a/options.c b/options.c -index e7c6c61..d47cb7c 100644 --- a/options.c +++ b/options.c @@ -92,6 +92,7 @@ int use_qsort = 0; @@ -923,7 +914,7 @@ index e7c6c61..d47cb7c 100644 int eol_nulls = 0; int protect_args = 0; int human_readable = 1; -@@ -566,6 +567,7 @@ static void print_rsync_version(enum logcode f) +@@ -567,6 +568,7 @@ static void print_rsync_version(enum logcode f) char const *links = "no "; char const *iconv = "no "; char const *ipv6 = "no "; @@ -931,8 +922,8 @@ index e7c6c61..d47cb7c 100644 STRUCT_STAT *dumstat; #if SUBPROTOCOL_VERSION != 0 -@@ -599,6 +601,11 @@ static void print_rsync_version(enum logcode f) - #if defined HAVE_LUTIMES && defined HAVE_UTIMES +@@ -600,6 +602,11 @@ static void print_rsync_version(enum logcode f) + #ifdef CAN_SET_SYMLINK_TIMES symtimes = ""; #endif +#if defined HAVE_MYSQL_MYSQL_H && defined HAVE_LIBMYSQLCLIENT @@ -943,7 +934,7 @@ index e7c6c61..d47cb7c 100644 rprintf(f, "%s version %s protocol version %d%s\n", RSYNC_NAME, RSYNC_VERSION, PROTOCOL_VERSION, subprotocol); -@@ -612,8 +619,8 @@ static void print_rsync_version(enum logcode f) +@@ -613,8 +620,8 @@ static void print_rsync_version(enum logcode f) (int)(sizeof (int64) * 8)); rprintf(f, " %ssocketpairs, %shardlinks, %ssymlinks, %sIPv6, batchfiles, %sinplace,\n", got_socketpair, hardlinks, links, ipv6, have_inplace); @@ -954,7 +945,7 @@ index e7c6c61..d47cb7c 100644 #ifdef MAINTAINER_MODE rprintf(f, "Panic Action: \"%s\"\n", get_panic_action()); -@@ -661,6 +668,7 @@ void usage(enum logcode F) +@@ -662,6 +669,7 @@ void usage(enum logcode F) rprintf(F," -q, --quiet suppress non-error messages\n"); rprintf(F," --no-motd suppress daemon-mode MOTD (see manpage caveat)\n"); rprintf(F," -c, --checksum skip based on checksum, not mod-time & size\n"); @@ -962,7 +953,7 @@ index e7c6c61..d47cb7c 100644 rprintf(F," -a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)\n"); rprintf(F," --no-OPTION turn off an implied OPTION (e.g. --no-D)\n"); rprintf(F," -r, --recursive recurse into directories\n"); -@@ -933,6 +941,7 @@ static struct poptOption long_options[] = { +@@ -934,6 +942,7 @@ static struct poptOption long_options[] = { {"checksum", 'c', POPT_ARG_VAL, &always_checksum, 1, 0, 0 }, {"no-checksum", 0, POPT_ARG_VAL, &always_checksum, 0, 0, 0 }, {"no-c", 0, POPT_ARG_VAL, &always_checksum, 0, 0, 0 }, @@ -971,7 +962,6 @@ index e7c6c61..d47cb7c 100644 {"compare-dest", 0, POPT_ARG_STRING, 0, OPT_COMPARE_DEST, 0, 0 }, {"copy-dest", 0, POPT_ARG_STRING, 0, OPT_COPY_DEST, 0, 0 }, diff --git a/pipe.c b/pipe.c -index a33117c..2f6aa21 100644 --- a/pipe.c +++ b/pipe.c @@ -27,6 +27,9 @@ extern int am_server; @@ -1004,7 +994,6 @@ index a33117c..2f6aa21 100644 if (dup2(to_child_pipe[0], STDIN_FILENO) < 0 || diff --git a/rsync.yo b/rsync.yo -index 941f7a5..1b81189 100644 --- a/rsync.yo +++ b/rsync.yo @@ -323,6 +323,7 @@ to the detailed description below for a complete description. verb( @@ -1015,9 +1004,9 @@ index 941f7a5..1b81189 100644 -a, --archive archive mode; equals -rlptgoD (no -H,-A,-X) --no-OPTION turn off an implied OPTION (e.g. --no-D) -r, --recursive recurse into directories -@@ -584,6 +585,47 @@ checksum that is generated as the file is transferred, but that - automatic after-the-transfer verification has nothing to do with this - option's before-the-transfer "Does this file need to be updated?" check. +@@ -587,6 +588,47 @@ option's before-the-transfer "Does this file need to be updated?" check. + For protocol 30 and beyond (first supported in 3.0.0), the checksum used is + MD5. For older protocols, the checksum used is MD4. +dit(bf(--db=CONFIG_FILE)) This option specifies a CONFIG_FILE to read +that holds connection details for a database of checksum information. @@ -1064,10 +1053,9 @@ index 941f7a5..1b81189 100644 way of saying you want recursion and want to preserve almost everything (with -H being a notable omission). diff --git a/rsyncd.conf.yo b/rsyncd.conf.yo -index d4978cd..68c588c 100644 --- a/rsyncd.conf.yo +++ b/rsyncd.conf.yo -@@ -281,6 +281,18 @@ is daemon. This setting has no effect if the "log file" setting is a +@@ -301,6 +301,18 @@ is daemon. This setting has no effect if the "log file" setting is a non-empty string (either set in the per-modules settings, or inherited from the global settings). @@ -1088,7 +1076,6 @@ index d4978cd..68c588c 100644 generate (since the information goes into the log file). The default is 1, diff --git a/support/rsyncdb b/support/rsyncdb new file mode 100755 -index 0000000..801068c --- /dev/null +++ b/support/rsyncdb @@ -0,0 +1,331 @@