Viewing File: /usr/local/cpanel/3rdparty/perl/536/cpanel-lib/x86_64-linux/DNS/LDNS.pm

package DNS::LDNS;

use 5.014002;
use strict;
use warnings;
use Carp;

require Exporter;
use AutoLoader;

our @ISA = qw(Exporter);

# Items to export into callers namespace by default. Note: do not export
# names by default without a very good reason. Use EXPORT_OK instead.
# Do not simply export all your public functions/methods/constants.

our %EXPORT_TAGS = ( 'all' => [ qw(
	LDNS_AA
	LDNS_AD
	LDNS_CD
	LDNS_CERT_ACPKIX
	LDNS_CERT_IACPKIX
	LDNS_CERT_IPGP
	LDNS_CERT_IPKIX
	LDNS_CERT_ISPKI
	LDNS_CERT_OID
	LDNS_CERT_PGP
	LDNS_CERT_PKIX
	LDNS_CERT_SPKI
	LDNS_CERT_URI
	LDNS_DEFAULT_EXP_TIME
	LDNS_DEFAULT_TTL
	LDNS_DH
	LDNS_DNSSEC_KEYPROTO
	LDNS_DSA
	LDNS_DSA_NSEC3
	LDNS_ECC
	LDNS_ECC_GOST
	LDNS_HASH_GOST
	LDNS_IP4ADDRLEN
	LDNS_IP6ADDRLEN
	LDNS_KEY_REVOKE_KEY
	LDNS_KEY_SEP_KEY
	LDNS_KEY_ZONE_KEY
	LDNS_MAX_DOMAINLEN
	LDNS_MAX_KEYLEN
	LDNS_MAX_LABELLEN
	LDNS_MAX_PACKETLEN
	LDNS_MAX_POINTERS
	LDNS_MAX_RDFLEN
	LDNS_NSEC3_MAX_ITERATIONS
	LDNS_NSEC3_VARS_OPTOUT_MASK
	LDNS_PACKET_ANSWER
	LDNS_PACKET_IQUERY
	LDNS_PACKET_NODATA
	LDNS_PACKET_NOTIFY
	LDNS_PACKET_NXDOMAIN
	LDNS_PACKET_QUERY
	LDNS_PACKET_QUESTION
	LDNS_PACKET_REFERRAL
	LDNS_PACKET_STATUS
	LDNS_PACKET_UNKNOWN
	LDNS_PACKET_UPDATE
	LDNS_PORT
	LDNS_PRIVATEDNS
	LDNS_PRIVATEOID
	LDNS_QR
	LDNS_RA
	LDNS_RCODE_FORMERR
	LDNS_RCODE_NOERROR
	LDNS_RCODE_NOTAUTH
	LDNS_RCODE_NOTIMPL
	LDNS_RCODE_NOTZONE
	LDNS_RCODE_NXDOMAIN
	LDNS_RCODE_NXRRSET
	LDNS_RCODE_REFUSED
	LDNS_RCODE_SERVFAIL
	LDNS_RCODE_YXDOMAIN
	LDNS_RCODE_YXRRSET
	LDNS_RD
	LDNS_RDATA_FIELD_DESCRIPTORS_COMMON
	LDNS_RDF_SIZE_16BYTES
	LDNS_RDF_SIZE_6BYTES
	LDNS_RDF_SIZE_BYTE
	LDNS_RDF_SIZE_DOUBLEWORD
	LDNS_RDF_SIZE_WORD
	LDNS_RDF_TYPE_A
	LDNS_RDF_TYPE_AAAA
	LDNS_RDF_TYPE_ALG
	LDNS_RDF_TYPE_APL
	LDNS_RDF_TYPE_ATMA
	LDNS_RDF_TYPE_B32_EXT
	LDNS_RDF_TYPE_B64
	LDNS_RDF_TYPE_BITMAP
	LDNS_RDF_TYPE_CERT_ALG
	LDNS_RDF_TYPE_CERTIFICATE_USAGE
	LDNS_RDF_TYPE_CLASS
	LDNS_RDF_TYPE_DNAME
	LDNS_RDF_TYPE_EUI48
	LDNS_RDF_TYPE_EUI64
	LDNS_RDF_TYPE_HEX
	LDNS_RDF_TYPE_HIP
	LDNS_RDF_TYPE_ILNP64
	LDNS_RDF_TYPE_INT16
	LDNS_RDF_TYPE_INT16_DATA
	LDNS_RDF_TYPE_INT32
	LDNS_RDF_TYPE_INT8
	LDNS_RDF_TYPE_IPSECKEY
	LDNS_RDF_TYPE_LOC
	LDNS_RDF_TYPE_LONG_STR
	LDNS_RDF_TYPE_MATCHING_TYPE
	LDNS_RDF_TYPE_NONE
	LDNS_RDF_TYPE_NSAP
	LDNS_RDF_TYPE_NSEC
	LDNS_RDF_TYPE_NSEC3_NEXT_OWNER
	LDNS_RDF_TYPE_NSEC3_SALT
	LDNS_RDF_TYPE_PERIOD
	LDNS_RDF_TYPE_SELECTOR
	LDNS_RDF_TYPE_SERVICE
	LDNS_RDF_TYPE_STR
	LDNS_RDF_TYPE_TAG
	LDNS_RDF_TYPE_TIME
	LDNS_RDF_TYPE_TSIGTIME
	LDNS_RDF_TYPE_TYPE
	LDNS_RDF_TYPE_UNKNOWN
	LDNS_RDF_TYPE_WKS
	LDNS_RESOLV_ANCHOR
	LDNS_RESOLV_DEFDOMAIN
	LDNS_RESOLV_INET
	LDNS_RESOLV_INET6
	LDNS_RESOLV_INETANY
	LDNS_RESOLV_KEYWORD
	LDNS_RESOLV_KEYWORDS
	LDNS_RESOLV_NAMESERVER
	LDNS_RESOLV_OPTIONS
	LDNS_RESOLV_RTT_INF
	LDNS_RESOLV_RTT_MIN
	LDNS_RESOLV_SEARCH
	LDNS_RESOLV_SORTLIST
	LDNS_RR_CLASS_ANY
	LDNS_RR_CLASS_CH
	LDNS_RR_CLASS_COUNT
	LDNS_RR_CLASS_FIRST
	LDNS_RR_CLASS_HS
	LDNS_RR_CLASS_IN
	LDNS_RR_CLASS_LAST
	LDNS_RR_CLASS_NONE
	LDNS_RR_COMPRESS
	LDNS_RR_NO_COMPRESS
	LDNS_RR_OVERHEAD
	LDNS_RR_TYPE_A
	LDNS_RR_TYPE_A6
	LDNS_RR_TYPE_AAAA
	LDNS_RR_TYPE_AFSDB
	LDNS_RR_TYPE_ANY
	LDNS_RR_TYPE_APL
	LDNS_RR_TYPE_ATMA
	LDNS_RR_TYPE_AVC
	LDNS_RR_TYPE_AXFR
	LDNS_RR_TYPE_CAA
	LDNS_RR_TYPE_CDNSKEY
	LDNS_RR_TYPE_CDS
	LDNS_RR_TYPE_CERT
	LDNS_RR_TYPE_CNAME
	LDNS_RR_TYPE_COUNT
	LDNS_RR_TYPE_CSYNC
	LDNS_RR_TYPE_DHCID
	LDNS_RR_TYPE_DLV
	LDNS_RR_TYPE_DNAME
	LDNS_RR_TYPE_DNSKEY
	LDNS_RR_TYPE_DS
	LDNS_RR_TYPE_EID
	LDNS_RR_TYPE_EUI48
	LDNS_RR_TYPE_EUI64
	LDNS_RR_TYPE_FIRST
	LDNS_RR_TYPE_GID
	LDNS_RR_TYPE_GPOS
	LDNS_RR_TYPE_HINFO
	LDNS_RR_TYPE_IPSECKEY
	LDNS_RR_TYPE_ISDN
	LDNS_RR_TYPE_IXFR
	LDNS_RR_TYPE_KEY
	LDNS_RR_TYPE_KX
	LDNS_RR_TYPE_L32
	LDNS_RR_TYPE_L64
	LDNS_RR_TYPE_LAST
	LDNS_RR_TYPE_LOC
	LDNS_RR_TYPE_LP
	LDNS_RR_TYPE_MAILA
	LDNS_RR_TYPE_MAILB
	LDNS_RR_TYPE_MB
	LDNS_RR_TYPE_MD
	LDNS_RR_TYPE_MF
	LDNS_RR_TYPE_MG
	LDNS_RR_TYPE_MINFO
	LDNS_RR_TYPE_MR
	LDNS_RR_TYPE_MX
	LDNS_RR_TYPE_NAPTR
	LDNS_RR_TYPE_NID
	LDNS_RR_TYPE_NIMLOC
	LDNS_RR_TYPE_NINFO
	LDNS_RR_TYPE_NS
	LDNS_RR_TYPE_NSAP
	LDNS_RR_TYPE_NSAP_PTR
	LDNS_RR_TYPE_NSEC
	LDNS_RR_TYPE_NSEC3
	LDNS_RR_TYPE_NSEC3PARAM
	LDNS_RR_TYPE_NSEC3PARAMS
	LDNS_RR_TYPE_NULL
	LDNS_RR_TYPE_NXT
	LDNS_RR_TYPE_OPENPGPKEY
	LDNS_RR_TYPE_OPT
	LDNS_RR_TYPE_PTR
	LDNS_RR_TYPE_PX
	LDNS_RR_TYPE_RKEY
	LDNS_RR_TYPE_RP
	LDNS_RR_TYPE_RRSIG
	LDNS_RR_TYPE_RT
	LDNS_RR_TYPE_SIG
	LDNS_RR_TYPE_SINK
	LDNS_RR_TYPE_SMIMEA
	LDNS_RR_TYPE_SOA
	LDNS_RR_TYPE_SPF
	LDNS_RR_TYPE_SRV
	LDNS_RR_TYPE_SSHFP
	LDNS_RR_TYPE_TA
	LDNS_RR_TYPE_TALINK
	LDNS_RR_TYPE_TKEY
	LDNS_RR_TYPE_TLSA
	LDNS_RR_TYPE_TSIG
	LDNS_RR_TYPE_TXT
	LDNS_RR_TYPE_UID
	LDNS_RR_TYPE_UINFO
	LDNS_RR_TYPE_UNSPEC
	LDNS_RR_TYPE_URI
	LDNS_RR_TYPE_WKS
	LDNS_RR_TYPE_X25
	LDNS_RSAMD5
	LDNS_RSASHA1
	LDNS_RSASHA1_NSEC3
	LDNS_RSASHA256
	LDNS_RSASHA512
	LDNS_SECTION_ADDITIONAL
	LDNS_SECTION_ANSWER
	LDNS_SECTION_ANY
	LDNS_SECTION_ANY_NOQUESTION
	LDNS_SECTION_AUTHORITY
	LDNS_SECTION_QUESTION
	LDNS_SHA1
	LDNS_SHA256
	LDNS_SIGNATURE_LEAVE_ADD_NEW
	LDNS_SIGNATURE_LEAVE_NO_ADD
	LDNS_SIGNATURE_REMOVE_ADD_NEW
	LDNS_SIGNATURE_REMOVE_NO_ADD
	LDNS_SIGN_DSA
	LDNS_SIGN_DSA_NSEC3
	LDNS_SIGN_ECC_GOST
	LDNS_SIGN_ECDSAP256SHA256
	LDNS_SIGN_ECDSAP384SHA384
	LDNS_SIGN_HMACMD5
	LDNS_SIGN_HMACSHA1
	LDNS_SIGN_HMACSHA224
	LDNS_SIGN_HMACSHA256
	LDNS_SIGN_HMACSHA384
	LDNS_SIGN_HMACSHA512
	LDNS_SIGN_RSAMD5
	LDNS_SIGN_RSASHA1
	LDNS_SIGN_RSASHA1_NSEC3
	LDNS_SIGN_RSASHA256
	LDNS_SIGN_RSASHA512
	LDNS_STATUS_ADDRESS_ERR
	LDNS_STATUS_CERT_BAD_ALGORITHM
	LDNS_STATUS_CRYPTO_ALGO_NOT_IMPL
	LDNS_STATUS_CRYPTO_BOGUS
	LDNS_STATUS_CRYPTO_EXPIRATION_BEFORE_INCEPTION
	LDNS_STATUS_CRYPTO_NO_DNSKEY
	LDNS_STATUS_CRYPTO_NO_DS
	LDNS_STATUS_CRYPTO_NO_MATCHING_KEYTAG_DNSKEY
	LDNS_STATUS_CRYPTO_NO_RRSIG
	LDNS_STATUS_CRYPTO_NO_TRUSTED_DNSKEY
	LDNS_STATUS_CRYPTO_NO_TRUSTED_DS
	LDNS_STATUS_CRYPTO_SIG_EXPIRED
        LDNS_STATUS_CRYPTO_SIG_EXPIRED_WITHIN_MARGIN
	LDNS_STATUS_CRYPTO_SIG_NOT_INCEPTED
        LDNS_STATUS_CRYPTO_SIG_NOT_INCEPTED_WITHIN_MARGIN
	LDNS_STATUS_CRYPTO_TSIG_BOGUS
	LDNS_STATUS_CRYPTO_TSIG_ERR
	LDNS_STATUS_CRYPTO_TYPE_COVERED_ERR
	LDNS_STATUS_CRYPTO_UNKNOWN_ALGO
	LDNS_STATUS_CRYPTO_VALIDATED
        LDNS_STATUS_DANE_BOGUS
        LDNS_STATUS_DANE_EXTRA_CERTS_NOT_USED
        LDNS_STATUS_DANE_INSECURE
        LDNS_STATUS_DANE_MISSING_EXTRA_CERTS
        LDNS_STATUS_DANE_NEED_OPENSSL_GE_1_1_FOR_DANE_TA
        LDNS_STATUS_DANE_NON_CA_CERTIFICATE
        LDNS_STATUS_DANE_OFFSET_OUT_OF_RANGE
        LDNS_STATUS_DANE_PKIX_DID_NOT_VALIDATE
        LDNS_STATUS_DANE_PKIX_NO_SELF_SIGNED_TRUST_ANCHOR
        LDNS_STATUS_DANE_STATUS_MESSAGES
        LDNS_STATUS_DANE_TLSA_DID_NOT_MATCH
        LDNS_STATUS_DANE_UNKNOWN_CERTIFICATE_USAGE
        LDNS_STATUS_DANE_UNKNOWN_MATCHING_TYPE
        LDNS_STATUS_DANE_UNKNOWN_PROTOCOL
        LDNS_STATUS_DANE_UNKNOWN_SELECTOR
        LDNS_STATUS_DANE_UNKNOWN_TRANSPORT
	LDNS_STATUS_DDD_OVERFLOW
	LDNS_STATUS_DNSSEC_EXISTENCE_DENIED
	LDNS_STATUS_DNSSEC_NSEC3_ORIGINAL_NOT_FOUND
	LDNS_STATUS_DNSSEC_NSEC_RR_NOT_COVERED
	LDNS_STATUS_DNSSEC_NSEC_WILDCARD_NOT_COVERED
	LDNS_STATUS_DOMAINNAME_OVERFLOW
	LDNS_STATUS_DOMAINNAME_UNDERFLOW
	LDNS_STATUS_EMPTY_LABEL
	LDNS_STATUS_ENGINE_KEY_NOT_LOADED
	LDNS_STATUS_ERR
        LDNS_STATUS_EXISTS_ERR
	LDNS_STATUS_FILE_ERR
	LDNS_STATUS_INTERNAL_ERR
	LDNS_STATUS_INVALID_B32_EXT
	LDNS_STATUS_INVALID_B64
        LDNS_STATUS_INVALID_EUI48
        LDNS_STATUS_INVALID_EUI64
	LDNS_STATUS_INVALID_HEX
        LDNS_STATUS_INVALID_ILNP64
	LDNS_STATUS_INVALID_INT
	LDNS_STATUS_INVALID_IP4
	LDNS_STATUS_INVALID_IP6
	LDNS_STATUS_INVALID_POINTER
        LDNS_STATUS_INVALID_RDF_TYPE
	LDNS_STATUS_INVALID_STR
        LDNS_STATUS_INVALID_TAG
	LDNS_STATUS_INVALID_TIME
	LDNS_STATUS_LABEL_OVERFLOW
	LDNS_STATUS_MEM_ERR
	LDNS_STATUS_MISSING_RDATA_FIELDS_KEY
	LDNS_STATUS_MISSING_RDATA_FIELDS_RRSIG
	LDNS_STATUS_NETWORK_ERR
	LDNS_STATUS_NOT_IMPL
	LDNS_STATUS_NO_DATA
        LDNS_STATUS_NSEC3_DOMAINNAME_OVERFLOW
	LDNS_STATUS_NSEC3_ERR
	LDNS_STATUS_NULL
	LDNS_STATUS_OK
	LDNS_STATUS_PACKET_OVERFLOW
        LDNS_STATUS_RDATA_OVERFLOW
	LDNS_STATUS_RES_NO_NS
	LDNS_STATUS_RES_QUERY
	LDNS_STATUS_SOCKET_ERROR
	LDNS_STATUS_SSL_ERR
	LDNS_STATUS_SYNTAX_ALG_ERR
	LDNS_STATUS_SYNTAX_BAD_ESCAPE
	LDNS_STATUS_SYNTAX_CLASS_ERR
	LDNS_STATUS_SYNTAX_DNAME_ERR
	LDNS_STATUS_SYNTAX_EMPTY
	LDNS_STATUS_SYNTAX_ERR
	LDNS_STATUS_SYNTAX_INCLUDE
	LDNS_STATUS_SYNTAX_INCLUDE_ERR_NOTIMPL
	LDNS_STATUS_SYNTAX_INTEGER_OVERFLOW
	LDNS_STATUS_SYNTAX_ITERATIONS_OVERFLOW
	LDNS_STATUS_SYNTAX_KEYWORD_ERR
	LDNS_STATUS_SYNTAX_MISSING_VALUE_ERR
	LDNS_STATUS_SYNTAX_ORIGIN
	LDNS_STATUS_SYNTAX_RDATA_ERR
        LDNS_STATUS_SYNTAX_SUPERFLUOUS_TEXT_ERR
	LDNS_STATUS_SYNTAX_TTL
	LDNS_STATUS_SYNTAX_TTL_ERR
	LDNS_STATUS_SYNTAX_TYPE_ERR
	LDNS_STATUS_SYNTAX_VERSION_ERR
	LDNS_STATUS_UNKNOWN_INET
	LDNS_STATUS_WIRE_INCOMPLETE_ADDITIONAL
	LDNS_STATUS_WIRE_INCOMPLETE_ANSWER
	LDNS_STATUS_WIRE_INCOMPLETE_AUTHORITY
	LDNS_STATUS_WIRE_INCOMPLETE_HEADER
	LDNS_STATUS_WIRE_INCOMPLETE_QUESTION
	LDNS_TC

	dnssec_create_nsec
	dnssec_create_nsec3
	create_nsec
	create_nsec3

	rr_type2str
	rr_class2str
	rr_type_by_name
	rr_class_by_name
        pkt_opcode2str
        pkt_rcode2str

	errorstr_by_id
	signing_algorithm_by_name
	key_algorithm_supported
	read_anchor_file
) ] );

our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );

our @EXPORT = qw(
	LDNS_AA
	LDNS_AD
	LDNS_CD
	LDNS_CERT_ACPKIX
	LDNS_CERT_IACPKIX
	LDNS_CERT_IPGP
	LDNS_CERT_IPKIX
	LDNS_CERT_ISPKI
	LDNS_CERT_OID
	LDNS_CERT_PGP
	LDNS_CERT_PKIX
	LDNS_CERT_SPKI
	LDNS_CERT_URI
	LDNS_DEFAULT_EXP_TIME
	LDNS_DEFAULT_TTL
	LDNS_DH
	LDNS_DNSSEC_KEYPROTO
	LDNS_DSA
	LDNS_DSA_NSEC3
	LDNS_ECC
	LDNS_ECC_GOST
	LDNS_HASH_GOST
	LDNS_IP4ADDRLEN
	LDNS_IP6ADDRLEN
	LDNS_KEY_REVOKE_KEY
	LDNS_KEY_SEP_KEY
	LDNS_KEY_ZONE_KEY
	LDNS_MAX_DOMAINLEN
	LDNS_MAX_KEYLEN
	LDNS_MAX_LABELLEN
	LDNS_MAX_PACKETLEN
	LDNS_MAX_POINTERS
	LDNS_MAX_RDFLEN
	LDNS_NSEC3_MAX_ITERATIONS
	LDNS_NSEC3_VARS_OPTOUT_MASK
	LDNS_PACKET_ANSWER
	LDNS_PACKET_IQUERY
	LDNS_PACKET_NODATA
	LDNS_PACKET_NOTIFY
	LDNS_PACKET_NXDOMAIN
	LDNS_PACKET_QUERY
	LDNS_PACKET_QUESTION
	LDNS_PACKET_REFERRAL
	LDNS_PACKET_STATUS
	LDNS_PACKET_UNKNOWN
	LDNS_PACKET_UPDATE
	LDNS_PORT
	LDNS_PRIVATEDNS
	LDNS_PRIVATEOID
	LDNS_QR
	LDNS_RA
	LDNS_RCODE_FORMERR
	LDNS_RCODE_NOERROR
	LDNS_RCODE_NOTAUTH
	LDNS_RCODE_NOTIMPL
	LDNS_RCODE_NOTZONE
	LDNS_RCODE_NXDOMAIN
	LDNS_RCODE_NXRRSET
	LDNS_RCODE_REFUSED
	LDNS_RCODE_SERVFAIL
	LDNS_RCODE_YXDOMAIN
	LDNS_RCODE_YXRRSET
	LDNS_RD
	LDNS_RDATA_FIELD_DESCRIPTORS_COMMON
	LDNS_RDF_SIZE_16BYTES
	LDNS_RDF_SIZE_6BYTES
	LDNS_RDF_SIZE_BYTE
	LDNS_RDF_SIZE_DOUBLEWORD
	LDNS_RDF_SIZE_WORD
	LDNS_RDF_TYPE_A
	LDNS_RDF_TYPE_AAAA
	LDNS_RDF_TYPE_ALG
	LDNS_RDF_TYPE_APL
	LDNS_RDF_TYPE_ATMA
	LDNS_RDF_TYPE_B32_EXT
	LDNS_RDF_TYPE_B64
        LDNS_RDF_TYPE_BITMAP
	LDNS_RDF_TYPE_CERT_ALG
        LDNS_RDF_TYPE_CERTIFICATE_USAGE
	LDNS_RDF_TYPE_CLASS
	LDNS_RDF_TYPE_DNAME
        LDNS_RDF_TYPE_EUI48
        LDNS_RDF_TYPE_EUI64
	LDNS_RDF_TYPE_HEX
        LDNS_RDF_TYPE_HIP
        LDNS_RDF_TYPE_ILNP64
	LDNS_RDF_TYPE_INT16
	LDNS_RDF_TYPE_INT16_DATA
	LDNS_RDF_TYPE_INT32
	LDNS_RDF_TYPE_INT8
	LDNS_RDF_TYPE_IPSECKEY
	LDNS_RDF_TYPE_LOC
        LDNS_RDF_TYPE_LONG_STR
        LDNS_RDF_TYPE_MATCHING_TYPE
	LDNS_RDF_TYPE_NONE
	LDNS_RDF_TYPE_NSAP
	LDNS_RDF_TYPE_NSEC
	LDNS_RDF_TYPE_NSEC3_NEXT_OWNER
	LDNS_RDF_TYPE_NSEC3_SALT
	LDNS_RDF_TYPE_PERIOD
        LDNS_RDF_TYPE_SELECTOR
	LDNS_RDF_TYPE_SERVICE
	LDNS_RDF_TYPE_STR
        LDNS_RDF_TYPE_TAG
	LDNS_RDF_TYPE_TIME
	LDNS_RDF_TYPE_TSIGTIME
	LDNS_RDF_TYPE_TYPE
	LDNS_RDF_TYPE_UNKNOWN
	LDNS_RDF_TYPE_WKS
	LDNS_RESOLV_ANCHOR
	LDNS_RESOLV_DEFDOMAIN
	LDNS_RESOLV_INET
	LDNS_RESOLV_INET6
	LDNS_RESOLV_INETANY
	LDNS_RESOLV_KEYWORD
	LDNS_RESOLV_KEYWORDS
	LDNS_RESOLV_NAMESERVER
	LDNS_RESOLV_OPTIONS
	LDNS_RESOLV_RTT_INF
	LDNS_RESOLV_RTT_MIN
	LDNS_RESOLV_SEARCH
	LDNS_RESOLV_SORTLIST
	LDNS_RR_CLASS_ANY
	LDNS_RR_CLASS_CH
	LDNS_RR_CLASS_COUNT
	LDNS_RR_CLASS_FIRST
	LDNS_RR_CLASS_HS
	LDNS_RR_CLASS_IN
	LDNS_RR_CLASS_LAST
	LDNS_RR_CLASS_NONE
	LDNS_RR_COMPRESS
	LDNS_RR_NO_COMPRESS
	LDNS_RR_OVERHEAD
	LDNS_RR_TYPE_A
	LDNS_RR_TYPE_A6
	LDNS_RR_TYPE_AAAA
	LDNS_RR_TYPE_AFSDB
	LDNS_RR_TYPE_ANY
	LDNS_RR_TYPE_APL
	LDNS_RR_TYPE_ATMA
        LDNS_RR_TYPE_AVC
	LDNS_RR_TYPE_AXFR
        LDNS_RR_TYPE_CAA
        LDNS_RR_TYPE_CDNSKEY
        LDNS_RR_TYPE_CDS
	LDNS_RR_TYPE_CERT
	LDNS_RR_TYPE_CNAME
	LDNS_RR_TYPE_COUNT
        LDNS_RR_TYPE_CSYNC
	LDNS_RR_TYPE_DHCID
	LDNS_RR_TYPE_DLV
	LDNS_RR_TYPE_DNAME
	LDNS_RR_TYPE_DNSKEY
	LDNS_RR_TYPE_DS
	LDNS_RR_TYPE_EID
        LDNS_RR_TYPE_EUI48
        LDNS_RR_TYPE_EUI64
	LDNS_RR_TYPE_FIRST
	LDNS_RR_TYPE_GID
	LDNS_RR_TYPE_GPOS
	LDNS_RR_TYPE_HINFO
	LDNS_RR_TYPE_IPSECKEY
	LDNS_RR_TYPE_ISDN
	LDNS_RR_TYPE_IXFR
	LDNS_RR_TYPE_KEY
	LDNS_RR_TYPE_KX
        LDNS_RR_TYPE_L32
        LDNS_RR_TYPE_L64
	LDNS_RR_TYPE_LAST
	LDNS_RR_TYPE_LOC
        LDNS_RR_TYPE_LP
	LDNS_RR_TYPE_MAILA
	LDNS_RR_TYPE_MAILB
	LDNS_RR_TYPE_MB
	LDNS_RR_TYPE_MD
	LDNS_RR_TYPE_MF
	LDNS_RR_TYPE_MG
	LDNS_RR_TYPE_MINFO
	LDNS_RR_TYPE_MR
	LDNS_RR_TYPE_MX
	LDNS_RR_TYPE_NAPTR
        LDNS_RR_TYPE_NID
	LDNS_RR_TYPE_NIMLOC
        LDNS_RR_TYPE_NINFO
	LDNS_RR_TYPE_NS
	LDNS_RR_TYPE_NSAP
	LDNS_RR_TYPE_NSAP_PTR
	LDNS_RR_TYPE_NSEC
	LDNS_RR_TYPE_NSEC3
	LDNS_RR_TYPE_NSEC3PARAM
	LDNS_RR_TYPE_NSEC3PARAMS
	LDNS_RR_TYPE_NULL
	LDNS_RR_TYPE_NXT
        LDNS_RR_TYPE_OPENPGPKEY
	LDNS_RR_TYPE_OPT
	LDNS_RR_TYPE_PTR
	LDNS_RR_TYPE_PX
        LDNS_RR_TYPE_RKEY
	LDNS_RR_TYPE_RP
	LDNS_RR_TYPE_RRSIG
	LDNS_RR_TYPE_RT
	LDNS_RR_TYPE_SIG
	LDNS_RR_TYPE_SINK
        LDNS_RR_TYPE_SMIMEA
	LDNS_RR_TYPE_SOA
	LDNS_RR_TYPE_SPF
	LDNS_RR_TYPE_SRV
	LDNS_RR_TYPE_SSHFP
        LDNS_RR_TYPE_TA
	LDNS_RR_TYPE_TALINK
        LDNS_RR_TYPE_TKEY
        LDNS_RR_TYPE_TLSA
	LDNS_RR_TYPE_TSIG
	LDNS_RR_TYPE_TXT
	LDNS_RR_TYPE_UID
	LDNS_RR_TYPE_UINFO
	LDNS_RR_TYPE_UNSPEC
        LDNS_RR_TYPE_URI
	LDNS_RR_TYPE_WKS
	LDNS_RR_TYPE_X25
	LDNS_RSAMD5
	LDNS_RSASHA1
	LDNS_RSASHA1_NSEC3
	LDNS_RSASHA256
	LDNS_RSASHA512
	LDNS_SECTION_ADDITIONAL
	LDNS_SECTION_ANSWER
	LDNS_SECTION_ANY
	LDNS_SECTION_ANY_NOQUESTION
	LDNS_SECTION_AUTHORITY
	LDNS_SECTION_QUESTION
	LDNS_SHA1
	LDNS_SHA256
	LDNS_SIGNATURE_LEAVE_ADD_NEW
	LDNS_SIGNATURE_LEAVE_NO_ADD
	LDNS_SIGNATURE_REMOVE_ADD_NEW
	LDNS_SIGNATURE_REMOVE_NO_ADD
	LDNS_SIGN_DSA
	LDNS_SIGN_DSA_NSEC3
	LDNS_SIGN_ECC_GOST
        LDNS_SIGN_ECDSAP256SHA256
        LDNS_SIGN_ECDSAP384SHA384
        LDNS_SIGN_HMACMD5
	LDNS_SIGN_HMACSHA1
        LDNS_SIGN_HMACSHA224
        LDNS_SIGN_HMACSHA256
        LDNS_SIGN_HMACSHA384
        LDNS_SIGN_HMACSHA512
	LDNS_SIGN_RSAMD5
	LDNS_SIGN_RSASHA1
	LDNS_SIGN_RSASHA1_NSEC3
	LDNS_SIGN_RSASHA256
	LDNS_SIGN_RSASHA512
	LDNS_STATUS_ADDRESS_ERR
	LDNS_STATUS_CERT_BAD_ALGORITHM
	LDNS_STATUS_CRYPTO_ALGO_NOT_IMPL
	LDNS_STATUS_CRYPTO_BOGUS
	LDNS_STATUS_CRYPTO_EXPIRATION_BEFORE_INCEPTION
	LDNS_STATUS_CRYPTO_NO_DNSKEY
	LDNS_STATUS_CRYPTO_NO_DS
	LDNS_STATUS_CRYPTO_NO_MATCHING_KEYTAG_DNSKEY
	LDNS_STATUS_CRYPTO_NO_RRSIG
	LDNS_STATUS_CRYPTO_NO_TRUSTED_DNSKEY
	LDNS_STATUS_CRYPTO_NO_TRUSTED_DS
	LDNS_STATUS_CRYPTO_SIG_EXPIRED
        LDNS_STATUS_CRYPTO_SIG_EXPIRED_WITHIN_MARGIN
	LDNS_STATUS_CRYPTO_SIG_NOT_INCEPTED
        LDNS_STATUS_CRYPTO_SIG_NOT_INCEPTED_WITHIN_MARGIN
	LDNS_STATUS_CRYPTO_TSIG_BOGUS
	LDNS_STATUS_CRYPTO_TSIG_ERR
	LDNS_STATUS_CRYPTO_TYPE_COVERED_ERR
	LDNS_STATUS_CRYPTO_UNKNOWN_ALGO
	LDNS_STATUS_CRYPTO_VALIDATED
        LDNS_STATUS_DANE_BOGUS
        LDNS_STATUS_DANE_EXTRA_CERTS_NOT_USED
        LDNS_STATUS_DANE_INSECURE
        LDNS_STATUS_DANE_MISSING_EXTRA_CERTS
        LDNS_STATUS_DANE_NEED_OPENSSL_GE_1_1_FOR_DANE_TA
        LDNS_STATUS_DANE_NON_CA_CERTIFICATE
        LDNS_STATUS_DANE_OFFSET_OUT_OF_RANGE
        LDNS_STATUS_DANE_PKIX_DID_NOT_VALIDATE
        LDNS_STATUS_DANE_PKIX_NO_SELF_SIGNED_TRUST_ANCHOR
        LDNS_STATUS_DANE_STATUS_MESSAGES
        LDNS_STATUS_DANE_TLSA_DID_NOT_MATCH
        LDNS_STATUS_DANE_UNKNOWN_CERTIFICATE_USAGE
        LDNS_STATUS_DANE_UNKNOWN_MATCHING_TYPE
        LDNS_STATUS_DANE_UNKNOWN_PROTOCOL
        LDNS_STATUS_DANE_UNKNOWN_SELECTOR
        LDNS_STATUS_DANE_UNKNOWN_TRANSPORT
	LDNS_STATUS_DDD_OVERFLOW
	LDNS_STATUS_DNSSEC_EXISTENCE_DENIED
	LDNS_STATUS_DNSSEC_NSEC3_ORIGINAL_NOT_FOUND
	LDNS_STATUS_DNSSEC_NSEC_RR_NOT_COVERED
	LDNS_STATUS_DNSSEC_NSEC_WILDCARD_NOT_COVERED
	LDNS_STATUS_DOMAINNAME_OVERFLOW
	LDNS_STATUS_DOMAINNAME_UNDERFLOW
	LDNS_STATUS_EMPTY_LABEL
	LDNS_STATUS_ENGINE_KEY_NOT_LOADED
	LDNS_STATUS_ERR
        LDNS_STATUS_EXISTS_ERR
	LDNS_STATUS_FILE_ERR
	LDNS_STATUS_INTERNAL_ERR
	LDNS_STATUS_INVALID_B32_EXT
	LDNS_STATUS_INVALID_B64
        LDNS_STATUS_INVALID_EUI48
        LDNS_STATUS_INVALID_EUI64
	LDNS_STATUS_INVALID_HEX
        LDNS_STATUS_INVALID_ILNP64
	LDNS_STATUS_INVALID_INT
	LDNS_STATUS_INVALID_IP4
	LDNS_STATUS_INVALID_IP6
	LDNS_STATUS_INVALID_POINTER
        LDNS_STATUS_INVALID_RDF_TYPE
	LDNS_STATUS_INVALID_STR
        LDNS_STATUS_INVALID_TAG
	LDNS_STATUS_INVALID_TIME
	LDNS_STATUS_LABEL_OVERFLOW
	LDNS_STATUS_MEM_ERR
	LDNS_STATUS_MISSING_RDATA_FIELDS_KEY
	LDNS_STATUS_MISSING_RDATA_FIELDS_RRSIG
	LDNS_STATUS_NETWORK_ERR
	LDNS_STATUS_NOT_IMPL
	LDNS_STATUS_NO_DATA
        LDNS_STATUS_NSEC3_DOMAINNAME_OVERFLOW
	LDNS_STATUS_NSEC3_ERR
	LDNS_STATUS_NULL
	LDNS_STATUS_OK
	LDNS_STATUS_PACKET_OVERFLOW
        LDNS_STATUS_RDATA_OVERFLOW
	LDNS_STATUS_RES_NO_NS
	LDNS_STATUS_RES_QUERY
	LDNS_STATUS_SOCKET_ERROR
	LDNS_STATUS_SSL_ERR
	LDNS_STATUS_SYNTAX_ALG_ERR
	LDNS_STATUS_SYNTAX_BAD_ESCAPE
	LDNS_STATUS_SYNTAX_CLASS_ERR
	LDNS_STATUS_SYNTAX_DNAME_ERR
	LDNS_STATUS_SYNTAX_EMPTY
	LDNS_STATUS_SYNTAX_ERR
	LDNS_STATUS_SYNTAX_INCLUDE
	LDNS_STATUS_SYNTAX_INCLUDE_ERR_NOTIMPL
	LDNS_STATUS_SYNTAX_INTEGER_OVERFLOW
	LDNS_STATUS_SYNTAX_ITERATIONS_OVERFLOW
	LDNS_STATUS_SYNTAX_KEYWORD_ERR
	LDNS_STATUS_SYNTAX_MISSING_VALUE_ERR
	LDNS_STATUS_SYNTAX_ORIGIN
	LDNS_STATUS_SYNTAX_RDATA_ERR
        LDNS_STATUS_SYNTAX_SUPERFLUOUS_TEXT_ERR
	LDNS_STATUS_SYNTAX_TTL
	LDNS_STATUS_SYNTAX_TTL_ERR
	LDNS_STATUS_SYNTAX_TYPE_ERR
	LDNS_STATUS_SYNTAX_VERSION_ERR
	LDNS_STATUS_UNKNOWN_INET
	LDNS_STATUS_WIRE_INCOMPLETE_ADDITIONAL
	LDNS_STATUS_WIRE_INCOMPLETE_ANSWER
	LDNS_STATUS_WIRE_INCOMPLETE_AUTHORITY
	LDNS_STATUS_WIRE_INCOMPLETE_HEADER
	LDNS_STATUS_WIRE_INCOMPLETE_QUESTION
	LDNS_TC

	dnssec_create_nsec
	dnssec_create_nsec3
	create_nsec
	create_nsec3

	rr_type2str
	rr_class2str
	pkt_opcode2str
	pkt_rcode2str
        rr_type_by_name
        rr_class_by_name
	errorstr_by_id
	signing_algorithm_by_name
	key_algorithm_supported
	read_anchor_file
);

our $VERSION = '0.63';

sub AUTOLOAD {
    # This AUTOLOAD is used to 'autoload' constants from the constant()
    # XS function.

    my $constname;
    our $AUTOLOAD;
    ($constname = $AUTOLOAD) =~ s/.*:://;
    croak "&DNS::LDNS::constant not defined" if $constname eq 'constant';
    my ($error, $val) = constant($constname);
    if ($error) { croak $error; }
    {
	no strict 'refs';
	# Fixed between 5.005_53 and 5.005_61
#XXX	if ($] >= 5.00561) {
#XXX	    *$AUTOLOAD = sub () { $val };
#XXX	}
#XXX	else {
	    *$AUTOLOAD = sub { $val };
#XXX	}
    }
    goto &$AUTOLOAD;
}

require XSLoader;
XSLoader::load('DNS::LDNS', $VERSION);

# Preloaded methods go here.

our $last_status;
our $line_nr;

sub last_error {
    return errorstr_by_id($DNS::LDNS::last_status);
}

require DNS::LDNS::RR;
require DNS::LDNS::GC;
require DNS::LDNS::RData;
require DNS::LDNS::Zone;
require DNS::LDNS::RRList;
require DNS::LDNS::DNSSecZone;
require DNS::LDNS::DNSSecRRSets;
require DNS::LDNS::DNSSecRRs;
require DNS::LDNS::DNSSecName;
require DNS::LDNS::RBTree;
require DNS::LDNS::RBNode;
require DNS::LDNS::Resolver;
require DNS::LDNS::Packet;
require DNS::LDNS::Key;
require DNS::LDNS::KeyList;
require DNS::LDNS::DNSSecDataChain;
require DNS::LDNS::DNSSecTrustTree;

# Autoload methods go after =cut, and are processed by the autosplit program.

1;
__END__

=head1 NAME

DNS::LDNS - Perl extension for the ldns library

=head1 SYNOPSIS

  use DNS::LDNS ':all'

=head1 DESCRIPTION

DNS::LDNS is a perl OO-wrapper for the ldns library. A complete list
of object methods is found in the perldoc for each of the individual
classes. You may also read the documentation of the ldns library
(http://www.nlnetlabs.nl/projects/ldns).

=head2 Brief examples of usage

  use DNS::LDNS ':all';

  my $z = DNS::LDNS::Zone->new(filename => '/path/to/myzone');
  print DNS::LDNS::last_error;
  my $rr = DNS::LDNS::RR->new('mylabel 3600 IN A 168.10.10.10');
  print $z->soa->to_string;
  my $rrlist = $z->rrs->push($rr);
  print $z->to_string;

  my $kl = DNS::LDNS::KeyList->new;
  $kl->push(DNS::LDNS::Key->new(filename => 'key');
  $kl->key(0)->set_pubkey_owner(
      DNS::LDNS::RData->new(LDNS_RDF_TYPE_DNAME, 'myzone.org'));
  my $signedz = $z->sign($kl);
  print $signedz->to_string;

  my $r = DNS::LDNS::Resolver->new(filename => '/my/resolv.conf');
  my $p = $r->send(
    DNS::LDNS::RData->new(LDNS_RDF_TYPE_DNAME, 'www.google.com'),
    LDNS_RR_TYPE_A, LDNS_RR_CLASS_IN, LDNS_RD);
  print $p->answer->to_string;
  print $p->authority->to_string;

=head2 Classes

A description of the classes included and how they map to the ldns
library structures:

=over 20

=item B<DNS::LDNS>

Base class with static functions and constants

=item B<DNS::LDNS::Zone>

Represents a parsed zonefile (maps to the ldns_zone struct)

=item B<DNS::LDNS::RRList>

Represents a list of RRs. This class is also used to represent an
RRSet if all the dnames and types are equal, (maps to the the
ldns_rr_list struct)

=item B<DNS::LDNS::RR>

Represents a resource record (RR), (maps to the ldns_rr struct)

=item B<DNS::LDNS::RData>

Represents an rdata field or a dname in an RR (maps to the ldns_rdf
struct)

=item B<DNS::LDNS::Resolver>

Represents a DNS resolver (maps to the ldns_resolver struct)

=item B<DNS::LDNS::Packet>

Represents a DNS package (maps to the ldns_pkt struct)

=item B<DNS::LDNS::Key>

Represents a DNSSec private key (maps to the ldns_key struct)

=item B<DNS::LDNS::KeyList>

Represents a linked list of keys (maps to the ldns_key_list struct)

=item B<DNS::LDNS::DNSSecZone>

Represents a zone with dnssec data (maps to the ldns_dnssec_zone
struct)

=item B<DNS::LDNS::RBTree>

Represents a tree of DNSSecName nodes (maps to the ldns_rbtree struct)

=item B<DNS::LDNS::RBNode>

Represents a node in the RBTree (maps to the ldns_rbnode struct)

=item B<DNS::LDNS::DNSSecName>

Represents a dname in a DNSSecZone and holds a DNSSecRRSets list for
this  dname, possibly with signatures (maps to the ldns_dnssec_name
struct)

=item B<DNS::LDNS::DNSSecRRSets>

Represents a linked list of DNSSec RR sets, possibly with signatures
(maps  to the ldns_dnssec_rrsets struct)

=item B<DNS::LDNS::DNSSecRRs>

Represents a linked list of RRs (maps to the ldns_dnssec_rrs struct)

=item B<DNS::LDNS::DNSSecDataChain>

Represents a chain of RR, DNSKEY, and DS data used for building a
dnssec  trust tree (maps to the ldns_dnssec_data_chain struct)

=item B<DNS::LDNS::DNSSecTrustTree>

Represents a tree of chained trust relationships from a signed RR to a
set  of trust anchors (maps to the ldns_dnssec_trust_tree struct).

=item B<DNS::LDNS::GC>

Garbage collector. Handles ownership dependencies and freeing data
used by  the other classes. Used internally only.

=back

One thing to note is that some of the classes have a seemingly
overlapping  functionality. The Zone and RRList are used to represent
a generic zone. It  may contain dnssec data but treats it like any
other dns data and does not  have any knowledge of its structure. The
DNSSec* and RB* classes are  building blocks for representing a signed
zone in a more structured way.

=head2 Static functions

  str = rr_type2str(type)
  str = rr_class2str(class)
  type = rr_type_by_name(str)
  class = rr_class_by_name(str)
  str = pkt_opcode2str(opcode)
  str = pkt_rcode2str(rcode)
  error = errorstr_by_id(status)
  str = DNS::LDNS::last_error
  status = DNS::LDNS::last_status
  rr = dnssec_create_nsec(from, to, type)
  rr = dnssec_create_nsec3(from, to, algorithm, flags, iterations, salt)
  rr = create_nsec(current, next, rrs)
  rr = create_nsec3(cur_owner, cur_zone, algorithm, flags,
                    iterations, salt, empty_nonterminals)
  algo = signing_algorithm_by_name(name)
  bool = key_algorithm_supported(algorithm)
  rr = read_anchor_file(filename)

=head2 Object references and cloning

Since some of the objects are found as sub objects within other
objects, it  is important to know how the wrapper classes handle
object references,  dependencies and cloning. The general rule is that
accessor methods just  return a reference to the object while methods
inserting data inserts inserts  a clone of the object. Most classes
have a clone method which can be used if  a cloned object is what you
really want.

=head3 Examples

DNS::LDNS::Zone::rrs returns a reference to the DNS::LDNS::RRList
within  the zone, so if you make changes to the RRList you also
changes the Zone  object.

DNS::LDNS::RRList::push(rr) clones the rr, then pushes the cloned rr
to the  list. Changing the rr afterwards will not change the list.

An exception is the Key class which does not have a clone
mechanism. In this  case we allow a free Key to be added to only one
KeyList. Adding it to  multiple lists will provoke an error.

The wrapper keeps track of allocated data structures and references.
Whenever data is no longer referred to by a perl object, it will be
freed.

=head2 ERROR HANDLING

The purpose for writing this wrapper class has been to be able to
process zone file data with good time performance. Data checking and
error handling is a bit sparse.

Most constructors will update the DNS::LDNS::last_status variable if
they fail (return undef). Wrapper methods to ldns functions which would
return a status will update the static DNS::LDNS::last_status variable.
Most methods do not return a status and will not reset this variable
even though they succeeds.

=head2 EXPORT

None by default.

=head1 BUGS

There no known bugs, although parts of the code has not yet been very
well tested. Bugreports will be greatly appreciated.

=head1 SEE ALSO

http://www.nlnetlabs.nl/projects/ldns

=head1 AUTHOR

Erik Pihl Ostlyngen, E<lt>erik.ostlyngen@norid.noE<gt>

=head1 COPYRIGHT AND LICENSE

Copyright (C) 2013 by UNINETT Norid AS

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself, either Perl version 5.14.2 or,
at your option, any later version of Perl 5 you may have available.

=cut
Back to Directory File Manager