static void start_filelist_progress(char *kind)
{
- rprintf(FINFO, "%s ... ", kind);
+ rprintf(FCLIENT, "%s ... ", kind);
if (verbose > 1 || do_progress)
- rprintf(FINFO, "\n");
+ rprintf(FCLIENT, "\n");
rflush(FINFO);
}
static void emit_filelist_progress(int count)
{
- rprintf(FINFO, " %d files...\r", count);
+ rprintf(FCLIENT, " %d files...\r", count);
}
static void maybe_emit_filelist_progress(int count)
static int readlink_stat(const char *path, STRUCT_STAT *stp, char *linkbuf)
{
#ifdef SUPPORT_LINKS
- if (copy_links)
- return do_stat(path, stp);
if (link_stat(path, stp, copy_dirlinks) < 0)
return -1;
if (S_ISLNK(stp->st_mode)) {
rprintf(FINFO,"copying unsafe symlink \"%s\" -> \"%s\"\n",
path, linkbuf);
}
- return do_stat(path, stp);
+ return safe_stat(path, stp);
}
}
return 0;
{
#ifdef SUPPORT_LINKS
if (copy_links)
- return do_stat(path, stp);
+ return safe_stat(path, stp);
if (do_lstat(path, stp) < 0)
return -1;
if (follow_dirlinks && S_ISLNK(stp->st_mode)) {
STRUCT_STAT st;
- if (do_stat(path, &st) == 0 && S_ISDIR(st.st_mode))
+ if (safe_stat(path, &st) == 0 && S_ISDIR(st.st_mode))
*stp = st;
}
return 0;
flist->malloced);
if (verbose >= 2 && flist->malloced != FLIST_START) {
- rprintf(FINFO, "[%s] expand file_list to %.0f bytes, did%s move\n",
+ rprintf(FCLIENT, "[%s] expand file_list to %.0f bytes, did%s move\n",
who_am_i(),
(double)sizeof flist->files[0] * flist->malloced,
(new_ptr == flist->files) ? " not" : "");
clean_fname(thisname, 0);
if (sanitize_paths)
- sanitize_path(thisname, thisname, "", 0);
+ sanitize_path(thisname, thisname, "", 0, NULL);
if ((basename = strrchr(thisname, '/')) != NULL) {
dirname_len = ++basename - thisname; /* counts future '\0' */
}
clean_fname(thisname, 0);
if (sanitize_paths)
- sanitize_path(thisname, thisname, "", 0);
+ sanitize_path(thisname, thisname, "", 0, NULL);
memset(sum, 0, SUM_LENGTH);
int save_mode = file->mode;
file->mode = S_IFDIR; /* Find a directory with our name. */
if (flist_find(the_file_list, file) >= 0
- && do_stat(thisname, &st2) == 0 && S_ISDIR(st2.st_mode)) {
+ && safe_stat(thisname, &st2) == 0 && S_ISDIR(st2.st_mode)) {
file->modtime = st2.st_mtime;
file->length = st2.st_size;
file->mode = st2.st_mode;
int64 start_write;
int use_ff_fd = 0;
+ rprintf(FLOG, "building file list\n");
if (show_filelist_p())
start_filelist_progress("building file list");
io_start_buffering_out();
if (filesfrom_fd >= 0) {
+ if (sanitize_paths)
+ die_on_unsafe_path(argv[0], 0);
if (argv[0] && !push_dir(argv[0])) {
rsyserr(FERROR, errno, "push_dir %s failed",
full_fname(argv[0]));
if (use_ff_fd) {
if (read_filesfrom_line(filesfrom_fd, fbuf) == 0)
break;
- sanitize_path(fbuf, fbuf, "", 0);
+ sanitize_path(fbuf, fbuf, "", 0, NULL);
} else {
if (argc-- == 0)
break;
strlcpy(fbuf, *argv++, MAXPATHLEN);
if (sanitize_paths)
- sanitize_path(fbuf, fbuf, "", 0);
+ sanitize_path(fbuf, fbuf, "", 0, NULL);
}
len = strlen(fbuf);
&& (len == 1 || fbuf[len-2] == '/');
}
+ if (sanitize_paths)
+ die_on_unsafe_path(fbuf, 1);
if (link_stat(fbuf, &st, copy_dirlinks) != 0) {
io_error |= IOERR_GENERAL;
rsyserr(FERROR, errno, "link_stat %s failed",
unsigned short flags;
int64 start_read;
+ rprintf(FLOG, "receiving file list\n");
if (show_filelist_p())
start_filelist_progress("receiving file list");