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 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