X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/e7c67065c060d500eba8d073da9568db2c658aad..6eee13cf580ef3270539098eead19259192aa497:/compat.c?ds=sidebyside diff --git a/compat.c b/compat.c index 475a1fe4..b090c2ad 100644 --- a/compat.c +++ b/compat.c @@ -23,12 +23,15 @@ #include "rsync.h" int remote_protocol = 0; +int flist_extra_cnt = 0; /* count of file-list extras that everyone gets */ extern int verbose; extern int am_server; +extern int am_sender; extern int inplace; extern int fuzzy_basis; extern int read_batch; +extern int max_delete; extern int checksum_seed; extern int basis_dir_cnt; extern int prune_empty_dirs; @@ -37,6 +40,15 @@ extern char *dest_option; void setup_protocol(int f_out,int f_in) { + if (am_sender) + flist_extra_cnt += PTR_EXTRA_LEN; + else + flist_extra_cnt++; + if (preserve_uid) + preserve_uid = ++flist_extra_cnt; + if (preserve_gid) + preserve_gid = ++flist_extra_cnt; + if (remote_protocol == 0) { if (!read_batch) write_int(f_out, protocol_version); @@ -75,6 +87,16 @@ void setup_protocol(int f_out,int f_in) exit_cleanup(RERR_PROTOCOL); } + if (protocol_version < 30) { + if (max_delete == 0 && am_sender) { + rprintf(FERROR, + "--max-delete=0 requires protocol 30 or higher" + " (negotiated %d).\n", + protocol_version); + exit_cleanup(RERR_PROTOCOL); + } + } + if (protocol_version < 29) { if (fuzzy_basis) { rprintf(FERROR,