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