From 8174bc35061b3661e48052dd45bc509bb47d95bc Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Sat, 19 Feb 2005 23:01:52 +0000 Subject: [PATCH] If the server refuses a directory, don't allow any files to be sent to the server inside that directory. --- generator.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/generator.c b/generator.c index fe7f16bc..bbf0e240 100644 --- a/generator.c +++ b/generator.c @@ -344,7 +344,7 @@ static void recv_generator(char *fname, struct file_list *flist, struct file_struct *file, int ndx, int f_out, int f_out_name) { - static int missing_below = -1; + static int missing_below = -1, excluded_below = -1; static char *fuzzy_dirname = NULL; static struct file_list *fuzzy_dirlist = NULL; struct file_struct *fuzzy_file = NULL; @@ -401,14 +401,24 @@ static void recv_generator(char *fname, struct file_list *flist, safe_fname(fname), ndx); } - if (server_filter_list.head - && check_filter(&server_filter_list, fname, - S_ISDIR(file->mode)) < 0) { - if (verbose) { - rprintf(FINFO, "skipping server-excluded file \"%s\"\n", - safe_fname(fname)); + if (server_filter_list.head) { + if (excluded_below >= 0) { + if (file->dir.depth > excluded_below) + goto skipping; + excluded_below = -1; + } + if (check_filter(&server_filter_list, fname, + S_ISDIR(file->mode)) < 0) { + if (S_ISDIR(file->mode)) + excluded_below = file->dir.depth; + skipping: + if (verbose) { + rprintf(FINFO, + "skipping server-excluded file \"%s\"\n", + safe_fname(fname)); + } + return; } - return; } if (missing_below >= 0 && file->dir.depth <= missing_below) { -- 2.34.1