diff options
Diffstat (limited to 'contrib/DNS-LDNS/LDNS.xs')
-rw-r--r-- | contrib/DNS-LDNS/LDNS.xs | 3434 |
1 files changed, 3434 insertions, 0 deletions
diff --git a/contrib/DNS-LDNS/LDNS.xs b/contrib/DNS-LDNS/LDNS.xs new file mode 100644 index 0000000..ad59144 --- /dev/null +++ b/contrib/DNS-LDNS/LDNS.xs @@ -0,0 +1,3434 @@ +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" + +#include "ppport.h" + +#include "ldns/ldns.h" +#include "ldns/error.h" +#include "ldns/rr.h" +#include "ldns/keys.h" +#include "ldns/dname.h" +#include "ldns/host2str.h" +#include "ldns/rdata.h" +#include "ldns/rbtree.h" +#include "ldns/resolver.h" +#include "ldns/packet.h" +#include "ldns/dnssec.h" + +#include "ldns/dnssec_zone.h" +#include "ldns/dnssec_verify.h" +#include "ldns/dnssec_sign.h" +#include "ldns/rr_functions.h" + +#if LDNS_REVISION < ((1<<16)|(6<<8)|(17)) + #define LDNS_RDF_TYPE_HIP LDNS_RDF_TYPE_TSIG +#endif + +#include "const-c.inc" + +typedef ldns_zone * DNS__LDNS__Zone; +typedef ldns_rr_list * DNS__LDNS__RRList; +typedef ldns_rr * DNS__LDNS__RR; +typedef ldns_rr * DNS__LDNS__RR__Opt; +typedef ldns_rdf * DNS__LDNS__RData; +typedef ldns_rdf * DNS__LDNS__RData__Opt; +typedef ldns_dnssec_zone * DNS__LDNS__DNSSecZone; +typedef ldns_dnssec_rrsets * DNS__LDNS__DNSSecRRSets; +typedef ldns_dnssec_rrs * DNS__LDNS__DNSSecRRs; +typedef ldns_dnssec_name * DNS__LDNS__DNSSecName; +typedef ldns_rbtree_t * DNS__LDNS__RBTree; +typedef ldns_rbnode_t * DNS__LDNS__RBNode; +typedef ldns_resolver * DNS__LDNS__Resolver; +typedef ldns_pkt * DNS__LDNS__Packet; +typedef ldns_key * DNS__LDNS__Key; +typedef ldns_key_list * DNS__LDNS__KeyList; +typedef ldns_dnssec_data_chain * DNS__LDNS__DNSSecDataChain; +typedef ldns_dnssec_trust_tree * DNS__LDNS__DNSSecTrustTree; +typedef const char * Mortal_PV; + +typedef ldns_pkt_opcode LDNS_Pkt_Opcode; +typedef ldns_pkt_rcode LDNS_Pkt_Rcode; +typedef ldns_pkt_section LDNS_Pkt_Section; +typedef ldns_pkt_type LDNS_Pkt_Type; +typedef ldns_rr_type LDNS_RR_Type; +typedef ldns_rr_class LDNS_RR_Class; +typedef ldns_rdf_type LDNS_RDF_Type; +typedef ldns_hash LDNS_Hash; +typedef ldns_status LDNS_Status; +typedef ldns_signing_algorithm LDNS_Signing_Algorithm; + +/* callback function used by the signing methods */ +int sign_policy(ldns_rr *sig, void *n) { + return *(uint16_t*)n; +} + +/* utility methods */ +void add_cloned_rrs_to_list(ldns_rr_list * list, ldns_rr_list * add) { + size_t count; + size_t i; + + count = ldns_rr_list_rr_count(add); + + for(i = 0; i < count; i++) { + ldns_rr_list_push_rr(list, ldns_rr_clone(ldns_rr_list_rr(add, i))); + } +} + + +#if LDNS_REVISION < ((1<<16)|(6<<8)|(12)) +ldns_dnssec_trust_tree *ldns_dnssec_derive_trust_tree_time( + ldns_dnssec_data_chain *data_chain, + ldns_rr *rr, time_t check_time); +ldns_rr_list *ldns_fetch_valid_domain_keys_time(const ldns_resolver * res, + const ldns_rdf * domain, const ldns_rr_list * keys, + time_t check_time, ldns_status *status); +ldns_rr_list *ldns_validate_domain_dnskey_time( + const ldns_resolver *res, const ldns_rdf *domain, + const ldns_rr_list *keys, time_t check_time); +ldns_rr_list *ldns_validate_domain_ds_time( + const ldns_resolver *res, const ldns_rdf *domain, + const ldns_rr_list * keys, time_t check_time); +ldns_status ldns_verify_rrsig_keylist_time( + ldns_rr_list *rrset, ldns_rr *rrsig, + const ldns_rr_list *keys, time_t check_time, + ldns_rr_list *good_keys); +ldns_status ldns_verify_trusted_time( + ldns_resolver *res, ldns_rr_list *rrset, + ldns_rr_list *rrsigs, time_t check_time, + ldns_rr_list *validating_keys); +ldns_status ldns_verify_rrsig_time( + ldns_rr_list *rrset, ldns_rr *rrsig, + ldns_rr *key, time_t check_time); +ldns_status ldns_verify_time(ldns_rr_list *rrset, + ldns_rr_list *rrsig, + const ldns_rr_list *keys, + time_t check_time, + ldns_rr_list *good_keys); + +ldns_dnssec_trust_tree *ldns_dnssec_derive_trust_tree_time( + ldns_dnssec_data_chain *data_chain, + ldns_rr *rr, time_t check_time) { + Perl_croak(aTHX_ "function ldns_dnssec_derive_trust_tree_time is not implemented in this version of ldns"); +} + +ldns_rr_list *ldns_fetch_valid_domain_keys_time(const ldns_resolver * res, + const ldns_rdf * domain, const ldns_rr_list * keys, + time_t check_time, ldns_status *status) { + Perl_croak(aTHX_ "function ldns_fetch_valid_domain_keys_time is not implemented in this version of ldns"); +} + +ldns_rr_list *ldns_validate_domain_dnskey_time( + const ldns_resolver *res, const ldns_rdf *domain, + const ldns_rr_list *keys, time_t check_time) { + Perl_croak(aTHX_ "function ldns_validate_domain_dnskey_time is not implemented in this version of ldns"); +} + +ldns_rr_list *ldns_validate_domain_ds_time( + const ldns_resolver *res, const ldns_rdf *domain, + const ldns_rr_list * keys, time_t check_time) { + Perl_croak(aTHX_ "function ldns_validate_domain_ds_time is not implemented in this version of ldns"); +} + +ldns_status ldns_verify_rrsig_keylist_time( + ldns_rr_list *rrset, ldns_rr *rrsig, + const ldns_rr_list *keys, time_t check_time, + ldns_rr_list *good_keys) { + Perl_croak(aTHX_ "function ldns_verify_rrsig_keylist_time is not implemented in this version of ldns"); +} + +ldns_status ldns_verify_trusted_time( + ldns_resolver *res, ldns_rr_list *rrset, + ldns_rr_list *rrsigs, time_t check_time, + ldns_rr_list *validating_keys) { + Perl_croak(aTHX_ "function ldns_verify_trusted_time is not implemented in this version of ldns"); +} + +ldns_status ldns_verify_rrsig_time( + ldns_rr_list *rrset, ldns_rr *rrsig, + ldns_rr *key, time_t check_time) { + Perl_croak(aTHX_ "function ldns_verify_rrsig_time is not implemented in this version of ldns"); +} + +ldns_status ldns_verify_time(ldns_rr_list *rrset, + ldns_rr_list *rrsig, + const ldns_rr_list *keys, + time_t check_time, + ldns_rr_list *good_keys) { + Perl_croak(aTHX_ "function ldns_verify_time is not implemented in this version of ldns"); +} + +#endif + + +MODULE = DNS::LDNS PACKAGE = DNS::LDNS + +INCLUDE: const-xs.inc + +const char * +ldns_get_errorstr_by_id(s) + LDNS_Status s + ALIAS: + errorstr_by_id = 1 + +Mortal_PV +ldns_rr_type2str(type) + LDNS_RR_Type type; + ALIAS: + rr_type2str = 1 + +Mortal_PV +ldns_rr_class2str(class) + LDNS_RR_Class class; + ALIAS: + rr_class2str = 1 + +Mortal_PV +ldns_pkt_opcode2str(opcode) + LDNS_Pkt_Opcode opcode; + ALIAS: + pkt_opcode2str = 1 + +Mortal_PV +ldns_pkt_rcode2str(rcode) + LDNS_Pkt_Rcode rcode; + ALIAS: + pkt_rcode2str = 1 + +LDNS_RR_Type +ldns_get_rr_type_by_name(name) + char * name; + ALIAS: + rr_type_by_name = 1 + +LDNS_RR_Class +ldns_get_rr_class_by_name(name) + char * name; + ALIAS: + rr_class_by_name = 1 + +DNS__LDNS__RR +ldns_dnssec_create_nsec(from, to, nsec_type) + DNS__LDNS__DNSSecName from; + DNS__LDNS__DNSSecName to; + LDNS_RR_Type nsec_type; + ALIAS: + dnssec_create_nsec = 1 + +DNS__LDNS__RR +dnssec_create_nsec3(from, to, zone_name, algorithm, flags, iterations, salt) + DNS__LDNS__DNSSecName from; + DNS__LDNS__DNSSecName to; + DNS__LDNS__RData zone_name; + uint8_t algorithm; + uint8_t flags; + uint16_t iterations; + char * salt; + CODE: + RETVAL = ldns_dnssec_create_nsec3(from, to, zone_name, algorithm, flags, iterations, strlen(salt), (uint8_t*)salt); + OUTPUT: + RETVAL + +DNS__LDNS__RR +ldns_create_nsec(current, next, rrs) + DNS__LDNS__RData current; + DNS__LDNS__RData next; + DNS__LDNS__RRList rrs; + ALIAS: + create_nsec = 1 + +DNS__LDNS__RR +create_nsec3(cur_owner, cur_zone, rrs, algorithm, flags, iterations, salt, emptynonterminal) + DNS__LDNS__RData cur_owner; + DNS__LDNS__RData cur_zone; + DNS__LDNS__RRList rrs; + uint8_t algorithm; + uint8_t flags; + uint16_t iterations; + char * salt; + bool emptynonterminal; + CODE: + RETVAL = ldns_create_nsec3(cur_owner, cur_zone, rrs, algorithm, + flags, iterations, strlen(salt), (uint8_t*)salt, emptynonterminal); + OUTPUT: + RETVAL + +LDNS_Signing_Algorithm +ldns_get_signing_algorithm_by_name(name) + const char * name; + ALIAS: + signing_algorithm_by_name = 1 + +int +ldns_key_algo_supported(algorithm) + int algorithm; + ALIAS: + key_algorithm_supported = 1 + +DNS__LDNS__RR +ldns_read_anchor_file(filename) + char * filename; + ALIAS: + read_anchor_file = 1 + +MODULE = DNS::LDNS PACKAGE = DNS::LDNS::GC + +void +ldns_zone_deep_free(zone) + DNS__LDNS__Zone zone; + ALIAS: + _zone_deep_free = 1 + +void +ldns_rr_list_deep_free(list) + DNS__LDNS__RRList list; + ALIAS: + _rrlist_deep_free = 1 + +void +ldns_rr_free(rr) + DNS__LDNS__RR rr; + ALIAS: + _rr_free = 1 + +void +ldns_rdf_deep_free(rdf) + DNS__LDNS__RData rdf; + ALIAS: + _rdata_deep_free = 1 + +void +ldns_dnssec_zone_deep_free(zone) + DNS__LDNS__DNSSecZone zone; + ALIAS: + _dnssec_zone_deep_free = 1 + +void +ldns_dnssec_name_deep_free(name) + DNS__LDNS__DNSSecName name; + ALIAS: + _dnssec_name_deep_free = 1 + +void +ldns_resolver_deep_free(resolver) + DNS__LDNS__Resolver resolver; + ALIAS: + _resolver_deep_free = 1 + +void +ldns_pkt_free(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + _packet_free = 1 + +void +ldns_key_deep_free(key) + DNS__LDNS__Key key; + ALIAS: + _key_deep_free = 1 + +void +ldns_key_list_free(keylist) + DNS__LDNS__KeyList keylist; + ALIAS: + _keylist_free = 1 + +void +ldns_dnssec_data_chain_deep_free(chain) + DNS__LDNS__DNSSecDataChain chain; + ALIAS: + _dnssec_datachain_deep_free = 1 + +void +ldns_dnssec_trust_tree_free(tree) + DNS__LDNS__DNSSecTrustTree tree; + ALIAS: + _dnssec_trusttree_free = 1 + +MODULE = DNS::LDNS PACKAGE = DNS::LDNS::Zone + +PROTOTYPES: ENABLE + +DNS__LDNS__Zone +ldns_zone_new() + ALIAS: + _new = 1 + +DNS__LDNS__Zone +_new_from_file(fp, origin, ttl, c, s, line_nr) + FILE* fp; + DNS__LDNS__RData__Opt origin; + uint32_t ttl; + LDNS_RR_Class c; + LDNS_Status s; + int line_nr; + PREINIT: + ldns_zone *z; + CODE: + if (ttl == 0) { ttl = 0; } + RETVAL = NULL; + s = ldns_zone_new_frm_fp_l(&z, fp, origin, ttl, c, &line_nr); + + if (s == LDNS_STATUS_OK) { + RETVAL = z; + } + + OUTPUT: + RETVAL + s + line_nr + +void +print(zone, fp) + DNS__LDNS__Zone zone; + FILE* fp; + CODE: + ldns_zone_print(fp, zone); + +void +canonicalize(zone) + DNS__LDNS__Zone zone; + PREINIT: + ldns_rr_list *list; + size_t count; + size_t i; + CODE: + list = ldns_zone_rrs(zone); + count = ldns_rr_list_rr_count(list); + + ldns_rr2canonical(ldns_zone_soa(zone)); + for (i = 0; i < ldns_rr_list_rr_count(ldns_zone_rrs(zone)); i++) { + ldns_rr2canonical(ldns_rr_list_rr(ldns_zone_rrs(zone), i)); + } + +void +ldns_zone_sort(zone) + DNS__LDNS__Zone zone; + ALIAS: + sort = 1 + +DNS__LDNS__RR +ldns_zone_soa(zone) + DNS__LDNS__Zone zone; + ALIAS: + _soa = 1 + +void +ldns_zone_set_soa(zone, soa) + DNS__LDNS__Zone zone; + DNS__LDNS__RR soa; + ALIAS: + _set_soa = 1 + +DNS__LDNS__RRList +ldns_zone_rrs(zone) + DNS__LDNS__Zone zone; + ALIAS: + _rrs = 1 + +void +ldns_zone_set_rrs(zone, list) + DNS__LDNS__Zone zone; + DNS__LDNS__RRList list; + ALIAS: + _set_rrs = 1 + +DNS__LDNS__Zone +ldns_zone_sign(zone, keylist) + DNS__LDNS__Zone zone; + DNS__LDNS__KeyList keylist; + ALIAS: + sign = 1 + +DNS__LDNS__Zone +sign_nsec3(zone, keylist, algorithm, flags, iterations, salt) + DNS__LDNS__Zone zone; + DNS__LDNS__KeyList keylist; + uint8_t algorithm; + uint8_t flags; + uint16_t iterations; + unsigned char * salt; + CODE: + RETVAL = ldns_zone_sign_nsec3(zone, keylist, algorithm, flags, iterations, strlen(salt), (uint8_t*)salt); + OUTPUT: + RETVAL + + +MODULE = DNS::LDNS PACKAGE = DNS::LDNS::RRList + +PROTOTYPES: ENABLE + +DNS__LDNS__RRList +ldns_rr_list_new() + ALIAS: + _new = 1 + +DNS__LDNS__RRList +_new_hosts_from_file(fp, line_nr) + FILE * fp; + int line_nr; + CODE: + RETVAL = ldns_get_rr_list_hosts_frm_fp_l(fp, &line_nr); + OUTPUT: + RETVAL + +DNS__LDNS__RRList +ldns_rr_list_clone(list) + DNS__LDNS__RRList list; + ALIAS: + clone = 1 + +void +print(list, fp) + DNS__LDNS__RRList list; + FILE* fp; + CODE: + ldns_rr_list_print(fp, list); + +Mortal_PV +ldns_rr_list2str(list) + DNS__LDNS__RRList list; + ALIAS: + to_string = 1 + +DNS__LDNS__RR +ldns_rr_list_rr(list, i) + DNS__LDNS__RRList list; + size_t i; + ALIAS: + _rr = 1 + +DNS__LDNS__RR +ldns_rr_list_pop_rr(list) + DNS__LDNS__RRList list; + ALIAS: + pop = 1 + +bool +ldns_rr_list_push_rr(list, rr) + DNS__LDNS__RRList list; + DNS__LDNS__RR rr; + ALIAS: + _push = 1 + +size_t +ldns_rr_list_rr_count(list) + DNS__LDNS__RRList list; + ALIAS: + rr_count = 1 + +int +ldns_rr_list_compare(list, otherlist) + DNS__LDNS__RRList list; + DNS__LDNS__RRList otherlist; + ALIAS: + compare = 1 + +DNS__LDNS__RRList +ldns_rr_list_subtype_by_rdf(list, rdf, pos) + DNS__LDNS__RRList list; + DNS__LDNS__RData rdf; + size_t pos; + ALIAS: + subtype_by_rdata = 1 + +DNS__LDNS__RRList +ldns_rr_list_pop_rrset(list) + DNS__LDNS__RRList list; + ALIAS: + pop_rrset = 1 + +bool +ldns_is_rrset(list) + DNS__LDNS__RRList list; + ALIAS: + is_rrset = 1 + +bool +ldns_rr_list_contains_rr(list, rr) + DNS__LDNS__RRList list; + DNS__LDNS__RR rr; + ALIAS: + contains_rr = 1 + +DNS__LDNS__RRList +ldns_rr_list_pop_rr_list(list, count) + DNS__LDNS__RRList list; + size_t count; + ALIAS: + pop_list = 1 + +bool +_push_list(list, otherlist) + DNS__LDNS__RRList list; + DNS__LDNS__RRList otherlist; + PREINIT: + bool ret; + CODE: + ret = ldns_rr_list_push_rr_list(list, otherlist); + if (ret) { + ldns_rr_list_free(otherlist); + } + OUTPUT: + RETVAL + +LDNS_Status +_verify_rrsig_keylist(rrset, rrsig, keys, good_keys) + DNS__LDNS__RRList rrset; + DNS__LDNS__RR rrsig; + DNS__LDNS__RRList keys; + DNS__LDNS__RRList good_keys; + PREINIT: + DNS__LDNS__RRList gk; + CODE: + gk = ldns_rr_list_new(); + RETVAL = ldns_verify_rrsig_keylist(rrset, rrsig, keys, good_keys); + add_cloned_rrs_to_list(good_keys, gk); + ldns_rr_list_free(gk); + OUTPUT: + RETVAL + +LDNS_Status +_verify_rrsig_keylist_time(rrset, rrsig, keys, check_time, good_keys) + DNS__LDNS__RRList rrset; + DNS__LDNS__RR rrsig; + DNS__LDNS__RRList keys; + time_t check_time; + DNS__LDNS__RRList good_keys; + PREINIT: + DNS__LDNS__RRList gk; + CODE: + gk = ldns_rr_list_new(); + RETVAL = ldns_verify_rrsig_keylist_time( + rrset, rrsig, keys, check_time, good_keys); + add_cloned_rrs_to_list(good_keys, gk); + ldns_rr_list_free(gk); + OUTPUT: + RETVAL + +LDNS_Status +_verify_rrsig_keylist_notime(rrset, rrsig, keys, good_keys) + DNS__LDNS__RRList rrset; + DNS__LDNS__RR rrsig; + DNS__LDNS__RRList keys; + DNS__LDNS__RRList good_keys; + PREINIT: + DNS__LDNS__RRList gk; + CODE: + gk = ldns_rr_list_new(); + RETVAL = ldns_verify_rrsig_keylist_notime(rrset, rrsig, keys, NULL); + add_cloned_rrs_to_list(good_keys, gk); + ldns_rr_list_free(gk); + OUTPUT: + RETVAL + +LDNS_Status +ldns_verify_rrsig(rrset, rrsig, key) + DNS__LDNS__RRList rrset; + DNS__LDNS__RR rrsig; + DNS__LDNS__RR key; + ALIAS: + _verify_rrsig = 1 + +LDNS_Status +ldns_verify_rrsig_time(rrset, rrsig, key, check_time) + DNS__LDNS__RRList rrset; + DNS__LDNS__RR rrsig; + DNS__LDNS__RR key; + time_t check_time; + ALIAS: + _verify_rrsig_time = 1 + +LDNS_Status +_verify(rrset, rrsig, keys, good_keys) + DNS__LDNS__RRList rrset; + DNS__LDNS__RRList rrsig; + DNS__LDNS__RRList keys; + DNS__LDNS__RRList good_keys; + PREINIT: + DNS__LDNS__RRList gk; + CODE: + gk = ldns_rr_list_new(); + RETVAL = ldns_verify(rrset, rrsig, keys, gk); + add_cloned_rrs_to_list(good_keys, gk); + ldns_rr_list_free(gk); + OUTPUT: + RETVAL + +LDNS_Status +_verify_time(rrset, rrsig, keys, check_time, good_keys) + DNS__LDNS__RRList rrset; + DNS__LDNS__RRList rrsig; + DNS__LDNS__RRList keys; + time_t check_time; + DNS__LDNS__RRList good_keys; + PREINIT: + DNS__LDNS__RRList gk; + CODE: + gk = ldns_rr_list_new(); + RETVAL = ldns_verify_time(rrset, rrsig, keys, check_time, gk); + add_cloned_rrs_to_list(good_keys, gk); + ldns_rr_list_free(gk); + OUTPUT: + RETVAL + +LDNS_Status +_verify_notime(rrset, rrsig, keys, good_keys) + DNS__LDNS__RRList rrset; + DNS__LDNS__RRList rrsig; + DNS__LDNS__RRList keys; + DNS__LDNS__RRList good_keys; + PREINIT: + DNS__LDNS__RRList gk; + CODE: + gk = ldns_rr_list_new(); + RETVAL = ldns_verify_notime(rrset, rrsig, keys, gk); + add_cloned_rrs_to_list(good_keys, gk); + ldns_rr_list_free(gk); + OUTPUT: + RETVAL + +DNS__LDNS__RR +ldns_create_empty_rrsig(rrset, current_key) + DNS__LDNS__RRList rrset; + DNS__LDNS__Key current_key; + ALIAS: + create_empty_rrsig = 1 + +DNS__LDNS__RRList +ldns_sign_public(rrset, keys) + DNS__LDNS__RRList rrset; + DNS__LDNS__KeyList keys; + ALIAS: + sign_public = 1 + +void +ldns_rr_list_sort(list) + DNS__LDNS__RRList list; + ALIAS: + sort = 1 + +void +ldns_rr_list_sort_nsec3(list) + DNS__LDNS__RRList list; + ALIAS: + sort_nsec3 = 1 + +void +ldns_rr_list2canonical(list) + DNS__LDNS__RRList list; + ALIAS: + canonicalize = 1 + +DNS__LDNS__RR +ldns_dnssec_get_dnskey_for_rrsig(rr, rrlist) + DNS__LDNS__RR rr; + DNS__LDNS__RRList rrlist; + ALIAS: + _get_dnskey_for_rrsig = 1 + +DNS__LDNS__RR +ldns_dnssec_get_rrsig_for_name_and_type(name, type, rrsigs) + DNS__LDNS__RData name; + LDNS_RR_Type type; + DNS__LDNS__RRList rrsigs; + ALIAS: + _get_rrsig_for_name_and_type = 1 + + +MODULE = DNS::LDNS PACKAGE = DNS::LDNS::RR + +PROTOTYPES: ENABLE + +DNS__LDNS__RR +ldns_rr_new() + ALIAS: + _new = 1 + +DNS__LDNS__RR +ldns_rr_new_frm_type(t) + LDNS_RR_Type t; + ALIAS: + _new_from_type = 1 + +DNS__LDNS__RR +_new_from_str(str, default_ttl, origin, prev, s) + const char* str; + uint32_t default_ttl; + DNS__LDNS__RData__Opt origin; + DNS__LDNS__RData__Opt prev; + LDNS_Status s; + PREINIT: + DNS__LDNS__RR rr = NULL; + ldns_rdf *pclone = NULL; + CODE: + + if (prev != NULL) { + pclone = ldns_rdf_clone(prev); + } + + s = ldns_rr_new_frm_str(&rr, str, default_ttl, origin, &prev); + if (prev != NULL) { + prev = pclone; + } + + if (s == LDNS_STATUS_OK) { + RETVAL = rr; + } + OUTPUT: + RETVAL + s + prev + +DNS__LDNS__RR +_new_from_file(fp, default_ttl, origin, prev, s, line_nr) + FILE* fp; + uint32_t default_ttl; + DNS__LDNS__RData__Opt origin; + DNS__LDNS__RData__Opt prev; + LDNS_Status s; + int line_nr; + PREINIT: + ldns_rr *rr; + ldns_rdf *oclone = NULL; + ldns_rdf *pclone = NULL; + CODE: + + /* Must clone origin and prev because new_frm_fp_l may change + them and may not (we do not know for certain). The perl layer + will take care of freeing the old structs. */ + if (origin != NULL) { + oclone = ldns_rdf_clone(origin); + } + if (prev != NULL) { + pclone = ldns_rdf_clone(prev); + } + + RETVAL = NULL; + s = ldns_rr_new_frm_fp_l(&rr, fp, &default_ttl, &oclone, &pclone, + &line_nr); + + /* Replace the input origin with our new clone. The perl layer will + take care of freeing it later. */ + if (origin != NULL) { + origin = oclone; + } + if (prev != NULL) { + prev = pclone; + } + + if (s == LDNS_STATUS_OK) { + RETVAL = rr; + } + + OUTPUT: + RETVAL + s + line_nr + default_ttl + origin + prev + +DNS__LDNS__RR +ldns_rr_clone(rr) + DNS__LDNS__RR rr; + ALIAS: + clone = 1 + +void +ldns_rr_set_owner(rr, owner) + DNS__LDNS__RR rr; + DNS__LDNS__RData owner; + ALIAS: + _set_owner = 1 + +void +ldns_rr_set_ttl(rr, ttl) + DNS__LDNS__RR rr; + uint32_t ttl; + ALIAS: + set_ttl = 1 + +void +ldns_rr_set_type(rr, type) + DNS__LDNS__RR rr; + LDNS_RR_Type type; + ALIAS: + set_type = 1 + +void +ldns_rr_set_class(rr, class) + DNS__LDNS__RR rr; + LDNS_RR_Class class; + ALIAS: + set_class = 1 + +void +print(rr, fp) + DNS__LDNS__RR rr; + FILE* fp; + CODE: + ldns_rr_print(fp, rr); + +Mortal_PV +ldns_rr2str(rr) + DNS__LDNS__RR rr; + ALIAS: + to_string = 1 + +int +ldns_rr_compare(rr, otherrr) + DNS__LDNS__RR rr; + DNS__LDNS__RR otherrr; + ALIAS: + compare = 1 + +int +ldns_rr_compare_no_rdata(rr, otherrr) + DNS__LDNS__RR rr; + DNS__LDNS__RR otherrr; + ALIAS: + compare_no_rdata = 1 + +int +ldns_rr_compare_ds(rr, otherrr) + DNS__LDNS__RR rr; + DNS__LDNS__RR otherrr; + ALIAS: + compare_ds = 1 + +int +compare_dname(rr, otherrr) + DNS__LDNS__RR rr; + DNS__LDNS__RR otherrr; + CODE: + RETVAL = ldns_dname_compare( + ldns_rr_owner(rr), ldns_rr_owner(otherrr)); + OUTPUT: + RETVAL + +DNS__LDNS__RData +ldns_rr_owner(rr) + DNS__LDNS__RR rr; + ALIAS: + _owner = 1 + +size_t +ldns_rr_rd_count(rr); + DNS__LDNS__RR rr; + ALIAS: + rd_count = 1 + +DNS__LDNS__RData +ldns_rr_rdf(rr, i) + DNS__LDNS__RR rr; + size_t i; + ALIAS: + _rdata = 1 + +DNS__LDNS__RData +ldns_rr_set_rdf(rr, rdf, i) + DNS__LDNS__RR rr; + DNS__LDNS__RData rdf; + size_t i; + ALIAS: + _set_rdata = 1 + +uint32_t +ldns_rr_ttl(rr) + DNS__LDNS__RR rr; + ALIAS: + ttl = 1 + +LDNS_RR_Class +ldns_rr_get_class(rr) + DNS__LDNS__RR rr; + ALIAS: + class = 1 + +LDNS_RR_Type +ldns_rr_get_type(rr) + DNS__LDNS__RR rr; + ALIAS: + type = 1 + +DNS__LDNS__RData +ldns_rr_pop_rdf(rr) + DNS__LDNS__RR rr; + ALIAS: + pop_rdata = 1 + +bool +ldns_rr_push_rdf(rr, rdf) + DNS__LDNS__RR rr; + DNS__LDNS__RData rdf; + ALIAS: + _push_rdata = 1 + +DNS__LDNS__RData +ldns_rr_rrsig_typecovered(rr) + DNS__LDNS__RR rr; + ALIAS: + _rrsig_typecovered = 1 + +bool +ldns_rr_rrsig_set_typecovered(rr, rdf) + DNS__LDNS__RR rr; + DNS__LDNS__RData rdf; + ALIAS: + _rrsig_set_typecovered = 1 + +DNS__LDNS__RData +ldns_rr_rrsig_algorithm(rr) + DNS__LDNS__RR rr; + ALIAS: + _rrsig_algorithm = 1 + +bool +ldns_rr_rrsig_set_algorithm(rr, rdf) + DNS__LDNS__RR rr; + DNS__LDNS__RData rdf; + ALIAS: + _rrsig_set_algorithm = 1 + +DNS__LDNS__RData +ldns_rr_rrsig_expiration(rr) + DNS__LDNS__RR rr; + ALIAS: + _rrsig_expiration = 1 + +bool +ldns_rr_rrsig_set_expiration(rr, rdf) + DNS__LDNS__RR rr; + DNS__LDNS__RData rdf; + ALIAS: + _rrsig_set_expiration = 1 + +DNS__LDNS__RData +ldns_rr_rrsig_inception(rr) + DNS__LDNS__RR rr; + ALIAS: + _rrsig_inception = 1 + +bool +ldns_rr_rrsig_set_inception(rr, rdf) + DNS__LDNS__RR rr; + DNS__LDNS__RData rdf; + ALIAS: + _rrsig_set_inception = 1 + +DNS__LDNS__RData +ldns_rr_rrsig_keytag(rr) + DNS__LDNS__RR rr; + ALIAS: + _rrsig_keytag = 1 + +bool +ldns_rr_rrsig_set_keytag(rr, rdf) + DNS__LDNS__RR rr; + DNS__LDNS__RData rdf; + ALIAS: + _rrsig_set_keytag = 1 + +DNS__LDNS__RData +ldns_rr_rrsig_sig(rr) + DNS__LDNS__RR rr; + ALIAS: + _rrsig_sig = 1 + +bool +ldns_rr_rrsig_set_sig(rr, rdf) + DNS__LDNS__RR rr; + DNS__LDNS__RData rdf; + ALIAS: + _rrsig_set_sig = 1 + +DNS__LDNS__RData +ldns_rr_rrsig_labels(rr) + DNS__LDNS__RR rr; + ALIAS: + _rrsig_labels = 1 + +bool +ldns_rr_rrsig_set_labels(rr, rdf) + DNS__LDNS__RR rr; + DNS__LDNS__RData rdf; + ALIAS: + _rrsig_set_labels = 1 + +DNS__LDNS__RData +ldns_rr_rrsig_origttl(rr) + DNS__LDNS__RR rr; + ALIAS: + _rrsig_origttl = 1 + +bool +ldns_rr_rrsig_set_origttl(rr, rdf) + DNS__LDNS__RR rr; + DNS__LDNS__RData rdf; + ALIAS: + _rrsig_set_origttl = 1 + +DNS__LDNS__RData +ldns_rr_rrsig_signame(rr) + DNS__LDNS__RR rr; + ALIAS: + _rrsig_signame = 1 + +bool +ldns_rr_rrsig_set_signame(rr, rdf) + DNS__LDNS__RR rr; + DNS__LDNS__RData rdf; + ALIAS: + _rrsig_set_signame = 1 + +DNS__LDNS__RData +ldns_rr_dnskey_algorithm(rr) + DNS__LDNS__RR rr; + ALIAS: + _dnskey_algorithm = 1 + +bool +ldns_rr_dnskey_set_algorithm(rr, rdf) + DNS__LDNS__RR rr; + DNS__LDNS__RData rdf; + ALIAS: + _dnskey_set_algorithm = 1 + +DNS__LDNS__RData +ldns_rr_dnskey_flags(rr) + DNS__LDNS__RR rr; + ALIAS: + _dnskey_flags = 1 + +bool +ldns_rr_dnskey_set_flags(rr, rdf) + DNS__LDNS__RR rr; + DNS__LDNS__RData rdf; + ALIAS: + _dnskey_set_flags = 1 + +DNS__LDNS__RData +ldns_rr_dnskey_protocol(rr) + DNS__LDNS__RR rr; + ALIAS: + _dnskey_protocol = 1 + +bool +ldns_rr_dnskey_set_protocol(rr, rdf) + DNS__LDNS__RR rr; + DNS__LDNS__RData rdf; + ALIAS: + _dnskey_set_protocol = 1 + +DNS__LDNS__RData +ldns_rr_dnskey_key(rr) + DNS__LDNS__RR rr; + ALIAS: + _dnskey_key = 1 + +bool +ldns_rr_dnskey_set_key(rr, rdf) + DNS__LDNS__RR rr; + DNS__LDNS__RData rdf; + ALIAS: + _dnskey_set_key = 1 + +size_t +ldns_rr_dnskey_key_size(rr) + DNS__LDNS__RR rr; + ALIAS: + dnskey_key_size = 1 + +uint16_t +ldns_calc_keytag(key) + DNS__LDNS__RR key; + ALIAS: + calc_keytag = 1 + +DNS__LDNS__RData +ldns_nsec3_hash_name_frm_nsec3(rr, name) + DNS__LDNS__RR rr; + DNS__LDNS__RData name; + ALIAS: + _hash_name_from_nsec3 = 1 + +DNS__LDNS__RData +_nsec3_hash_name(name, algorithm, iterations, salt) + DNS__LDNS__RData name; + uint8_t algorithm; + uint16_t iterations; + char * salt; + CODE: + RETVAL = ldns_nsec3_hash_name(name, algorithm, iterations, + strlen(salt), (uint8_t *)salt); + OUTPUT: + RETVAL + +LDNS_Status +ldns_dnssec_verify_denial(rr, nsecs, rrsigs) + DNS__LDNS__RR rr; + DNS__LDNS__RRList nsecs; + DNS__LDNS__RRList rrsigs; + ALIAS: + _verify_denial = 1 + +LDNS_Status +ldns_dnssec_verify_denial_nsec3(rr, nsecs, rrsigs, packet_rcode, packet_qtype, packet_nodata) + DNS__LDNS__RR rr; + DNS__LDNS__RRList nsecs; + DNS__LDNS__RRList rrsigs; + LDNS_Pkt_Rcode packet_rcode; + LDNS_RR_Type packet_qtype; + signed char packet_nodata; + ALIAS: + _verify_denial_nsec3 = 1 + +DNS__LDNS__RR +_verify_denial_nsec3_match(rr, nsecs, rrsigs, packet_rcode, packet_qtype, packet_nodata, status) + DNS__LDNS__RR rr; + DNS__LDNS__RRList nsecs; + DNS__LDNS__RRList rrsigs; + LDNS_Pkt_Rcode packet_rcode; + LDNS_RR_Type packet_qtype; + signed char packet_nodata; + LDNS_Status status; + PREINIT: + ldns_rr ** match; + CODE: + RETVAL = NULL; + status = ldns_dnssec_verify_denial_nsec3_match(rr, nsecs, rrsigs, + packet_rcode, packet_qtype, packet_nodata, match); + if (status == LDNS_STATUS_OK) { + RETVAL = *match; + } + OUTPUT: + status + RETVAL + +void +nsec3_add_param_rdfs(rr, algorithm, flags, iterations, salt) + DNS__LDNS__RR rr; + uint8_t algorithm; + uint8_t flags; + uint16_t iterations; + char * salt; + CODE: + ldns_nsec3_add_param_rdfs(rr, algorithm, flags, iterations, strlen(salt), (uint8_t*)salt); + +uint8_t +ldns_nsec3_algorithm(nsec3) + DNS__LDNS__RR nsec3; + ALIAS: + nsec3_algorithm = 1 + +uint8_t +ldns_nsec3_flags(nsec3) + DNS__LDNS__RR nsec3; + ALIAS: + nsec3_flags = 1 + +bool +ldns_nsec3_optout(nsec3) + DNS__LDNS__RR nsec3; + ALIAS: + nsec3_optout = 1 + +uint16_t +ldns_nsec3_iterations(nsec3) + DNS__LDNS__RR nsec3; + ALIAS: + nsec3_iterations = 1 + +DNS__LDNS__RData +ldns_nsec3_next_owner(nsec3) + DNS__LDNS__RR nsec3; + ALIAS: + _nsec3_next_owner = 1 + +DNS__LDNS__RData +ldns_nsec3_bitmap(nsec3) + DNS__LDNS__RR nsec3; + ALIAS: + _nsec3_bitmap = 1 + +DNS__LDNS__RData +ldns_nsec3_salt(nsec3) + DNS__LDNS__RR nsec3; + ALIAS: + _nsec3_salt = 1 + +DNS__LDNS__RR +ldns_key_rr2ds(key, hash) + DNS__LDNS__RR key; + LDNS_Hash hash; + ALIAS: + key_to_ds = 1 + +bool +ldns_rr_is_question(rr) + DNS__LDNS__RR rr; + ALIAS: + is_question = 1 + +uint8_t +ldns_rr_label_count(rr) + DNS__LDNS__RR rr; + ALIAS: + label_count = 1 + +MODULE = DNS::LDNS PACKAGE = DNS::LDNS::RData + +PROTOTYPES: ENABLE + +DNS__LDNS__RData +ldns_rdf_new_frm_str(type, str) + LDNS_RDF_Type type; + const char *str; + ALIAS: + _new = 1 + +DNS__LDNS__RData +ldns_rdf_clone(rdf) + DNS__LDNS__RData rdf; + ALIAS: + clone = 1 + +Mortal_PV +ldns_rdf2str(rdf) + DNS__LDNS__RData rdf; + ALIAS: + to_string = 1 + +void +print(rdf, fp) + DNS__LDNS__RData rdf; + FILE* fp; + CODE: + ldns_rdf_print(fp, rdf); + +LDNS_RDF_Type +ldns_rdf_get_type(rdf) + DNS__LDNS__RData rdf; + ALIAS: + type = 1 + +void +ldns_rdf_set_type(rdf, type) + DNS__LDNS__RData rdf; + LDNS_RDF_Type type + ALIAS: + set_type = 1 + +int +ldns_rdf_compare(rd1, rd2) + DNS__LDNS__RData rd1; + DNS__LDNS__RData rd2; + ALIAS: + compare = 1 + +DNS__LDNS__RData +ldns_rdf_address_reverse(rdf) + DNS__LDNS__RData rdf; + ALIAS: + address_reverse = 1 + +uint8_t +ldns_dname_label_count(rdf) + DNS__LDNS__RData rdf; + ALIAS: + label_count = 1 + +DNS__LDNS__RData +ldns_dname_label(rdf, labelpos) + DNS__LDNS__RData rdf; + uint8_t labelpos; + ALIAS: + label = 1 + +int +ldns_dname_is_wildcard(rdf) + DNS__LDNS__RData rdf; + ALIAS: + is_wildcard = 1 + +int +ldns_dname_match_wildcard(rdf, wildcard) + DNS__LDNS__RData rdf; + DNS__LDNS__RData wildcard; + ALIAS: + matches_wildcard = 1 + +signed char +ldns_dname_is_subdomain(rdf, parent) + DNS__LDNS__RData rdf; + DNS__LDNS__RData parent; + ALIAS: + is_subdomain = 1 + +DNS__LDNS__RData +ldns_dname_left_chop(rdf) + DNS__LDNS__RData rdf + ALIAS: + left_chop = 1 + +LDNS_Status +ldns_dname_cat(rdata, otherrd) + DNS__LDNS__RData rdata; + DNS__LDNS__RData otherrd; + ALIAS: + _cat = 1 + +int +ldns_dname_compare(dname, otherdname) + DNS__LDNS__RData dname; + DNS__LDNS__RData otherdname; + ALIAS: + compare = 1 + +LDNS_RR_Type +ldns_rdf2rr_type(rdf) + DNS__LDNS__RData rdf; + ALIAS: + to_rr_type = 1 + +DNS__LDNS__RData +ldns_dname_reverse(rdf) + DNS__LDNS__RData rdf; + ALIAS: + dname_reverse = 1 + +void +ldns_dname2canonical(rdf) + DNS__LDNS__RData rdf; + ALIAS: + dname2canonical = 1 + +time_t +ldns_rdf2native_time_t(rdf) + DNS__LDNS__RData rdf; + ALIAS: + to_unix_time = 1 + 2native_time_t = 2 + + +MODULE = DNS::LDNS PACKAGE = DNS::LDNS::DNSSecZone + +PROTOTYPES: ENABLE + +DNS__LDNS__DNSSecZone +ldns_dnssec_zone_new() + ALIAS: + _new = 1 + +DNS__LDNS__DNSSecZone +_new_from_file(fp, origin, ttl, c, s, line_nr) + FILE* fp; + DNS__LDNS__RData__Opt origin; + uint32_t ttl; + LDNS_RR_Class c; + LDNS_Status s; + int line_nr; + PREINIT: + ldns_dnssec_zone *z; + CODE: + RETVAL = NULL; +#if LDNS_REVISION < ((1<<16)|(6<<8)|(13)) + Perl_croak(aTHX_ "function ldns_dnssec_zone_new_frm_fp_l is not implemented in this version of ldns"); +#else + s = ldns_dnssec_zone_new_frm_fp_l(&z, fp, origin, ttl, c, &line_nr); +#endif + + if (s == LDNS_STATUS_OK) { + RETVAL = z; + } + + OUTPUT: + RETVAL + s + line_nr + +LDNS_Status +create_from_zone(dnssec_zone, zone) + DNS__LDNS__DNSSecZone dnssec_zone; + DNS__LDNS__Zone zone; + PREINIT: + size_t i; + ldns_rr *cur_rr; + ldns_status status; + ldns_rr_list *failed_nsec3s; + ldns_rr_list *failed_nsec3_rrsigs; + ldns_status result = LDNS_STATUS_OK; + CODE: + failed_nsec3s = ldns_rr_list_new(); + failed_nsec3_rrsigs = ldns_rr_list_new(); + + status = ldns_dnssec_zone_add_rr(dnssec_zone, + ldns_rr_clone(ldns_zone_soa(zone))); + if (result == LDNS_STATUS_OK) { + result = status; + } + + for (i = 0; i < ldns_rr_list_rr_count(ldns_zone_rrs(zone)); i++) { + cur_rr = ldns_rr_list_rr(ldns_zone_rrs(zone), i); + status = ldns_dnssec_zone_add_rr(dnssec_zone, + ldns_rr_clone(cur_rr)); + if (status != LDNS_STATUS_OK) { + if (LDNS_STATUS_DNSSEC_NSEC3_ORIGINAL_NOT_FOUND == status) { + if (ldns_rr_get_type(cur_rr) == LDNS_RR_TYPE_RRSIG + && ldns_rdf2rr_type(ldns_rr_rrsig_typecovered(cur_rr)) + == LDNS_RR_TYPE_NSEC3) { + ldns_rr_list_push_rr(failed_nsec3_rrsigs, cur_rr); + } else { + ldns_rr_list_push_rr(failed_nsec3s, cur_rr); + } + } + if (result == LDNS_STATUS_OK) { + result = status; + } + } + } + + if (ldns_rr_list_rr_count(failed_nsec3s) > 0) { + (void) ldns_dnssec_zone_add_empty_nonterminals(dnssec_zone); + for (i = 0; i < ldns_rr_list_rr_count(failed_nsec3s); i++) { + cur_rr = ldns_rr_list_rr(failed_nsec3s, i); + status = ldns_dnssec_zone_add_rr(dnssec_zone, + ldns_rr_clone(cur_rr)); + if (result == LDNS_STATUS_OK) { + result = status; + } + } + for (i = 0; i < ldns_rr_list_rr_count(failed_nsec3_rrsigs); i++) { + cur_rr = ldns_rr_list_rr(failed_nsec3_rrsigs, i); + status = ldns_dnssec_zone_add_rr(dnssec_zone, + ldns_rr_clone(cur_rr)); + if (result == LDNS_STATUS_OK) { + result = status; + } + } + } + + ldns_rr_list_free(failed_nsec3_rrsigs); + ldns_rr_list_free(failed_nsec3s); + RETVAL = result; + OUTPUT: + RETVAL + +void +print(zone, fp) + DNS__LDNS__DNSSecZone zone; + FILE* fp; + CODE: + ldns_dnssec_zone_print(fp, zone); + +LDNS_Status +ldns_dnssec_zone_add_rr(zone, rr) + DNS__LDNS__DNSSecZone zone; + DNS__LDNS__RR rr; + ALIAS: + _add_rr = 1 + +LDNS_Status +ldns_dnssec_zone_add_empty_nonterminals(zone) + DNS__LDNS__DNSSecZone zone; + ALIAS: + _add_empty_nonterminals = 1 + +LDNS_Status +ldns_dnssec_zone_mark_glue(zone) + DNS__LDNS__DNSSecZone zone; + ALIAS: + _mark_glue = 1 + +DNS__LDNS__DNSSecName +_soa(zone) + DNS__LDNS__DNSSecZone zone; + CODE: + RETVAL = zone->soa; + OUTPUT: + RETVAL + +DNS__LDNS__RBTree +_names(zone) + DNS__LDNS__DNSSecZone zone; + CODE: + RETVAL = zone->names; + OUTPUT: + RETVAL + +DNS__LDNS__DNSSecRRSets +ldns_dnssec_zone_find_rrset(zone, rdf, type) + DNS__LDNS__DNSSecZone zone; + DNS__LDNS__RData rdf; + LDNS_RR_Type type; + ALIAS: + _find_rrset = 1 + +LDNS_Status +_sign(zone, key_list, policy, flags) + DNS__LDNS__DNSSecZone zone; + DNS__LDNS__KeyList key_list; + uint16_t policy; + int flags; + PREINIT: + ldns_rr_list * new_rrs; + CODE: + new_rrs = ldns_rr_list_new(); + RETVAL = ldns_dnssec_zone_sign_flg(zone, new_rrs, key_list, + sign_policy, (void*)&policy, flags); + ldns_rr_list_free(new_rrs); + OUTPUT: + RETVAL + +LDNS_Status +_sign_nsec3(zone, key_list, policy, algorithm, flags, iterations, salt, signflags) + DNS__LDNS__DNSSecZone zone; + DNS__LDNS__KeyList key_list; + uint16_t policy; + uint8_t algorithm; + uint8_t flags; + uint16_t iterations; + char * salt; + int signflags; + PREINIT: + ldns_rr_list * new_rrs; + CODE: + new_rrs = ldns_rr_list_new(); + RETVAL = ldns_dnssec_zone_sign_nsec3_flg(zone, new_rrs, key_list, + sign_policy, (void*)&policy, algorithm, flags, iterations, + strlen(salt), (uint8_t*)salt, signflags); + ldns_rr_list_free(new_rrs); + OUTPUT: + RETVAL + +LDNS_Status +create_nsecs(zone) + DNS__LDNS__DNSSecZone zone; + PREINIT: + ldns_rr_list * new_rrs; + CODE: + new_rrs = ldns_rr_list_new(); + RETVAL = ldns_dnssec_zone_create_nsecs(zone, new_rrs); + ldns_rr_list_free(new_rrs); + OUTPUT: + RETVAL + +LDNS_Status +create_nsec3s(zone, algorithm, flags, iterations, salt) + DNS__LDNS__DNSSecZone zone; + uint8_t algorithm; + uint8_t flags; + uint8_t iterations; + char * salt; + PREINIT: + ldns_rr_list * new_rrs; + CODE: + new_rrs = ldns_rr_list_new(); + RETVAL = ldns_dnssec_zone_create_nsec3s(zone, new_rrs, algorithm, + flags, iterations, strlen(salt), (uint8_t*)salt); + ldns_rr_list_free(new_rrs); + OUTPUT: + RETVAL + +LDNS_Status +create_rrsigs(zone, key_list, policy, flags) + DNS__LDNS__DNSSecZone zone; + DNS__LDNS__KeyList key_list; + uint16_t policy; + int flags; + PREINIT: + ldns_rr_list * new_rrs; + CODE: + new_rrs = ldns_rr_list_new(); + RETVAL = ldns_dnssec_zone_create_rrsigs_flg(zone, new_rrs, key_list, + sign_policy, (void*)&policy, flags); + ldns_rr_list_free(new_rrs); + OUTPUT: + RETVAL + + +MODULE = DNS::LDNS PACKAGE = DNS::LDNS::DNSSecRRSets + +DNS__LDNS__DNSSecRRs +_rrs(rrsets) + DNS__LDNS__DNSSecRRSets rrsets; + CODE: + RETVAL = rrsets->rrs; + OUTPUT: + RETVAL + +DNS__LDNS__DNSSecRRs +_signatures(rrsets) + DNS__LDNS__DNSSecRRSets rrsets; + CODE: + RETVAL = rrsets->signatures; + OUTPUT: + RETVAL + +bool +ldns_dnssec_rrsets_contains_type(rrsets, type) + DNS__LDNS__DNSSecRRSets rrsets; + LDNS_RR_Type type; + ALIAS: + contains_type = 1 + +LDNS_RR_Type +ldns_dnssec_rrsets_type(rrsets) + DNS__LDNS__DNSSecRRSets rrsets; + ALIAS: + type = 1 + +LDNS_Status +ldns_dnssec_rrsets_set_type(rrsets, type) + DNS__LDNS__DNSSecRRSets rrsets; + LDNS_RR_Type type; + ALIAS: + _set_type = 1 + +DNS__LDNS__DNSSecRRSets +_next(rrsets) + DNS__LDNS__DNSSecRRSets rrsets; + CODE: + RETVAL = rrsets->next; + OUTPUT: + RETVAL + +LDNS_Status +ldns_dnssec_rrsets_add_rr(rrsets, rr) + DNS__LDNS__DNSSecRRSets rrsets; + DNS__LDNS__RR rr; + ALIAS: + _add_rr = 1 + + +MODULE = DNS::LDNS PACKAGE = DNS::LDNS::DNSSecRRs + +DNS__LDNS__DNSSecRRs +ldns_dnssec_rrs_new() + ALIAS: + _new = 1 + +DNS__LDNS__RR +_rr(rrs) + DNS__LDNS__DNSSecRRs rrs; + CODE: + RETVAL = rrs->rr; + OUTPUT: + RETVAL + +DNS__LDNS__DNSSecRRs +_next(rrs) + DNS__LDNS__DNSSecRRs rrs; + CODE: + RETVAL = rrs->next; + OUTPUT: + RETVAL + +LDNS_Status +ldns_dnssec_rrs_add_rr(rrs, rr) + DNS__LDNS__DNSSecRRs rrs; + DNS__LDNS__RR rr; + ALIAS: + _add_rr = 1 + + +MODULE = DNS::LDNS PACKAGE = DNS::LDNS::DNSSecName + +DNS__LDNS__DNSSecName +ldns_dnssec_name_new() + ALIAS: + _new = 1 + +DNS__LDNS__RData +ldns_dnssec_name_name(name) + DNS__LDNS__DNSSecName name; + ALIAS: + _name = 1 + +bool +ldns_dnssec_name_is_glue(name) + DNS__LDNS__DNSSecName name; + ALIAS: + is_glue = 1 + +DNS__LDNS__DNSSecRRSets +_rrsets(name) + DNS__LDNS__DNSSecName name; + CODE: + RETVAL = name->rrsets; + OUTPUT: + RETVAL + +DNS__LDNS__RR +_nsec(name) + DNS__LDNS__DNSSecName name; + CODE: + RETVAL = name->nsec; + OUTPUT: + RETVAL + +DNS__LDNS__RData +_hashed_name(name) + DNS__LDNS__DNSSecName name; + CODE: + RETVAL = name->hashed_name; + OUTPUT: + RETVAL + +DNS__LDNS__DNSSecRRs +_nsec_signatures(name) + DNS__LDNS__DNSSecName name; + CODE: + RETVAL = name->nsec_signatures; + OUTPUT: + RETVAL + +void +ldns_dnssec_name_set_name(name, dname) + DNS__LDNS__DNSSecName name; + DNS__LDNS__RData dname; + ALIAS: + _set_name = 1 + +void +ldns_dnssec_name_set_nsec(name, nsec) + DNS__LDNS__DNSSecName name; + DNS__LDNS__RR nsec; + ALIAS: + _set_nsec = 1 + +int +ldns_dnssec_name_cmp(a, b) + DNS__LDNS__DNSSecName a; + DNS__LDNS__DNSSecName b; + ALIAS: + compare = 1 + +LDNS_Status +ldns_dnssec_name_add_rr(name, rr) + DNS__LDNS__DNSSecName name; + DNS__LDNS__RR rr; + ALIAS: + _add_rr = 1 + + +MODULE = DNS::LDNS PACKAGE = DNS::LDNS::RBTree + +DNS__LDNS__RBNode +ldns_rbtree_first(tree) + DNS__LDNS__RBTree tree; + ALIAS: + _first = 1 + +DNS__LDNS__RBNode +ldns_rbtree_last(tree) + DNS__LDNS__RBTree tree; + ALIAS: + _last = 1 + + +MODULE = DNS::LDNS PACKAGE = DNS::LDNS::RBNode + +DNS__LDNS__RBNode +ldns_rbtree_next(node) + DNS__LDNS__RBNode node; + ALIAS: + _next = 1 + +DNS__LDNS__RBNode +ldns_rbtree_previous(node) + DNS__LDNS__RBNode node; + ALIAS: + _previous = 1 + +DNS__LDNS__RBNode +ldns_dnssec_name_node_next_nonglue(node) + DNS__LDNS__RBNode node; + ALIAS: + _next_nonglue = 1 + +bool +is_null(node) + DNS__LDNS__RBNode node; + CODE: + RETVAL = (node == LDNS_RBTREE_NULL); + OUTPUT: + RETVAL + +DNS__LDNS__DNSSecName +_name(node) + DNS__LDNS__RBNode node; + CODE: + RETVAL = (ldns_dnssec_name*)node->data; + OUTPUT: + RETVAL + + +MODULE = DNS::LDNS PACKAGE = DNS::LDNS::Resolver + +DNS__LDNS__Resolver +_new_from_file(fp, s) + FILE* fp; + LDNS_Status s; + PREINIT: + ldns_resolver *r; + CODE: + RETVAL = NULL; + s = ldns_resolver_new_frm_fp(&r, fp); + if (s == LDNS_STATUS_OK) { + RETVAL = r; + } + OUTPUT: + RETVAL + s + +DNS__LDNS__Resolver +ldns_resolver_new() + ALIAS: + _new = 1 + +bool +ldns_resolver_dnssec(resolver) + DNS__LDNS__Resolver resolver; + ALIAS: + dnssec = 1 + +void +ldns_resolver_set_dnssec(resolver, d) + DNS__LDNS__Resolver resolver; + bool d; + ALIAS: + set_dnssec = 1 + +bool +ldns_resolver_dnssec_cd(resolver) + DNS__LDNS__Resolver resolver; + ALIAS: + dnssec_cd = 1 + +void +ldns_resolver_set_dnssec_cd(resolver, d) + DNS__LDNS__Resolver resolver; + bool d; + ALIAS: + set_dnssec_cd = 1 + +uint16_t +ldns_resolver_port(resolver) + DNS__LDNS__Resolver resolver; + ALIAS: + port = 1 + +void +ldns_resolver_set_port(resolver, port) + DNS__LDNS__Resolver resolver; + uint16_t port; + ALIAS: + set_port = 1 + +bool +ldns_resolver_recursive(resolver) + DNS__LDNS__Resolver resolver; + ALIAS: + recursive = 1 + +void +ldns_resolver_set_recursive(resolver, b) + DNS__LDNS__Resolver resolver; + bool b; + ALIAS: + set_recursive = 1 + +bool +ldns_resolver_debug(resolver) + DNS__LDNS__Resolver resolver; + ALIAS: + debug = 1 + +void +ldns_resolver_set_debug(resolver, b) + DNS__LDNS__Resolver resolver; + bool b; + ALIAS: + set_debug = 1 + +uint8_t +ldns_resolver_retry(resolver) + DNS__LDNS__Resolver resolver; + ALIAS: + retry = 1 + +void +ldns_resolver_set_retry(resolver, re) + DNS__LDNS__Resolver resolver; + uint8_t re; + ALIAS: + set_retry = 1 + +uint8_t +ldns_resolver_retrans(resolver) + DNS__LDNS__Resolver resolver; + ALIAS: + retrans = 1 + +void +ldns_resolver_set_retrans(resolver, re) + DNS__LDNS__Resolver resolver; + uint8_t re; + ALIAS: + set_retrans = 1 + +bool +ldns_resolver_fallback(resolver) + DNS__LDNS__Resolver resolver; + ALIAS: + fallback = 1 + +void +ldns_resolver_set_fallback(resolver, f) + DNS__LDNS__Resolver resolver; + bool f; + ALIAS: + set_fallback = 1 + +uint8_t +ldns_resolver_ip6(resolver) + DNS__LDNS__Resolver resolver; + ALIAS: + ip6 = 1 + +void +ldns_resolver_set_ip6(resolver, i) + DNS__LDNS__Resolver resolver; + uint8_t i; + ALIAS: + set_ip6 = 1 + +uint16_t +ldns_resolver_edns_udp_size(resolver) + DNS__LDNS__Resolver resolver; + ALIAS: + edns_udp_size = 1 + +void +ldns_resolver_set_edns_udp_size(resolver, s) + DNS__LDNS__Resolver resolver; + uint16_t s; + ALIAS: + set_edns_udp_size = 1 + +bool +ldns_resolver_usevc(resolver) + DNS__LDNS__Resolver resolver; + ALIAS: + usevc = 1 + +void +ldns_resolver_set_usevc(resolver, b) + DNS__LDNS__Resolver resolver; + bool b; + ALIAS: + set_usevc = 1 + +bool +ldns_resolver_fail(resolver) + DNS__LDNS__Resolver resolver; + ALIAS: + fail = 1 + +void +ldns_resolver_set_fail(resolver, b) + DNS__LDNS__Resolver resolver; + bool b; + ALIAS: + set_fail = 1 + +bool +ldns_resolver_defnames(resolver) + DNS__LDNS__Resolver resolver; + ALIAS: + defnames = 1 + +void +ldns_resolver_set_defnames(resolver, b) + DNS__LDNS__Resolver resolver; + bool b; + ALIAS: + set_defnames = 1 + +bool +ldns_resolver_dnsrch(resolver) + DNS__LDNS__Resolver resolver; + ALIAS: + dnsrch = 1 + +void +ldns_resolver_set_dnsrch(resolver, b) + DNS__LDNS__Resolver resolver; + bool b; + ALIAS: + set_dnsrch = 1 + +bool +ldns_resolver_igntc(resolver) + DNS__LDNS__Resolver resolver; + ALIAS: + igntc = 1 + +void +ldns_resolver_set_igntc(resolver, b) + DNS__LDNS__Resolver resolver; + bool b; + ALIAS: + set_igntc = 1 + +bool +ldns_resolver_random(resolver) + DNS__LDNS__Resolver resolver; + ALIAS: + random = 1 + +void +ldns_resolver_set_random(resolver, b) + DNS__LDNS__Resolver resolver; + bool b; + ALIAS: + set_random = 1 + +bool +ldns_resolver_trusted_key(resolver, keys, trusted_key) + DNS__LDNS__Resolver resolver; + DNS__LDNS__RRList keys; + DNS__LDNS__RRList trusted_key; + ALIAS: + trusted_key = 1 + +DNS__LDNS__RRList +ldns_resolver_dnssec_anchors(resolver) + DNS__LDNS__Resolver resolver; + ALIAS: + _dnssec_anchors = 1 + +void +ldns_resolver_set_dnssec_anchors(resolver, list) + DNS__LDNS__Resolver resolver; + DNS__LDNS__RRList list; + ALIAS: + _set_dnssec_anchors = 1 + +void +ldns_resolver_push_dnssec_anchor(resolver, rr) + DNS__LDNS__Resolver resolver; + DNS__LDNS__RR rr; + ALIAS: + _push_dnssec_anchor = 1 + +DNS__LDNS__RData +ldns_resolver_domain(resolver) + DNS__LDNS__Resolver resolver; + ALIAS: + _domain = 1 + +void +ldns_resolver_set_domain(resolver, rd) + DNS__LDNS__Resolver resolver; + DNS__LDNS__RData rd; + ALIAS: + _set_domain = 1 + +AV * +_nameservers(resolver) + DNS__LDNS__Resolver resolver; + PREINIT: + ldns_rdf** list; + AV * result; + int i; + SV * elem; + CODE: + result = (AV *)sv_2mortal((SV *)newAV()); + list = ldns_resolver_nameservers(resolver); + + /* FIXME: Make a typemap for this ? */ + for (i = 0; i < ldns_resolver_nameserver_count(resolver); i++) { + elem = newSVpv(0, 0); + sv_setref_pv(elem, "LDNS::RData", list[i]); + av_push(result, elem); + } + RETVAL = result; + OUTPUT: + RETVAL + +size_t +ldns_resolver_nameserver_count(resolver) + DNS__LDNS__Resolver resolver; + ALIAS: + nameserver_count = 1 + +LDNS_Status +ldns_resolver_push_nameserver(resolver, n) + DNS__LDNS__Resolver resolver; + DNS__LDNS__RData n; + ALIAS: + _push_nameserver = 1 + +DNS__LDNS__RData +ldns_resolver_pop_nameserver(resolver) + DNS__LDNS__Resolver resolver; + ALIAS: + _pop_nameserver = 1 + +void +ldns_resolver_nameservers_randomize(resolver) + DNS__LDNS__Resolver resolver; + ALIAS: + nameservers_randomize = 1 + +const char* +ldns_resolver_tsig_keyname(resolver) + DNS__LDNS__Resolver resolver; + ALIAS: + tsig_keyname = 1 + +void +ldns_resolver_set_tsig_keyname(resolver, tsig_keyname) + DNS__LDNS__Resolver resolver; + char* tsig_keyname; + ALIAS: + set_tsig_keyname = 1 + +const char* +ldns_resolver_tsig_algorithm(resolver) + DNS__LDNS__Resolver resolver; + ALIAS: + tsig_algorithm = 1 + +void +ldns_resolver_set_tsig_algorithm(resolver, tsig_algorithm) + DNS__LDNS__Resolver resolver; + char* tsig_algorithm; + ALIAS: + set_tsig_algorithm = 1 + +const char* +ldns_resolver_tsig_keydata(resolver) + DNS__LDNS__Resolver resolver; + ALIAS: + tsig_keydata = 1 + +void +ldns_resolver_set_tsig_keydata(resolver, tsig_keydata) + DNS__LDNS__Resolver resolver; + char* tsig_keydata; + ALIAS: + set_tsig_keydata = 1 + +size_t +ldns_resolver_searchlist_count(resolver) + DNS__LDNS__Resolver resolver; + ALIAS: + searchlist_count = 1 + +void +ldns_resolver_push_searchlist(resolver, rd) + DNS__LDNS__Resolver resolver; + DNS__LDNS__RData rd; + ALIAS: + _push_searchlist = 1 + +AV * +_searchlist(resolver) + DNS__LDNS__Resolver resolver; + PREINIT: + ldns_rdf** list; + AV * result; + int i; + SV * elem; + CODE: + result = (AV *)sv_2mortal((SV *)newAV()); + list = ldns_resolver_searchlist(resolver); + + /* FIXME: Make a typemap for this ? */ + for (i = 0; i < ldns_resolver_searchlist_count(resolver); i++) { + elem = newSVpv(0, 0); + sv_setref_pv(elem, "LDNS::RData", list[i]); + av_push(result, elem); + } + RETVAL = result; + OUTPUT: + RETVAL + +size_t +ldns_resolver_nameserver_rtt(resolver, pos) + DNS__LDNS__Resolver resolver; + size_t pos; + ALIAS: + nameserver_rtt = 1 + +void +ldns_resolver_set_nameserver_rtt(resolver, pos, val) + DNS__LDNS__Resolver resolver; + size_t pos; + size_t val; + ALIAS: + set_nameserver_rtt = 1 + +AV * +_timeout(resolver) + DNS__LDNS__Resolver resolver; + PREINIT: + struct timeval t; + AV * result; + CODE: + t = ldns_resolver_timeout(resolver); + result = (AV *)sv_2mortal((SV *)newAV()); + av_push(result, newSVuv(t.tv_sec)); + av_push(result, newSVuv(t.tv_usec)); + RETVAL = result; + OUTPUT: + RETVAL + +void +set_timeout(resolver, sec, usec) + DNS__LDNS__Resolver resolver; + uint32_t sec; + uint32_t usec; + PREINIT: + struct timeval t; + CODE: + t.tv_sec = sec; + t.tv_usec = usec; + ldns_resolver_set_timeout(resolver, t); + +void +_set_rtt(resolver, rtt) + DNS__LDNS__Resolver resolver; + AV * rtt; + PREINIT: + size_t *buff; + int i; + SV** elem; + CODE: + buff = malloc(sizeof(size_t)*(av_len(rtt)+1)); + for (i = 0; i <= av_len(rtt); i++) { + elem = av_fetch(rtt, i, 0); + buff[i] = SvUV(*elem); + } + ldns_resolver_set_rtt(resolver, buff); + +AV * +_rtt(resolver) + DNS__LDNS__Resolver resolver; + PREINIT: + int i; + size_t *rtt; + AV * result; + CODE: + result = (AV *)sv_2mortal((SV *)newAV()); + rtt = ldns_resolver_rtt(resolver); + + for (i = 0; i < ldns_resolver_nameserver_count(resolver); i++) { + av_push(result, newSVuv(rtt[i])); + } + RETVAL = result; + OUTPUT: + RETVAL + +DNS__LDNS__RRList +ldns_validate_domain_ds(resolver, domain, keys) + DNS__LDNS__Resolver resolver; + DNS__LDNS__RData domain; + DNS__LDNS__RRList keys; + ALIAS: + validate_domain_ds = 1 + +DNS__LDNS__RRList +ldns_validate_domain_ds_time(resolver, domain, keys, check_time) + DNS__LDNS__Resolver resolver; + DNS__LDNS__RData domain; + DNS__LDNS__RRList keys; + time_t check_time; + ALIAS: + validate_domain_ds_time = 1 + +DNS__LDNS__RRList +ldns_validate_domain_dnskey(resolver, domain, keys) + DNS__LDNS__Resolver resolver; + DNS__LDNS__RData domain; + DNS__LDNS__RRList keys; + ALIAS: + validate_domain_dnskey = 1 + +DNS__LDNS__RRList +ldns_validate_domain_dnskey_time(resolver, domain, keys, check_time) + DNS__LDNS__Resolver resolver; + DNS__LDNS__RData domain; + DNS__LDNS__RRList keys; + time_t check_time; + ALIAS: + validate_domain_dnskey_time = 1 + +LDNS_Status +ldns_verify_trusted(resolver, rrset, rrsigs, validating_keys) + DNS__LDNS__Resolver resolver; + DNS__LDNS__RRList rrset; + DNS__LDNS__RRList rrsigs; + DNS__LDNS__RRList validating_keys; + ALIAS: + _verify_trusted = 1 + +LDNS_Status +ldns_verify_trusted_time(resolver, rrset, rrsigs, check_time, validating_keys) + DNS__LDNS__Resolver resolver; + DNS__LDNS__RRList rrset; + DNS__LDNS__RRList rrsigs; + time_t check_time; + DNS__LDNS__RRList validating_keys; + ALIAS: + _verify_trusted_time = 1 + +DNS__LDNS__RRList +_fetch_valid_domain_keys(resolver, domain, keys, s) + DNS__LDNS__Resolver resolver; + DNS__LDNS__RData domain; + DNS__LDNS__RRList keys; + LDNS_Status s; + PREINIT: + DNS__LDNS__RRList trusted; + DNS__LDNS__RRList ret; + size_t i; + CODE: + RETVAL = NULL; + trusted = ldns_fetch_valid_domain_keys(resolver, domain, keys, &s); + if (s == LDNS_STATUS_OK) { + RETVAL = ldns_rr_list_clone(trusted); + ldns_rr_list_free(trusted); + } + OUTPUT: + RETVAL + s + +DNS__LDNS__RRList +_fetch_valid_domain_keys_time(resolver, domain, keys, check_time, s) + DNS__LDNS__Resolver resolver; + DNS__LDNS__RData domain; + DNS__LDNS__RRList keys; + time_t check_time; + LDNS_Status s; + PREINIT: + DNS__LDNS__RRList trusted; + DNS__LDNS__RRList ret; + size_t i; + CODE: + RETVAL = NULL; + trusted = ldns_fetch_valid_domain_keys_time( + resolver, domain, keys, check_time, &s); + if (s == LDNS_STATUS_OK) { + RETVAL = ldns_rr_list_clone(trusted); + ldns_rr_list_free(trusted); + } + OUTPUT: + RETVAL + s + +DNS__LDNS__Packet +ldns_resolver_query(resolver, name, type, class, flags) + DNS__LDNS__Resolver resolver; + DNS__LDNS__RData name; + LDNS_RR_Type type; + LDNS_RR_Class class; + uint16_t flags; + ALIAS: + query = 1 + +DNS__LDNS__Packet +_send(resolver, name, type, class, flags, s) + DNS__LDNS__Resolver resolver; + DNS__LDNS__RData name; + LDNS_RR_Type type; + LDNS_RR_Class class; + uint16_t flags; + LDNS_Status s; + PREINIT: + DNS__LDNS__Packet packet; + CODE: + s = ldns_resolver_send(&packet, resolver, name, type, class, flags); + if (s == LDNS_STATUS_OK) { + RETVAL = packet; + } + OUTPUT: + RETVAL + s + +DNS__LDNS__Packet +_send_pkt(resolver, packet, s) + DNS__LDNS__Resolver resolver; + DNS__LDNS__Packet packet; + LDNS_Status s; + PREINIT: + DNS__LDNS__Packet answer; + CODE: + s = ldns_resolver_send_pkt(&answer, resolver, packet); + if (s == LDNS_STATUS_OK) { + RETVAL = answer; + } + OUTPUT: + RETVAL + s + +DNS__LDNS__Packet +_prepare_query_pkt(resolver, name, type, class, flags, s) + DNS__LDNS__Resolver resolver; + DNS__LDNS__RData name; + LDNS_RR_Type type; + LDNS_RR_Class class; + uint16_t flags; + LDNS_Status s; + PREINIT: + DNS__LDNS__Packet packet; + CODE: + s = ldns_resolver_prepare_query_pkt(&packet, resolver, name, type, class, flags); + if (s == LDNS_STATUS_OK) { + RETVAL = packet; + } + OUTPUT: + RETVAL + s + +DNS__LDNS__Packet +ldns_resolver_search(resolver, name, type, class, flags) + DNS__LDNS__Resolver resolver; + DNS__LDNS__RData name; + LDNS_RR_Type type; + LDNS_RR_Class class; + uint16_t flags; + ALIAS: + search = 1 + +DNS__LDNS__DNSSecDataChain +build_data_chain(res, qflags, data_set, pkt, orig_rr) + DNS__LDNS__Resolver res; + uint16_t qflags; + DNS__LDNS__RRList data_set; + DNS__LDNS__Packet pkt; + DNS__LDNS__RR__Opt orig_rr; + CODE: + RETVAL = ldns_dnssec_build_data_chain(res, qflags, data_set, pkt, orig_rr); + OUTPUT: + RETVAL + +DNS__LDNS__RRList +ldns_get_rr_list_addr_by_name(res, name, class, flags) + DNS__LDNS__Resolver res; + DNS__LDNS__RData name; + LDNS_RR_Class class; + uint16_t flags; + ALIAS: + get_rr_list_addr_by_name = 1 + +DNS__LDNS__RRList +ldns_get_rr_list_name_by_addr(res, addr, class, flags) + DNS__LDNS__Resolver res; + DNS__LDNS__RData addr; + LDNS_RR_Class class; + uint16_t flags; + ALIAS: + get_rr_list_addr_by_addr = 1 + + +MODULE = DNS::LDNS PACKAGE = DNS::LDNS::Packet + +Mortal_PV +ldns_pkt2str(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + to_string = 1 + +DNS__LDNS__RRList +ldns_pkt_question(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + _question = 1 + +void +ldns_pkt_set_question(pkt, l) + DNS__LDNS__Packet pkt; + DNS__LDNS__RRList l; + ALIAS: + _set_question = 1 + +DNS__LDNS__RRList +ldns_pkt_answer(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + _answer = 1 + +void +ldns_pkt_set_answer(pkt, l) + DNS__LDNS__Packet pkt; + DNS__LDNS__RRList l; + ALIAS: + _set_answer = 1 + +DNS__LDNS__RRList +ldns_pkt_authority(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + _authority = 1 + +void +ldns_pkt_set_authority(pkt, l) + DNS__LDNS__Packet pkt; + DNS__LDNS__RRList l; + ALIAS: + _set_authority = 1 + +DNS__LDNS__RRList +ldns_pkt_additional(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + _additional = 1 + +void +ldns_pkt_set_additional(pkt, l) + DNS__LDNS__Packet pkt; + DNS__LDNS__RRList l; + ALIAS: + _set_additional = 1 + +DNS__LDNS__RRList +ldns_pkt_all(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + all = 1 + +DNS__LDNS__RRList +ldns_pkt_all_noquestion(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + all_noquestion = 1 + +signed char +ldns_pkt_qr(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + qr = 1 + +void +ldns_pkt_set_qr(pkt, b) + DNS__LDNS__Packet pkt; + signed char b; + ALIAS: + set_qr = 1 + +signed char +ldns_pkt_aa(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + aa = 1 + +void +ldns_pkt_set_aa(pkt, b) + DNS__LDNS__Packet pkt; + signed char b; + ALIAS: + set_aa = 1 + +signed char +ldns_pkt_tc(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + tc = 1 + +void +ldns_pkt_set_tc(pkt, b) + DNS__LDNS__Packet pkt; + signed char b; + ALIAS: + set_tc = 1 + +signed char +ldns_pkt_rd(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + rd = 1 + +void +ldns_pkt_set_rd(pkt, b) + DNS__LDNS__Packet pkt; + signed char b; + ALIAS: + set_rd = 1 + +bool +ldns_pkt_cd(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + cd = 1 + +void +ldns_pkt_set_cd(pkt, b) + DNS__LDNS__Packet pkt; + signed char b; + ALIAS: + set_cd = 1 + +signed char +ldns_pkt_ra(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + ra = 1 + +void +ldns_pkt_set_ra(pkt, b) + DNS__LDNS__Packet pkt; + signed char b; + ALIAS: + set_ra = 1 + +signed char +ldns_pkt_ad(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + ad = 1 + +void +ldns_pkt_set_ad(pkt, b) + DNS__LDNS__Packet pkt; + signed char b; + ALIAS: + set_ad = 1 + +uint16_t +ldns_pkt_id(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + id = 1 + +void +ldns_pkt_set_id(pkt, id) + DNS__LDNS__Packet pkt; + uint16_t id; + ALIAS: + set_id = 1 + +void +ldns_pkt_set_random_id(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + set_random_id = 1 + +uint16_t +ldns_pkt_qdcount(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + qdcount = 1 + +uint16_t +ldns_pkt_ancount(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + ancount = 1 + +uint16_t +ldns_pkt_nscount(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + nscount = 1 + +uint16_t +ldns_pkt_arcount(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + arcount = 1 + +LDNS_Pkt_Opcode +ldns_pkt_get_opcode(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + opcode = 1 + +void +ldns_pkt_set_opcode(pkt, c) + DNS__LDNS__Packet pkt; + LDNS_Pkt_Opcode c; + ALIAS: + set_opcode = 1 + +uint8_t +ldns_pkt_get_rcode(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + rcode = 1 + +void +ldns_pkt_set_rcode(pkt, r) + DNS__LDNS__Packet pkt; + uint8_t r; + ALIAS: + set_rcode = 1 + +size_t +ldns_pkt_size(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + size = 1 + +uint32_t +ldns_pkt_querytime(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + querytime = 1 + +void +ldns_pkt_set_querytime(pkt, t) + DNS__LDNS__Packet pkt; + uint32_t t; + ALIAS: + set_querytime = 1 + +DNS__LDNS__RData +ldns_pkt_answerfrom(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + _answerfrom = 1 + +AV * +_timestamp(pkt) + DNS__LDNS__Packet pkt; + PREINIT: + struct timeval t; + AV * result; + CODE: + t = ldns_pkt_timestamp(pkt); + result = (AV *)sv_2mortal((SV *)newAV()); + av_push(result, newSVuv(t.tv_sec)); + av_push(result, newSVuv(t.tv_usec)); + RETVAL = result; + OUTPUT: + RETVAL + +void +set_timestamp(pkt, sec, usec) + DNS__LDNS__Packet pkt; + uint32_t sec; + uint32_t usec; + PREINIT: + struct timeval t; + CODE: + t.tv_sec = sec; + t.tv_usec = usec; + ldns_pkt_set_timestamp(pkt, t); + +void +ldns_pkt_set_answerfrom(pkt, a) + DNS__LDNS__Packet pkt; + DNS__LDNS__RData a; + ALIAS: + _set_answerfrom = 1 + +bool +ldns_pkt_set_flags(pkt, f) + DNS__LDNS__Packet pkt; + uint16_t f; + ALIAS: + set_flags = 1 + +DNS__LDNS__RRList +ldns_pkt_rr_list_by_name(pkt, name, sec) + DNS__LDNS__Packet pkt; + DNS__LDNS__RData name; + LDNS_Pkt_Section sec; + ALIAS: + rr_list_by_name = 1 + +DNS__LDNS__RRList +ldns_pkt_rr_list_by_type(pkt, type, sec) + DNS__LDNS__Packet pkt; + LDNS_RR_Type type; + LDNS_Pkt_Section sec; + ALIAS: + rr_list_by_type = 1 + +DNS__LDNS__RRList +ldns_pkt_rr_list_by_name_and_type(pkt, name, type, sec) + DNS__LDNS__Packet pkt; + DNS__LDNS__RData name; + LDNS_RR_Type type; + LDNS_Pkt_Section sec; + ALIAS: + rr_list_by_name_and_type = 1 + +bool +ldns_pkt_rr(pkt, sec, rr) + DNS__LDNS__Packet pkt; + LDNS_Pkt_Section sec; + DNS__LDNS__RR rr; + ALIAS: + rr = 1 + +bool +ldns_pkt_push_rr(pkt, sec, rr) + DNS__LDNS__Packet pkt; + LDNS_Pkt_Section sec; + DNS__LDNS__RR rr; + ALIAS: + _push_rr = 1 + +bool +ldns_pkt_safe_push_rr(pkt, sec, rr) + DNS__LDNS__Packet pkt; + LDNS_Pkt_Section sec; + DNS__LDNS__RR rr; + ALIAS: + _safe_push_rr = 1 + +uint16_t +ldns_pkt_section_count(pkt, sec) + DNS__LDNS__Packet pkt; + LDNS_Pkt_Section sec; + ALIAS: + section_count = 1 + +signed char +ldns_pkt_empty(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + empty = 1 + +DNS__LDNS__RR +ldns_pkt_tsig(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + _tsig = 1 + +void +ldns_pkt_set_tsig(pkt, rr) + DNS__LDNS__Packet pkt; + DNS__LDNS__RR rr; + ALIAS: + _set_tsig = 1 + +DNS__LDNS__Packet +ldns_pkt_clone(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + clone = 1 + +LDNS_Pkt_Type +ldns_pkt_reply_type(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + reply_type = 1 + +DNS__LDNS__Packet +ldns_pkt_new() + ALIAS: + _new = 1 + +DNS__LDNS__Packet +ldns_pkt_query_new(name, type, class, flags) + DNS__LDNS__RData name; + LDNS_RR_Type type; + LDNS_RR_Class class; + uint16_t flags; + ALIAS: + _query_new = 1 + +DNS__LDNS__RRList +ldns_dnssec_pkt_get_rrsigs_for_name_and_type(pkt, name, type) + DNS__LDNS__Packet pkt; + DNS__LDNS__RData name; + LDNS_RR_Type type; + ALIAS: + get_rrsigs_for_name_and_type = 1 + +DNS__LDNS__RRList +ldns_dnssec_pkt_get_rrsigs_for_type(pkt, type) + DNS__LDNS__Packet pkt; + LDNS_RR_Type type; + ALIAS: + get_rrsigs_for_type = 1 + +uint16_t +ldns_pkt_edns_udp_size(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + edns_udp_size = 1 + +void +ldns_pkt_set_edns_udp_size(pkt, s) + DNS__LDNS__Packet pkt; + uint16_t s; + ALIAS: + set_edns_udp_size = 1 + +uint8_t +ldns_pkt_edns_extended_rcode(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + edns_extended_rcode = 1 + +void +ldns_pkt_set_edns_extended_rcode(pkt, c) + DNS__LDNS__Packet pkt; + uint8_t c; + ALIAS: + set_edns_extended_rcode = 1 + +uint8_t +ldns_pkt_edns_version(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + edns_version = 1 + +void +ldns_pkt_set_edns_version(pkt, v) + DNS__LDNS__Packet pkt; + uint8_t v; + ALIAS: + set_edns_version = 1 + +uint16_t +ldns_pkt_edns_z(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + edns_z = 1 + +void +ldns_pkt_set_edns_z(pkt, z) + DNS__LDNS__Packet pkt; + uint16_t z; + ALIAS: + set_edns_z = 1 + +signed char +ldns_pkt_edns_do(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + edns_do = 1 + +DNS__LDNS__RData +ldns_pkt_edns_data(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + _edns_data = 1 + +void +ldns_pkt_set_edns_data(pkt, data) + DNS__LDNS__Packet pkt; + DNS__LDNS__RData data; + ALIAS: + _set_edns_data = 1 + +void +ldns_pkt_set_edns_do(pkt, val) + DNS__LDNS__Packet pkt; + signed char val; + ALIAS: + set_edns_do = 1 + +bool +ldns_pkt_edns(pkt) + DNS__LDNS__Packet pkt; + ALIAS: + edns = 1 + + +MODULE = DNS::LDNS PACKAGE = DNS::LDNS::Key + +DNS__LDNS__Key +_new_from_file(fp, line_nr, s) + FILE* fp; + int line_nr; + LDNS_Status s; + PREINIT: + ldns_key *key; + CODE: + RETVAL = NULL; + s = ldns_key_new_frm_fp_l(&key, fp, &line_nr); + + if (s == LDNS_STATUS_OK) { + RETVAL = key; + } + OUTPUT: + RETVAL + s + line_nr + +DNS__LDNS__Key +ldns_key_new() + ALIAS: + _new = 1 + +void +print(key, fp) + DNS__LDNS__Key key; + FILE* fp; + CODE: + ldns_key_print(fp, key); + +Mortal_PV +ldns_key2str(key) + DNS__LDNS__Key key; + ALIAS: + to_string = 1 + +void +ldns_key_set_algorithm(key, algorithm) + DNS__LDNS__Key key; + LDNS_Signing_Algorithm algorithm; + ALIAS: + set_algorithm = 1 + +LDNS_Signing_Algorithm +ldns_key_algorithm(key) + DNS__LDNS__Key key; + ALIAS: + algorithm = 1 + +void +ldns_key_set_flags(key, flags) + DNS__LDNS__Key key; + uint16_t flags; + ALIAS: + set_flags = 1 + +uint16_t +ldns_key_flags(key) + DNS__LDNS__Key key; + ALIAS: + flags = 1 + +void +ldns_key_set_hmac_key(key, hmac) + DNS__LDNS__Key key; + unsigned char* hmac; + ALIAS: + set_hmac_key = 1 + +unsigned char * +ldns_key_hmac_key(key) + DNS__LDNS__Key key; + ALIAS: + hmac_key = 1 + +void +ldns_key_set_hmac_size(key, size) + DNS__LDNS__Key key; + size_t size; + ALIAS: + set_hmac_size = 1 + +size_t +ldns_key_hmac_size(key) + DNS__LDNS__Key key; + ALIAS: + hmac_size = 1 + +void +ldns_key_set_origttl(key, t) + DNS__LDNS__Key key; + uint32_t t; + ALIAS: + set_origttl = 1 + +uint32_t +ldns_key_origttl(key) + DNS__LDNS__Key key; + ALIAS: + origttl = 1 + +void +ldns_key_set_inception(key, i) + DNS__LDNS__Key key; + uint32_t i; + ALIAS: + set_inception = 1 + +uint32_t +ldns_key_inception(key) + DNS__LDNS__Key key; + ALIAS: + inception = 1 + +void +ldns_key_set_expiration(key, e) + DNS__LDNS__Key key; + uint32_t e; + ALIAS: + set_expiration = 1 + +uint32_t +ldns_key_expiration(key) + DNS__LDNS__Key key; + ALIAS: + expiration = 1 + +void +ldns_key_set_pubkey_owner(key, r) + DNS__LDNS__Key key; + DNS__LDNS__RData r; + ALIAS: + _set_pubkey_owner = 1 + +DNS__LDNS__RData +ldns_key_pubkey_owner(key) + DNS__LDNS__Key key; + ALIAS: + _pubkey_owner = 1 + +void +ldns_key_set_keytag(key, tag) + DNS__LDNS__Key key; + uint16_t tag; + ALIAS: + set_keytag = 1 + +uint16_t +ldns_key_keytag(key) + DNS__LDNS__Key key; + ALIAS: + keytag = 1 + +void +ldns_key_set_use(key, v) + DNS__LDNS__Key key; + signed char v; + ALIAS: + set_use = 1 + +signed char +ldns_key_use(key) + DNS__LDNS__Key key; + ALIAS: + use = 1 + +char * +ldns_key_get_file_base_name(key) + DNS__LDNS__Key key; + ALIAS: + get_file_base_name = 1 + +DNS__LDNS__RR +ldns_key2rr(key) + DNS__LDNS__Key key; + ALIAS: + to_rr = 1 + + +MODULE = DNS::LDNS PACKAGE = DNS::LDNS::KeyList + +DNS__LDNS__KeyList +ldns_key_list_new() + ALIAS: + _new = 1 + +void +ldns_key_list_set_use(keys, v) + DNS__LDNS__KeyList keys; + bool v; + ALIAS: + set_use = 1 + +DNS__LDNS__Key +ldns_key_list_pop_key(keylist) + DNS__LDNS__KeyList keylist; + ALIAS: + pop = 1 + +void +ldns_key_list_push_key(keylist, key) + DNS__LDNS__KeyList keylist; + DNS__LDNS__Key key; + ALIAS: + _push = 1 + +size_t +ldns_key_list_key_count(keylist) + DNS__LDNS__KeyList keylist; + ALIAS: + count = 1 + +DNS__LDNS__Key +ldns_key_list_key(keylist, nr) + DNS__LDNS__KeyList keylist; + size_t nr; + ALIAS: + _key = 1 + + +MODULE = DNS::LDNS PACKAGE = DNS::LDNS::DNSSecDataChain + +DNS__LDNS__DNSSecDataChain +ldns_dnssec_data_chain_new() + ALIAS: + _new = 1 + +void +print(chain, fp) + DNS__LDNS__DNSSecDataChain chain; + FILE* fp; + CODE: + ldns_dnssec_data_chain_print(fp, chain); + +DNS__LDNS__DNSSecTrustTree +ldns_dnssec_derive_trust_tree(chain, rr) + DNS__LDNS__DNSSecDataChain chain; + DNS__LDNS__RR rr; + ALIAS: + _derive_trust_tree = 1 + +DNS__LDNS__DNSSecTrustTree +ldns_dnssec_derive_trust_tree_time(chain, rr, check_time) + DNS__LDNS__DNSSecDataChain chain; + DNS__LDNS__RR rr; + time_t check_time; + ALIAS: + _derive_trust_tree_time = 1 + +DNS__LDNS__RRList +_rrset(chain) + DNS__LDNS__DNSSecDataChain chain; + CODE: + RETVAL = chain->rrset; + OUTPUT: + RETVAL + +DNS__LDNS__RRList +_signatures(chain) + DNS__LDNS__DNSSecDataChain chain; + CODE: + RETVAL = chain->signatures; + OUTPUT: + RETVAL + +LDNS_RR_Type +parent_type(chain) + DNS__LDNS__DNSSecDataChain chain; + CODE: + RETVAL = chain->parent_type; + OUTPUT: + RETVAL + +DNS__LDNS__DNSSecDataChain +_parent(chain) + DNS__LDNS__DNSSecDataChain chain; + CODE: + RETVAL = chain->parent; + OUTPUT: + RETVAL + +LDNS_Pkt_Rcode +packet_rcode(chain) + DNS__LDNS__DNSSecDataChain chain; + CODE: + RETVAL = chain->packet_rcode; + OUTPUT: + RETVAL + +LDNS_RR_Type +packet_qtype(chain) + DNS__LDNS__DNSSecDataChain chain; + CODE: + RETVAL = chain->packet_qtype; + OUTPUT: + RETVAL + +signed char +packet_nodata(chain) + DNS__LDNS__DNSSecDataChain chain; + CODE: + RETVAL = chain->packet_nodata; + OUTPUT: + RETVAL + + +MODULE = DNS::LDNS PACKAGE = DNS::LDNS::DNSSecTrustTree + +DNS__LDNS__DNSSecTrustTree +ldns_dnssec_trust_tree_new() + ALIAS: + _new = 1 + +void +print(tree, fp, tabs, extended) + DNS__LDNS__DNSSecTrustTree tree; + FILE* fp; + size_t tabs; + bool extended; + CODE: + ldns_dnssec_trust_tree_print(fp, tree, tabs, extended); + +size_t +ldns_dnssec_trust_tree_depth(tree) + DNS__LDNS__DNSSecTrustTree tree; + ALIAS: + depth = 1 + +LDNS_Status +ldns_dnssec_trust_tree_add_parent(tree, parent, signature, parent_status) + DNS__LDNS__DNSSecTrustTree tree; + DNS__LDNS__DNSSecTrustTree parent; + DNS__LDNS__RR signature; + LDNS_Status parent_status; + ALIAS: + _add_parent = 1 + +LDNS_Status +ldns_dnssec_trust_tree_contains_keys(tree, trusted_keys) + DNS__LDNS__DNSSecTrustTree tree; + DNS__LDNS__RRList trusted_keys; + ALIAS: + _contains_keys = 1 + +DNS__LDNS__RR +_rr(tree) + DNS__LDNS__DNSSecTrustTree tree; + CODE: + RETVAL = tree->rr; + OUTPUT: + RETVAL + +DNS__LDNS__RRList +_rrset(tree) + DNS__LDNS__DNSSecTrustTree tree; + CODE: + RETVAL = tree->rrset; + OUTPUT: + RETVAL + +DNS__LDNS__DNSSecTrustTree +_parent(tree, i) + DNS__LDNS__DNSSecTrustTree tree; + size_t i; + CODE: + RETVAL = tree->parents[i]; + OUTPUT: + RETVAL + +LDNS_Status +_parent_status(tree, i) + DNS__LDNS__DNSSecTrustTree tree; + size_t i; + CODE: + RETVAL = tree->parent_status[i]; + OUTPUT: + RETVAL + +DNS__LDNS__RR +_parent_signature(tree, i) + DNS__LDNS__DNSSecTrustTree tree; + size_t i; + CODE: + RETVAL = tree->parent_signature[i]; + OUTPUT: + RETVAL + +size_t +parent_count(tree) + DNS__LDNS__DNSSecTrustTree tree; + CODE: + RETVAL = tree->parent_count; + OUTPUT: + RETVAL |