mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
a204e42c2f
We no longer support versions of bind that have DLZ_DLOPEN_VERSION != 3, so we no longer need all these ifdefs. Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz> Reviewed-by: Andrew Bartlett <abartlet@samba.org> Autobuild-User(master): Andrew Bartlett <abartlet@samba.org> Autobuild-Date(master): Mon May 17 22:29:01 UTC 2021 on sn-devel-184
315 lines
8.2 KiB
C
315 lines
8.2 KiB
C
/*
|
|
* Copyright (C) 2010 Andrew Tridgell
|
|
*
|
|
* Permission to use, copy, modify, and distribute this software for any
|
|
* purpose with or without fee is hereby granted, provided that the
|
|
* above copyright notice and this permission notice appear in all
|
|
* copies.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR
|
|
* DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
|
|
* THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
|
|
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
|
|
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
|
|
* OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
|
|
* USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
*/
|
|
|
|
/* This header is updated based on BIND 9.10.1 source.
|
|
* contrib/dlz/modules/include/dlz_minimal.h
|
|
*/
|
|
|
|
#ifndef DLZ_MINIMAL_H
|
|
#define DLZ_MINIMAL_H 1
|
|
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
|
|
#if defined (BIND_VERSION_9_8)
|
|
# error Bind 9.8 is not supported!
|
|
#elif defined (BIND_VERSION_9_9)
|
|
# error Bind 9.9 is not supported!
|
|
#elif defined (BIND_VERSION_9_10)
|
|
# define DLZ_DLOPEN_VERSION 3
|
|
# define DNS_CLIENTINFO_VERSION 1
|
|
# define ISC_BOOLEAN_AS_BOOL 0
|
|
#elif defined (BIND_VERSION_9_11)
|
|
# define DLZ_DLOPEN_VERSION 3
|
|
# define DNS_CLIENTINFO_VERSION 2
|
|
# define ISC_BOOLEAN_AS_BOOL 0
|
|
#elif defined (BIND_VERSION_9_12)
|
|
# define DLZ_DLOPEN_VERSION 3
|
|
# define DNS_CLIENTINFO_VERSION 2
|
|
# define ISC_BOOLEAN_AS_BOOL 0
|
|
#elif defined (BIND_VERSION_9_14)
|
|
# define DLZ_DLOPEN_VERSION 3
|
|
# define DNS_CLIENTINFO_VERSION 2
|
|
#elif defined (BIND_VERSION_9_16)
|
|
# define DLZ_DLOPEN_VERSION 3
|
|
# define DNS_CLIENTINFO_VERSION 2
|
|
#else
|
|
# error Unsupported BIND version
|
|
#endif
|
|
|
|
#ifndef ISC_BOOLEAN_AS_BOOL
|
|
#define ISC_BOOLEAN_AS_BOOL 1
|
|
#endif
|
|
|
|
# define DLZ_DLOPEN_AGE 0
|
|
|
|
typedef unsigned int isc_result_t;
|
|
#if ISC_BOOLEAN_AS_BOOL == 1
|
|
typedef bool isc_boolean_t;
|
|
#else
|
|
typedef int isc_boolean_t;
|
|
#endif
|
|
typedef uint32_t dns_ttl_t;
|
|
|
|
/* return these in flags from dlz_version() */
|
|
#define DNS_SDLZFLAG_THREADSAFE 0x00000001U
|
|
#define DNS_SDLZFLAG_RELATIVEOWNER 0x00000002U
|
|
#define DNS_SDLZFLAG_RELATIVERDATA 0x00000004U
|
|
|
|
/* result codes */
|
|
#define ISC_R_SUCCESS 0
|
|
#define ISC_R_NOMEMORY 1
|
|
#define ISC_R_NOPERM 6
|
|
#define ISC_R_NOSPACE 19
|
|
#define ISC_R_NOTFOUND 23
|
|
#define ISC_R_FAILURE 25
|
|
#define ISC_R_NOTIMPLEMENTED 27
|
|
#define ISC_R_NOMORE 29
|
|
#define ISC_R_INVALIDFILE 30
|
|
#define ISC_R_UNEXPECTED 34
|
|
#define ISC_R_FILENOTFOUND 38
|
|
|
|
/* boolean values */
|
|
#if ISC_BOOLEAN_AS_BOOL == 1
|
|
#define ISC_TRUE true
|
|
#define ISC_FALSE false
|
|
#else
|
|
#define ISC_TRUE 1
|
|
#define ISC_FALSE 0
|
|
#endif
|
|
|
|
/* log levels */
|
|
#define ISC_LOG_INFO (-1)
|
|
#define ISC_LOG_NOTICE (-2)
|
|
#define ISC_LOG_WARNING (-3)
|
|
#define ISC_LOG_ERROR (-4)
|
|
#define ISC_LOG_CRITICAL (-5)
|
|
#define ISC_LOG_DEBUG(level) (level)
|
|
|
|
/* opaque structures */
|
|
typedef void *dns_sdlzlookup_t;
|
|
typedef void *dns_sdlzallnodes_t;
|
|
typedef void *dns_view_t;
|
|
typedef void *dns_dlzdb_t;
|
|
|
|
/*
|
|
* Method and type definitions needed for retrieval of client info
|
|
* from the caller.
|
|
*/
|
|
typedef struct isc_sockaddr {
|
|
union {
|
|
struct sockaddr sa;
|
|
struct sockaddr_in sin;
|
|
struct sockaddr_in6 sin6;
|
|
struct sockaddr_un sunix;
|
|
} type;
|
|
unsigned int length;
|
|
void * link;
|
|
} isc_sockaddr_t;
|
|
|
|
#if DNS_CLIENTINFO_VERSION == 1
|
|
|
|
typedef struct dns_clientinfo {
|
|
uint16_t version;
|
|
void *data;
|
|
} dns_clientinfo_t;
|
|
|
|
typedef isc_result_t (*dns_clientinfo_sourceip_t)(dns_clientinfo_t *client,
|
|
isc_sockaddr_t **addrp);
|
|
|
|
#define DNS_CLIENTINFOMETHODS_VERSION 1
|
|
#define DNS_CLIENTINFOMETHODS_AGE 0
|
|
|
|
typedef struct dns_clientinfomethods {
|
|
uint16_t version;
|
|
uint16_t age;
|
|
dns_clientinfo_sourceip_t sourceip;
|
|
} dns_clientinfomethods_t;
|
|
|
|
#elif DNS_CLIENTINFO_VERSION == 2
|
|
|
|
typedef struct dns_clientinfo {
|
|
uint16_t version;
|
|
void *data;
|
|
void *dbversion;
|
|
} dns_clientinfo_t;
|
|
|
|
typedef isc_result_t (*dns_clientinfo_sourceip_t)(dns_clientinfo_t *client,
|
|
isc_sockaddr_t **addrp);
|
|
|
|
typedef isc_result_t (*dns_clientinfo_version_t)(dns_clientinfo_t *client,
|
|
void **addrp);
|
|
|
|
#define DNS_CLIENTINFOMETHODS_VERSION 2
|
|
#define DNS_CLIENTINFOMETHODS_AGE 1
|
|
|
|
typedef struct dns_clientinfomethods {
|
|
uint16_t version;
|
|
uint16_t age;
|
|
dns_clientinfo_sourceip_t sourceip;
|
|
dns_clientinfo_version_t dbversion;
|
|
} dns_clientinfomethods_t;
|
|
|
|
#endif /* DNS_CLIENTINFO_VERSION */
|
|
|
|
|
|
/*
|
|
* Method definitions for callbacks provided by the dlopen driver
|
|
*/
|
|
|
|
typedef void log_t(int level, const char *fmt, ...);
|
|
|
|
typedef isc_result_t dns_sdlz_putrr_t(dns_sdlzlookup_t *lookup,
|
|
const char *type,
|
|
dns_ttl_t ttl,
|
|
const char *data);
|
|
|
|
typedef isc_result_t dns_sdlz_putnamedrr_t(dns_sdlzallnodes_t *allnodes,
|
|
const char *name,
|
|
const char *type,
|
|
dns_ttl_t ttl,
|
|
const char *data);
|
|
|
|
typedef isc_result_t dns_dlz_writeablezone_t(dns_view_t *view,
|
|
dns_dlzdb_t *dlzdb,
|
|
const char *zone_name);
|
|
|
|
|
|
/*
|
|
* prototypes for the functions you can include in your module
|
|
*/
|
|
|
|
/*
|
|
* dlz_version() is required for all DLZ external drivers. It should
|
|
* return DLZ_DLOPEN_VERSION. 'flags' is updated to indicate capabilities
|
|
* of the module. In particular, if the module is thread-safe then it
|
|
* sets 'flags' to include DNS_SDLZFLAG_THREADSAFE. Other capability
|
|
* flags may be added in the future.
|
|
*/
|
|
int
|
|
dlz_version(unsigned int *flags);
|
|
|
|
/*
|
|
* dlz_create() is required for all DLZ external drivers.
|
|
*/
|
|
isc_result_t
|
|
dlz_create(const char *dlzname, unsigned int argc, const char *argv[],
|
|
void **dbdata, ...);
|
|
|
|
/*
|
|
* dlz_destroy() is optional, and will be called when the driver is
|
|
* unloaded if supplied
|
|
*/
|
|
void
|
|
dlz_destroy(void *dbdata);
|
|
|
|
/*
|
|
* dlz_findzonedb is required for all DLZ external drivers
|
|
*/
|
|
isc_result_t
|
|
dlz_findzonedb(void *dbdata, const char *name,
|
|
dns_clientinfomethods_t *methods,
|
|
dns_clientinfo_t *clientinfo);
|
|
|
|
/*
|
|
* dlz_lookup is required for all DLZ external drivers
|
|
*/
|
|
isc_result_t
|
|
dlz_lookup(const char *zone, const char *name, void *dbdata,
|
|
dns_sdlzlookup_t *lookup,
|
|
dns_clientinfomethods_t *methods,
|
|
dns_clientinfo_t *clientinfo);
|
|
|
|
/*
|
|
* dlz_authority() is optional if dlz_lookup() supplies
|
|
* authority information (i.e., SOA, NS) for the dns record
|
|
*/
|
|
isc_result_t
|
|
dlz_authority(const char *zone, void *dbdata, dns_sdlzlookup_t *lookup);
|
|
|
|
/*
|
|
* dlz_allowzonexfr() is optional, and should be supplied if you want to
|
|
* support zone transfers
|
|
*/
|
|
isc_result_t
|
|
dlz_allowzonexfr(void *dbdata, const char *name, const char *client);
|
|
|
|
/*
|
|
* dlz_allnodes() is optional, but must be supplied if supply a
|
|
* dlz_allowzonexfr() function
|
|
*/
|
|
isc_result_t
|
|
dlz_allnodes(const char *zone, void *dbdata, dns_sdlzallnodes_t *allnodes);
|
|
|
|
/*
|
|
* dlz_newversion() is optional. It should be supplied if you want to
|
|
* support dynamic updates.
|
|
*/
|
|
isc_result_t
|
|
dlz_newversion(const char *zone, void *dbdata, void **versionp);
|
|
|
|
/*
|
|
* dlz_closeversion() is optional, but must be supplied if you supply a
|
|
* dlz_newversion() function
|
|
*/
|
|
void
|
|
dlz_closeversion(const char *zone, isc_boolean_t commit, void *dbdata,
|
|
void **versionp);
|
|
|
|
/*
|
|
* dlz_configure() is optional, but must be supplied if you want to support
|
|
* dynamic updates
|
|
*/
|
|
isc_result_t
|
|
dlz_configure(dns_view_t *view, dns_dlzdb_t *dlzdb, void *dbdata);
|
|
|
|
/*
|
|
* dlz_ssumatch() is optional, but must be supplied if you want to support
|
|
* dynamic updates
|
|
*/
|
|
isc_boolean_t
|
|
dlz_ssumatch(const char *signer, const char *name, const char *tcpaddr,
|
|
const char *type, const char *key, uint32_t keydatalen,
|
|
uint8_t *keydata, void *dbdata);
|
|
|
|
/*
|
|
* dlz_addrdataset() is optional, but must be supplied if you want to
|
|
* support dynamic updates
|
|
*/
|
|
isc_result_t
|
|
dlz_addrdataset(const char *name, const char *rdatastr, void *dbdata,
|
|
void *version);
|
|
|
|
/*
|
|
* dlz_subrdataset() is optional, but must be supplied if you want to
|
|
* support dynamic updates
|
|
*/
|
|
isc_result_t
|
|
dlz_subrdataset(const char *name, const char *rdatastr, void *dbdata,
|
|
void *version);
|
|
|
|
/*
|
|
* dlz_delrdataset() is optional, but must be supplied if you want to
|
|
* support dynamic updates
|
|
*/
|
|
isc_result_t
|
|
dlz_delrdataset(const char *name, const char *type, void *dbdata,
|
|
void *version);
|
|
|
|
#endif /* DLZ_MINIMAL_H */
|