mirror of
https://github.com/Stichting-MINIX-Research-Foundation/netbsd.git
synced 2025-09-12 16:46:33 -04:00
77 lines
1.5 KiB
C
77 lines
1.5 KiB
C
/* $NetBSD: gethost.c,v 1.5 2014/06/29 05:06:46 darrenr Exp $ */
|
|
|
|
/*
|
|
* Copyright (C) 2012 by Darren Reed.
|
|
*
|
|
* See the IPFILTER.LICENCE file for details on licencing.
|
|
*
|
|
* Id: gethost.c,v 1.1.1.2 2012/07/22 13:44:38 darrenr Exp $
|
|
*/
|
|
|
|
#include "ipf.h"
|
|
|
|
int gethost(family, name, hostp)
|
|
int family;
|
|
char *name;
|
|
i6addr_t *hostp;
|
|
{
|
|
struct hostent *h;
|
|
struct netent *n;
|
|
u_32_t addr;
|
|
|
|
memset(hostp, 0, sizeof(*hostp));
|
|
if (!strcmp(name, "test.host.dots")) {
|
|
if (family == AF_INET) {
|
|
hostp->in4.s_addr = htonl(0xfedcba98);
|
|
}
|
|
#ifdef USE_INET6
|
|
if (family == AF_INET6) {
|
|
hostp->i6[0] = htonl(0xfe80aa55);
|
|
hostp->i6[1] = htonl(0x12345678);
|
|
hostp->i6[2] = htonl(0x5a5aa5a5);
|
|
hostp->i6[3] = htonl(0xfedcba98);
|
|
}
|
|
#endif
|
|
return 0;
|
|
}
|
|
|
|
if (!strcmp(name, "<thishost>"))
|
|
name = thishost;
|
|
|
|
if (family == AF_INET) {
|
|
h = gethostbyname(name);
|
|
if (h != NULL) {
|
|
if ((h->h_addr != NULL) &&
|
|
(h->h_length == sizeof(addr))) {
|
|
bcopy(h->h_addr, (char *)&addr, sizeof(addr));
|
|
hostp->in4.s_addr = addr;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
n = getnetbyname(name);
|
|
if (n != NULL) {
|
|
hostp->in4.s_addr = htonl(n->n_net & 0xffffffff);
|
|
return 0;
|
|
}
|
|
}
|
|
#ifdef USE_INET6
|
|
if (family == AF_INET6) {
|
|
struct addrinfo hints, *res;
|
|
struct sockaddr_in6 *sin6;
|
|
|
|
memset(&hints, 0, sizeof(hints));
|
|
hints.ai_family = PF_INET6;
|
|
|
|
getaddrinfo(name, NULL, &hints, &res);
|
|
if (res != NULL) {
|
|
sin6 = (struct sockaddr_in6 *)res->ai_addr;
|
|
hostp->in6 = sin6->sin6_addr;
|
|
freeaddrinfo(res);
|
|
return 0;
|
|
}
|
|
}
|
|
#endif
|
|
return -1;
|
|
}
|