From nobody@FreeBSD.org  Mon Jun 12 20:37:33 2006
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125])
	by hub.freebsd.org (Postfix) with ESMTP id B2D3A16A4C5
	for <freebsd-gnats-submit@FreeBSD.org>; Mon, 12 Jun 2006 20:37:33 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (www.freebsd.org [216.136.204.117])
	by mx1.FreeBSD.org (Postfix) with ESMTP id 12A1A43D49
	for <freebsd-gnats-submit@FreeBSD.org>; Mon, 12 Jun 2006 20:37:33 +0000 (GMT)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (localhost [127.0.0.1])
	by www.freebsd.org (8.13.1/8.13.1) with ESMTP id k5CKbWno047559
	for <freebsd-gnats-submit@FreeBSD.org>; Mon, 12 Jun 2006 20:37:32 GMT
	(envelope-from nobody@www.freebsd.org)
Received: (from nobody@localhost)
	by www.freebsd.org (8.13.1/8.13.1/Submit) id k5CKbWbu047558;
	Mon, 12 Jun 2006 20:37:32 GMT
	(envelope-from nobody)
Message-Id: <200606122037.k5CKbWbu047558@www.freebsd.org>
Date: Mon, 12 Jun 2006 20:37:32 GMT
From: Andrus Nomm <andrus@wask.org>
To: freebsd-gnats-submit@FreeBSD.org
Subject: fetch does not bind ip for ftp data stream on download
X-Send-Pr-Version: www-2.3

>Number:         98872
>Category:       kern
>Synopsis:       fetch(3) does not bind ip for ftp data stream on download
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    des
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Jun 12 20:40:13 GMT 2006
>Closed-Date:    Mon Sep 11 16:24:23 GMT 2006
>Last-Modified:  Mon Sep 11 16:24:23 GMT 2006
>Originator:     Andrus Nomm
>Release:        4.11-RELEASE-p10
>Organization:
>Environment:
FreeBSD cell.wask.org 4.11-RELEASE-p10 FreeBSD 4.11-RELEASE-p10 #14: Fri Jun 10 21:40:26 EEST 2005     root@cell.members.ee:/usr/obj/usr/src/sys/MEMBERS  i386

>Description:
While fetching files from remote ftp site and specifing FETCH_BIND_ADDRESS fetch does not bind it while creating ftp data connection.

strace shows:
On connecting to ftp site (login)
socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 3
bind(3, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("83.166.48.25")}, 16) = 0
connect(3, {sa_family=AF_INET, sin_port=htons(21), sin_addr=inet_addr("130.240.22.195")}, 16) = 0

On opening ftp data connection:
getpeername(3, {sa_family=AF_INET, sin_port=htons(21), sin_addr=inet_addr("130.240.22.195")}, [16]) = 0
connect(4, {sa_family=AF_INET, sin_port=htons(53456), sin_addr=inet_addr("130.240.22.195")}, 16^C <unfinished ...>

bind ip is missing
>How-To-Repeat:
Bind ip via FETCH_BIND_ADDRESS.
Try to download from ftp (block primary ip of server)
>Fix:

>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->des 
Responsible-Changed-By: maxim 
Responsible-Changed-When: Mon Jun 12 20:54:38 UTC 2006 
Responsible-Changed-Why:  
Over to fetch(3) maintainer. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=98872 

From: des@des.no (Dag-Erling =?iso-8859-1?Q?Sm=F8rgrav?=)
To: Andrus Nomm <andrus@wask.org>
Cc: freebsd-gnats-submit@FreeBSD.org
Subject: Re: misc/98872: fetch does not bind ip for ftp data stream on download
Date: Tue, 13 Jun 2006 08:58:24 +0200

 --=-=-=
 Content-Type: text/plain; charset=iso-8859-1
 Content-Transfer-Encoding: quoted-printable
 
 Andrus Nomm <andrus@wask.org> writes:
 > While fetching files from remote ftp site and specifing
 > FETCH_BIND_ADDRESS fetch does not bind it while creating ftp data
 > connection.
 
 Please try the attached patch.
 
 DES
 --=20
 Dag-Erling Sm=F8rgrav - des@des.no
 
 
 --=-=-=
 Content-Type: text/x-patch
 Content-Disposition: attachment; filename=bindaddr.diff
 
 Index: ftp.c
 ===================================================================
 RCS file: /home/ncvs/src/lib/libfetch/ftp.c,v
 retrieving revision 1.93
 diff -u -r1.93 ftp.c
 --- ftp.c	19 Jan 2006 08:31:47 -0000	1.93
 +++ ftp.c	13 Jun 2006 06:51:16 -0000
 @@ -594,6 +594,7 @@
  	struct sockaddr_storage sa;
  	struct sockaddr_in6 *sin6;
  	struct sockaddr_in *sin4;
 +	const char *bindaddr;
  	const char *filename;
  	int filenamelen, type;
  	int low, pasv, verbose;
 @@ -738,6 +739,10 @@
  		/* connect to data port */
  		if (verbose)
  			_fetch_info("opening data connection");
 +		bindaddr = getenv("FETCH_BIND_ADDRESS");
 +		if (bindaddr != NULL && *bindaddr != '\0' &&
 +		    _fetch_bind(sd, sa.ss_family, bindaddr) != 0)
 +			goto sysouch;
  		if (connect(sd, (struct sockaddr *)&sa, sa.ss_len) == -1)
  			goto sysouch;
  
 
 --=-=-=--
State-Changed-From-To: open->patched 
State-Changed-By: des 
State-Changed-When: Tue Jun 13 10:23:59 UTC 2006 
State-Changed-Why:  
Fixed in -CURRENT. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=98872 
State-Changed-From-To: patched->closed 
State-Changed-By: delphij 
State-Changed-When: Mon Sep 11 16:23:54 UTC 2006 
State-Changed-Why:  
des@ has MFC'ed the change on 2006-07-22. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=98872 
>Unformatted:
