tcpdump mailing list archives
[PATCH 1/3] Add getnameinfo support to getname and getname6.
From: Miroslav Lichvar <mlichvar () redhat com>
Date: Fri, 14 Aug 2009 12:19:10 +0200
--- addrtoname.c | 44 ++++++++++++++++++++++++++++++++++++-------- 1 files changed, 36 insertions(+), 8 deletions(-) diff --git a/addrtoname.c b/addrtoname.c index e67d114..593840c 100644 --- a/addrtoname.c +++ b/addrtoname.c @@ -224,7 +224,6 @@ static u_int32_t f_localnet; const char * getname(const u_char *ap) { - register struct hostent *hp; u_int32_t addr; static struct hnamemem *p; /* static for longjmp() */ @@ -236,6 +235,7 @@ getname(const u_char *ap) } p->addr = addr; p->nxt = newhnamemem(); + p->name = NULL; /* * Print names unless: @@ -246,12 +246,26 @@ getname(const u_char *ap) */ if (!nflag && (addr & f_netmask) == f_localnet) { +#ifdef HAVE_GETNAMEINFO + struct sockaddr_in sa; + char hbuf[NI_MAXHOST]; + + memset(&sa, 0, sizeof (sa)); + sa.sin_family = AF_INET; + sa.sin_addr.s_addr = addr; + if (!getnameinfo((struct sockaddr *)&sa, sizeof (sa), + hbuf, sizeof (hbuf), NULL, 0, 0)) + p->name = strdup(hbuf); +#else + register struct hostent *hp; hp = gethostbyaddr((char *)&addr, 4, AF_INET); - if (hp) { - char *dotp; - + if (hp) p->name = strdup(hp->h_name); +#endif + if (p->name != NULL) { if (Nflag) { + char *dotp; + /* Remove domain qualifications */ dotp = strchr(p->name, '.'); if (dotp) @@ -272,7 +286,6 @@ getname(const u_char *ap) const char * getname6(const u_char *ap) { - register struct hostent *hp; struct in6_addr addr; static struct h6namemem *p; /* static for longjmp() */ register const char *cp; @@ -286,17 +299,32 @@ getname6(const u_char *ap) } p->addr = addr; p->nxt = newh6namemem(); + p->name = NULL; /* * Do not print names if -n was given. */ if (!nflag) { +#ifdef HAVE_GETNAMEINFO + struct sockaddr_in6 sa; + char hbuf[NI_MAXHOST]; + + memset(&sa, 0, sizeof (sa)); + sa.sin6_family = AF_INET6; + sa.sin6_addr = addr; + if (!getnameinfo((struct sockaddr *)&sa, sizeof (sa), + hbuf, sizeof (hbuf), NULL, 0, 0)) + p->name = strdup(hbuf); +#else + register struct hostent *hp; hp = gethostbyaddr((char *)&addr, sizeof(addr), AF_INET6); - if (hp) { - char *dotp; - + if (hp) p->name = strdup(hp->h_name); +#endif + if (p->name != NULL) { if (Nflag) { + char *dotp; + /* Remove domain qualifications */ dotp = strchr(p->name, '.'); if (dotp) -- 1.6.2.5 - This is the tcpdump-workers list. Visit https://cod.sandelman.ca/ to unsubscribe.
Current thread:
- [PATCH 1/3] Add getnameinfo support to getname and getname6. Miroslav Lichvar (Aug 13)
- [PATCH 2/3] With -C option drop root before opening first savefile. Miroslav Lichvar (Aug 13)
- [PATCH 3/3] Convert port numbers to service names unless -nn is used. Miroslav Lichvar (Aug 13)
- Re: [PATCH 1/3] Add getnameinfo support to getname and getname6. Michael Richardson (Aug 30)
- <Possible follow-ups>
- [PATCH 1/3] Add getnameinfo support to getname and getname6. Miroslav Lichvar (Aug 16)
- Re: [PATCH 1/3] Add getnameinfo support to getname and getname6. Guy Harris (Aug 30)
- Re: [PATCH 1/3] Add getnameinfo support to getname Miroslav Lichvar (Sep 01)
- Re: [PATCH 1/3] Add getnameinfo support to getname and getname6. Guy Harris (Aug 30)
- [PATCH 2/3] With -C option drop root before opening first savefile. Miroslav Lichvar (Aug 13)