The branch, master has been updated
       via  1c99b1d Report all socket connection errors if we fail. Fixes bug 
6588.
       via  575933e Itemize xattrs of a missing dir from an alt-dest dir. Fixes 
bug 6576.
       via  1401390 Use full_fname() for system error messages.
       via  d1b3118 Tweak the year.
      from  8f30d21 Protect a remote filename that starts with a dash.

;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 1c99b1d956a4cb4dcc36e9ed227a98fb40c1a943
Author: Wayne Davison <way...@samba.org>
Date:   Sat Jan 1 13:54:16 2011 -0800

    Report all socket connection errors if we fail.
    Fixes bug 6588.

commit 575933e9d0c02626cea924187034b001bd5210f0
Author: Wayne Davison <way...@samba.org>
Date:   Sat Jan 1 12:54:07 2011 -0800

    Itemize xattrs of a missing dir from an alt-dest dir.
    Fixes bug 6576.

commit 14013906ca0ee2d226f0baba74811f60224c35e2
Author: Wayne Davison <way...@samba.org>
Date:   Sat Jan 1 12:29:36 2011 -0800

    Use full_fname() for system error messages.

commit d1b3118c16bea5724706bd2074cfec34aff9a899
Author: Wayne Davison <way...@samba.org>
Date:   Sat Jan 1 11:27:40 2011 -0800

    Tweak the year.

-----------------------------------------------------------------------

Summary of changes:
 OLDNEWS     |    2 +-
 generator.c |    9 ++++++---
 options.c   |    4 ++--
 socket.c    |   28 +++++++++++++++++++++++-----
 xattrs.c    |   18 +++++++++---------
 5 files changed, 41 insertions(+), 20 deletions(-)


Changeset truncated at 500 lines:

diff --git a/OLDNEWS b/OLDNEWS
index 335511c..2731227 100644
--- a/OLDNEWS
+++ b/OLDNEWS
@@ -3094,7 +3094,7 @@ Changes since 2.4.6:
 
 Partial Protocol History
        RELEASE DATE    VER.    DATE OF COMMIT* PROTOCOL
-       ?? ??? 2010     3.1.0   31 Aug 2008     31
+       ?? ??? 2011     3.1.0   31 Aug 2008     31
        31 Dec 2009     3.0.7                   30
        08 May 2009     3.0.6                   30
        28 Dec 2008     3.0.5                   30
diff --git a/generator.c b/generator.c
index 61a2305..32d56ea 100644
--- a/generator.c
+++ b/generator.c
@@ -1282,6 +1282,8 @@ static void recv_generator(char *fname, struct 
file_struct *file, int ndx,
                goto cleanup;
        }
 
+       fnamecmp = fname;
+
        if (is_dir) {
                if (!implied_dirs && file->flags & FLAG_IMPLIED_DIR)
                        goto cleanup;
@@ -1329,11 +1331,13 @@ static void recv_generator(char *fname, struct 
file_struct *file, int ndx,
                                itemizing = 0;
                                code = FNONE;
                                statret = 1;
-                       } else if (j >= 0)
+                       } else if (j >= 0) {
                                statret = 1;
+                               fnamecmp = fnamecmpbuf;
+                       }
                }
                if (itemizing && f_out != -1) {
-                       itemize(fname, file, ndx, statret, &sx,
+                       itemize(fnamecmp, file, ndx, statret, &sx,
                                statret ? ITEM_LOCAL_CHANGE : 0, 0, NULL);
                }
                if (real_ret != 0 && do_mkdir(fname,file->mode) < 0 && errno != 
EEXIST) {
@@ -1590,7 +1594,6 @@ static void recv_generator(char *fname, struct 
file_struct *file, int ndx,
                goto cleanup;
        }
 
-       fnamecmp = fname;
        fnamecmp_type = FNAMECMP_FNAME;
 
        if (statret == 0 && !S_ISREG(sx.st.st_mode)) {
diff --git a/options.c b/options.c
index dc13592..3dab4a2 100644
--- a/options.c
+++ b/options.c
@@ -3,7 +3,7 @@
  *
  * Copyright (C) 1998-2001 Andrew Tridgell <tri...@samba.org>
  * Copyright (C) 2000, 2001, 2002 Martin Pool <m...@samba.org>
- * Copyright (C) 2002-2010 Wayne Davison
+ * Copyright (C) 2002-2011 Wayne Davison
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -604,7 +604,7 @@ static void print_rsync_version(enum logcode f)
 
        rprintf(f, "%s  version %s  protocol version %d%s\n",
                RSYNC_NAME, RSYNC_VERSION, PROTOCOL_VERSION, subprotocol);
-       rprintf(f, "Copyright (C) 1996-2010 by Andrew Tridgell, Wayne Davison, 
and others.\n");
+       rprintf(f, "Copyright (C) 1996-2011 by Andrew Tridgell, Wayne Davison, 
and others.\n");
        rprintf(f, "Web site: http://rsync.samba.org/\n";);
        rprintf(f, "Capabilities:\n");
        rprintf(f, "    %d-bit files, %d-bit inums, %d-bit timestamps, %d-bit 
long ints,\n",
diff --git a/socket.c b/socket.c
index fcb2a3b..8162974 100644
--- a/socket.c
+++ b/socket.c
@@ -182,7 +182,7 @@ int open_socket_out(char *host, int port, const char 
*bind_addr,
                    int af_hint)
 {
        int type = SOCK_STREAM;
-       int error, s;
+       int error, s, j, addr_cnt, *errnos;
        struct addrinfo hints, *res0, *res;
        char portbuf[10];
        char *h, *cp;
@@ -244,12 +244,17 @@ int open_socket_out(char *host, int port, const char 
*bind_addr,
                return -1;
        }
 
+       for (res = res0, addr_cnt = 0; res; res = res->ai_next, addr_cnt++) {}
+       errnos = new_array0(int, addr_cnt);
+       if (!errnos)
+               out_of_memory("open_socket_out");
+
        s = -1;
        /* Try to connect to all addresses for this machine until we get
         * through.  It might e.g. be multi-homed, or have both IPv4 and IPv6
         * addresses.  We need to create a socket for each record, since the
         * address record tells us what protocol to use to try to connect. */
-       for (res = res0; res; res = res->ai_next) {
+       for (res = res0, j = 0; res; res = res->ai_next, j++) {
                s = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
                if (s < 0)
                        continue;
@@ -280,8 +285,10 @@ int open_socket_out(char *host, int port, const char 
*bind_addr,
                if (connect_timeout > 0)
                        alarm(0);
 
-               if (s < 0)
+               if (s < 0) {
+                       errnos[j] = errno;
                        continue;
+               }
 
                if (proxied
                 && establish_proxy_connection(s, host, port,
@@ -293,10 +300,21 @@ int open_socket_out(char *host, int port, const char 
*bind_addr,
                break;
        }
        freeaddrinfo(res0);
+
        if (s < 0) {
-               rsyserr(FERROR, errno, "failed to connect to %s", h);
-               return -1;
+               char buf[2048];
+               for (res = res0, j = 0; res; res = res->ai_next, j++) {
+                       if (errnos[j] == 0)
+                               continue;
+                       if (inet_ntop(res->ai_family, res->ai_addr->sa_data + 
2, buf, sizeof buf) == NULL)
+                               strlcpy(buf, "*inet_ntop failed*", sizeof buf);
+                       rsyserr(FERROR, errnos[j], "failed to connect to %s 
(%s)", h, buf);
+               }
+               s = -1;
        }
+
+       free(errnos);
+
        return s;
 }
 
diff --git a/xattrs.c b/xattrs.c
index fcefebb..df1a2a1 100644
--- a/xattrs.c
+++ b/xattrs.c
@@ -139,7 +139,7 @@ static ssize_t get_xattr_names(const char *fname)
                  got_error:
                        rsyserr(FERROR_XFER, errno,
                                "get_xattr_names: llistxattr(\"%s\",%s) failed",
-                               fname, big_num(arg));
+                               full_fname(fname), big_num(arg));
                        return -1;
                }
                list_len = sys_llistxattr(fname, NULL, 0);
@@ -175,7 +175,7 @@ static char *get_xattr_data(const char *fname, const char 
*name, size_t *len_ptr
                        return NULL;
                rsyserr(FERROR_XFER, errno,
                        "get_xattr_data: lgetxattr(\"%s\",\"%s\",0) failed",
-                       fname, name);
+                       full_fname(fname), name);
                return NULL;
        }
 
@@ -192,11 +192,11 @@ static char *get_xattr_data(const char *fname, const char 
*name, size_t *len_ptr
                        if (len == (size_t)-1) {
                                rsyserr(FERROR_XFER, errno,
                                    "get_xattr_data: 
lgetxattr(\"%s\",\"%s\",%ld)"
-                                   " failed", fname, name, (long)datum_len);
+                                   " failed", full_fname(fname), name, 
(long)datum_len);
                        } else {
                                rprintf(FERROR_XFER,
                                    "get_xattr_data: 
lgetxattr(\"%s\",\"%s\",%ld)"
-                                   " returned %ld\n", fname, name,
+                                   " returned %ld\n", full_fname(fname), name,
                                    (long)datum_len, (long)len);
                        }
                        free(ptr);
@@ -337,7 +337,7 @@ int copy_xattrs(const char *source, const char *dest)
                        int save_errno = errno ? errno : EINVAL;
                        rsyserr(FERROR_XFER, errno,
                                "copy_xattrs: lsetxattr(\"%s\",\"%s\") failed",
-                               dest, name);
+                               full_fname(dest), name);
                        errno = save_errno;
                        return -1;
                }
@@ -822,7 +822,7 @@ static int rsync_xal_set(const char *fname, item_list *xalp,
                        else if (sys_lsetxattr(fname, name, ptr, len) < 0) {
                                rsyserr(FERROR_XFER, errno,
                                        "rsync_xal_set: 
lsetxattr(\"%s\",\"%s\") failed",
-                                       fname, name);
+                                       full_fname(fname), name);
                                ret = -1;
                        } else /* make sure caller sets mtime */
                                sxp->st.st_mtime = (time_t)-1;
@@ -843,7 +843,7 @@ static int rsync_xal_set(const char *fname, item_list *xalp,
                if (sys_lsetxattr(fname, name, rxas[i].datum, 
rxas[i].datum_len) < 0) {
                        rsyserr(FERROR_XFER, errno,
                                "rsync_xal_set: lsetxattr(\"%s\",\"%s\") 
failed",
-                               fname, name);
+                               full_fname(fname), name);
                        ret = -1;
                } else /* make sure caller sets mtime */
                        sxp->st.st_mtime = (time_t)-1;
@@ -873,7 +873,7 @@ static int rsync_xal_set(const char *fname, item_list *xalp,
                        if (sys_lremovexattr(fname, name) < 0) {
                                rsyserr(FERROR_XFER, errno,
                                        "rsync_xal_set: 
lremovexattr(\"%s\",\"%s\") failed",
-                                       fname, name);
+                                       full_fname(fname), name);
                                ret = -1;
                        } else /* make sure caller sets mtime */
                                sxp->st.st_mtime = (time_t)-1;
@@ -935,7 +935,7 @@ int set_xattr_acl(const char *fname, int is_access_acl, 
const char *buf, size_t
        if (sys_lsetxattr(fname, name, buf, buf_len) < 0) {
                rsyserr(FERROR_XFER, errno,
                        "set_xattr_acl: lsetxattr(\"%s\",\"%s\") failed",
-                       fname, name);
+                       full_fname(fname), name);
                return -1;
        }
        return 0;


-- 
The rsync repository.
_______________________________________________
rsync-cvs mailing list
rsync-cvs@lists.samba.org
https://lists.samba.org/mailman/listinfo/rsync-cvs

Reply via email to