1ab25eeb5Syz155240 /*
2ab25eeb5Syz155240 * Copyright (C) 1993-2005 by Darren Reed.
3*9b4c7145Sjojemann *
4ab25eeb5Syz155240 * See the IPFILTER.LICENCE file for details on licencing.
5*9b4c7145Sjojemann *
6*9b4c7145Sjojemann * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
7*9b4c7145Sjojemann * Use is subject to license terms.
8ab25eeb5Syz155240 */
9ab25eeb5Syz155240
10*9b4c7145Sjojemann #pragma ident "%Z%%M% %I% %E% SMI"
11*9b4c7145Sjojemann
127c478bd9Sstevel@tonic-gate #include "ipf.h"
137c478bd9Sstevel@tonic-gate
gethost(name,hostp,use_inet6)14*9b4c7145Sjojemann int gethost(name, hostp, use_inet6)
157c478bd9Sstevel@tonic-gate char *name;
16*9b4c7145Sjojemann i6addr_t *hostp;
17*9b4c7145Sjojemann int use_inet6;
187c478bd9Sstevel@tonic-gate {
19*9b4c7145Sjojemann struct addrinfo hints, *ai;
20ab25eeb5Syz155240 struct netent *n;
21*9b4c7145Sjojemann int error;
227c478bd9Sstevel@tonic-gate
23ab25eeb5Syz155240 if (!strcmp(name, "test.host.dots")) {
24*9b4c7145Sjojemann hostp->in4.s_addr = htonl(0xfedcba98);
25ab25eeb5Syz155240 return 0;
26ab25eeb5Syz155240 }
27ab25eeb5Syz155240
287c478bd9Sstevel@tonic-gate if (!strcmp(name, "<thishost>"))
297c478bd9Sstevel@tonic-gate name = thishost;
307c478bd9Sstevel@tonic-gate
31*9b4c7145Sjojemann bzero(&hints, sizeof (hints));
32*9b4c7145Sjojemann if (use_inet6 == 0)
33*9b4c7145Sjojemann hints.ai_family = AF_INET;
34*9b4c7145Sjojemann else
35*9b4c7145Sjojemann hints.ai_family = AF_INET6;
36*9b4c7145Sjojemann
37*9b4c7145Sjojemann error = getaddrinfo(name, NULL, &hints, &ai);
38*9b4c7145Sjojemann
39*9b4c7145Sjojemann if ((error == 0) && (ai != NULL) && (ai->ai_addr != NULL)) {
40*9b4c7145Sjojemann switch (ai->ai_family)
41*9b4c7145Sjojemann {
42*9b4c7145Sjojemann case AF_INET:
43*9b4c7145Sjojemann hostp->in4 = ((struct sockaddr_in *)
44*9b4c7145Sjojemann ai->ai_addr)->sin_addr;
45*9b4c7145Sjojemann break;
46*9b4c7145Sjojemann case AF_INET6:
47*9b4c7145Sjojemann hostp->in6 = ((struct sockaddr_in6 *)
48*9b4c7145Sjojemann ai->ai_addr)->sin6_addr;
49*9b4c7145Sjojemann break;
50*9b4c7145Sjojemann default:
51*9b4c7145Sjojemann break;
527c478bd9Sstevel@tonic-gate }
53*9b4c7145Sjojemann freeaddrinfo(ai);
54*9b4c7145Sjojemann return 0;
557c478bd9Sstevel@tonic-gate }
56ab25eeb5Syz155240
57*9b4c7145Sjojemann if (ai != NULL)
58*9b4c7145Sjojemann freeaddrinfo(ai);
59*9b4c7145Sjojemann
60*9b4c7145Sjojemann if (use_inet6 == 0) {
61ab25eeb5Syz155240 n = getnetbyname(name);
62ab25eeb5Syz155240 if (n != NULL) {
63*9b4c7145Sjojemann hostp->in4.s_addr = htonl(n->n_net);
64ab25eeb5Syz155240 return 0;
65ab25eeb5Syz155240 }
66*9b4c7145Sjojemann }
677c478bd9Sstevel@tonic-gate return -1;
687c478bd9Sstevel@tonic-gate }
69