From owner-FreeBSD-users-jp@jp.FreeBSD.org Tue Nov 17 19:27:02 2009
Received: (from daemon@localhost)
	by castle.jp.FreeBSD.org (8.11.6p2+3.4W/8.11.3) id nAHAR2i08183;
	Tue, 17 Nov 2009 19:27:02 +0900 (JST)
	(envelope-from owner-FreeBSD-users-jp@jp.FreeBSD.org)
Received: from asuka.mahoroba.org (root@ent.mahoroba.org [2001:2f0:104:8010::1])
	by castle.jp.FreeBSD.org (8.11.6p2+3.4W/8.11.3) with ESMTP/inet6 id nAHAR1C08176
	for <FreeBSD-users-jp@jp.FreeBSD.org>; Tue, 17 Nov 2009 19:27:01 +0900 (JST)
	(envelope-from ume@mahoroba.org)
Received: from ameno.mahoroba.org (IDENT:+yt/MjVS5BLRGKeFly7a9hsKdYeA5dghFbc20r5gwz+kRB5+ROKX7zbtwv39LURR@ameno.mahoroba.org [IPv6:2001:2f0:104:8010:20a:79ff:fe69:ee6b])
	(user=ume mech=CRAM-MD5 bits=0)
	by asuka.mahoroba.org (8.14.3/8.14.3) with ESMTP/inet6 id nAHAQtCE051978
	(version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO)
	for <FreeBSD-users-jp@jp.FreeBSD.org>; Tue, 17 Nov 2009 19:26:55 +0900 (JST)
	(envelope-from ume@mahoroba.org)
Message-ID: <ygews1p1m6o.wl%ume@mahoroba.org>
From: Hajimu UMEMOTO <ume@mahoroba.org>
To: FreeBSD-users-jp@jp.FreeBSD.org
In-Reply-To: <20091117.164714.104065738.candy@kgc.co.jp>
References: <20091117.144852.41666249.candy@kgc.co.jp>
	<ygey6m51vgu.wl%ume@mahoroba.org>
	<20091117.164714.104065738.candy@kgc.co.jp>
User-Agent: xcite1.58> Wanderlust/2.14.0 (Africa) SEMI/1.14.6 (Maruoka)
 FLIM/1.14.9 (=?ISO-2022-JP-2?B?R29qGyQoRCtXGyhC?=) APEL/10.7 Emacs/23.1
 (i386-portbld-freebsd8.0) MULE/6.0 (HANACHIRUSATO)
X-Operating-System: FreeBSD 8.0-RC3
X-PGP-Key: http://www.imasy.or.jp/~ume/publickey.asc
X-PGP-Fingerprint: 1F00 0B9E 2164 70FC 6DC5  BF5F 04E9 F086 BF90 71FE
Organization: Internet Mutual Aid Society, YOKOHAMA
MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka")
Content-Type: text/plain; charset=ISO-2022-JP
X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.2.3 (asuka.mahoroba.org [IPv6:2001:2f0:104:8010::1]); Tue, 17 Nov 2009 19:26:55 +0900 (JST)
X-Virus-Scanned: clamav-milter 0.95.3 at asuka.mahoroba.org
X-Virus-Status: Clean
X-Spam-Status: No, score=-2.3 required=5.0 tests=AWL,BAYES_00 autolearn=ham
	version=3.2.5
X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on asuka.mahoroba.org
Reply-To: FreeBSD-users-jp@jp.FreeBSD.org
Precedence: list
Date: Tue, 17 Nov 2009 19:26:55 +0900
X-Sequence: FreeBSD-users-jp 92600
Subject: [FreeBSD-users-jp 92600] Re: w -n?
Sender: owner-FreeBSD-users-jp@jp.FreeBSD.org
X-Originator: ume@mahoroba.org
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+060209

$BG_K\$G$9!#(B

>>> Tue, 17 Nov 2009 16:47:14 +0900 $B$N9o$K!V(Bcandy$B!W!"$9$J$o$A(B
>>> candy@kgc.co.jp $B;a[)$/(B

candy> $B$?$@!"@h$N%a!<%k$K=q$$$?DL$j!"(B4.11 $B$N(B w.c $B$K$O(B
candy> $B!V%[%9%HL>$C$]$+$C$?$i@50z$-$9$k!W(B
candy> $B%3!<%I$,F~$C$F$$$k$N$G(B IP address $BI=<($5$l$^$9!#(B

$B$J$k$[$I!"5$$E$-$^$;$s$G$7$?!#(B
http://www.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/w/w.c#rev1.48 $B$K$h$k(B
$B$H!"%[%9%HL>$+$i$@$H(B IPv4 $B$+(B IPv6 $B$+J,$+$i$J$$$+$i@50z$-;_$a$^$9$H$$$&(B
$B$3$H$G$9$M!#(B
$B3N$+$K(B address family $B$,J,$+$i$J$$$N$O$=$NDL$j$G$9$,!"$=$b$=$b(B A RR $B$^(B
$B$?$O(B AAAA RR $B$,0l$D$7$+IU$$$F$J$$$N$G$"$l$P!"I=<($7$F$bNI$5$2$J5$$,$7$^(B
$B$9$M!#(B
$B$H$$$&$3$H$G!"$3$s$J46$8$G$I$&$G$7$g$&(B?
$B%F%9%HIT==J,$K$D$-Cm0U!#(B(__)

Index: usr.bin/w/w.c
diff -u -p usr.bin/w/w.c.orig usr.bin/w/w.c
--- usr.bin/w/w.c.orig	2009-10-25 10:10:29.000000000 +0900
+++ usr.bin/w/w.c	2009-11-17 17:10:17.188486703 +0900
@@ -348,6 +348,7 @@ main(int argc, char *argv[])
 
 	for (ep = ehead; ep != NULL; ep = ep->next) {
 		char host_buf[UT_HOSTSIZE + 1];
+		struct addrinfo hints, *res;
 		struct sockaddr_storage ss;
 		struct sockaddr *sa = (struct sockaddr *)&ss;
 		struct sockaddr_in *lsin = (struct sockaddr_in *)&ss;
@@ -365,23 +366,37 @@ main(int argc, char *argv[])
 			else
 				x_suffix = NULL;
 		}
+
+		isaddr = 0;
+		memset(&ss, '\0', sizeof(ss));
+		if (inet_pton(AF_INET6, p, &lsin6->sin6_addr) == 1) {
+			lsin6->sin6_len = sizeof(*lsin6);
+			lsin6->sin6_family = AF_INET6;
+			isaddr = 1;
+		} else if (inet_pton(AF_INET, p, &lsin->sin_addr) == 1) {
+			lsin->sin_len = sizeof(*lsin);
+			lsin->sin_family = AF_INET;
+			isaddr = 1;
+		}
 		if (!nflag) {
 			/* Attempt to change an IP address into a name */
-			isaddr = 0;
-			memset(&ss, '\0', sizeof(ss));
-			if (inet_pton(AF_INET6, p, &lsin6->sin6_addr) == 1) {
-				lsin6->sin6_len = sizeof(*lsin6);
-				lsin6->sin6_family = AF_INET6;
-				isaddr = 1;
-			} else if (inet_pton(AF_INET, p, &lsin->sin_addr) == 1) {
-				lsin->sin_len = sizeof(*lsin);
-				lsin->sin_family = AF_INET;
-				isaddr = 1;
-			}
 			if (isaddr && realhostname_sa(fn, sizeof(fn), sa,
 			    sa->sa_len) == HOSTNAME_FOUND)
 				p = fn;
+		} else if (!isaddr) {
+			memset(&hints, 0, sizeof(hints));
+			hints.ai_family = AF_UNSPEC;
+			hints.ai_socktype = SOCK_STREAM;
+			if (getaddrinfo(p, NULL, &hints, &res) == 0) {
+				if (res->ai_next == NULL &&
+				    getnameinfo(res->ai_addr, res->ai_addrlen,
+					fn, sizeof(fn), NULL, 0,
+					NI_NUMERICHOST) == 0)
+					p = fn;
+				freeaddrinfo(res);
+			}
 		}
+
 		if (x_suffix) {
 			(void)snprintf(buf, sizeof(buf), "%s:%s", p, x_suffix);
 			p = buf;

--
$BG_K\(B $BH%(B $B!w(B $B%$%s%?!<%M%C%H8_=u2q2#IM(B  http://www.imasy.org/~ume/
ume@mahoroba.org  ume@{,jp.}FreeBSD.org
$B%W%m%0%i%`$O=q$$$??M$N0U?^$G$O$J$/=q$+$l$?DL$jF0$/(B  I hate Modula-3 :-)
