Package: net-tools
Version: 1.60-19
Severity: wishlist
This fix is from [EMAIL PROTECTED] However, I think it needs work
before it can be merged with the latest cvs.
--- a/hostname.c
+++ b/hostname.c
@@ -36,6 +36,10 @@
#include <getopt.h>
#include <string.h>
#include <netdb.h>
+#ifdef IPV6
+#include <sys/socket.h> /* for PF_INET6 */
+#include <sys/types.h> /* for inet_ntop */
+#endif /* IPV6 */
#include <errno.h>
#include <sys/param.h>
#include <netinet/in.h>
@@ -125,15 +129,23 @@ static void setdname(char *dname)
static void showhname(char *hname, int c)
{
struct hostent *hp;
+#ifdef IPV6
+ struct in6_addr **ip6;
+#endif /* IPV6 */
register char *p, **alias;
struct in_addr **ip;
if (opt_v)
fprintf(stderr, _("Resolving `%s' ...\n"), hname);
- if (!(hp = gethostbyname(hname))) {
+ if (
+#ifdef IPV6
+ !(hp = gethostbyname2(hname, PF_INET6)) &&
+#endif /* IPV6 */
+ !(hp = gethostbyname(hname))) {
herror(program_name);
exit(1);
}
+
if (opt_v) {
fprintf(stderr, _("Result: h_name=`%s'\n"),
hp->h_name);
@@ -142,11 +154,28 @@ static void showhname(char *hname, int c)
while (alias[0])
fprintf(stderr, _("Result: h_aliases=`%s'\n"),
*alias++);
-
- ip = (struct in_addr **) hp->h_addr_list;
- while (ip[0])
- fprintf(stderr, _("Result: h_addr_list=`%s'\n"),
- inet_ntoa(**ip++));
+#ifdef IPV6
+ if(hp->h_addrtype == PF_INET6) {
+ char addr[INET6_ADDRSTRLEN + 1];
+ addr[INET6_ADDRSTRLEN] = '\0';
+ ip6 = (struct in6_addr **) hp->h_addr_list;
+ while(ip6[0]) {
+ if(inet_ntop(PF_INET6, *ip6++, addr, INET6_ADDRSTRLEN))
+ fprintf(stderr, _("Result: h_addr_list=`%s'\n"), addr);
+ else if(errno == EAFNOSUPPORT)
+ fprintf(stderr, _("%s: protocol family not supported\n"),
+ program_name);
+ else if(errno == ENOSPC)
+ fprintf(stderr, _("%s: name too long\n"), program_name);
+ }
+ } else
+#endif /* IPV6 */
+ {
+ ip = (struct in_addr **) hp->h_addr_list;
+ while (ip[0])
+ fprintf(stderr, _("Result: h_addr_list=`%s'\n"),
+ inet_ntoa(**ip++));
+ }
}
if (!(p = strchr(hp->h_name, '.')) && (c == 'd'))
return;
@@ -158,10 +187,32 @@ static void showhname(char *hname, int c)
printf("\n");
break;
case 'i':
- while (hp->h_addr_list[0])
- printf("%s ", inet_ntoa(*(struct in_addr *) *hp->h_addr_list++));
- printf("\n");
- break;
+#ifdef IPV6
+ if(hp->h_addrtype == PF_INET6) {
+ char addr[INET6_ADDRSTRLEN + 1];
+ addr[INET6_ADDRSTRLEN] = '\0';
+ while(hp->h_addr_list[0]) {
+ if(inet_ntop(PF_INET6, (struct in6_addr *)*hp->h_addr_list++,
+ addr, INET6_ADDRSTRLEN))
+ printf("%s ", addr);
+ else if(errno == EAFNOSUPPORT) {
+ fprintf(stderr, _("\n%s: protocol family not supported\n"),
+ program_name);
+ exit(1);
+ } else if(errno == ENOSPC) {
+ fprintf(stderr, _("\n%s: name too long\n"), program_name);
+ exit(1);
+ }
+ printf("\n");
+ }
+ } else
+#endif /* IPV6 */
+ {
+ while (hp->h_addr_list[0])
+ printf("%s ", inet_ntoa(*(struct in_addr *)*hp->h_addr_list++));
+ printf("\n");
+ }
+ break;
case 'd':
printf("%s\n", ++p);
break;
--
1.5.5
-- System Information:
Debian Release: lenny/sid
APT prefers unstable
APT policy: (990, 'unstable')
Architecture: i386 (i686)
Kernel: Linux 2.6.24.4 (SMP w/2 CPU cores; PREEMPT)
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)
Shell: /bin/sh linked to /bin/bash
Versions of packages net-tools depends on:
ii libc6 2.7-8 GNU C Library: Shared libraries
net-tools recommends no packages.
-- no debconf information
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]