Date: Thu, 17 Jan 2002 12:07:28 +1100 (EST) From: "Tim J. Robbins" <tim@robbins.dropbear.id.au> To: FreeBSD-gnats-submit@freebsd.org Subject: bin/33971: finger could check if T/TCP is disabled and imply -T Message-ID: <200201170107.g0H17So50756@raven.robbins.dropbear.id.au>
next in thread | raw e-mail | index | archive | help
>Number: 33971 >Category: bin >Synopsis: finger could check if T/TCP is disabled and imply -T >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Wed Jan 16 17:20:01 PST 2002 >Closed-Date: >Last-Modified: >Originator: Tim J. Robbins >Release: FreeBSD 4.5-RC i386 >Organization: >Environment: System: FreeBSD raven.robbins.dropbear.id.au 4.5-RC FreeBSD 4.5-RC #3: Sat Jan 12 17:11:56 EST 2002 tim@raven.robbins.dropbear.id.au:/usr/obj/usr/src/sys/RAVEN i386 >Description: /usr/bin/finger supports T/TCP, and this support may be disabled with the -T option. The way the T/TCP support is implemented in `finger' causes strange error messages ("read: Connection refused") and makes it take longer than usual to give these errors on what the source code terms "broken hosts". >How-To-Repeat: >Fix: Use net.inet.tcp.rfc1644 sysctl to determine whether T/TCP has been enabled. Imply the -T option if it has. --- net.c.old Thu Jan 17 11:50:17 2002 +++ net.c Thu Jan 17 11:57:23 2002 @@ -46,6 +46,7 @@ #include <sys/types.h> #include <sys/param.h> #include <sys/socket.h> +#include <sys/sysctl.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> @@ -88,6 +89,8 @@ char *alist[1], *host; struct iovec iov[3]; struct msghdr msg; + int ttcp; + size_t ttcp_len; if (!(host = rindex(name, '@'))) return; @@ -140,8 +143,16 @@ iov[msg.msg_iovlen].iov_base = "\r\n"; iov[msg.msg_iovlen++].iov_len = 2; + /* Determine whether we can use T/TCP (RFC 1644) */ + ttcp_len = sizeof (ttcp); + if (sysctlbyname("net.inet.tcp.rfc1644", &ttcp, &ttcp_len, NULL, 0)) + ttcp = 0; + /* -T disables T/TCP: compatibility option to finger broken hosts */ - if (Tflag && connect(s, (struct sockaddr *)&sin, sizeof (sin))) { + if (Tflag) + ttcp = 0; + + if (!ttcp && connect(s, (struct sockaddr *)&sin, sizeof (sin))) { perror("finger: connect"); return; } >Release-Note: >Audit-Trail: >Unformatted: To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200201170107.g0H17So50756>