X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/298c10d5bb83a6c3fc1ee6583383c6ae26e12751..72914a606ec66f61678c6d077e515f08908e76a3:/rsync.c diff --git a/rsync.c b/rsync.c index 96818277..5ce968c9 100644 --- a/rsync.c +++ b/rsync.c @@ -441,6 +441,15 @@ static void recv_generator(char *fname,struct file_list *flist,int i,int f_out) #if SUPPORT_LINKS char lnk[MAXPATHLEN]; int l; + extern int safe_symlinks; + + if (safe_symlinks && unsafe_symlink(file->link, fname)) { + if (verbose) { + rprintf(FINFO,"ignoring unsafe symlink %s -> %s\n", + fname,file->link); + } + return; + } if (statret == 0) { l = readlink(fname,lnk,MAXPATHLEN-1); if (l > 0) { @@ -457,9 +466,10 @@ static void recv_generator(char *fname,struct file_list *flist,int i,int f_out) fname,file->link,strerror(errno)); } else { set_perms(fname,file,NULL,0); - if (verbose) + if (verbose) { rprintf(FINFO,"%s -> %s\n", fname,file->link); + } } #endif return; @@ -845,7 +855,7 @@ static void finish_transfer(char *fname, char *fnametmp, struct file_struct *fil if (errno == EXDEV) { /* rename failed on cross-filesystem link. Copy the file instead. */ - if (copy_file(fnametmp,fname, file->mode)) { + if (copy_file(fnametmp,fname, file->mode & ACCESSPERMS)) { rprintf(FERROR,"copy %s -> %s : %s\n", fnametmp,fname,strerror(errno)); } else {