diff options
| author | Wayne Davison <wayned@samba.org> | 2006-04-28 16:58:20 +0000 |
|---|---|---|
| committer | Wayne Davison <wayned@samba.org> | 2006-04-28 16:58:20 +0000 |
| commit | 7c58c991840380a34ae9b4cd7befa7da4540683b (patch) | |
| tree | 8f155b7d0f60bf67e991d34e1af9c37baa7fd5f8 /main.c | |
| parent | ad77db8b713d194c46f8cee1781f7a5ab7635c7e (diff) | |
| download | android_external_rsync-7c58c991840380a34ae9b4cd7befa7da4540683b.tar.gz android_external_rsync-7c58c991840380a34ae9b4cd7befa7da4540683b.tar.bz2 android_external_rsync-7c58c991840380a34ae9b4cd7befa7da4540683b.zip | |
We sanitize the --*-dest args here so they can be relative to the
destination directory.
Diffstat (limited to 'main.c')
| -rw-r--r-- | main.c | 15 |
1 files changed, 15 insertions, 0 deletions
@@ -49,6 +49,8 @@ extern int preserve_hard_links; extern int protocol_version; extern int recurse; extern int relative_paths; +extern int sanitize_paths; +extern int module_id; extern int rsync_port; extern int whole_file; extern int read_batch; @@ -59,10 +61,13 @@ extern int filesfrom_fd; extern pid_t cleanup_child_pid; extern struct stats stats; extern char *filesfrom_host; +extern char *basis_dir[]; 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; @@ -785,6 +790,16 @@ static void do_server_recv(int f_in, int f_out, int argc,char *argv[]) if (argc > 0) local_name = get_local_name(flist,argv[0]); + /* 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); + } + exit_code = do_recv(f_in,f_out,flist,local_name); exit_cleanup(exit_code); } |
