Merged in the security fixes from 2.5.7.
[rsync/rsync.git] / sender.c
index 841e81f..a9c31bb 100644 (file)
--- a/sender.c
+++ b/sender.c
@@ -38,16 +38,14 @@ extern int am_server;
 
 void read_sum_head(int f, struct sum_struct *sum)
 {
-       extern int remote_version;
+       extern int protocol_version;
 
        sum->count = read_int(f);
        sum->blength = read_int(f);
-       if (remote_version < 27)
-       {
+       if (protocol_version < 27)
                sum->s2length = csum_length;
-       } else {
+       else
                sum->s2length = read_int(f);
-       }
        sum->remainder = read_int(f);
 }
 
@@ -60,7 +58,7 @@ static struct sum_struct *receive_sums(int f)
        int i;
        OFF_T offset = 0;
 
-       s = (struct sum_struct *)malloc(sizeof(*s));
+       s = new(struct sum_struct);
        if (!s) out_of_memory("receive_sums");
 
        read_sum_head(f, s);
@@ -75,7 +73,7 @@ static struct sum_struct *receive_sums(int f)
        if (s->count == 0)
                return(s);
 
-       s->sums = (struct sum_buf *)malloc(sizeof(s->sums[0])*s->count);
+       s->sums = new_array(struct sum_buf, s->count);
        if (!s->sums) out_of_memory("receive_sums");
 
        for (i = 0; i < (int) s->count; i++) {
@@ -160,7 +158,7 @@ void send_files(struct file_list *flist, int f_out, int f_in)
                        if (strlen(fname) == MAXPATHLEN-1) {
                                io_error = 1;
                                rprintf(FERROR, "send_files failed on long-named directory %s\n",
-                                       fname);
+                                       full_fname(fname));
                                return;
                        }
                        strlcat(fname, "/", MAXPATHLEN);
@@ -196,7 +194,7 @@ void send_files(struct file_list *flist, int f_out, int f_in)
                        if (fd == -1) {
                                io_error = 1;
                                rprintf(FERROR, "send_files failed to open %s: %s\n",
-                                       fname, strerror(errno));
+                                       full_fname(fname), strerror(errno));
                                free_sums(s);
                                continue;
                        }
@@ -204,7 +202,7 @@ void send_files(struct file_list *flist, int f_out, int f_in)
                        /* map the local file */
                        if (do_fstat(fd, &st) != 0) {
                                io_error = 1;
-                               rprintf(FERROR, "fstat failed : %s\n", strerror(errno));
+                               rprintf(FERROR, "fstat failed: %s\n", strerror(errno));
                                free_sums(s);
                                close(fd);
                                return;
@@ -279,7 +277,17 @@ void send_files(struct file_list *flist, int f_out, int f_in)
                }
 
                if (!read_batch) { /* dw */
-                       if (buf) unmap_file(buf);
+                       if (buf) {
+                               j = unmap_file(buf);
+                               if (j) {
+                                       io_error = 1;
+                                       rprintf(FERROR,
+                                           "read errors mapping %s: (%d) %s\n",
+                                           full_fname(fname),
+                                           j,
+                                           strerror(j));
+                               }
+                       }
                        close(fd);
                }