1*f3ac6781SToomas Soome /*
2*f3ac6781SToomas Soome * Copyright (C) 2003 by Darren Reed.
3*f3ac6781SToomas Soome *
4*f3ac6781SToomas Soome * See the IPFILTER.LICENCE file for details on licencing.
5*f3ac6781SToomas Soome *
6*f3ac6781SToomas Soome * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
7*f3ac6781SToomas Soome * Use is subject to license terms.
8*f3ac6781SToomas Soome */
9*f3ac6781SToomas Soome
10*f3ac6781SToomas Soome #include "ipf.h"
11*f3ac6781SToomas Soome
hostname(v,ip)12*f3ac6781SToomas Soome char *hostname(v, ip)
13*f3ac6781SToomas Soome int v;
14*f3ac6781SToomas Soome void *ip;
15*f3ac6781SToomas Soome {
16*f3ac6781SToomas Soome static char hostbuf[MAXHOSTNAMELEN+1];
17*f3ac6781SToomas Soome struct hostent *hp;
18*f3ac6781SToomas Soome struct in_addr ipa;
19*f3ac6781SToomas Soome struct netent *np;
20*f3ac6781SToomas Soome
21*f3ac6781SToomas Soome if (v == 4) {
22*f3ac6781SToomas Soome ipa.s_addr = *(u_32_t *)ip;
23*f3ac6781SToomas Soome if (ipa.s_addr == htonl(0xfedcba98))
24*f3ac6781SToomas Soome return "test.host.dots";
25*f3ac6781SToomas Soome }
26*f3ac6781SToomas Soome
27*f3ac6781SToomas Soome if ((opts & OPT_NORESOLVE) == 0) {
28*f3ac6781SToomas Soome if (v == 4) {
29*f3ac6781SToomas Soome hp = gethostbyaddr(ip, 4, AF_INET);
30*f3ac6781SToomas Soome if (hp != NULL && hp->h_name != NULL &&
31*f3ac6781SToomas Soome *hp->h_name != '\0') {
32*f3ac6781SToomas Soome strncpy(hostbuf, hp->h_name, sizeof(hostbuf));
33*f3ac6781SToomas Soome hostbuf[sizeof(hostbuf) - 1] = '\0';
34*f3ac6781SToomas Soome return hostbuf;
35*f3ac6781SToomas Soome }
36*f3ac6781SToomas Soome
37*f3ac6781SToomas Soome np = getnetbyaddr(ipa.s_addr, AF_INET);
38*f3ac6781SToomas Soome if (np != NULL && np->n_name != NULL &&
39*f3ac6781SToomas Soome *np->n_name != '\0') {
40*f3ac6781SToomas Soome strncpy(hostbuf, np->n_name, sizeof(hostbuf));
41*f3ac6781SToomas Soome hostbuf[sizeof(hostbuf) - 1] = '\0';
42*f3ac6781SToomas Soome return hostbuf;
43*f3ac6781SToomas Soome }
44*f3ac6781SToomas Soome }
45*f3ac6781SToomas Soome }
46*f3ac6781SToomas Soome
47*f3ac6781SToomas Soome if (v == 4) {
48*f3ac6781SToomas Soome return inet_ntoa(ipa);
49*f3ac6781SToomas Soome }
50*f3ac6781SToomas Soome #ifdef USE_INET6
51*f3ac6781SToomas Soome (void) inet_ntop(AF_INET6, ip, hostbuf, sizeof(hostbuf) - 1);
52*f3ac6781SToomas Soome hostbuf[MAXHOSTNAMELEN] = '\0';
53*f3ac6781SToomas Soome return hostbuf;
54*f3ac6781SToomas Soome #else
55*f3ac6781SToomas Soome return "IPv6";
56*f3ac6781SToomas Soome #endif
57*f3ac6781SToomas Soome }
58