backslash prior to whitespace without treating it as escaped
whitespace (e.g. if we receive "foo\\ bar", it is two args,
while "foo\ bar" and "foo\\\ bar" are each just one).
- Made the user-config sections easier to find.
- Default to running a fully-specified rsync executable so that there
are not PATH surprises.
- A few minor tweaks to the arg-checking code to make it clearer without
actually changing its logic.
can't fool us into thinking we're the sender by using a filename
of --sender (or similar ploy).
- Make sure that our '..' check can't be fooled by sly backslashing.
- Tweaked some comments.
- Fully parse all legal options that might come from a stock rsync and
validate/restrict any option's args (previously we rejected options
with args).
- Made it easy to disable specific options.
- Properly handle a multi-arg copy's multiple args.
- Make sure that the restricted dir actually exists and we can chdir
to it.
- Just reject any dangerous args that have .. in them instead of trying
to munge them.
- We don't treat single-or double-quotes specially, just backslash-
escaped characters.
- Turn on strict mode.
- Use the array-arg version of exec() so that we don't spawn a shell.
- Use File::Glob to glob wildcards in args.
- Tweaked the log-file format so that it logs the modified command
without any "OK" suffix.
debugging on failures.
- Added the function filter_outfile() and used it in place of the
various output-filtering commands.
- Use the sed rules for filtering the combination of --itemized
output with double-verbose output so that we're sure there's no
superfluous lines being output (which the old grep filtering
would have ignored).
need to remove any old symlink/device/file to create the backup.
Also fixed a couple minor logic errors in the handling of symlinks
and devices. NOTE: the code still doesn't handle the changing of
a name from a dir to a non-dir or visa versa (which is a very old
deficiency in the code).