Subject: pkg/15647: fix for botched error handling in net/rsync-2.5.2
To: None <gnats-bugs@gnats.netbsd.org>
From: Greg A. Woods <woods@weird.com>
List: netbsd-bugs
Date: 02/17/2002 20:12:17
>Number: 15647
>Category: pkg
>Synopsis: fix for botched error handling in net/rsync-2.5.2
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: pkg-manager
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Sun Feb 17 17:13:01 PST 2002
>Closed-Date:
>Last-Modified:
>Originator: Greg A. Woods
>Release: pkgsrc 2002/01/28
>Organization:
Planix, Inc.; Toronto, Ontario; Canada
>Environment:
System: NetBSD
>Description:
Due to a botch in a kludge for error handling from older rsync
servers, rsync-2.5.2 fails to return a non-zero exit code under
certain conditions. This causes scripts using rsync to fail.
This patch has been submitted to <rsync@samba.org>.
>How-To-Repeat:
$ rsync -v rsync://rsync.netbsd.org/main/ /tmp/foo,v >
@ERROR: Unknown module 'main'
$ echo $?
0
$
after the fix it will work like this:
$ rsync rsync://rsync.netbsd.org/main/ /tmp/foo,v
@ERROR: Unknown module 'main'
rsync: connection unexpectedly closed (42 bytes read so far)
rsync error: error in rsync protocol data stream (code 12) at io.c(140)
ksh: exit code: 12
$ echo $?
12
$
... but correct handling of '#list' commands to older servers
will still work properly with a zero exit code (rsync.netbsd.org
still reports protocol version #21 -- a 2.5.2 server would be #25):
$ rsync rsync://rsync.netbsd.org/
NetBSD
anoncvs
$ echo $?
0
$
>Fix:
apply this change to pkgsrc/net/rsync/Makefile (which also :
Index: Makefile
===================================================================
RCS file: /cvs/master/m-NetBSD/main/pkgsrc/net/rsync/Makefile,v
retrieving revision 1.38
diff -c -r1.38 Makefile
*** Makefile 26 Jan 2002 19:04:49 -0000 1.38
--- Makefile 18 Feb 2002 00:42:48 -0000
***************
*** 1,6 ****
--- 1,7 ----
# $NetBSD: Makefile,v 1.38 2002/01/26 19:04:49 bouyer Exp $
DISTNAME= rsync-2.5.2
+ PKGREVISION= 1
CATEGORIES= net
MASTER_SITES= ftp://rsync.samba.org/pub/rsync/ \
ftp://sunsite.auc.dk/pub/unix/rsync/ \
and then add this patch to pkgsrc/net/rsync/patches:
#ident $NetBSD$
Index: clientserver.c
===================================================================
RCS file: /cvsroot/rsync/clientserver.c,v
retrieving revision 1.84
diff -c -r1.84 clientserver.c
*** clientserver.c 9 Feb 2002 03:30:22 -0000 1.84
--- clientserver.c 18 Feb 2002 00:39:34 -0000
***************
*** 43,48 ****
--- 43,49 ----
extern int remote_version;
extern int am_sender;
extern char *shell_cmd;
+ extern int list_only;
extern int kludge_around_eof;
extern char *bind_address;
extern int default_af_hint;
***************
*** 113,119 ****
/* Old servers may just drop the connection here,
rather than sending a proper EXIT command. Yuck. */
! kludge_around_eof = remote_version < 25;
while (1) {
if (!read_line(fd, line, sizeof(line)-1)) {
--- 114,120 ----
/* Old servers may just drop the connection here,
rather than sending a proper EXIT command. Yuck. */
! kludge_around_eof = list_only && (remote_version < 25);
while (1) {
if (!read_line(fd, line, sizeof(line)-1)) {
and then of course after committing run 'make makepatchsum'! ;-)
>Release-Note:
>Audit-Trail:
>Unformatted: