Matt McCutchen's Web Site
/
rsync
/
rsync.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
cb15269
)
Call the new die_on_unsafe_path() function in a few places.
author
Wayne Davison
<wayned@samba.org>
Fri, 5 May 2006 05:57:48 +0000
(
05:57
+0000)
committer
Wayne Davison
<wayned@samba.org>
Fri, 5 May 2006 05:57:48 +0000
(
05:57
+0000)
main.c
patch
|
blob
|
blame
|
history
diff --git
a/main.c
b/main.c
index
f5b9312
..
912d562
100644
(file)
--- a/
main.c
+++ b/
main.c
@@
-473,6
+473,8
@@
static char *get_local_name(struct file_list *flist, char *dest_path)
* (anything at the destination will be overwritten). */
if (safe_stat(dest_path, &st) == 0) {
if (S_ISDIR(st.st_mode)) {
* (anything at the destination will be overwritten). */
if (safe_stat(dest_path, &st) == 0) {
if (S_ISDIR(st.st_mode)) {
+ if (sanitize_paths)
+ die_on_unsafe_path(dest_path, 0);
if (!push_dir(dest_path)) {
rsyserr(FERROR, errno, "push_dir#1 %s failed",
full_fname(dest_path));
if (!push_dir(dest_path)) {
rsyserr(FERROR, errno, "push_dir#1 %s failed",
full_fname(dest_path));
@@
-480,6
+482,8
@@
static char *get_local_name(struct file_list *flist, char *dest_path)
}
return NULL;
}
}
return NULL;
}
+ if (sanitize_paths && S_ISLNK(st.st_mode))
+ die_on_unsafe_path(dest_path, 0);
if (flist->count > 1) {
rprintf(FERROR,
"ERROR: destination must be a directory when"
if (flist->count > 1) {
rprintf(FERROR,
"ERROR: destination must be a directory when"
@@
-525,6
+529,8
@@
static char *get_local_name(struct file_list *flist, char *dest_path)
return NULL;
}
return NULL;
}
+ if (sanitize_paths)
+ die_on_unsafe_path(dest_path, 0);
if (!push_dir(dest_path)) {
rsyserr(FERROR, errno, "push_dir#2 %s failed",
full_fname(dest_path));
if (!push_dir(dest_path)) {
rsyserr(FERROR, errno, "push_dir#2 %s failed",
full_fname(dest_path));
@@
-545,6
+551,8
@@
static char *get_local_name(struct file_list *flist, char *dest_path)
dest_path = "/";
*cp = '\0';
dest_path = "/";
*cp = '\0';
+ if (sanitize_paths)
+ die_on_unsafe_path(dest_path, 0);
if (!push_dir(dest_path)) {
rsyserr(FERROR, errno, "push_dir#3 %s failed",
full_fname(dest_path));
if (!push_dir(dest_path)) {
rsyserr(FERROR, errno, "push_dir#3 %s failed",
full_fname(dest_path));
@@
-602,10
+610,14
@@
static void do_server_sender(int f_in, int f_out, int argc, char *argv[])
return;
}
return;
}
- if (!relative_paths && !push_dir(dir)) {
- rsyserr(FERROR, errno, "push_dir#3 %s failed",
- full_fname(dir));
- exit_cleanup(RERR_FILESELECT);
+ if (!relative_paths) {
+ if (sanitize_paths)
+ die_on_unsafe_path(dir, 0);
+ if (!push_dir(dir)) {
+ rsyserr(FERROR, errno, "push_dir#3 %s failed",
+ full_fname(dir));
+ exit_cleanup(RERR_FILESELECT);
+ }
}
argc--;
argv++;
}
argc--;
argv++;