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