/*
* Copyright (C) 1993-2005 by Darren Reed.
*
* See the IPFILTER.LICENCE file for details on licencing.
*
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#pragma ident "%Z%%M% %I% %E% SMI"
#include "ipf.h"
int gethost(name, hostp, use_inet6)
char *name;
i6addr_t *hostp;
int use_inet6;
{
struct addrinfo hints, *ai;
struct netent *n;
int error;
if (!strcmp(name, "test.host.dots")) {
hostp->in4.s_addr = htonl(0xfedcba98);
return 0;
}
if (!strcmp(name, "<thishost>"))
name = thishost;
bzero(&hints, sizeof (hints));
if (use_inet6 == 0)
hints.ai_family = AF_INET;
else
hints.ai_family = AF_INET6;
error = getaddrinfo(name, NULL, &hints, &ai);
if ((error == 0) && (ai != NULL) && (ai->ai_addr != NULL)) {
switch (ai->ai_family)
{
case AF_INET:
hostp->in4 = ((struct sockaddr_in *)
ai->ai_addr)->sin_addr;
break;
case AF_INET6:
hostp->in6 = ((struct sockaddr_in6 *)
ai->ai_addr)->sin6_addr;
break;
default:
break;
}
freeaddrinfo(ai);
return 0;
}
if (ai != NULL)
freeaddrinfo(ai);
if (use_inet6 == 0) {
n = getnetbyname(name);
if (n != NULL) {
hostp->in4.s_addr = htonl(n->n_net);
return 0;
}
}
return -1;
}