X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/e0fd68f5ce8d3ef6add132cc9d42a03fa8888fef..819bfe459919769c9ddae14affeaa79596c640bb:/util.c diff --git a/util.c b/util.c index b5c15fba..5a8333e8 100644 --- a/util.c +++ b/util.c @@ -33,7 +33,7 @@ extern char *module_dir; extern unsigned int module_dirlen; extern mode_t orig_umask; extern char *partial_dir; -extern struct filter_list_struct server_filter_list; +extern struct filter_list_struct daemon_filter_list; int sanitize_paths = 0; @@ -503,14 +503,13 @@ int lock_range(int fd, int offset, int len) return fcntl(fd,F_SETLK,&lock) == 0; } -static int filter_server_path(char *arg) +static int filter_daemon_path(char *arg) { - char *s; - - if (server_filter_list.head) { + if (daemon_filter_list.head) { + char *s; for (s = arg; (s = strchr(s, '/')) != NULL; ) { *s = '\0'; - if (check_filter(&server_filter_list, arg, 1) < 0) { + if (check_filter(&daemon_filter_list, arg, 1) < 0) { /* We must leave arg truncated! */ return 1; } @@ -538,7 +537,7 @@ void glob_expand(char *s, char ***argv_ptr, int *argc_ptr, int *maxargs_ptr) if (!*s) s = "."; s = argv[argc++] = strdup(s); - filter_server_path(s); + filter_daemon_path(s); #else glob_t globbuf; @@ -559,7 +558,7 @@ void glob_expand(char *s, char ***argv_ptr, int *argc_ptr, int *maxargs_ptr) /* Note: we check the first match against the filter list, * just in case the user specified a wildcard in the path. */ if ((count = globbuf.gl_pathc) > 0) { - if (filter_server_path(globbuf.gl_pathv[0])) { + if (filter_daemon_path(globbuf.gl_pathv[0])) { int slashes = 0; char *cp; /* Truncate original arg at glob's truncation point. */ @@ -569,7 +568,7 @@ void glob_expand(char *s, char ***argv_ptr, int *argc_ptr, int *maxargs_ptr) } for (cp = s; *cp; cp++) { if (*cp == '/') { - if (--slashes <= 0) { + if (slashes-- <= 0) { *cp = '\0'; break; } @@ -581,7 +580,7 @@ void glob_expand(char *s, char ***argv_ptr, int *argc_ptr, int *maxargs_ptr) have_glob_results = 1; } else { /* This truncates "s" at a filtered element, if present. */ - filter_server_path(s); + filter_daemon_path(s); have_glob_results = 0; count = 1; } @@ -829,16 +828,14 @@ char *sanitize_path(char *dest, const char *p, const char *rootdir, int depth) } start = sanp = dest + rlen; + /* This loop iterates once per filename component in p, pointing at + * the start of the name (past any prior slash) for each iteration. */ while (*p) { /* discard leading or extra slashes */ if (*p == '/') { p++; continue; } - /* this loop iterates once per filename component in p. - * both p (and sanp if the original had a slash) should - * always be left pointing after a slash - */ if (*p == '.' && (p[1] == '/' || p[1] == '\0')) { if (leave_one_dotdir && p[1]) leave_one_dotdir = 0; @@ -1006,13 +1003,13 @@ char *partial_dir_fname(const char *fname) fn = fname; if ((int)pathjoin(t, sz, partial_dir, fn) >= sz) return NULL; - if (server_filter_list.head) { + if (daemon_filter_list.head) { t = strrchr(partial_fname, '/'); *t = '\0'; - if (check_filter(&server_filter_list, partial_fname, 1) < 0) + if (check_filter(&daemon_filter_list, partial_fname, 1) < 0) return NULL; *t = '/'; - if (check_filter(&server_filter_list, partial_fname, 0) < 0) + if (check_filter(&daemon_filter_list, partial_fname, 0) < 0) return NULL; }