X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/7c58c991840380a34ae9b4cd7befa7da4540683b..bdac7621eea8aaf7330174f787f68c67215ed026:/main.c diff --git a/main.c b/main.c index 75a3ca04..f5b9312a 100644 --- a/main.c +++ b/main.c @@ -50,6 +50,7 @@ extern int protocol_version; extern int recurse; extern int relative_paths; extern int sanitize_paths; +extern int curr_dir_depth; extern int module_id; extern int rsync_port; extern int whole_file; @@ -66,8 +67,6 @@ extern char *rsync_path; extern char *shell_cmd; extern char *batch_name; -extern char curr_dir[MAXPATHLEN]; - int local_server = 0; mode_t orig_umask = 0; struct file_list *the_file_list; @@ -472,7 +471,7 @@ static char *get_local_name(struct file_list *flist, char *dest_path) * it and use mode 1. If there is something other than a directory * at the destination path, we must be transferring one file * (anything at the destination will be overwritten). */ - if (do_stat(dest_path, &st) == 0) { + if (safe_stat(dest_path, &st) == 0) { if (S_ISDIR(st.st_mode)) { if (!push_dir(dest_path)) { rsyserr(FERROR, errno, "push_dir#1 %s failed", @@ -793,11 +792,9 @@ static void do_server_recv(int f_in, int f_out, int argc,char *argv[]) /* Now that we know what our destination directory turned out to be, * we can sanitize the --link-/copy-/compare-dest args correctly. */ if (sanitize_paths) { - char *dest_path = curr_dir + strlen(lp_path(module_id)); - int dest_depth = count_dir_elements(dest_path); char **dir; for (dir = basis_dir; *dir; dir++) - *dir = sanitize_path(NULL, *dir, NULL, dest_depth); + *dir = sanitize_path(NULL, *dir, NULL, curr_dir_depth, NULL); } exit_code = do_recv(f_in,f_out,flist,local_name);