-e escape rule

Samuel Williams space.ship.traveller at gmail.com
Fri Oct 21 00:20:41 UTC 2016


Hi Dave, thanks for point that out. I didn't realise there was a
detailed explanation of that field in the man page, I only saw the
summary. Yes, that clearly explains how it's supposed to work.

On 21 October 2016 at 01:46, Dave Howorth <dhoworth at mrc-lmb.cam.ac.uk> wrote:
> On 2016-10-20 10:24, Samuel Williams wrote:
>>
>> Hello,
>>
>> I'm using Ruby's Shellwords module, which generates a string from an
>> array, suitable for shell evaluation.
>>
>> Ruby's implementation prefers escaping whitespace with a backslash
>> rather than quotes. However, this appears to cause some kind of issue
>> in Rsync when it computes argv from -e option.
>
>
> The man page for rsync <https://download.samba.org/pub/rsync/rsync.html>
> explicitly forbids the use of backslashes:
>
> "Command-line arguments are permitted in COMMAND provided that COMMAND is
> presented to rsync as a single argument. You must use spaces (not tabs or
> other whitespace) to separate the command and args from each other, and you
> can use single- and/or double-quotes to preserve spaces in an argument (but
> not backslashes)."
>
> So I think the rest of the question is moot ...
>
> Cheers, Dave
>
>
>> Here is an example command generated by some Ruby code:
>>
>> rsync --archive --stats -e ssh\ -l\ backup\ -i\ /etc/synco/id_rsa\ -o\
>> ConnectTimeout\\\=60\ -o\ BatchMode\\\=yes --link-dest
>> ../../latest/etc/ /etc/
>> example.backup.server.com:/tank/backup/servers/blah/latest.snapshot/etc/
>>
>> We can check that something like this is valid:
>>
>> files% echo foo\ bar\\\=baz
>> foo bar\=baz             -- what Rsync should be receiving
>> files% echo foo bar\=baz
>> foo bar=baz              -- What Rsync should be executing
>>
>> However this gives me an error
>>
>> command-line: line 0: Bad configuration option: connecttimeout\\
>> rsync: connection unexpectedly closed (0 bytes received so far) [sender]
>> rsync error: unexplained error (code 255) at io.c(226) [sender=3.1.2]
>>
>> I think the problem here is the "ConnectTimeout\\\=60", in particular
>> how the equals symbol is escaped.
>>
>> I'm looking in the function:
>>
>> static pid_t do_cmd(char *cmd, char *machine, char *user, char
>> **remote_argv, int remote_argc,
>>    int *f_in_p, int *f_out_p)
>>
>> This function splits based purely on whitespace:
>>
>>      args[argc++] = t;
>>      while (*f != ' ' || in_quote) {
>>          // consume token...
>>
>> I feel that this function should also handle backslash escapes.
>>
>> I also checked using strace and it appears that this is the issue, but
>> I'm open to suggestions/ideas.
>>
>> Kind regards,
>> Samuel
>>
>
> --
> Please use reply-all for most replies to avoid omitting the mailing list.
> To unsubscribe or change options:
> https://lists.samba.org/mailman/listinfo/rsync
> Before posting, read: http://www.catb.org/~esr/faqs/smart-questions.html



More information about the rsync mailing list