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