blob: 3a0ffc1403bfcd15e1fc4e981499991edc4f3107 [file] [log] [blame]
Bernie Innocentid1cc7242018-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 Innocentiac18b122018-10-01 23:10:18 +090031#ifndef NETD_RESOLV_HOSTENT_H
32#define NETD_RESOLV_HOSTENT_H
Bernie Innocentid1cc7242018-09-11 18:41:37 +090033
Bernie Innocentid1cc7242018-09-11 18:41:37 +090034#include <netdb.h>
Bernie Innocentid1cc7242018-09-11 18:41:37 +090035
Bernie Innocentid1cc7242018-09-11 18:41:37 +090036struct getnamaddr {
Bernie Innocentieb0c81a2018-09-11 18:55:58 +090037 struct hostent* hp;
38 char* buf;
39 size_t buflen;
Bernie Innocentid1cc7242018-09-11 18:41:37 +090040};
41
Bernie Innocenti9f61dbd2018-09-12 20:03:11 +090042// /etc/hosts lookup
Hungming Chen6c84a3d2018-12-26 16:14:17 +080043int _hf_gethtbyaddr(const unsigned char* uaddr, int len, int af, getnamaddr* info);
44int _hf_gethtbyname2(const char* name, int af, getnamaddr* info);
Bernie Innocenti9f61dbd2018-09-12 20:03:11 +090045hostent* netbsd_gethostent_r(FILE*, struct hostent*, char*, size_t, int*);
Bernie Innocentid1cc7242018-09-11 18:41:37 +090046
nuccachenc28257d2018-09-11 11:20:00 +080047// Reserved padding for remapping IPv4 address to NAT64 synthesis IPv6 address
48static const char NAT64_PAD[NS_IN6ADDRSZ - NS_INADDRSZ] = {};
49
Bernie Innocenti9c575932018-09-07 21:10:25 +090050#define HENT_ARRAY(dst, anum, ptr, len) do { \
Bernie Innocentieb0c81a2018-09-11 18:55:58 +090051 size_t _len = (anum + 1) * sizeof(*dst); \
52 if (_len > len) goto nospc; \
Bernie Innocenti9c575932018-09-07 21:10:25 +090053 dst = (char**) ptr; \
Bernie Innocentieb0c81a2018-09-11 18:55:58 +090054 ptr += _len; \
55 len -= _len; \
Bernie Innocenti9c575932018-09-07 21:10:25 +090056 } while (0)
Bernie Innocentid1cc7242018-09-11 18:41:37 +090057
Bernie Innocenti9c575932018-09-07 21:10:25 +090058#define HENT_COPY(dst, src, slen, ptr, len) do { \
59 if ((size_t) slen > len) goto nospc; \
60 memcpy(ptr, src, (size_t) slen); \
61 dst = ptr; \
62 ptr += slen; \
63 len -= slen; \
64 } while (0)
Bernie Innocentid1cc7242018-09-11 18:41:37 +090065
Bernie Innocenti9c575932018-09-07 21:10:25 +090066#define HENT_SCOPY(dst, src, ptr, len) do { \
Bernie Innocentieb0c81a2018-09-11 18:55:58 +090067 size_t _len = strlen(src) + 1; \
68 HENT_COPY(dst, src, _len, ptr, len); \
Bernie Innocenti9c575932018-09-07 21:10:25 +090069 } while (0)
Bernie Innocentid1cc7242018-09-11 18:41:37 +090070
Bernie Innocentiac18b122018-10-01 23:10:18 +090071#endif // NETD_RESOLV_HOSTENT_H