From 2b2a47383124f9b62834778f61d2ccb1e55f6a0d Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Wed, 30 Dec 2009 12:02:52 -0800 Subject: [PATCH 1/1] Add understanding of RSYNC_PROTECT_ARGS environment var. --- NEWS | 14 +++++++------- options.c | 11 ++++++++--- rsync.yo | 19 ++++++++++++++++++- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/NEWS b/NEWS index d707a401..4b38c7c1 100644 --- a/NEWS +++ b/NEWS @@ -33,16 +33,13 @@ Changes since 3.0.4: - Changed the way --progress overwrites its prior output in order to make it nearly impossible for the progress to get overwritten by an error. - - An absolute-path filter rule (i.e. with a '/' modifier) no longer loses - its modifier when sending the filter rules to the remote rsync. - - Fixed some rare bugs in --iconv processing that might cause a multibyte character to get translated incorrectly. - - Improved abnormal-exit error messages. This should help the client side - to receive errors from the server when it is exiting abnormally, and - should also avoid dying with an "connection unexpectedly closed" exit - when the closed connection is really expected. + - Improved the propagation of abnormal-exit error messages. This should + help the client side to receive errors from the server when it is exiting + abnormally, and should also avoid dying with an "connection unexpectedly + closed" exit when the closed connection is really expected. ENHANCEMENTS: @@ -96,6 +93,9 @@ Changes since 3.0.4: - Added a few more default suffixes for the "dont compress" settings. + - Added the checking of the RSYNC_PROTECT_ARGS environment variable to allow + the default for the --protect-args command-line option to be overridden. + - Added some Solaris xattr code. EXTRAS: diff --git a/options.c b/options.c index fa3bdcd6..580f86f8 100644 --- a/options.c +++ b/options.c @@ -1780,12 +1780,17 @@ int parse_arguments(int *argc_p, const char ***argv_p) } if (protect_args < 0) { + if (am_server) + protect_args = 0; + else if ((arg = getenv("RSYNC_PROTECT_ARGS")) != NULL && *arg) + protect_args = atoi(arg) ? 1 : 0; + else { #ifdef RSYNC_USE_PROTECTED_ARGS - if (!am_server) protect_args = 1; - else -#endif +#else protect_args = 0; +#endif + } } if (human_readable > 1 && argc == 2 && !am_server) { diff --git a/rsync.yo b/rsync.yo index 962444bf..54cfe110 100644 --- a/rsync.yo +++ b/rsync.yo @@ -1584,6 +1584,20 @@ side will also be translated from the local to the remote character-set. The translation happens before wild-cards are expanded. See also the bf(--files-from) option. +You may also control this option via the RSYNC_PROTECT_ARGS environment +variable. If this variable has a non-zero value, this option will be enabled +by default, otherwise it will be disabled by default. Either state is +overridden by a manually specified positive or negative version of this option +(note that bf(--no-s) and bf(--no-protect-args) are the negative versions). +Since this option was first introduced in 3.0.0, you'll need to make sure it's +disabled if you ever need to interact with a remote rsync that is older than +that. + +Rsync can also be configured (at build time) to have this option enabled by +default (with is overridden by both the environment and the command-line). +This option will eventually become a new default setting at some +as-yet-undetermined point in the future. + dit(bf(-T, --temp-dir=DIR)) This option instructs rsync to use DIR as a scratch directory when creating temporary copies of the files transferred on the receiving side. The default behavior is to create each temporary @@ -3129,7 +3143,10 @@ dit(bf(CVSIGNORE)) The CVSIGNORE environment variable supplements any ignore patterns in .cvsignore files. See the bf(--cvs-exclude) option for more details. dit(bf(RSYNC_ICONV)) Specify a default bf(--iconv) setting using this -environment variable. +environment variable. (First supported in 3.0.0.) +dit(bf(RSYNC_PROTECT_ARGS)) Specify a non-zero numeric value if you want the +bf(--protect-args) option to be enabled by default, or a zero value to make +sure that it is disabled by default. (First supported in 3.1.0.) dit(bf(RSYNC_RSH)) The RSYNC_RSH environment variable allows you to override the default shell used as the transport for rsync. Command line options are permitted after the command name, just as in the bf(-e) option. -- 2.34.1