| Server IP : 170.10.162.208 / Your IP : 216.73.216.181 Web Server : LiteSpeed System : Linux altar19.supremepanel19.com 4.18.0-553.69.1.lve.el8.x86_64 #1 SMP Wed Aug 13 19:53:59 UTC 2025 x86_64 User : deltahospital ( 1806) PHP Version : 7.4.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/deltahospital/test.delta-hospital.com/ |
Upload File : |
ipv6.h 0000644 00000005110 15051120276 0005575 0 ustar 00 /*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, you can obtain one at https://mozilla.org/MPL/2.0/.
*
* See the COPYRIGHT file distributed with this work for additional
* information regarding copyright ownership.
*/
#ifndef LWRES_IPV6_H
#define LWRES_IPV6_H 1
/*****
***** Module Info
*****/
/*! \file lwres/ipv6.h
* IPv6 definitions for systems which do not support IPv6.
*/
/***
*** Imports.
***/
#include <inttypes.h>
#include <lwres/platform.h>
/***
*** Types.
***/
/*% in6_addr structure */
struct in6_addr {
union {
uint8_t _S6_u8[16];
uint16_t _S6_u16[8];
uint32_t _S6_u32[4];
} _S6_un;
};
/*@{*/
/*% IP v6 types */
#define s6_addr _S6_un._S6_u8
#define s6_addr8 _S6_un._S6_u8
#define s6_addr16 _S6_un._S6_u16
#define s6_addr32 _S6_un._S6_u32
/*@}*/
#define IN6ADDR_ANY_INIT {{{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }}}
#define IN6ADDR_LOOPBACK_INIT {{{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 }}}
LIBLWRES_EXTERNAL_DATA extern const struct in6_addr in6addr_any;
LIBLWRES_EXTERNAL_DATA extern const struct in6_addr in6addr_loopback;
/*% used in getaddrinfo.c and getnameinfo.c */
struct sockaddr_in6 {
#ifdef LWRES_PLATFORM_HAVESALEN
uint8_t sin6_len;
uint8_t sin6_family;
#else
uint16_t sin6_family;
#endif
uint16_t sin6_port;
uint32_t sin6_flowinfo;
struct in6_addr sin6_addr;
uint32_t sin6_scope_id;
};
#ifdef LWRES_PLATFORM_HAVESALEN
#define SIN6_LEN 1
#endif
/*% in6_pktinfo structure */
struct in6_pktinfo {
struct in6_addr ipi6_addr; /*%< src/dst IPv6 address */
unsigned int ipi6_ifindex; /*%< send/recv interface index */
};
/*!
* Unspecified IPv6 address
*/
#define IN6_IS_ADDR_UNSPECIFIED(a) \
(((a)->s6_addr32[0] == 0) && \
((a)->s6_addr32[1] == 0) && \
((a)->s6_addr32[2] == 0) && \
((a)->s6_addr32[3] == 0))
/*
* Loopback
*/
#define IN6_IS_ADDR_LOOPBACK(a) \
(((a)->s6_addr32[0] == 0) && \
((a)->s6_addr32[1] == 0) && \
((a)->s6_addr32[2] == 0) && \
((a)->s6_addr32[3] == htonl(1)))
/*
* IPv4 compatible
*/
#define IN6_IS_ADDR_V4COMPAT(a) \
(((a)->s6_addr32[0] == 0) && \
((a)->s6_addr32[1] == 0) && \
((a)->s6_addr32[2] == 0) && \
((a)->s6_addr32[3] != 0) && \
((a)->s6_addr32[3] != htonl(1)))
/*
* Mapped
*/
#define IN6_IS_ADDR_V4MAPPED(a) \
(((a)->s6_addr32[0] == 0) && \
((a)->s6_addr32[1] == 0) && \
((a)->s6_addr32[2] == htonl(0x0000ffff)))
#endif /* LWRES_IPV6_H */
lwpacket.h 0000644 00000011615 15051120276 0006532 0 ustar 00 /*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, you can obtain one at https://mozilla.org/MPL/2.0/.
*
* See the COPYRIGHT file distributed with this work for additional
* information regarding copyright ownership.
*/
#ifndef LWRES_LWPACKET_H
#define LWRES_LWPACKET_H 1
#include <inttypes.h>
#include <lwres/lang.h>
#include <lwres/lwbuffer.h>
#include <lwres/result.h>
/*% lwres_lwpacket_t */
typedef struct lwres_lwpacket lwres_lwpacket_t;
/*% lwres_lwpacket structure */
struct lwres_lwpacket {
/*! The overall packet length, including the
* entire packet header.
* This field is filled in by the
* \link lwres_gabn.c lwres_gabn_*()\endlink
* and \link lwres_gnba.c lwres_gnba_*()\endlink calls.
*/
uint32_t length;
/*! Specifies the header format. Currently,
* there is only one format, #LWRES_LWPACKETVERSION_0.
* This field is filled in by the
* \link lwres_gabn.c lwres_gabn_*()\endlink
* and \link lwres_gnba.c lwres_gnba_*()\endlink calls.
*/
uint16_t version;
/*! Specifies library-defined flags for this packet, such as
* whether the packet is a request or a reply. None of
* these are definable by the caller, but library-defined values
* can be set by the caller. For example, one bit in this field
* indicates if the packet is a request or a response.
* This field is filled in by
* the application wits the exception of the
* #LWRES_LWPACKETFLAG_RESPONSE bit, which is set by the library
* in the
* \link lwres_gabn.c lwres_gabn_*()\endlink
* and \link lwres_gnba.c lwres_gnba_*()\endlink calls.
*/
uint16_t pktflags;
/*! Set by the requestor and is returned in all replies.
* If two packets from the same source have the same serial
* number and are from the same source, they are assumed to
* be duplicates and the latter ones may be dropped.
* (The library does not do this by default on replies, but
* does so on requests.)
*/
uint32_t serial;
/*! Opcodes between 0x04000000 and 0xffffffff
* are application defined. Opcodes between
* 0x00000000 and 0x03ffffff are
* reserved for library use.
* This field is filled in by the
* \link lwres_gabn.c lwres_gabn_*()\endlink
* and \link lwres_gnba.c lwres_gnba_*()\endlink calls.
*/
uint32_t opcode;
/*! Only valid for results.
* Results between 0x04000000 and 0xffffffff are application
* defined.
* Results between 0x00000000 and 0x03ffffff are reserved for
* library use.
* (This is the same reserved range defined in <isc/resultclass.h>,
* so it
* would be trivial to map ISC_R_* result codes into packet result
* codes when appropriate.)
* This field is filled in by the
* \link lwres_gabn.c lwres_gabn_*()\endlink
* and \link lwres_gnba.c lwres_gnba_*()\endlink calls.
*/
uint32_t result;
/*! Set to the maximum buffer size that the receiver can
* handle on requests, and the size of the buffer needed to
* satisfy a request
* when the buffer is too large for replies.
* This field is supplied by the application.
*/
uint32_t recvlength;
/*! The packet level auth type used.
* Authtypes between 0x1000 and 0xffff are application defined.
* Authtypes
* between 0x0000 and 0x0fff are reserved for library use.
* This is currently
* unused and MUST be set to zero.
*/
uint16_t authtype;
/*! The length of the authentication data.
* See the specific
* authtypes for more information on what is contained
* in this field. This is currently unused, and
* MUST be set to zero.
*/
uint16_t authlength;
};
#define LWRES_LWPACKET_LENGTH (4 * 5 + 2 * 4) /*%< Overall length. */
#define LWRES_LWPACKETFLAG_RESPONSE 0x0001U /*%< If set, pkt is a response. */
#define LWRES_LWPACKETVERSION_0 0 /*%< Header format. */
/*! \file lwres/lwpacket.h
*
*
* The remainder of the packet consists of two regions, one described by
* "authlen" and one of "length - authlen - sizeof(lwres_lwpacket_t)".
*
* That is:
*
* \code
* pkt header
* authlen bytes of auth information
* data bytes
* \endcode
*
* Currently defined opcodes:
*
*\li #LWRES_OPCODE_NOOP. Success is always returned, with the packet contents echoed.
*
*\li #LWRES_OPCODE_GETADDRSBYNAME. Return all known addresses for a given name.
* This may return NIS or /etc/hosts info as well as DNS
* information. Flags will be provided to indicate ip4/ip6
* addresses are desired.
*
*\li #LWRES_OPCODE_GETNAMEBYADDR. Return the hostname for the given address. Once
* again, it will return data from multiple sources.
*/
LWRES_LANG_BEGINDECLS
/* XXXMLG document */
lwres_result_t
lwres_lwpacket_renderheader(lwres_buffer_t *b, lwres_lwpacket_t *pkt);
lwres_result_t
lwres_lwpacket_parseheader(lwres_buffer_t *b, lwres_lwpacket_t *pkt);
LWRES_LANG_ENDDECLS
#endif /* LWRES_LWPACKET_H */
lwbuffer.h 0000644 00000021163 15051120276 0006533 0 ustar 00 /*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, you can obtain one at https://mozilla.org/MPL/2.0/.
*
* See the COPYRIGHT file distributed with this work for additional
* information regarding copyright ownership.
*/
/*! \file lwres/lwbuffer.h
*
* A buffer is a region of memory, together with a set of related subregions.
* Buffers are used for parsing and I/O operations.
*
* The 'used region' and the 'available' region are disjoint, and their
* union is the buffer's region. The used region extends from the beginning
* of the buffer region to the last used byte. The available region
* extends from one byte greater than the last used byte to the end of the
* buffer's region. The size of the used region can be changed using various
* buffer commands. Initially, the used region is empty.
*
* The used region is further subdivided into two disjoint regions: the
* 'consumed region' and the 'remaining region'. The union of these two
* regions is the used region. The consumed region extends from the beginning
* of the used region to the byte before the 'current' offset (if any). The
* 'remaining' region the current pointer to the end of the used
* region. The size of the consumed region can be changed using various
* buffer commands. Initially, the consumed region is empty.
*
* The 'active region' is an (optional) subregion of the remaining region.
* It extends from the current offset to an offset in the remaining region
* that is selected with lwres_buffer_setactive(). Initially, the active
* region is empty. If the current offset advances beyond the chosen offset,
* the active region will also be empty.
*
* \verbatim
* /----- used region -----\/-- available --\
* +----------------------------------------+
* | consumed | remaining | |
* +----------------------------------------+
* a b c d e
*
* a == base of buffer.
* b == current pointer. Can be anywhere between a and d.
* c == active pointer. Meaningful between b and d.
* d == used pointer.
* e == length of buffer.
*
* a-e == entire (length) of buffer.
* a-d == used region.
* a-b == consumed region.
* b-d == remaining region.
* b-c == optional active region.
* \endverbatim
*
* The following invariants are maintained by all routines:
*
*\verbatim
* length > 0
*
* base is a valid pointer to length bytes of memory
*
* 0 <= used <= length
*
* 0 <= current <= used
*
* 0 <= active <= used
* (although active < current implies empty active region)
*\endverbatim
*
* \li MP:
* Buffers have no synchronization. Clients must ensure exclusive
* access.
*
* \li Reliability:
* No anticipated impact.
*
* \li Resources:
* Memory: 1 pointer + 6 unsigned integers per buffer.
*
* \li Security:
* No anticipated impact.
*
* \li Standards:
* None.
*/
#ifndef LWRES_LWBUFFER_H
#define LWRES_LWBUFFER_H 1
/***
*** Imports
***/
#include <inttypes.h>
#include <lwres/lang.h>
LWRES_LANG_BEGINDECLS
/***
*** Magic numbers
***/
#define LWRES_BUFFER_MAGIC 0x4275663fU /* Buf?. */
#define LWRES_BUFFER_VALID(b) ((b) != NULL && \
(b)->magic == LWRES_BUFFER_MAGIC)
/*!
* The following macros MUST be used only on valid buffers. It is the
* caller's responsibility to ensure this by using the LWRES_BUFFER_VALID
* check above, or by calling another lwres_buffer_*() function (rather than
* another macro.)
*/
/*!
* Get the length of the used region of buffer "b"
*/
#define LWRES_BUFFER_USEDCOUNT(b) ((b)->used)
/*!
* Get the length of the available region of buffer "b"
*/
#define LWRES_BUFFER_AVAILABLECOUNT(b) ((b)->length - (b)->used)
#define LWRES_BUFFER_REMAINING(b) ((b)->used - (b)->current)
/*!
* Note that the buffer structure is public. This is principally so buffer
* operations can be implemented using macros. Applications are strongly
* discouraged from directly manipulating the structure.
*/
typedef struct lwres_buffer lwres_buffer_t;
/*!
* Buffer data structure
*/
struct lwres_buffer {
unsigned int magic;
unsigned char *base;
/* The following integers are byte offsets from 'base'. */
unsigned int length;
unsigned int used;
unsigned int current;
unsigned int active;
};
/***
*** Functions
***/
void
lwres_buffer_init(lwres_buffer_t *b, void *base, unsigned int length);
/**<
* Make 'b' refer to the 'length'-byte region starting at base.
*
* Requires:
*
* 'length' > 0
*
* 'base' is a pointer to a sequence of 'length' bytes.
*
*/
void
lwres_buffer_invalidate(lwres_buffer_t *b);
/**<
* Make 'b' an invalid buffer.
*
* Requires:
* 'b' is a valid buffer.
*
* Ensures:
* If assertion checking is enabled, future attempts to use 'b' without
* calling lwres_buffer_init() on it will cause an assertion failure.
*/
void
lwres_buffer_add(lwres_buffer_t *b, unsigned int n);
/**<
* Increase the 'used' region of 'b' by 'n' bytes.
*
* Requires:
*
* 'b' is a valid buffer
*
* used + n <= length
*
*/
void
lwres_buffer_subtract(lwres_buffer_t *b, unsigned int n);
/**<
* Decrease the 'used' region of 'b' by 'n' bytes.
*
* Requires:
*
* 'b' is a valid buffer
*
* used >= n
*
*/
void
lwres_buffer_clear(lwres_buffer_t *b);
/**<
* Make the used region empty.
*
* Requires:
*
* 'b' is a valid buffer
*
* Ensures:
*
* used = 0
*
*/
void
lwres_buffer_first(lwres_buffer_t *b);
/**<
* Make the consumed region empty.
*
* Requires:
*
* 'b' is a valid buffer
*
* Ensures:
*
* current == 0
*
*/
void
lwres_buffer_forward(lwres_buffer_t *b, unsigned int n);
/**<
* Increase the 'consumed' region of 'b' by 'n' bytes.
*
* Requires:
*
* 'b' is a valid buffer
*
* current + n <= used
*
*/
void
lwres_buffer_back(lwres_buffer_t *b, unsigned int n);
/**<
* Decrease the 'consumed' region of 'b' by 'n' bytes.
*
* Requires:
*
* 'b' is a valid buffer
*
* n <= current
*
*/
uint8_t
lwres_buffer_getuint8(lwres_buffer_t *b);
/**<
* Read an unsigned 8-bit integer from 'b' and return it.
*
* Requires:
*
* 'b' is a valid buffer.
*
* The length of the available region of 'b' is at least 1.
*
* Ensures:
*
* The current pointer in 'b' is advanced by 1.
*
* Returns:
*
* A 8-bit unsigned integer.
*/
void
lwres_buffer_putuint8(lwres_buffer_t *b, uint8_t val);
/**<
* Store an unsigned 8-bit integer from 'val' into 'b'.
*
* Requires:
* 'b' is a valid buffer.
*
* The length of the unused region of 'b' is at least 1.
*
* Ensures:
* The used pointer in 'b' is advanced by 1.
*/
uint16_t
lwres_buffer_getuint16(lwres_buffer_t *b);
/**<
* Read an unsigned 16-bit integer in network byte order from 'b', convert
* it to host byte order, and return it.
*
* Requires:
*
* 'b' is a valid buffer.
*
* The length of the available region of 'b' is at least 2.
*
* Ensures:
*
* The current pointer in 'b' is advanced by 2.
*
* Returns:
*
* A 16-bit unsigned integer.
*/
void
lwres_buffer_putuint16(lwres_buffer_t *b, uint16_t val);
/**<
* Store an unsigned 16-bit integer in host byte order from 'val'
* into 'b' in network byte order.
*
* Requires:
* 'b' is a valid buffer.
*
* The length of the unused region of 'b' is at least 2.
*
* Ensures:
* The used pointer in 'b' is advanced by 2.
*/
uint32_t
lwres_buffer_getuint32(lwres_buffer_t *b);
/**<
* Read an unsigned 32-bit integer in network byte order from 'b', convert
* it to host byte order, and return it.
*
* Requires:
*
* 'b' is a valid buffer.
*
* The length of the available region of 'b' is at least 2.
*
* Ensures:
*
* The current pointer in 'b' is advanced by 2.
*
* Returns:
*
* A 32-bit unsigned integer.
*/
void
lwres_buffer_putuint32(lwres_buffer_t *b, uint32_t val);
/**<
* Store an unsigned 32-bit integer in host byte order from 'val'
* into 'b' in network byte order.
*
* Requires:
* 'b' is a valid buffer.
*
* The length of the unused region of 'b' is at least 4.
*
* Ensures:
* The used pointer in 'b' is advanced by 4.
*/
void
lwres_buffer_putmem(lwres_buffer_t *b, const unsigned char *base,
unsigned int length);
/**<
* Copy 'length' bytes of memory at 'base' into 'b'.
*
* Requires:
* 'b' is a valid buffer.
*
* 'base' points to 'length' bytes of valid memory.
*
*/
void
lwres_buffer_getmem(lwres_buffer_t *b, unsigned char *base,
unsigned int length);
/**<
* Copy 'length' bytes of memory from 'b' into 'base'.
*
* Requires:
* 'b' is a valid buffer.
*
* 'base' points to at least 'length' bytes of valid memory.
*
* 'b' have at least 'length' bytes remaining.
*/
LWRES_LANG_ENDDECLS
#endif /* LWRES_LWBUFFER_H */
result.h 0000644 00000001754 15051120276 0006241 0 ustar 00 /*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, you can obtain one at https://mozilla.org/MPL/2.0/.
*
* See the COPYRIGHT file distributed with this work for additional
* information regarding copyright ownership.
*/
#ifndef LWRES_RESULT_H
#define LWRES_RESULT_H 1
/*! \file lwres/result.h */
typedef unsigned int lwres_result_t;
#define LWRES_R_SUCCESS 0
#define LWRES_R_NOMEMORY 1
#define LWRES_R_TIMEOUT 2
#define LWRES_R_NOTFOUND 3
#define LWRES_R_UNEXPECTEDEND 4 /* unexpected end of input */
#define LWRES_R_FAILURE 5 /* generic failure */
#define LWRES_R_IOERROR 6
#define LWRES_R_NOTIMPLEMENTED 7
#define LWRES_R_UNEXPECTED 8
#define LWRES_R_TRAILINGDATA 9
#define LWRES_R_INCOMPLETE 10
#define LWRES_R_RETRY 11
#define LWRES_R_TYPENOTFOUND 12
#define LWRES_R_TOOLARGE 13
#endif /* LWRES_RESULT_H */
lang.h 0000644 00000001214 15051120276 0005633 0 ustar 00 /*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, you can obtain one at https://mozilla.org/MPL/2.0/.
*
* See the COPYRIGHT file distributed with this work for additional
* information regarding copyright ownership.
*/
#ifndef LWRES_LANG_H
#define LWRES_LANG_H 1
/*! \file lwres/lang.h */
#ifdef __cplusplus
#define LWRES_LANG_BEGINDECLS extern "C" {
#define LWRES_LANG_ENDDECLS }
#else
#define LWRES_LANG_BEGINDECLS
#define LWRES_LANG_ENDDECLS
#endif
#endif /* LWRES_LANG_H */
string.h 0000644 00000001331 15051120276 0006220 0 ustar 00 /*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, you can obtain one at https://mozilla.org/MPL/2.0/.
*
* See the COPYRIGHT file distributed with this work for additional
* information regarding copyright ownership.
*/
#ifndef LWRES_STRING_H
#define LWRES_STRING_H 1
/*! \file lwres/string.h */
#include <stdlib.h>
#include <lwres/lang.h>
#include <lwres/platform.h>
#ifdef LWRES_PLATFORM_NEEDSTRLCPY
#define strlcpy lwres_strlcpy
#endif
LWRES_LANG_BEGINDECLS
size_t lwres_strlcpy(char *dst, const char *src, size_t size);
LWRES_LANG_ENDDECLS
#endif
lwres.h 0000644 00000035761 15051120276 0006064 0 ustar 00 /*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, you can obtain one at https://mozilla.org/MPL/2.0/.
*
* See the COPYRIGHT file distributed with this work for additional
* information regarding copyright ownership.
*/
#ifndef LWRES_LWRES_H
#define LWRES_LWRES_H 1
#include <inttypes.h>
#include <stdio.h>
#include <lwres/context.h>
#include <lwres/lang.h>
#include <lwres/list.h>
#include <lwres/lwpacket.h>
#include <lwres/platform.h>
/*! \file lwres/lwres.h */
/*!
* Design notes:
*
* Each opcode has two structures and three functions which operate on each
* structure. For example, using the "no operation/ping" opcode as an
* example:
*
* <ul><li>lwres_nooprequest_t:
*
* lwres_nooprequest_render() takes a lwres_nooprequest_t and
* and renders it into wire format, storing the allocated
* buffer information in a passed-in buffer. When this buffer
* is no longer needed, it must be freed by
* lwres_context_freemem(). All other memory used by the
* caller must be freed manually, including the
* lwres_nooprequest_t passed in.<br /><br />
*
* lwres_nooprequest_parse() takes a wire format message and
* breaks it out into a lwres_nooprequest_t. The structure
* must be freed via lwres_nooprequest_free() when it is no longer
* needed.<br /><br />
*
* lwres_nooprequest_free() releases into the lwres_context_t
* any space allocated during parsing.</li>
*
* <li>lwres_noopresponse_t:
*
* The functions used are similar to the three used for
* requests, just with different names.</li></ul>
*
* Typically, the client will use request_render, response_parse, and
* response_free, while the daemon will use request_parse, response_render,
* and request_free.
*
* The basic flow of a typical client is:
*
* \li fill in a request_t, and call the render function.
*
* \li Transmit the buffer returned to the daemon.
*
* \li Wait for a response.
*
* \li When a response is received, parse it into a response_t.
*
* \li free the request buffer using lwres_context_freemem().
*
* \li free the response structure and its associated buffer using
* response_free().
*/
#define LWRES_UDP_PORT 921 /*%< UDP Port Number */
#define LWRES_RECVLENGTH 16384 /*%< Maximum Packet Length */
#define LWRES_ADDR_MAXLEN 16 /*%< changing this breaks ABI */
#define LWRES_RESOLV_CONF "/etc/resolv.conf" /*%< Location of resolv.conf */
/*% DNSSEC is not required (input). Only relevant to rrset queries. */
#define LWRES_FLAG_TRUSTNOTREQUIRED 0x00000001U
/*% The data was crypto-verified with DNSSEC (output). */
#define LWRES_FLAG_SECUREDATA 0x00000002U
/*% no-op */
#define LWRES_OPCODE_NOOP 0x00000000U
/*% lwres_nooprequest_t */
typedef struct {
/* public */
uint16_t datalength;
unsigned char *data;
} lwres_nooprequest_t;
/*% lwres_noopresponse_t */
typedef struct {
/* public */
uint16_t datalength;
unsigned char *data;
} lwres_noopresponse_t;
/*% get addresses by name */
#define LWRES_OPCODE_GETADDRSBYNAME 0x00010001U
/*% lwres_addr_t */
typedef struct lwres_addr lwres_addr_t;
/*% LWRES_LIST */
typedef LWRES_LIST(lwres_addr_t) lwres_addrlist_t;
/*% lwres_addr */
struct lwres_addr {
uint32_t family;
uint16_t length;
unsigned char address[LWRES_ADDR_MAXLEN];
uint32_t zone;
LWRES_LINK(lwres_addr_t) link;
};
/*% lwres_gabnrequest_t */
typedef struct {
/* public */
uint32_t flags;
uint32_t addrtypes;
uint16_t namelen;
char *name;
} lwres_gabnrequest_t;
/*% lwres_gabnresponse_t */
typedef struct {
/* public */
uint32_t flags;
uint16_t naliases;
uint16_t naddrs;
char *realname;
char **aliases;
uint16_t realnamelen;
uint16_t *aliaslen;
lwres_addrlist_t addrs;
/*! if base != NULL, it will be freed when this structure is freed. */
void *base;
size_t baselen;
} lwres_gabnresponse_t;
/*% get name by address */
#define LWRES_OPCODE_GETNAMEBYADDR 0x00010002U
/*% lwres_gnbarequest_t */
typedef struct {
/* public */
uint32_t flags;
lwres_addr_t addr;
} lwres_gnbarequest_t;
/*% lwres_gnbaresponse_t */
typedef struct {
/* public */
uint32_t flags;
uint16_t naliases;
char *realname;
char **aliases;
uint16_t realnamelen;
uint16_t *aliaslen;
/*! if base != NULL, it will be freed when this structure is freed. */
void *base;
size_t baselen;
} lwres_gnbaresponse_t;
/*% get rdata by name */
#define LWRES_OPCODE_GETRDATABYNAME 0x00010003U
/*% lwres_grbnrequest_t */
typedef struct {
/* public */
uint32_t flags;
uint16_t rdclass;
uint16_t rdtype;
uint16_t namelen;
char *name;
} lwres_grbnrequest_t;
/*% lwres_grbnresponse_t */
typedef struct {
/* public */
uint32_t flags;
uint16_t rdclass;
uint16_t rdtype;
uint32_t ttl;
uint16_t nrdatas;
uint16_t nsigs;
char *realname;
uint16_t realnamelen;
unsigned char **rdatas;
uint16_t *rdatalen;
unsigned char **sigs;
uint16_t *siglen;
/*% if base != NULL, it will be freed when this structure is freed. */
void *base;
size_t baselen;
} lwres_grbnresponse_t;
/*% Used by lwres_getrrsetbyname() */
#define LWRDATA_VALIDATED 0x00000001
/*!
* resolv.conf data
*/
#define LWRES_CONFMAXNAMESERVERS 3 /*%< max 3 "nameserver" entries */
#define LWRES_CONFMAXLWSERVERS 1 /*%< max 1 "lwserver" entry */
#define LWRES_CONFMAXSEARCH 8 /*%< max 8 domains in "search" entry */
#define LWRES_CONFMAXLINELEN 256 /*%< max size of a line */
#define LWRES_CONFMAXSORTLIST 10 /*%< max 10 */
/*% lwres_conf_t */
typedef struct {
lwres_context_t *lwctx;
lwres_addr_t nameservers[LWRES_CONFMAXNAMESERVERS];
uint8_t nsnext; /*%< index for next free slot */
lwres_addr_t lwservers[LWRES_CONFMAXLWSERVERS];
uint8_t lwnext; /*%< index for next free slot */
char *domainname;
char *search[LWRES_CONFMAXSEARCH];
uint8_t searchnxt; /*%< index for next free slot */
struct {
lwres_addr_t addr;
/*% mask has a non-zero 'family' and 'length' if set */
lwres_addr_t mask;
} sortlist[LWRES_CONFMAXSORTLIST];
uint8_t sortlistnxt;
uint8_t resdebug; /*%< non-zero if 'options debug' set */
uint8_t ndots; /*%< set to n in 'options ndots:n' */
uint8_t no_tld_query; /*%< non-zero if 'options no_tld_query' */
int32_t attempts; /*%< set to n in 'options attempts:n' */
int32_t timeout; /*%< set to n in 'options timeout:n' */
} lwres_conf_t;
#define LWRES_ADDRTYPE_V4 0x00000001U /*%< ipv4 */
#define LWRES_ADDRTYPE_V6 0x00000002U /*%< ipv6 */
#define LWRES_MAX_ALIASES 16 /*%< max # of aliases */
#define LWRES_MAX_ADDRS 64 /*%< max # of addrs */
LWRES_LANG_BEGINDECLS
/*% This is in host byte order. */
LIBLWRES_EXTERNAL_DATA extern uint16_t lwres_udp_port;
LIBLWRES_EXTERNAL_DATA extern const char *lwres_resolv_conf;
lwres_result_t
lwres_gabnrequest_render(lwres_context_t *ctx, lwres_gabnrequest_t *req,
lwres_lwpacket_t *pkt, lwres_buffer_t *b);
lwres_result_t
lwres_gabnresponse_render(lwres_context_t *ctx, lwres_gabnresponse_t *req,
lwres_lwpacket_t *pkt, lwres_buffer_t *b);
lwres_result_t
lwres_gabnrequest_parse(lwres_context_t *ctx, lwres_buffer_t *b,
lwres_lwpacket_t *pkt, lwres_gabnrequest_t **structp);
lwres_result_t
lwres_gabnresponse_parse(lwres_context_t *ctx, lwres_buffer_t *b,
lwres_lwpacket_t *pkt,
lwres_gabnresponse_t **structp);
void
lwres_gabnrequest_free(lwres_context_t *ctx, lwres_gabnrequest_t **structp);
/**<
* Frees any dynamically allocated memory for this structure.
*
* Requires:
*
* ctx != NULL, and be a context returned via lwres_context_create().
*
* structp != NULL && *structp != NULL.
*
* Ensures:
*
* *structp == NULL.
*
* All memory allocated by this structure will be returned to the
* system via the context's free function.
*/
void
lwres_gabnresponse_free(lwres_context_t *ctx, lwres_gabnresponse_t **structp);
/**<
* Frees any dynamically allocated memory for this structure.
*
* Requires:
*
* ctx != NULL, and be a context returned via lwres_context_create().
*
* structp != NULL && *structp != NULL.
*
* Ensures:
*
* *structp == NULL.
*
* All memory allocated by this structure will be returned to the
* system via the context's free function.
*/
lwres_result_t
lwres_gnbarequest_render(lwres_context_t *ctx, lwres_gnbarequest_t *req,
lwres_lwpacket_t *pkt, lwres_buffer_t *b);
lwres_result_t
lwres_gnbaresponse_render(lwres_context_t *ctx, lwres_gnbaresponse_t *req,
lwres_lwpacket_t *pkt, lwres_buffer_t *b);
lwres_result_t
lwres_gnbarequest_parse(lwres_context_t *ctx, lwres_buffer_t *b,
lwres_lwpacket_t *pkt, lwres_gnbarequest_t **structp);
lwres_result_t
lwres_gnbaresponse_parse(lwres_context_t *ctx, lwres_buffer_t *b,
lwres_lwpacket_t *pkt,
lwres_gnbaresponse_t **structp);
void
lwres_gnbarequest_free(lwres_context_t *ctx, lwres_gnbarequest_t **structp);
/**<
* Frees any dynamically allocated memory for this structure.
*
* Requires:
*
* ctx != NULL, and be a context returned via lwres_context_create().
*
* structp != NULL && *structp != NULL.
*
* Ensures:
*
* *structp == NULL.
*
* All memory allocated by this structure will be returned to the
* system via the context's free function.
*/
void
lwres_gnbaresponse_free(lwres_context_t *ctx, lwres_gnbaresponse_t **structp);
/**<
* Frees any dynamically allocated memory for this structure.
*
* Requires:
*
* ctx != NULL, and be a context returned via lwres_context_create().
*
* structp != NULL && *structp != NULL.
*
* Ensures:
*
* *structp == NULL.
*
* All memory allocated by this structure will be returned to the
* system via the context's free function.
*/
lwres_result_t
lwres_grbnrequest_render(lwres_context_t *ctx, lwres_grbnrequest_t *req,
lwres_lwpacket_t *pkt, lwres_buffer_t *b);
lwres_result_t
lwres_grbnresponse_render(lwres_context_t *ctx, lwres_grbnresponse_t *req,
lwres_lwpacket_t *pkt, lwres_buffer_t *b);
lwres_result_t
lwres_grbnrequest_parse(lwres_context_t *ctx, lwres_buffer_t *b,
lwres_lwpacket_t *pkt, lwres_grbnrequest_t **structp);
lwres_result_t
lwres_grbnresponse_parse(lwres_context_t *ctx, lwres_buffer_t *b,
lwres_lwpacket_t *pkt,
lwres_grbnresponse_t **structp);
void
lwres_grbnrequest_free(lwres_context_t *ctx, lwres_grbnrequest_t **structp);
/**<
* Frees any dynamically allocated memory for this structure.
*
* Requires:
*
* ctx != NULL, and be a context returned via lwres_context_create().
*
* structp != NULL && *structp != NULL.
*
* Ensures:
*
* *structp == NULL.
*
* All memory allocated by this structure will be returned to the
* system via the context's free function.
*/
void
lwres_grbnresponse_free(lwres_context_t *ctx, lwres_grbnresponse_t **structp);
/**<
* Frees any dynamically allocated memory for this structure.
*
* Requires:
*
* ctx != NULL, and be a context returned via lwres_context_create().
*
* structp != NULL && *structp != NULL.
*
* Ensures:
*
* *structp == NULL.
*
* All memory allocated by this structure will be returned to the
* system via the context's free function.
*/
lwres_result_t
lwres_nooprequest_render(lwres_context_t *ctx, lwres_nooprequest_t *req,
lwres_lwpacket_t *pkt, lwres_buffer_t *b);
/**<
* Allocate space and render into wire format a noop request packet.
*
* Requires:
*
* ctx != NULL, and be a context returned via lwres_context_create().
*
* b != NULL, and points to a lwres_buffer_t. The contents of the
* buffer structure will be initialized to contain the wire-format
* noop request packet.
*
* Caller needs to fill in parts of "pkt" before calling:
* serial, maxrecv, result.
*
* Returns:
*
* Returns 0 on success, non-zero on failure.
*
* On successful return, *b will contain data about the wire-format
* packet. It can be transmitted in any way, including lwres_sendblock().
*/
lwres_result_t
lwres_noopresponse_render(lwres_context_t *ctx, lwres_noopresponse_t *req,
lwres_lwpacket_t *pkt, lwres_buffer_t *b);
lwres_result_t
lwres_nooprequest_parse(lwres_context_t *ctx, lwres_buffer_t *b,
lwres_lwpacket_t *pkt, lwres_nooprequest_t **structp);
/**<
* Parse a noop request. Note that to get here, the lwpacket must have
* already been parsed and removed by the caller, otherwise it would be
* pretty hard for it to know this is the right function to call.
*
* The function verifies bits of the header, but does not modify it.
*/
lwres_result_t
lwres_noopresponse_parse(lwres_context_t *ctx, lwres_buffer_t *b,
lwres_lwpacket_t *pkt,
lwres_noopresponse_t **structp);
void
lwres_nooprequest_free(lwres_context_t *ctx, lwres_nooprequest_t **structp);
void
lwres_noopresponse_free(lwres_context_t *ctx, lwres_noopresponse_t **structp);
/**<
* Frees any dynamically allocated memory for this structure.
*
* Requires:
*
* ctx != NULL, and be a context returned via lwres_context_create().
*
* structp != NULL && *structp != NULL.
*
* Ensures:
*
* *structp == NULL.
*
* All memory allocated by this structure will be returned to the
* system via the context's free function.
*/
lwres_result_t
lwres_conf_parse(lwres_context_t *ctx, const char *filename);
/**<
* parses a resolv.conf-format file and stores the results in the structure
* pointed to by *ctx.
*
* Requires:
* ctx != NULL
* filename != NULL && strlen(filename) > 0
*
* Returns:
* LWRES_R_SUCCESS on a successful parse.
* Anything else on error, although the structure may be partially filled
* in.
*/
lwres_result_t
lwres_conf_print(lwres_context_t *ctx, FILE *fp);
/**<
* Prints a resolv.conf-format of confdata output to fp.
*
* Requires:
* ctx != NULL
*/
void
lwres_conf_init(lwres_context_t *ctx);
/**<
* sets all internal fields to a default state. Used to initialize a new
* lwres_conf_t structure (not reset a used on).
*
* Requires:
* ctx != NULL
*/
void
lwres_conf_clear(lwres_context_t *ctx);
/**<
* frees all internally allocated memory in confdata. Uses the memory
* routines supplied by ctx.
*
* Requires:
* ctx != NULL
*/
lwres_conf_t *
lwres_conf_get(lwres_context_t *ctx);
/**<
* Be extremely cautions in modifying the contents of this structure; it
* needs an API to return the various bits of data, walk lists, etc.
*
* Requires:
* ctx != NULL
*/
/*
* Helper functions
*/
lwres_result_t
lwres_data_parse(lwres_buffer_t *b, unsigned char **p, uint16_t *len);
lwres_result_t
lwres_string_parse(lwres_buffer_t *b, char **c, uint16_t *len);
lwres_result_t
lwres_addr_parse(lwres_buffer_t *b, lwres_addr_t *addr);
lwres_result_t
lwres_getaddrsbyname(lwres_context_t *ctx, const char *name,
uint32_t addrtypes, lwres_gabnresponse_t **structp);
lwres_result_t
lwres_getnamebyaddr(lwres_context_t *ctx, uint32_t addrtype,
uint16_t addrlen, const unsigned char *addr,
lwres_gnbaresponse_t **structp);
lwres_result_t
lwres_getrdatabyname(lwres_context_t *ctx, const char *name,
uint16_t rdclass, uint16_t rdtype,
uint32_t flags, lwres_grbnresponse_t **structp);
LWRES_LANG_ENDDECLS
#endif /* LWRES_LWRES_H */
platform.h 0000644 00000004557 15051120276 0006553 0 ustar 00 /*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, you can obtain one at https://mozilla.org/MPL/2.0/.
*
* See the COPYRIGHT file distributed with this work for additional
* information regarding copyright ownership.
*/
/*! \file */
#ifndef LWRES_PLATFORM_H
#define LWRES_PLATFORM_H 1
/*****
***** Platform-dependent defines.
*****/
/***
*** Network.
***/
/*
* Define if this system needs the <netinet/in6.h> header file for IPv6.
*/
#undef LWRES_PLATFORM_NEEDNETINETIN6H
/*
* Define if this system needs the <netinet6/in6.h> header file for IPv6.
*/
#undef LWRES_PLATFORM_NEEDNETINET6IN6H
/*
* If sockaddrs on this system have an sa_len field, LWRES_PLATFORM_HAVESALEN
* will be defined.
*/
#undef LWRES_PLATFORM_HAVESALEN
/*
* If this system has the IPv6 structure definitions, LWRES_PLATFORM_HAVEIPV6
* will be defined.
*/
#define LWRES_PLATFORM_HAVEIPV6 1
/*
* If this system is missing in6addr_any, LWRES_PLATFORM_NEEDIN6ADDRANY will
* be defined.
*/
#undef LWRES_PLATFORM_NEEDIN6ADDRANY
/*
* If this system is missing in6addr_loopback,
* LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK will be defined.
*/
#undef LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK
/*
* If this system has in_addr6, rather than in6_addr,
* LWRES_PLATFORM_HAVEINADDR6 will be defined.
*/
#undef LWRES_PLATFORM_HAVEINADDR6
/*
* Defined if unistd.h does not cause fd_set to be declared.
*/
#undef LWRES_PLATFORM_NEEDSYSSELECTH
/*
* Used to control how extern data is linked; needed for Win32 platforms.
*/
#undef LWRES_PLATFORM_USEDECLSPEC
/*
* Defined this system needs vsnprintf() and snprintf().
*/
#undef LWRES_PLATFORM_NEEDVSNPRINTF
/*
* If this system need a modern sprintf() that returns (int) not (char*).
*/
/*! \brief
* Define if this system needs strtoul.
*/
#undef LWRES_PLATFORM_NEEDSTRTOUL
/*! \brief
* Define if this system needs strlcpy.
*/
#define LWRES_PLATFORM_NEEDSTRLCPY 1
#ifndef LWRES_PLATFORM_USEDECLSPEC
#define LIBLWRES_EXTERNAL_DATA
#else
#ifdef LIBLWRES_EXPORTS
#define LIBLWRES_EXTERNAL_DATA __declspec(dllexport)
#else
#define LIBLWRES_EXTERNAL_DATA __declspec(dllimport)
#endif
#endif
/*
* Tell Emacs to use C mode on this file.
* Local Variables:
* mode: c
* End:
*/
#endif /* LWRES_PLATFORM_H */
int.h 0000644 00000001410 15051120276 0005502 0 ustar 00 /*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, you can obtain one at https://mozilla.org/MPL/2.0/.
*
* See the COPYRIGHT file distributed with this work for additional
* information regarding copyright ownership.
*/
#ifndef LWRES_INT_H
#define LWRES_INT_H 1
#include <inttypes.h>
/*! \file lwres/int.h */
typedef lwres_int8_t int8_t;
typedef lwres_uint8_t uint8_t;
typedef lwres_int16_t int16_t;
typedef lwres_uint16_t uint16_t;
typedef lwres_int32_t int32_t;
typedef lwres_uint32_t uint32_t;
typedef lwres_int64_t int64_t;
typedef lwres_uint64_t uint64_t;
#endif /* LWRES_INT_H */
net.h 0000644 00000006012 15051120276 0005501 0 ustar 00 /*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, you can obtain one at https://mozilla.org/MPL/2.0/.
*
* See the COPYRIGHT file distributed with this work for additional
* information regarding copyright ownership.
*/
#ifndef LWRES_NET_H
#define LWRES_NET_H 1
/*****
***** Module Info
*****/
/*! \file net.h
* This module is responsible for defining the following basic networking
* types:
*
*\li struct in_addr
*\li struct in6_addr
*\li struct sockaddr
*\li struct sockaddr_in
*\li struct sockaddr_in6
*
* It ensures that the AF_ and PF_ macros are defined.
*
* It declares ntoh[sl]() and hton[sl]().
*
* It declares lwres_net_aton(), lwres_net_ntop(), and lwres_net_pton().
*
* It ensures that #INADDR_LOOPBACK, #INADDR_ANY and #IN6ADDR_ANY_INIT
* are defined.
*/
/***
*** Imports.
***/
#include <lwres/platform.h> /* Required for LWRES_PLATFORM_*. */
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h> /* Contractual promise. */
#include <sys/ioctl.h>
#include <sys/time.h>
#include <sys/un.h>
#include <netinet/in.h> /* Contractual promise. */
#include <arpa/inet.h> /* Contractual promise. */
#ifdef LWRES_PLATFORM_NEEDNETINETIN6H
#include <netinet/in6.h> /* Required on UnixWare. */
#endif
#ifdef LWRES_PLATFORM_NEEDNETINET6IN6H
#include <netinet6/in6.h> /* Required on BSD/OS for in6_pktinfo. */
#endif
#include <net/if.h>
#include <lwres/lang.h>
#ifndef LWRES_PLATFORM_HAVEIPV6
#include <lwres/ipv6.h> /* Contractual promise. */
#endif
#ifdef LWRES_PLATFORM_HAVEINADDR6
#define in6_addr in_addr6 /* Required for pre RFC2133 implementations. */
#endif
/*!
* Required for some pre RFC2133 implementations.
* IN6ADDR_ANY_INIT and IN6ADDR_LOOPBACK_INIT were added in
* draft-ietf-ipngwg-bsd-api-04.txt or draft-ietf-ipngwg-bsd-api-05.txt.
* If 's6_addr' is defined then assume that there is a union and three
* levels otherwise assume two levels required.
*/
#ifndef IN6ADDR_ANY_INIT
#ifdef s6_addr
#define IN6ADDR_ANY_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } }
#else
#define IN6ADDR_ANY_INIT { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } }
#endif
#endif
/*!
* Initialize address loopback. See IN6ADDR_ANY_INIT
*/
#ifndef IN6ADDR_LOOPBACK_INIT
#ifdef s6_addr
#define IN6ADDR_LOOPBACK_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } }
#else
#define IN6ADDR_LOOPBACK_INIT { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } }
#endif
#endif
/*% Used by AI_ALL */
#ifndef AF_INET6
#define AF_INET6 99
#endif
/*% Used to return IPV6 address types. */
#ifndef PF_INET6
#define PF_INET6 AF_INET6
#endif
/*% inaddr Loopback */
#ifndef INADDR_LOOPBACK
#define INADDR_LOOPBACK 0x7f000001UL
#endif
LWRES_LANG_BEGINDECLS
const char *
lwres_net_ntop(int af, const void *src, char *dst, size_t size);
int
lwres_net_pton(int af, const char *src, void *dst);
int
lwres_net_aton(const char *cp, struct in_addr *addr);
LWRES_LANG_ENDDECLS
#endif /* LWRES_NET_H */
context.h 0000644 00000006254 15051120276 0006407 0 ustar 00 /*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, you can obtain one at https://mozilla.org/MPL/2.0/.
*
* See the COPYRIGHT file distributed with this work for additional
* information regarding copyright ownership.
*/
#ifndef LWRES_CONTEXT_H
#define LWRES_CONTEXT_H 1
/*! \file lwres/context.h */
#include <inttypes.h>
#include <stddef.h>
#include <lwres/lang.h>
#include <lwres/result.h>
/*!
* Used to set various options such as timeout, authentication, etc
*/
typedef struct lwres_context lwres_context_t;
LWRES_LANG_BEGINDECLS
typedef void *(*lwres_malloc_t)(void *arg, size_t length);
typedef void (*lwres_free_t)(void *arg, void *mem, size_t length);
/*
* XXXMLG
*
* Make the server reload /etc/resolv.conf periodically.
*
* Make the server do sortlist/searchlist.
*
* Client side can disable the search/sortlist processing.
*
* Use an array of addresses/masks and searchlist for client-side, and
* if added to the client disable the processing on the server.
*
* Share /etc/resolv.conf data between contexts.
*/
/*!
* _SERVERMODE
* Don't allocate and connect a socket to the server, since the
* caller _is_ a server.
*
* _USEIPV4, _USEIPV6
* Use IPv4 and IPv6 transactions with remote servers, respectively.
* For backward compatibility, regard both flags as being set when both
* are cleared.
*/
#define LWRES_CONTEXT_SERVERMODE 0x00000001U
#define LWRES_CONTEXT_USEIPV4 0x00000002U
#define LWRES_CONTEXT_USEIPV6 0x00000004U
lwres_result_t
lwres_context_create(lwres_context_t **contextp, void *arg,
lwres_malloc_t malloc_function,
lwres_free_t free_function,
unsigned int flags);
/**<
* Allocate a lwres context. This is used in all lwres calls.
*
* Memory management can be replaced here by passing in two functions.
* If one is non-NULL, they must both be non-NULL. "arg" is passed to
* these functions.
*
* Contexts are not thread safe. Document at the top of the file.
* XXXMLG
*
* If they are NULL, the standard malloc() and free() will be used.
*
*\pre contextp != NULL && contextp == NULL.
*
*\return Returns 0 on success, non-zero on failure.
*/
void
lwres_context_destroy(lwres_context_t **contextp);
/**<
* Frees all memory associated with a lwres context.
*
*\pre contextp != NULL && contextp == NULL.
*/
uint32_t
lwres_context_nextserial(lwres_context_t *ctx);
/**<
* XXXMLG Document
*/
void
lwres_context_initserial(lwres_context_t *ctx, uint32_t serial);
void
lwres_context_freemem(lwres_context_t *ctx, void *mem, size_t len);
void *
lwres_context_allocmem(lwres_context_t *ctx, size_t len);
int
lwres_context_getsocket(lwres_context_t *ctx);
lwres_result_t
lwres_context_send(lwres_context_t *ctx,
void *sendbase, int sendlen);
lwres_result_t
lwres_context_recv(lwres_context_t *ctx,
void *recvbase, int recvlen,
int *recvd_len);
lwres_result_t
lwres_context_sendrecv(lwres_context_t *ctx,
void *sendbase, int sendlen,
void *recvbase, int recvlen,
int *recvd_len);
LWRES_LANG_ENDDECLS
#endif /* LWRES_CONTEXT_H */
netdb.h 0000644 00000030247 15051120276 0006016 0 ustar 00 /*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, you can obtain one at https://mozilla.org/MPL/2.0/.
*
* See the COPYRIGHT file distributed with this work for additional
* information regarding copyright ownership.
*/
/*! \file */
#ifndef LWRES_NETDB_H
#define LWRES_NETDB_H 1
#include <stddef.h> /* Required on FreeBSD (and others?) for size_t. */
#include <netdb.h> /* Contractual provision. */
#include <lwres/lang.h>
/*
* Define if <netdb.h> does not declare struct addrinfo.
*/
#undef ISC_LWRES_NEEDADDRINFO
#ifdef ISC_LWRES_NEEDADDRINFO
struct addrinfo {
int ai_flags; /* AI_PASSIVE, AI_CANONNAME */
int ai_family; /* PF_xxx */
int ai_socktype; /* SOCK_xxx */
int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
size_t ai_addrlen; /* Length of ai_addr */
char *ai_canonname; /* Canonical name for hostname */
struct sockaddr *ai_addr; /* Binary address */
struct addrinfo *ai_next; /* Next structure in linked list */
};
#endif
/*
* Undefine all #defines we are interested in as <netdb.h> may or may not have
* defined them.
*/
/*
* Error return codes from gethostbyname() and gethostbyaddr()
* (left in extern int h_errno).
*/
#undef NETDB_INTERNAL
#undef NETDB_SUCCESS
#undef HOST_NOT_FOUND
#undef TRY_AGAIN
#undef NO_RECOVERY
#undef NO_DATA
#undef NO_ADDRESS
#define NETDB_INTERNAL -1 /* see errno */
#define NETDB_SUCCESS 0 /* no problem */
#define HOST_NOT_FOUND 1 /* Authoritative Answer Host not found */
#define TRY_AGAIN 2 /* Non-Authoritative Host not found, or SERVERFAIL */
#define NO_RECOVERY 3 /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */
#define NO_DATA 4 /* Valid name, no data record of requested type */
#define NO_ADDRESS NO_DATA /* no address, look for MX record */
/*
* Error return codes from getaddrinfo()
*/
#undef EAI_ADDRFAMILY
#undef EAI_AGAIN
#undef EAI_BADFLAGS
#undef EAI_FAIL
#undef EAI_FAMILY
#undef EAI_MEMORY
#undef EAI_NODATA
#undef EAI_NONAME
#undef EAI_SERVICE
#undef EAI_SOCKTYPE
#undef EAI_SYSTEM
#undef EAI_BADHINTS
#undef EAI_PROTOCOL
#undef EAI_OVERFLOW
#undef EAI_MAX
#define EAI_ADDRFAMILY 1 /* address family for hostname not supported */
#define EAI_AGAIN 2 /* temporary failure in name resolution */
#define EAI_BADFLAGS 3 /* invalid value for ai_flags */
#define EAI_FAIL 4 /* non-recoverable failure in name resolution */
#define EAI_FAMILY 5 /* ai_family not supported */
#define EAI_MEMORY 6 /* memory allocation failure */
#define EAI_NODATA 7 /* no address associated with hostname */
#define EAI_NONAME 8 /* hostname nor servname provided, or not known */
#define EAI_SERVICE 9 /* servname not supported for ai_socktype */
#define EAI_SOCKTYPE 10 /* ai_socktype not supported */
#define EAI_SYSTEM 11 /* system error returned in errno */
#define EAI_BADHINTS 12
#define EAI_PROTOCOL 13
#define EAI_OVERFLOW 14
#define EAI_MAX 15
/*
* Flag values for getaddrinfo()
*/
#undef AI_PASSIVE
#undef AI_CANONNAME
#undef AI_NUMERICHOST
#define AI_PASSIVE 0x00000001
#define AI_CANONNAME 0x00000002
#define AI_NUMERICHOST 0x00000004
/*
* Flag values for getipnodebyname()
*/
#undef AI_V4MAPPED
#undef AI_ALL
#undef AI_ADDRCONFIG
#undef AI_DEFAULT
#define AI_V4MAPPED 0x00000008
#define AI_ALL 0x00000010
#define AI_ADDRCONFIG 0x00000020
#define AI_DEFAULT (AI_V4MAPPED|AI_ADDRCONFIG)
/*
* Constants for lwres_getnameinfo()
*/
#undef NI_MAXHOST
#undef NI_MAXSERV
#define NI_MAXHOST 1025
#define NI_MAXSERV 32
/*
* Flag values for lwres_getnameinfo()
*/
#undef NI_NOFQDN
#undef NI_NUMERICHOST
#undef NI_NAMEREQD
#undef NI_NUMERICSERV
#undef NI_DGRAM
#undef NI_NUMERICSCOPE
#define NI_NOFQDN 0x00000001
#define NI_NUMERICHOST 0x00000002
#define NI_NAMEREQD 0x00000004
#define NI_NUMERICSERV 0x00000008
#define NI_DGRAM 0x00000010
#define NI_NUMERICSCOPE 0x00000020 /*2553bis-00*/
/*
* Define if <netdb.h> does not declare struct rrsetinfo.
*/
#define ISC_LWRES_NEEDRRSETINFO 1
#ifdef ISC_LWRES_NEEDRRSETINFO
/*
* Structures for getrrsetbyname()
*/
struct rdatainfo {
unsigned int rdi_length;
unsigned char *rdi_data;
};
struct rrsetinfo {
unsigned int rri_flags;
int rri_rdclass;
int rri_rdtype;
unsigned int rri_ttl;
unsigned int rri_nrdatas;
unsigned int rri_nsigs;
char *rri_name;
struct rdatainfo *rri_rdatas;
struct rdatainfo *rri_sigs;
};
/*
* Flags for getrrsetbyname()
*/
#define RRSET_VALIDATED 0x00000001
/* Set was dnssec validated */
/*
* Return codes for getrrsetbyname()
*/
#define ERRSET_SUCCESS 0
#define ERRSET_NOMEMORY 1
#define ERRSET_FAIL 2
#define ERRSET_INVAL 3
#define ERRSET_NONAME 4
#define ERRSET_NODATA 5
#endif
/*
* Define to map into lwres_ namespace.
*/
#define LWRES_NAMESPACE
#ifdef LWRES_NAMESPACE
/*
* Use our versions not the ones from the C library.
*/
#ifdef getnameinfo
#undef getnameinfo
#endif
#define getnameinfo lwres_getnameinfo
#ifdef getaddrinfo
#undef getaddrinfo
#endif
#define getaddrinfo lwres_getaddrinfo
#ifdef freeaddrinfo
#undef freeaddrinfo
#endif
#define freeaddrinfo lwres_freeaddrinfo
#ifdef gai_strerror
#undef gai_strerror
#endif
#define gai_strerror lwres_gai_strerror
#ifdef herror
#undef herror
#endif
#define herror lwres_herror
#ifdef hstrerror
#undef hstrerror
#endif
#define hstrerror lwres_hstrerror
#ifdef getipnodebyname
#undef getipnodebyname
#endif
#define getipnodebyname lwres_getipnodebyname
#ifdef getipnodebyaddr
#undef getipnodebyaddr
#endif
#define getipnodebyaddr lwres_getipnodebyaddr
#ifdef freehostent
#undef freehostent
#endif
#define freehostent lwres_freehostent
#ifdef gethostbyname
#undef gethostbyname
#endif
#define gethostbyname lwres_gethostbyname
#ifdef gethostbyname2
#undef gethostbyname2
#endif
#define gethostbyname2 lwres_gethostbyname2
#ifdef gethostbyaddr
#undef gethostbyaddr
#endif
#define gethostbyaddr lwres_gethostbyaddr
#ifdef gethostent
#undef gethostent
#endif
#define gethostent lwres_gethostent
#ifdef sethostent
#undef sethostent
#endif
#define sethostent lwres_sethostent
#ifdef endhostent
#undef endhostent
#endif
#define endhostent lwres_endhostent
/* #define sethostfile lwres_sethostfile */
#ifdef gethostbyname_r
#undef gethostbyname_r
#endif
#define gethostbyname_r lwres_gethostbyname_r
#ifdef gethostbyaddr_r
#undef gethostbyaddr_r
#endif
#define gethostbyaddr_r lwres_gethostbyaddr_r
#ifdef gethostent_r
#undef gethostent_r
#endif
#define gethostent_r lwres_gethostent_r
#ifdef sethostent_r
#undef sethostent_r
#endif
#define sethostent_r lwres_sethostent_r
#ifdef endhostent_r
#undef endhostent_r
#endif
#define endhostent_r lwres_endhostent_r
#ifdef getrrsetbyname
#undef getrrsetbyname
#endif
#define getrrsetbyname lwres_getrrsetbyname
#ifdef freerrset
#undef freerrset
#endif
#define freerrset lwres_freerrset
#ifdef notyet
#define getservbyname lwres_getservbyname
#define getservbyport lwres_getservbyport
#define getservent lwres_getservent
#define setservent lwres_setservent
#define endservent lwres_endservent
#define getservbyname_r lwres_getservbyname_r
#define getservbyport_r lwres_getservbyport_r
#define getservent_r lwres_getservent_r
#define setservent_r lwres_setservent_r
#define endservent_r lwres_endservent_r
#define getprotobyname lwres_getprotobyname
#define getprotobynumber lwres_getprotobynumber
#define getprotoent lwres_getprotoent
#define setprotoent lwres_setprotoent
#define endprotoent lwres_endprotoent
#define getprotobyname_r lwres_getprotobyname_r
#define getprotobynumber_r lwres_getprotobynumber_r
#define getprotoent_r lwres_getprotoent_r
#define setprotoent_r lwres_setprotoent_r
#define endprotoent_r lwres_endprotoent_r
#ifdef getnetbyname
#undef getnetbyname
#endif
#define getnetbyname lwres_getnetbyname
#ifdef getnetbyaddr
#undef getnetbyaddr
#endif
#define getnetbyaddr lwres_getnetbyaddr
#ifdef getnetent
#undef getnetent
#endif
#define getnetent lwres_getnetent
#ifdef setnetent
#undef setnetent
#endif
#define setnetent lwres_setnetent
#ifdef endnetent
#undef endnetent
#endif
#define endnetent lwres_endnetent
#ifdef getnetbyname_r
#undef getnetbyname_r
#endif
#define getnetbyname_r lwres_getnetbyname_r
#ifdef getnetbyaddr_r
#undef getnetbyaddr_r
#endif
#define getnetbyaddr_r lwres_getnetbyaddr_r
#ifdef getnetent_r
#undef getnetent_r
#endif
#define getnetent_r lwres_getnetent_r
#ifdef setnetent_r
#undef setnetent_r
#endif
#define setnetent_r lwres_setnetent_r
#ifdef endnetent_r
#undef endnetent_r
#endif
#define endnetent_r lwres_endnetent_r
#endif /* notyet */
#ifdef h_errno
#undef h_errno
#endif
#define h_errno lwres_h_errno
#endif /* LWRES_NAMESPACE */
LWRES_LANG_BEGINDECLS
extern int lwres_h_errno;
int lwres_getaddrinfo(const char *, const char *,
const struct addrinfo *, struct addrinfo **);
int lwres_getnameinfo(const struct sockaddr *, size_t, char *,
size_t, char *, size_t, int);
void lwres_freeaddrinfo(struct addrinfo *);
char *lwres_gai_strerror(int);
struct hostent *lwres_gethostbyaddr(const char *, int, int);
struct hostent *lwres_gethostbyname(const char *);
struct hostent *lwres_gethostbyname2(const char *, int);
struct hostent *lwres_gethostent(void);
struct hostent *lwres_getipnodebyname(const char *, int, int, int *);
struct hostent *lwres_getipnodebyaddr(const void *, size_t, int, int *);
void lwres_endhostent(void);
void lwres_sethostent(int);
/* void lwres_sethostfile(const char *); */
void lwres_freehostent(struct hostent *);
int lwres_getrrsetbyname(const char *, unsigned int, unsigned int,
unsigned int, struct rrsetinfo **);
void lwres_freerrset(struct rrsetinfo *);
#ifdef notyet
struct netent *lwres_getnetbyaddr(unsigned long, int);
struct netent *lwres_getnetbyname(const char *);
struct netent *lwres_getnetent(void);
void lwres_endnetent(void);
void lwres_setnetent(int);
struct protoent *lwres_getprotobyname(const char *);
struct protoent *lwres_getprotobynumber(int);
struct protoent *lwres_getprotoent(void);
void lwres_endprotoent(void);
void lwres_setprotoent(int);
struct servent *lwres_getservbyname(const char *, const char *);
struct servent *lwres_getservbyport(int, const char *);
struct servent *lwres_getservent(void);
void lwres_endservent(void);
void lwres_setservent(int);
#endif /* notyet */
void lwres_herror(const char *);
const char *lwres_hstrerror(int);
struct hostent *lwres_gethostbyaddr_r(const char *, int, int, struct hostent *,
char *, int, int *);
struct hostent *lwres_gethostbyname_r(const char *, struct hostent *,
char *, int, int *);
struct hostent *lwres_gethostent_r(struct hostent *, char *, int, int *);
void lwres_sethostent_r(int);
void lwres_endhostent_r(void);
#ifdef notyet
struct netent *lwres_getnetbyname_r(const char *, struct netent *,
char *, int);
struct netent *lwres_getnetbyaddr_r(long, int, struct netent *,
char *, int);
struct netent *lwres_getnetent_r(struct netent *, char *, int);
void lwres_setnetent_r(int);
void lwres_endnetent_r(void);
struct protoent *lwres_getprotobyname_r(const char *,
struct protoent *, char *, int);
struct protoent *lwres_getprotobynumber_r(int,
struct protoent *, char *, int);
struct protoent *lwres_getprotoent_r(struct protoent *, char *, int);
void lwres_setprotoent_r(int);
void lwres_endprotoent_r(void);
struct servent *lwres_getservbyname_r(const char *name, const char *,
struct servent *, char *, int);
struct servent *lwres_getservbyport_r(int port, const char *,
struct servent *, char *, int);
struct servent *lwres_getservent_r(struct servent *, char *, int);
void lwres_setservent_r(int);
void lwres_endservent_r(void);
#endif /* notyet */
LWRES_LANG_ENDDECLS
#ifdef notyet
/* This is nec'y to make this include file properly replace the sun version. */
#ifdef sun
#ifdef __GNU_LIBRARY__
#include <rpc/netdb.h> /* Required. */
#else /* !__GNU_LIBRARY__ */
struct rpcent {
char *r_name; /* name of server for this rpc program */
char **r_aliases; /* alias list */
int r_number; /* rpc program number */
};
struct rpcent *lwres_getrpcbyname();
struct rpcent *lwres_getrpcbynumber(),
struct rpcent *lwres_getrpcent();
#endif /* __GNU_LIBRARY__ */
#endif /* sun */
#endif /* notyet */
/*
* Tell Emacs to use C mode on this file.
* Local variables:
* mode: c
* End:
*/
#endif /* LWRES_NETDB_H */
stdlib.h 0000644 00000001323 15051120276 0006174 0 ustar 00 /*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, you can obtain one at https://mozilla.org/MPL/2.0/.
*
* See the COPYRIGHT file distributed with this work for additional
* information regarding copyright ownership.
*/
#ifndef LWRES_STDLIB_H
#define LWRES_STDLIB_H 1
/*! \file lwres/stdlib.h */
#include <stdlib.h>
#include <lwres/lang.h>
#include <lwres/platform.h>
#ifdef LWRES_PLATFORM_NEEDSTRTOUL
#define strtoul lwres_strtoul
#endif
LWRES_LANG_BEGINDECLS
unsigned long lwres_strtoul(const char *, char **, int);
LWRES_LANG_ENDDECLS
#endif
list.h 0000644 00000006272 15051120276 0005676 0 ustar 00 /*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, you can obtain one at https://mozilla.org/MPL/2.0/.
*
* See the COPYRIGHT file distributed with this work for additional
* information regarding copyright ownership.
*/
#ifndef LWRES_LIST_H
#define LWRES_LIST_H 1
/*! \file lwres/list.h */
#define LWRES_LIST(type) struct { type *head, *tail; }
#define LWRES_LIST_INIT(list) \
do { (list).head = NULL; (list).tail = NULL; } while (0)
#define LWRES_LINK(type) struct { type *prev, *next; }
#define LWRES_LINK_INIT(elt, link) \
do { \
(elt)->link.prev = (void *)(-1); \
(elt)->link.next = (void *)(-1); \
} while (0)
#define LWRES_LINK_LINKED(elt, link) \
((void *)((elt)->link.prev) != (void *)(-1))
#define LWRES_LIST_HEAD(list) ((list).head)
#define LWRES_LIST_TAIL(list) ((list).tail)
#define LWRES_LIST_EMPTY(list) LWRES_TF((list).head == NULL)
#define LWRES_LIST_PREPEND(list, elt, link) \
do { \
if ((list).head != NULL) \
(list).head->link.prev = (elt); \
else \
(list).tail = (elt); \
(elt)->link.prev = NULL; \
(elt)->link.next = (list).head; \
(list).head = (elt); \
} while (0)
#define LWRES_LIST_APPEND(list, elt, link) \
do { \
if ((list).tail != NULL) \
(list).tail->link.next = (elt); \
else \
(list).head = (elt); \
(elt)->link.prev = (list).tail; \
(elt)->link.next = NULL; \
(list).tail = (elt); \
} while (0)
#define LWRES_LIST_UNLINK(list, elt, link) \
do { \
if ((elt)->link.next != NULL) \
(elt)->link.next->link.prev = (elt)->link.prev; \
else \
(list).tail = (elt)->link.prev; \
if ((elt)->link.prev != NULL) \
(elt)->link.prev->link.next = (elt)->link.next; \
else \
(list).head = (elt)->link.next; \
(elt)->link.prev = (void *)(-1); \
(elt)->link.next = (void *)(-1); \
} while (0)
#define LWRES_LIST_PREV(elt, link) ((elt)->link.prev)
#define LWRES_LIST_NEXT(elt, link) ((elt)->link.next)
#define LWRES_LIST_INSERTBEFORE(list, before, elt, link) \
do { \
if ((before)->link.prev == NULL) \
LWRES_LIST_PREPEND(list, elt, link); \
else { \
(elt)->link.prev = (before)->link.prev; \
(before)->link.prev = (elt); \
(elt)->link.prev->link.next = (elt); \
(elt)->link.next = (before); \
} \
} while (0)
#define LWRES_LIST_INSERTAFTER(list, after, elt, link) \
do { \
if ((after)->link.next == NULL) \
LWRES_LIST_APPEND(list, elt, link); \
else { \
(elt)->link.next = (after)->link.next; \
(after)->link.next = (elt); \
(elt)->link.next->link.prev = (elt); \
(elt)->link.prev = (after); \
} \
} while (0)
#define LWRES_LIST_APPENDLIST(list1, list2, link) \
do { \
if (LWRES_LIST_EMPTY(list1)) \
(list1) = (list2); \
else if (!LWRES_LIST_EMPTY(list2)) { \
(list1).tail->link.next = (list2).head; \
(list2).head->link.prev = (list1).tail; \
(list1).tail = (list2).tail; \
} \
(list2).head = NULL; \
(list2).tail = NULL; \
} while (0)
#define LWRES_LIST_ENQUEUE(list, elt, link) LWRES_LIST_APPEND(list, elt, link)
#define LWRES_LIST_DEQUEUE(list, elt, link) LWRES_LIST_UNLINK(list, elt, link)
#endif /* LWRES_LIST_H */
version.h 0000644 00000001304 15051120276 0006377 0 ustar 00 /*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, you can obtain one at https://mozilla.org/MPL/2.0/.
*
* See the COPYRIGHT file distributed with this work for additional
* information regarding copyright ownership.
*/
/*! \file lwres/version.h */
#include <lwres/platform.h>
LIBLWRES_EXTERNAL_DATA extern const char lwres_version[];
LIBLWRES_EXTERNAL_DATA extern const unsigned int lwres_libinterface;
LIBLWRES_EXTERNAL_DATA extern const unsigned int lwres_librevision;
LIBLWRES_EXTERNAL_DATA extern const unsigned int lwres_libage;