bin/162661: [patch] ftp(8) is giving up on IPv6
Charlie Root
email at forged.com
Fri Nov 18 13:00:19 UTC 2011
>Number: 162661
>Category: bin
>Synopsis: [patch] ftp(8) is giving up on IPv6
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Fri Nov 18 13:00:18 UTC 2011
>Closed-Date:
>Last-Modified:
>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 at 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:
>Unformatted:
More information about the freebsd-bugs
mailing list