From 371242e4e8150d4f9cc74cdf2d75d8250535175e Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Sun, 2 Mar 2014 16:37:44 -0800 Subject: Have receiver strip bogus leading slashes on filenames. If the receiver is running without --relative, it shouldn't be receiving any filenames with a leading slash. To ensure that the sender doesn't try to pull a fast one on us, we now make flist_sort_and_clean() strip a leading slash even if --relative isn't specified. --- flist.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/flist.c b/flist.c index 6f2a926e..a0f05dd0 100644 --- a/flist.c +++ b/flist.c @@ -2553,7 +2553,11 @@ struct file_list *recv_file_list(int f) rprintf(FINFO, "[%s] flist_eof=1\n", who_am_i()); } - flist_sort_and_clean(flist, relative_paths); + /* The --relative option sends paths with a leading slash, so we need + * to specify the strip_root option here. We also want to ensure that + * a non-relative transfer doesn't have any leading slashes or it might + * cause the client a security issue. */ + flist_sort_and_clean(flist, 1); if (protocol_version < 30) { /* Recv the io_error flag */ -- cgit v1.2.1