From nobody@FreeBSD.org  Fri Nov 18 12:59:27 2011
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 0B48B1065670
	for <freebsd-gnats-submit@FreeBSD.org>; Fri, 18 Nov 2011 12:59:27 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from red.freebsd.org (red.freebsd.org [IPv6:2001:4f8:fff6::22])
	by mx1.freebsd.org (Postfix) with ESMTP id D600E8FC14
	for <freebsd-gnats-submit@FreeBSD.org>; Fri, 18 Nov 2011 12:59:26 +0000 (UTC)
Received: from red.freebsd.org (localhost [127.0.0.1])
	by red.freebsd.org (8.14.4/8.14.4) with ESMTP id pAICxQjx017023
	for <freebsd-gnats-submit@FreeBSD.org>; Fri, 18 Nov 2011 12:59:26 GMT
	(envelope-from nobody@red.freebsd.org)
Received: (from nobody@localhost)
	by red.freebsd.org (8.14.4/8.14.4/Submit) id pAICxQhm017022;
	Fri, 18 Nov 2011 12:59:26 GMT
	(envelope-from nobody)
Message-Id: <201111181259.pAICxQhm017022@red.freebsd.org>
Date: Fri, 18 Nov 2011 12:59:26 GMT
From: Charlie Root <email@forged.com>
To: freebsd-gnats-submit@FreeBSD.org
Subject: [patch] ftp(8) is giving up on IPv6
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         162661
>Category:       bin
>Synopsis:       [patch] ftp(8) is giving up on IPv6
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    gavin
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Nov 18 13:00:18 UTC 2011
>Closed-Date:    Sat Apr 21 19:13:19 UTC 2012
>Last-Modified:  Sat Apr 21 19:13:19 UTC 2012
>Originator:     Charlie Root
>Release:        FreeBSD 9.0-RC2
>Organization:
none
>Environment:
FreeBSD b93 9.0-RC2 FreeBSD 9.0-RC2 #3: Fri Nov 18 10:35:03 UTC 2011 roo
t@b93:/usr/obj/usr/src/sys/C901 i386

The kernel has been compiled with options:

makeoptions MKMODULESENV+="WITHOUT_INET_SUPPORT="
nodevice gre
nooptions       INET
options         INET6

>Description:
The ftp(8) cannot be used when there is no AF_INET protocol family support within kernel. There is a fragment of code in the main.c which is trying to get the socket sizes when the PF is hardcoded to AF_INET.

>How-To-Repeat:
      1) Compile the kernel with above options to include INET6 and exclude INET from the kernel.
        2) run ftp from the shell.

        Here is a snippet from the screen:

b93# ftp
ftp: Can't create socket to determine default socket sizes: Protocol not supported

b93# ftp -6
ftp: Can't create socket to determine default socket sizes: Protocol not supported

b93# ftp ftp.freebsd.org.
ftp: Can't create socket to determine default socket sizes: Protocol not supported

b93# host -t AAAA ftp.freebsd.org.
ftp.freebsd.org has IPv6 address 2001:4f8:0:2::e
ftp.freebsd.org has IPv6 address 2001:6c8:2:600::132

b93# ftp 2001:4f8:0:2::e
ftp: Can't create socket to determine default socket sizes: Protocol not supported

>Fix:
        Apply the following patch:

--- main.c.orig 2011-11-18 12:16:01.000000000 +0000
+++ main.c      2011-11-18 12:11:11.000000000 +0000
@@ -203,7 +203,7 @@
        isupload = 0;
        reply_callback = NULL;
 #ifdef INET6
-       family = AF_UNSPEC;
+       family = AF_INET6;
 #else
        family = AF_INET;       /* force AF_INET if no INET6 support */
 #endif
@@ -219,7 +219,7 @@
         * call no socket buffer sizes will have been modified, so we are
         * guaranteed to get the system defaults.
         */
-       s = socket(AF_INET, SOCK_STREAM, 0);
+       s = socket(family, SOCK_STREAM, 0);
        if (s == -1)
                err(1, "Can't create socket to determine default socket sizes");
        slen = sizeof(rcvbuf_size);



>Release-Note:
>Audit-Trail:

From: Maxim Konovalov <maxim.konovalov@gmail.com>
To: bug-followup@freebsd.org
Cc:  
Subject: Re: bin/162661: [patch] ftp(8) is giving up on IPv6
Date: Fri, 18 Nov 2011 18:13:19 +0400 (MSK)

 Hello,
 
 I've just sent your patch to lukem@netbsd (he is an author of our
 ftp(8)) for review.
 
 -- 
 Maxim Konovalov

From: Maxim Konovalov <maxim.konovalov@gmail.com>
To: bug-followup@freebsd.org
Cc:  
Subject: Re: bin/162661: [patch] ftp(8) is giving up on IPv6
Date: Mon, 28 Nov 2011 14:38:35 +0400 (MSK)

   This message is in MIME format.  The first part should be readable text,
   while the remaining parts are likely unreadable without MIME-aware tools.
 
 ---1934791479-1752824349-1322476627=:69998
 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
 Content-ID: <alpine.BSF.2.00.1111281437161.69998@mp2.macomnet.net>
 
 Hi,
 
 Please test an enclosed diff and report your results.
 
 The patch is produced by Luke Mewburn (with my minor addition), the
 author of our ftp(1) we imported from NetBSD.
 
 -- 
 Maxim Konovalov
 ---1934791479-1752824349-1322476627=:69998
 Content-Type: TEXT/X-DIFF; NAME=ftp-freebsd.diff
 Content-Transfer-Encoding: BASE64
 Content-ID: <alpine.BSF.2.00.1111281437070.69998@mp2.macomnet.net>
 Content-Description: ftp-freebsd.diff
 Content-Disposition: ATTACHMENT; FILENAME=ftp-freebsd.diff
 
 SW5kZXg6IHV0aWwuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHV0
 aWwuYwkocmV2aXNpb24gMjI4MDU3KQ0KKysrIHV0aWwuYwkod29ya2luZyBj
 b3B5KQ0KQEAgLTEwNjAsNyArMTA2MCwzMyBAQA0KIHZvaWQNCiBzZXR1cHNv
 Y2tidWZzaXplKGludCBzb2NrKQ0KIHsNCisJc29ja2xlbl90IHNsZW47DQog
 DQorCWlmICgwID09IHJjdmJ1Zl9zaXplKSB7DQorCQlzbGVuID0gc2l6ZW9m
 KHJjdmJ1Zl9zaXplKTsNCisJCWlmIChnZXRzb2Nrb3B0KHNvY2ssIFNPTF9T
 T0NLRVQsIFNPX1JDVkJVRiwNCisJCSAgICAodm9pZCAqKSZyY3ZidWZfc2l6
 ZSwgJnNsZW4pID09IC0xKQ0KKwkJCWVycigxLCAiVW5hYmxlIHRvIGRldGVy
 bWluZSByY3ZidWYgc2l6ZSIpOw0KKwkJaWYgKHJjdmJ1Zl9zaXplIDw9IDAp
 DQorCQkJcmN2YnVmX3NpemUgPSA4ICogMTAyNDsNCisJCWlmIChyY3ZidWZf
 c2l6ZSA+IDggKiAxMDI0ICogMTAyNCkNCisJCQlyY3ZidWZfc2l6ZSA9IDgg
 KiAxMDI0ICogMTAyNDsNCisJCURQUklOVEYoInNldHVwc29ja2J1ZnNpemU6
 IHJjdmJ1Zl9zaXplIGRldGVybWluZWQgYXMgJWRcbiIsDQorCQkgICAgcmN2
 YnVmX3NpemUpOw0KKwl9DQorCWlmICgwID09IHNuZGJ1Zl9zaXplKSB7DQor
 CQlzbGVuID0gc2l6ZW9mKHNuZGJ1Zl9zaXplKTsNCisJCWlmIChnZXRzb2Nr
 b3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwNCisJCSAgICAodm9p
 ZCAqKSZzbmRidWZfc2l6ZSwgJnNsZW4pID09IC0xKQ0KKwkJCWVycigxLCAi
 VW5hYmxlIHRvIGRldGVybWluZSBzbmRidWYgc2l6ZSIpOw0KKwkJaWYgKHNu
 ZGJ1Zl9zaXplIDw9IDApDQorCQkJc25kYnVmX3NpemUgPSA4ICogMTAyNDsN
 CisJCWlmIChzbmRidWZfc2l6ZSA+IDggKiAxMDI0ICogMTAyNCkNCisJCQlz
 bmRidWZfc2l6ZSA9IDggKiAxMDI0ICogMTAyNDsNCisJCURQUklOVEYoInNl
 dHVwc29ja2J1ZnNpemU6IHNuZGJ1Zl9zaXplIGRldGVybWluZWQgYXMgJWRc
 biIsDQorCQkgICAgc25kYnVmX3NpemUpOw0KKwl9DQorDQogCWlmIChzZXRz
 b2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwNCiAJICAgICh2
 b2lkICopJnNuZGJ1Zl9zaXplLCBzaXplb2Yoc25kYnVmX3NpemUpKSA9PSAt
 MSkNCiAJCXdhcm4oIlVuYWJsZSB0byBzZXQgc25kYnVmIHNpemUgJWQiLCBz
 bmRidWZfc2l6ZSk7DQpJbmRleDogbWFpbi5jDQo9PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09DQotLS0gbWFpbi5jCShyZXZpc2lvbiAyMjgwNTcpDQorKysgbWFp
 bi5jCSh3b3JraW5nIGNvcHkpDQpAQCAtMTQ2LDkgKzE0Niw4IEBADQogCXN0
 cnVjdCBwYXNzd2QgKnB3Ow0KIAljaGFyICpjcCwgKmVwLCAqYW5vbnBhc3Ms
 ICp1cGxvYWRfcGF0aCwgKnNyY19hZGRyOw0KIAljb25zdCBjaGFyICphbm9u
 dXNlcjsNCi0JaW50IGR1bWJ0ZXJtLCBzLCBpc3VwbG9hZDsNCisJaW50IGR1
 bWJ0ZXJtLCBpc3VwbG9hZDsNCiAJc2l6ZV90IGxlbjsNCi0Jc29ja2xlbl90
 IHNsZW47DQogDQogCXR6c2V0KCk7DQogI2lmIDAJLyogdG5mdHAgKi8JLyog
 WFhYICovDQpAQCAtMjAyLDkgKzIwMSwxMSBAQA0KIAl1cGxvYWRfcGF0aCA9
 IE5VTEw7DQogCWlzdXBsb2FkID0gMDsNCiAJcmVwbHlfY2FsbGJhY2sgPSBO
 VUxMOw0KLSNpZmRlZiBJTkVUNg0KIAlmYW1pbHkgPSBBRl9VTlNQRUM7DQot
 I2Vsc2UNCisjaWZkZWYgSU5FVDYNCisJZmFtaWx5ID0gQUZfSU5FVDY7DQor
 I2VuZGlmDQorI2lmZGVmIElORVQNCiAJZmFtaWx5ID0gQUZfSU5FVDsJLyog
 Zm9yY2UgQUZfSU5FVCBpZiBubyBJTkVUNiBzdXBwb3J0ICovDQogI2VuZGlm
 DQogDQpAQCAtMjEzLDM1ICsyMTQsNiBAQA0KIAlpZiAoY3AgIT0gTlVMTCAm
 JiBzdHJsY3B5KG5ldHJjLCBjcCwgc2l6ZW9mKG5ldHJjKSkgPj0gc2l6ZW9m
 KG5ldHJjKSkNCiAJCWVycngoMSwgIiRORVRSQyBgJXMnOiAlcyIsIGNwLCBz
 dHJlcnJvcihFTkFNRVRPT0xPTkcpKTsNCiANCi0JLyoNCi0JICogR2V0IHRo
 ZSBkZWZhdWx0IHNvY2tldCBidWZmZXIgc2l6ZXMgaWYgd2UgZG9uJ3QgYWxy
 ZWFkeSBoYXZlIHRoZW0uDQotCSAqIEl0IGRvZXNuJ3QgbWF0dGVyIHdoaWNo
 IHNvY2tldCB3ZSBkbyB0aGlzIHRvLCBiZWNhdXNlIG9uIHRoZSBmaXJzdA0K
 LQkgKiBjYWxsIG5vIHNvY2tldCBidWZmZXIgc2l6ZXMgd2lsbCBoYXZlIGJl
 ZW4gbW9kaWZpZWQsIHNvIHdlIGFyZQ0KLQkgKiBndWFyYW50ZWVkIHRvIGdl
 dCB0aGUgc3lzdGVtIGRlZmF1bHRzLg0KLQkgKi8NCi0JcyA9IHNvY2tldChB
 Rl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7DQotCWlmIChzID09IC0xKQ0KLQkJ
 ZXJyKDEsICJDYW4ndCBjcmVhdGUgc29ja2V0IHRvIGRldGVybWluZSBkZWZh
 dWx0IHNvY2tldCBzaXplcyIpOw0KLQlzbGVuID0gc2l6ZW9mKHJjdmJ1Zl9z
 aXplKTsNCi0JaWYgKGdldHNvY2tvcHQocywgU09MX1NPQ0tFVCwgU09fUkNW
 QlVGLA0KLQkgICAgKHZvaWQgKikmcmN2YnVmX3NpemUsICZzbGVuKSA9PSAt
 MSkNCi0JCWVycigxLCAiVW5hYmxlIHRvIGdldCBkZWZhdWx0IHJjdmJ1ZiBz
 aXplIik7DQotCXNsZW4gPSBzaXplb2Yoc25kYnVmX3NpemUpOw0KLQlpZiAo
 Z2V0c29ja29wdChzLCBTT0xfU09DS0VULCBTT19TTkRCVUYsDQotCSAgICAo
 dm9pZCAqKSZzbmRidWZfc2l6ZSwgJnNsZW4pID09IC0xKQ0KLQkJZXJyKDEs
 ICJVbmFibGUgdG8gZ2V0IGRlZmF1bHQgc25kYnVmIHNpemUiKTsNCi0JKHZv
 aWQpY2xvc2Uocyk7DQotCQkJCQkvKiBzYW5pdHkgY2hlY2sgcmV0dXJuZWQg
 YnVmZmVyIHNpemVzICovDQotCWlmIChyY3ZidWZfc2l6ZSA8PSAwKQ0KLQkJ
 cmN2YnVmX3NpemUgPSA4ICogMTAyNDsNCi0JaWYgKHNuZGJ1Zl9zaXplIDw9
 IDApDQotCQlzbmRidWZfc2l6ZSA9IDggKiAxMDI0Ow0KLQ0KLQlpZiAoc25k
 YnVmX3NpemUgPiA4ICogMTAyNCAqIDEwMjQpDQotCQlzbmRidWZfc2l6ZSA9
 IDggKiAxMDI0ICogMTAyNDsNCi0JaWYgKHJjdmJ1Zl9zaXplID4gOCAqIDEw
 MjQgKiAxMDI0KQ0KLQkJcmN2YnVmX3NpemUgPSA4ICogMTAyNCAqIDEwMjQ7
 DQotDQogCW1hcmdfc2wgPSBmdHBfc2xfaW5pdCgpOw0KIAlpZiAoKHRtcGRp
 ciA9IGdldGVudigiVE1QRElSIikpID09IE5VTEwpDQogCQl0bXBkaXIgPSBf
 UEFUSF9UTVA7DQpJbmRleDogZmV0Y2guYw0KPT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PQ0KLS0tIGZldGNoLmMJKHJldmlzaW9uIDIyODA1NykNCisrKyBmZXRj
 aC5jCSh3b3JraW5nIGNvcHkpDQpAQCAtNTcsNiArNTcsNyBAQA0KICNpbmNs
 dWRlIDxhcnBhL2Z0cC5oPg0KICNpbmNsdWRlIDxhcnBhL2luZXQuaD4NCiAN
 CisjaW5jbHVkZSA8YXNzZXJ0Lmg+DQogI2luY2x1ZGUgPGN0eXBlLmg+DQog
 I2luY2x1ZGUgPGVyci5oPg0KICNpbmNsdWRlIDxlcnJuby5oPg0KQEAgLTEx
 NDIsNiArMTE0Myw3IEBADQogCSh2b2lkKXhzaWduYWwoU0lHUVVJVCwgcHN1
 bW1hcnkpOw0KIAlvbGRpbnRyID0geHNpZ25hbChTSUdJTlQsIGFib3J0aHR0
 cCk7DQogDQorCWFzc2VydChyY3ZidWZfc2l6ZSA+IDApOw0KIAlpZiAoKHNp
 emVfdClyY3ZidWZfc2l6ZSA+IGJ1ZnNpemUpIHsNCiAJCWlmICh4ZmVyYnVm
 KQ0KIAkJCSh2b2lkKWZyZWUoeGZlcmJ1Zik7DQpJbmRleDogZnRwLmMNCj09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT0NCi0tLSBmdHAuYwkocmV2aXNpb24gMjI4
 MDU3KQ0KKysrIGZ0cC5jCSh3b3JraW5nIGNvcHkpDQpAQCAtMTE0LDYgKzEx
 NCw3IEBADQogI2luY2x1ZGUgPGFycGEvZnRwLmg+DQogI2luY2x1ZGUgPGFy
 cGEvdGVsbmV0Lmg+DQogDQorI2luY2x1ZGUgPGFzc2VydC5oPg0KICNpbmNs
 dWRlIDxjdHlwZS5oPg0KICNpbmNsdWRlIDxlcnIuaD4NCiAjaW5jbHVkZSA8
 ZXJybm8uaD4NCkBAIC03NzIsNiArNzczLDcgQEANCiAJaWYgKGRvdXQgPT0g
 TlVMTCkNCiAJCWdvdG8gYWJvcnQ7DQogDQorCWFzc2VydChzbmRidWZfc2l6
 ZSA+IDApOw0KIAlpZiAoKHNpemVfdClzbmRidWZfc2l6ZSA+IGJ1ZnNpemUp
 IHsNCiAJCWlmIChidWYpDQogCQkJKHZvaWQpZnJlZShidWYpOw0KQEAgLTEw
 MzMsNiArMTAzNSw3IEBADQogCQlwcm9ncmVzcyA9IDA7DQogCQlwcmVzZXJ2
 ZSA9IDA7DQogCX0NCisJYXNzZXJ0KHJjdmJ1Zl9zaXplID4gMCk7DQogCWlm
 ICgoc2l6ZV90KXJjdmJ1Zl9zaXplID4gYnVmc2l6ZSkgew0KIAkJaWYgKGJ1
 ZikNCiAJCQkodm9pZClmcmVlKGJ1Zik7DQo=
 
 ---1934791479-1752824349-1322476627=:69998--
Responsible-Changed-From-To: freebsd-bugs->bz 
Responsible-Changed-By: bz 
Responsible-Changed-When: Thu Dec 1 08:45:45 UTC 2011 
Responsible-Changed-Why:  
Temporary take as I have a way larger patch to also not compile 
IPv4 support in addition to fixing this problem that needs to be 
upstreamed. 

We had an initial (small) patch to quickly work around this ftp 
problem before the last big input referenced from 
http://wiki.freebsd.org/IPv6Only . 

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

From: "Mark Martinec" <Mark.Martinec@ijs.si>
To: bug-followup@freebsd.org
Cc:  
Subject: Re: bin/162661: ftp(8) is giving up on IPv6
Date: Tue, 07 Feb 2012 18:39:28 +0100

 Any progress on this bug resolution?
 
 IMO the 'non-critical' severity should be bumped up,
 the ftp client on 9.0 is unusable on inet6-only hosts.
 
    Mark
Responsible-Changed-From-To: bz->gavin 
Responsible-Changed-By: bz 
Responsible-Changed-When: Wed Feb 8 13:49:20 UTC 2012 
Responsible-Changed-Why:  
gavin will go ahead with the vendor import w/o waiting for my 
additional changes. 

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

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/162661: commit references a PR
Date: Sat, 10 Mar 2012 11:26:04 +0000 (UTC)

 Author: gavin
 Date: Sat Mar 10 11:25:53 2012
 New Revision: 232779
 URL: http://svn.freebsd.org/changeset/base/232779
 
 Log:
   Move determination of socket buffer sizes from startup to the first time a
   socket is used.  The previous code structure assumed that AF_INET sockets
   were always available, which is an invalid assumption on IPv6-only systems.
   
   This merges the fololowing revisions from NetBSD:
   src/usr.bin/ftp/main.c 1.120
   src/usr.bin/ftp/util.c 1.156
   
   PR:		bin/162661
   Tested by:	bz
   Obtained from:	NetBSD
   MFC after:	1 week
 
 Modified:
   head/contrib/tnftp/src/main.c
   head/contrib/tnftp/src/util.c
 
 Modified: head/contrib/tnftp/src/main.c
 ==============================================================================
 --- head/contrib/tnftp/src/main.c	Sat Mar 10 10:54:52 2012	(r232778)
 +++ head/contrib/tnftp/src/main.c	Sat Mar 10 11:25:53 2012	(r232779)
 @@ -146,9 +146,8 @@ main(int volatile argc, char **volatile 
  	struct passwd *pw;
  	char *cp, *ep, *anonpass, *upload_path, *src_addr;
  	const char *anonuser;
 -	int dumbterm, s, isupload;
 +	int dumbterm, isupload;
  	size_t len;
 -	socklen_t slen;
  
  	tzset();
  #if 0	/* tnftp */	/* XXX */
 @@ -213,35 +212,6 @@ main(int volatile argc, char **volatile 
  	if (cp != NULL && strlcpy(netrc, cp, sizeof(netrc)) >= sizeof(netrc))
  		errx(1, "$NETRC `%s': %s", cp, strerror(ENAMETOOLONG));
  
 -	/*
 -	 * Get the default socket buffer sizes if we don't already have them.
 -	 * It doesn't matter which socket we do this to, because on the first
 -	 * call no socket buffer sizes will have been modified, so we are
 -	 * guaranteed to get the system defaults.
 -	 */
 -	s = socket(AF_INET, SOCK_STREAM, 0);
 -	if (s == -1)
 -		err(1, "Can't create socket to determine default socket sizes");
 -	slen = sizeof(rcvbuf_size);
 -	if (getsockopt(s, SOL_SOCKET, SO_RCVBUF,
 -	    (void *)&rcvbuf_size, &slen) == -1)
 -		err(1, "Unable to get default rcvbuf size");
 -	slen = sizeof(sndbuf_size);
 -	if (getsockopt(s, SOL_SOCKET, SO_SNDBUF,
 -	    (void *)&sndbuf_size, &slen) == -1)
 -		err(1, "Unable to get default sndbuf size");
 -	(void)close(s);
 -					/* sanity check returned buffer sizes */
 -	if (rcvbuf_size <= 0)
 -		rcvbuf_size = 8 * 1024;
 -	if (sndbuf_size <= 0)
 -		sndbuf_size = 8 * 1024;
 -
 -	if (sndbuf_size > 8 * 1024 * 1024)
 -		sndbuf_size = 8 * 1024 * 1024;
 -	if (rcvbuf_size > 8 * 1024 * 1024)
 -		rcvbuf_size = 8 * 1024 * 1024;
 -
  	marg_sl = ftp_sl_init();
  	if ((tmpdir = getenv("TMPDIR")) == NULL)
  		tmpdir = _PATH_TMP;
 
 Modified: head/contrib/tnftp/src/util.c
 ==============================================================================
 --- head/contrib/tnftp/src/util.c	Sat Mar 10 10:54:52 2012	(r232778)
 +++ head/contrib/tnftp/src/util.c	Sat Mar 10 11:25:53 2012	(r232779)
 @@ -1060,6 +1060,32 @@ strsuftoi(const char *arg)
  void
  setupsockbufsize(int sock)
  {
 +	socklen_t slen;
 +
 +	if (0 == rcvbuf_size) {
 +		slen = sizeof(rcvbuf_size);
 +		if (getsockopt(sock, SOL_SOCKET, SO_RCVBUF,
 +		    (void *)&rcvbuf_size, &slen) == -1)
 +			err(1, "Unable to determine rcvbuf size");
 +		if (rcvbuf_size <= 0)
 +			rcvbuf_size = 8 * 1024;
 +		if (rcvbuf_size > 8 * 1024 * 1024)
 +			rcvbuf_size = 8 * 1024 * 1024;
 +		DPRINTF("setupsockbufsize: rcvbuf_size determined as %d\n",
 +		    rcvbuf_size);
 +	}
 +	if (0 == sndbuf_size) {
 +		slen = sizeof(sndbuf_size);
 +		if (getsockopt(sock, SOL_SOCKET, SO_SNDBUF,
 +		    (void *)&sndbuf_size, &slen) == -1)
 +			err(1, "Unable to determine sndbuf size");
 +		if (sndbuf_size <= 0)
 +			sndbuf_size = 8 * 1024;
 +		if (sndbuf_size > 8 * 1024 * 1024)
 +			sndbuf_size = 8 * 1024 * 1024;
 +		DPRINTF("setupsockbufsize: sndbuf_size determined as %d\n",
 +		    sndbuf_size);
 +	}
  
  	if (setsockopt(sock, SOL_SOCKET, SO_SNDBUF,
  	    (void *)&sndbuf_size, sizeof(sndbuf_size)) == -1)
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: open->patched 
State-Changed-By: gavin 
State-Changed-When: Sun Mar 11 19:14:35 UTC 2012 
State-Changed-Why:  
Fixed in head with r232779, MFC in one week. 

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

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/162661: commit references a PR
Date: Mon, 16 Apr 2012 12:49:32 +0000 (UTC)

 Author: gavin
 Date: Mon Apr 16 12:49:19 2012
 New Revision: 234340
 URL: http://svn.freebsd.org/changeset/base/234340
 
 Log:
   Merge r232779 from head:
     Move determination of socket buffer sizes from startup to the first time
     a socket is used.  The previous code structure assumed that AF_INET
     sockets were always available, which is an invalid assumption on
     IPv6-only systems.
   
     This merges the fololowing revisions from NetBSD:
     src/usr.bin/ftp/main.c 1.120
     src/usr.bin/ftp/util.c 1.156
   
   PR:		bin/162661
   Obtained from:	NetBSD
 
 Modified:
   stable/9/contrib/tnftp/src/main.c
   stable/9/contrib/tnftp/src/util.c
 Directory Properties:
   stable/9/contrib/tnftp/   (props changed)
 
 Modified: stable/9/contrib/tnftp/src/main.c
 ==============================================================================
 --- stable/9/contrib/tnftp/src/main.c	Mon Apr 16 10:43:06 2012	(r234339)
 +++ stable/9/contrib/tnftp/src/main.c	Mon Apr 16 12:49:19 2012	(r234340)
 @@ -146,9 +146,8 @@ main(int volatile argc, char **volatile 
  	struct passwd *pw;
  	char *cp, *ep, *anonpass, *upload_path, *src_addr;
  	const char *anonuser;
 -	int dumbterm, s, isupload;
 +	int dumbterm, isupload;
  	size_t len;
 -	socklen_t slen;
  
  	tzset();
  #if 0	/* tnftp */	/* XXX */
 @@ -213,35 +212,6 @@ main(int volatile argc, char **volatile 
  	if (cp != NULL && strlcpy(netrc, cp, sizeof(netrc)) >= sizeof(netrc))
  		errx(1, "$NETRC `%s': %s", cp, strerror(ENAMETOOLONG));
  
 -	/*
 -	 * Get the default socket buffer sizes if we don't already have them.
 -	 * It doesn't matter which socket we do this to, because on the first
 -	 * call no socket buffer sizes will have been modified, so we are
 -	 * guaranteed to get the system defaults.
 -	 */
 -	s = socket(AF_INET, SOCK_STREAM, 0);
 -	if (s == -1)
 -		err(1, "Can't create socket to determine default socket sizes");
 -	slen = sizeof(rcvbuf_size);
 -	if (getsockopt(s, SOL_SOCKET, SO_RCVBUF,
 -	    (void *)&rcvbuf_size, &slen) == -1)
 -		err(1, "Unable to get default rcvbuf size");
 -	slen = sizeof(sndbuf_size);
 -	if (getsockopt(s, SOL_SOCKET, SO_SNDBUF,
 -	    (void *)&sndbuf_size, &slen) == -1)
 -		err(1, "Unable to get default sndbuf size");
 -	(void)close(s);
 -					/* sanity check returned buffer sizes */
 -	if (rcvbuf_size <= 0)
 -		rcvbuf_size = 8 * 1024;
 -	if (sndbuf_size <= 0)
 -		sndbuf_size = 8 * 1024;
 -
 -	if (sndbuf_size > 8 * 1024 * 1024)
 -		sndbuf_size = 8 * 1024 * 1024;
 -	if (rcvbuf_size > 8 * 1024 * 1024)
 -		rcvbuf_size = 8 * 1024 * 1024;
 -
  	marg_sl = ftp_sl_init();
  	if ((tmpdir = getenv("TMPDIR")) == NULL)
  		tmpdir = _PATH_TMP;
 
 Modified: stable/9/contrib/tnftp/src/util.c
 ==============================================================================
 --- stable/9/contrib/tnftp/src/util.c	Mon Apr 16 10:43:06 2012	(r234339)
 +++ stable/9/contrib/tnftp/src/util.c	Mon Apr 16 12:49:19 2012	(r234340)
 @@ -1060,6 +1060,32 @@ strsuftoi(const char *arg)
  void
  setupsockbufsize(int sock)
  {
 +	socklen_t slen;
 +
 +	if (0 == rcvbuf_size) {
 +		slen = sizeof(rcvbuf_size);
 +		if (getsockopt(sock, SOL_SOCKET, SO_RCVBUF,
 +		    (void *)&rcvbuf_size, &slen) == -1)
 +			err(1, "Unable to determine rcvbuf size");
 +		if (rcvbuf_size <= 0)
 +			rcvbuf_size = 8 * 1024;
 +		if (rcvbuf_size > 8 * 1024 * 1024)
 +			rcvbuf_size = 8 * 1024 * 1024;
 +		DPRINTF("setupsockbufsize: rcvbuf_size determined as %d\n",
 +		    rcvbuf_size);
 +	}
 +	if (0 == sndbuf_size) {
 +		slen = sizeof(sndbuf_size);
 +		if (getsockopt(sock, SOL_SOCKET, SO_SNDBUF,
 +		    (void *)&sndbuf_size, &slen) == -1)
 +			err(1, "Unable to determine sndbuf size");
 +		if (sndbuf_size <= 0)
 +			sndbuf_size = 8 * 1024;
 +		if (sndbuf_size > 8 * 1024 * 1024)
 +			sndbuf_size = 8 * 1024 * 1024;
 +		DPRINTF("setupsockbufsize: sndbuf_size determined as %d\n",
 +		    sndbuf_size);
 +	}
  
  	if (setsockopt(sock, SOL_SOCKET, SO_SNDBUF,
  	    (void *)&sndbuf_size, sizeof(sndbuf_size)) == -1)
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: patched->closed 
State-Changed-By: gavin 
State-Changed-When: Sat Apr 21 19:12:45 UTC 2012 
State-Changed-Why:  
Fixed in head and stable/9.  Thanks for the report. 

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