summaryrefslogtreecommitdiff
path: root/clientserver.c
diff options
context:
space:
mode:
authorWayne Davison <wayned@samba.org>2007-11-26 21:58:19 -0800
committerWayne Davison <wayned@samba.org>2007-11-27 07:34:59 -0800
commit9585b27678ee8b94f2f260e8d8d61ff4381f2fa3 (patch)
tree7b558cd608f2b5bdb266e85a7f52040a194ff484 /clientserver.c
parent5c77266d9583fdb556be959e453afae82de70e36 (diff)
downloadrsync-9585b27678ee8b94f2f260e8d8d61ff4381f2fa3.tar.gz
rsync-9585b27678ee8b94f2f260e8d8d61ff4381f2fa3.tar.bz2
rsync-9585b27678ee8b94f2f260e8d8d61ff4381f2fa3.zip
Add a new daemon security option: "munge symlinks".
Diffstat (limited to 'clientserver.c')
-rw-r--r--clientserver.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/clientserver.c b/clientserver.c
index 9207b1a7..cb17438b 100644
--- a/clientserver.c
+++ b/clientserver.c
@@ -58,6 +58,7 @@ extern char curr_dir[];
char *auth_user;
int read_only = 0;
int module_id = -1;
+int munge_symlinks = 0;
struct chmod_mode_struct *daemon_chmod_modes;
/* module_dirlen is the length of the module_dir string when in daemon
@@ -624,6 +625,18 @@ static int rsync_module(int f_in, int f_out, int i, char *addr, char *host)
sanitize_paths = 1;
}
+ if ((munge_symlinks = lp_munge_symlinks(i)) < 0)
+ munge_symlinks = !use_chroot;
+ if (munge_symlinks) {
+ STRUCT_STAT st;
+ if (stat(SYMLINK_PREFIX, &st) == 0 && S_ISDIR(st.st_mode)) {
+ rprintf(FLOG, "Symlink munging is unsupported when a %s directory exists.\n",
+ SYMLINK_PREFIX);
+ io_printf(f_out, "@ERROR: daemon security issue -- contact admin\n", name);
+ exit_cleanup(RERR_UNSUPPORTED);
+ }
+ }
+
if (am_root) {
/* XXXX: You could argue that if the daemon is started
* by a non-root user and they explicitly specify a