Document the latest changes.
[rsync/rsync.git] / generator.c
index 59e5bd9..d8e80e0 100644 (file)
@@ -52,6 +52,8 @@ extern int only_existing;
 extern int orig_umask;
 extern int safe_symlinks;
 
+extern struct exclude_list_struct server_exclude_list;
+
 
 /* choose whether to skip a particular file */
 static int skip_file(char *fname, struct file_struct *file, STRUCT_STAT *st)
@@ -281,6 +283,11 @@ void recv_generator(char *fname, struct file_struct *file, int i, int f_out)
        if (verbose > 2)
                rprintf(FINFO,"recv_generator(%s,%d)\n",fname,i);
 
+       if (server_exclude_list.head
+           && check_exclude(&server_exclude_list, fname,
+                            S_ISDIR(file->mode)) < 0)
+               return;
+
        statret = link_stat(fname,&st);
 
        if (only_existing && statret == -1 && errno == ENOENT) {
@@ -309,19 +316,20 @@ void recv_generator(char *fname, struct file_struct *file, int i, int f_out)
                if (dry_run) return; /* XXXX -- might cause inaccuracies?? -- mbp */
                if (statret == 0 && !S_ISDIR(st.st_mode)) {
                        if (robust_unlink(fname) != 0) {
-                               rprintf(FERROR,
-                                       "recv_generator: unlink %s to make room for directory: %s\n",
-                                       full_fname(fname), strerror(errno));
+                               rsyserr(FERROR, errno,
+                                       "recv_generator: unlink %s to make room for directory",
+                                       full_fname(fname));
                                return;
                        }
                        statret = -1;
                }
                if (statret != 0 && do_mkdir(fname,file->mode) != 0 && errno != EEXIST) {
-                       if (!(relative_paths && errno==ENOENT &&
-                             create_directory_path(fname, orig_umask)==0 &&
-                             do_mkdir(fname,file->mode)==0)) {
-                               rprintf(FERROR, "recv_generator: mkdir %s failed: %s\n",
-                                       full_fname(fname), strerror(errno));
+                       if (!(relative_paths && errno == ENOENT
+                           && create_directory_path(fname, orig_umask) == 0
+                           && do_mkdir(fname, file->mode) == 0)) {
+                               rsyserr(FERROR, errno,
+                                       "recv_generator: mkdir %s failed",
+                                       full_fname(fname));
                        }
                }
                /* f_out is set to -1 when doing final directory
@@ -351,7 +359,8 @@ void recv_generator(char *fname, struct file_struct *file, int i, int f_out)
                                 * right place -- no further action
                                 * required. */
                                if (strcmp(lnk,file->u.link) == 0) {
-                                       set_perms(fname,file,&st,1);
+                                       set_perms(fname, file, &st,
+                                                 PERMS_REPORT);
                                        return;
                                }
                        }
@@ -361,8 +370,8 @@ void recv_generator(char *fname, struct file_struct *file, int i, int f_out)
                        delete_file(fname);
                }
                if (do_symlink(file->u.link,fname) != 0) {
-                       rprintf(FERROR, "symlink %s -> \"%s\" failed: %s\n",
-                               full_fname(fname), file->u.link, strerror(errno));
+                       rsyserr(FERROR, errno, "symlink %s -> \"%s\" failed",
+                               full_fname(fname), file->u.link);
                } else {
                        set_perms(fname,file,NULL,0);
                        if (verbose) {
@@ -379,19 +388,20 @@ void recv_generator(char *fname, struct file_struct *file, int i, int f_out)
                    st.st_mode != file->mode ||
                    st.st_rdev != file->u.rdev) {
                        delete_file(fname);
-                       if (verbose > 2)
+                       if (verbose > 2) {
                                rprintf(FINFO,"mknod(%s,0%o,0x%x)\n",
                                        fname,(int)file->mode,(int)file->u.rdev);
+                       }
                        if (do_mknod(fname,file->mode,file->u.rdev) != 0) {
-                               rprintf(FERROR, "mknod %s failed: %s\n",
-                                       full_fname(fname), strerror(errno));
+                               rsyserr(FERROR, errno, "mknod %s failed",
+                                       full_fname(fname));
                        } else {
                                set_perms(fname,file,NULL,0);
                                if (verbose)
                                        rprintf(FINFO,"%s\n",fname);
                        }
                } else {
-                       set_perms(fname,file,&st,1);
+                       set_perms(fname, file, &st, PERMS_REPORT);
                }
                return;
        }
@@ -420,9 +430,8 @@ void recv_generator(char *fname, struct file_struct *file, int i, int f_out)
                else if (link_dest && !dry_run) {
                        if (do_link(fnamecmpbuf, fname) != 0) {
                                if (verbose > 0) {
-                                       rprintf(FINFO,"link %s => %s : %s\n",
-                                               fnamecmpbuf, fname,
-                                               strerror(errno));
+                                       rsyserr(FINFO, errno, "link %s => %s",
+                                               fnamecmpbuf, fname);
                                }
                        }
                        fnamecmp = fnamecmpbuf;
@@ -439,9 +448,9 @@ void recv_generator(char *fname, struct file_struct *file, int i, int f_out)
                        write_int(f_out,i);
                        if (!dry_run) write_sum_head(f_out, NULL);
                } else if (verbose > 1) {
-                       rprintf(FERROR,
-                               "recv_generator: failed to open %s: %s\n",
-                               full_fname(fname), strerror(errno));
+                       rsyserr(FERROR, errno,
+                               "recv_generator: failed to open %s",
+                               full_fname(fname));
                }
                return;
        }
@@ -473,7 +482,7 @@ void recv_generator(char *fname, struct file_struct *file, int i, int f_out)
 
        if (skip_file(fname, file, &st)) {
                if (fnamecmp == fname)
-                       set_perms(fname,file,&st,1);
+                       set_perms(fname, file, &st, PERMS_REPORT);
                return;
        }
 
@@ -492,8 +501,8 @@ void recv_generator(char *fname, struct file_struct *file, int i, int f_out)
        fd = do_open(fnamecmp, O_RDONLY, 0);
 
        if (fd == -1) {
-               rprintf(FERROR, "failed to open %s, continuing: %s\n",
-                       full_fname(fnamecmp), strerror(errno));
+               rsyserr(FERROR, errno, "failed to open %s, continuing",
+                       full_fname(fnamecmp));
                /* pretend the file didn't exist */
                if (preserve_hard_links && hard_link_check(file, HL_SKIP))
                        return;