Add understanding of RSYNC_PROTECT_ARGS environment var.
authorWayne Davison <wayned@samba.org>
Wed, 30 Dec 2009 20:02:52 +0000 (12:02 -0800)
committerWayne Davison <wayned@samba.org>
Wed, 30 Dec 2009 20:29:47 +0000 (12:29 -0800)
NEWS
options.c
rsync.yo

diff --git a/NEWS b/NEWS
index d707a40..4b38c7c 100644 (file)
--- 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:
index fa3bdcd..580f86f 100644 (file)
--- 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) {
index 962444b..54cfe11 100644 (file)
--- 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.