blob: 4f6a33b88ed9f18d1f39ffd40f72982a0cbfd989 [file] [log] [blame]
Bernie Innocentif1bc7ff2018-09-11 18:41:37 +09001/* $NetBSD: hostent.h,v 1.2 2013/08/27 09:56:12 christos Exp $ */
2
3/*-
4 * Copyright (c) 2013 The NetBSD Foundation, Inc.
5 * All rights reserved.
6 *
7 * This code is derived from software contributed to The NetBSD Foundation
8 * by Christos Zoulas.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
30 */
Bernie Innocenti189eb502018-10-01 23:10:18 +090031#ifndef NETD_RESOLV_HOSTENT_H
32#define NETD_RESOLV_HOSTENT_H
Bernie Innocentif1bc7ff2018-09-11 18:41:37 +090033
Bernie Innocentif1bc7ff2018-09-11 18:41:37 +090034#include <netdb.h>
Bernie Innocenti64626b32018-09-11 18:55:58 +090035#include <stdio.h>
Bernie Innocentif1bc7ff2018-09-11 18:41:37 +090036
Bernie Innocentif1bc7ff2018-09-11 18:41:37 +090037struct getnamaddr {
Bernie Innocenti64626b32018-09-11 18:55:58 +090038 struct hostent* hp;
39 char* buf;
40 size_t buflen;
Bernie Innocentif1bc7ff2018-09-11 18:41:37 +090041};
42
Bernie Innocentia2cbfb12018-09-12 20:03:11 +090043// /etc/hosts lookup
Hungming Chen56273d72018-12-26 16:14:17 +080044int _hf_gethtbyaddr(const unsigned char* uaddr, int len, int af, getnamaddr* info);
45int _hf_gethtbyname2(const char* name, int af, getnamaddr* info);
Bernie Innocentia2cbfb12018-09-12 20:03:11 +090046hostent* netbsd_gethostent_r(FILE*, struct hostent*, char*, size_t, int*);
Bernie Innocentif1bc7ff2018-09-11 18:41:37 +090047
nuccachen8161c992018-09-11 11:20:00 +080048// Reserved padding for remapping IPv4 address to NAT64 synthesis IPv6 address
49static const char NAT64_PAD[NS_IN6ADDRSZ - NS_INADDRSZ] = {};
50
Bernie Innocenti1f4a9fd2018-09-07 21:10:25 +090051#define HENT_ARRAY(dst, anum, ptr, len) do { \
Bernie Innocenti64626b32018-09-11 18:55:58 +090052 size_t _len = (anum + 1) * sizeof(*dst); \
53 if (_len > len) goto nospc; \
Bernie Innocenti1f4a9fd2018-09-07 21:10:25 +090054 dst = (char**) ptr; \
Bernie Innocenti64626b32018-09-11 18:55:58 +090055 ptr += _len; \
56 len -= _len; \
Bernie Innocenti1f4a9fd2018-09-07 21:10:25 +090057 } while (0)
Bernie Innocentif1bc7ff2018-09-11 18:41:37 +090058
Bernie Innocenti1f4a9fd2018-09-07 21:10:25 +090059#define HENT_COPY(dst, src, slen, ptr, len) do { \
60 if ((size_t) slen > len) goto nospc; \
61 memcpy(ptr, src, (size_t) slen); \
62 dst = ptr; \
63 ptr += slen; \
64 len -= slen; \
65 } while (0)
Bernie Innocentif1bc7ff2018-09-11 18:41:37 +090066
Bernie Innocenti1f4a9fd2018-09-07 21:10:25 +090067#define HENT_SCOPY(dst, src, ptr, len) do { \
Bernie Innocenti64626b32018-09-11 18:55:58 +090068 size_t _len = strlen(src) + 1; \
69 HENT_COPY(dst, src, _len, ptr, len); \
Bernie Innocenti1f4a9fd2018-09-07 21:10:25 +090070 } while (0)
Bernie Innocentif1bc7ff2018-09-11 18:41:37 +090071
Bernie Innocenti189eb502018-10-01 23:10:18 +090072#endif // NETD_RESOLV_HOSTENT_H