diff options
author | Jeriko One <jeriko.one@gmx.us> | 2017-11-20 14:42:30 -0800 |
---|---|---|
committer | Wayne Davison <wayned@samba.org> | 2018-01-09 17:51:30 -0800 |
commit | 7706303828fcde524222babb2833864a4bd09e07 (patch) | |
tree | eb67b7e243bbb8b7e07f53b11aff467d590e39ab | |
parent | f5e8a17e093065fb20fea00a29540fe2c7896441 (diff) | |
download | rsync-7706303828fcde524222babb2833864a4bd09e07.tar.gz |
Ignore --protect-args when already sent by client
In parse_arguments when --protect-args is encountered the function exits
early. The caller is expected to check protect_args, and recall
parse_arguments setting protect_args to 2. This patch prevents the
client from resetting protect_args during the second pass of
parse_arguments. This prevents parse_arguments returning early the
second time before it's able to sanitize the arguments it received.
-rw-r--r-- | options.c | 5 |
1 files changed, 5 insertions, 0 deletions
@@ -1313,6 +1313,7 @@ int parse_arguments(int *argc_p, const char ***argv_p) const char *arg, **argv = *argv_p; int argc = *argc_p; int opt; + int orig_protect_args = protect_args; if (ref && *ref) set_refuse_options(ref); @@ -1934,6 +1935,10 @@ int parse_arguments(int *argc_p, const char ***argv_p) if (fuzzy_basis > 1) fuzzy_basis = basis_dir_cnt + 1; + /* Don't let the client reset protect_args if it was already processed */ + if (orig_protect_args == 2 && am_server) + protect_args = orig_protect_args; + if (protect_args == 1 && am_server) return 1; |