xref: /illumos-gate/usr/src/cmd/ipf/lib/hostname.c (revision f3ac678143127d4c6c1793fadabb5ded04e127b6)
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