diff options
author | Wayne Davison <wayned@samba.org> | 2008-03-18 08:43:43 -0700 |
---|---|---|
committer | Wayne Davison <wayned@samba.org> | 2008-03-18 09:16:24 -0700 |
commit | 1aefb7ef73751878d13eff717de61e76f690b57e (patch) | |
tree | 5e396cddccd96d7c73fbfce8ef3be570610aeb11 /flist.c | |
parent | d7b6774d82ae234978542c43c9ad655c8ade101e (diff) | |
download | rsync-1aefb7ef73751878d13eff717de61e76f690b57e.tar.gz |
Output a non-existent-file error for server-excluded files instead of
silently ignoring them.
Diffstat (limited to 'flist.c')
-rw-r--r-- | flist.c | 18 |
1 files changed, 14 insertions, 4 deletions
@@ -232,10 +232,20 @@ int link_stat(const char *path, STRUCT_STAT *stp, int follow_dirlinks) #endif } +static inline int is_daemon_excluded(const char *fname, int is_dir) +{ + if (server_filter_list.head + && check_filter(&server_filter_list, fname, is_dir) < 0) { + errno = ENOENT; + return 1; + } + return 0; +} + /* This function is used to check if a file should be included/excluded * from the list of files based on its name and type etc. The value of * filter_level is set to either SERVER_FILTERS or ALL_FILTERS. */ -static int is_excluded(char *fname, int is_dir, int filter_level) +static int is_excluded(const char *fname, int is_dir, int filter_level) { #if 0 /* This currently never happens, so avoid a useless compare. */ if (filter_level == NO_FILTERS) @@ -252,8 +262,7 @@ static int is_excluded(char *fname, int is_dir, int filter_level) return 0; } } - if (server_filter_list.head - && check_filter(&server_filter_list, fname, is_dir) < 0) + if (is_daemon_excluded(fname, is_dir)) return 1; if (filter_level != ALL_FILTERS) return 0; @@ -1939,7 +1948,8 @@ struct file_list *send_file_list(int f, int argc, char *argv[]) if (fn != fbuf) memmove(fbuf, fn, len + 1); - if (link_stat(fbuf, &st, copy_dirlinks || name_type != NORMAL_NAME) != 0) { + if (link_stat(fbuf, &st, copy_dirlinks || name_type != NORMAL_NAME) != 0 + || is_daemon_excluded(fbuf, S_ISDIR(st.st_mode) != 0)) { io_error |= IOERR_GENERAL; rsyserr(FERROR_XFER, errno, "link_stat %s failed", full_fname(fbuf)); |