42 #include <ldns/ldns.h>
44 static const char* adapi_str =
"adapter";
54 if (!zone || !zone->
db) {
68 if (!zone || !zone->
db) {
98 return LDNS_RR_CLASS_IN;
127 uint32_t num_added = 0;
128 if (!zone || !zone->
db) {
165 uint32_t num_added = 0;
166 if (!zone || !zone->
db) {
199 adapi_process_soa(
zone_type* zone, ldns_rr* rr,
int add,
int backup)
202 ldns_rdf* soa_rdata = NULL;
213 adapi_str, zone->
name, tmp);
214 ldns_rr_set_ttl(rr, tmp);
219 adapi_str, zone->
name, tmp);
220 soa_rdata = ldns_rr_set_rdf(rr,
221 ldns_native2rdf_int32(LDNS_RDF_TYPE_INT32, tmp),
224 ldns_rdf_deep_free(soa_rdata);
227 ods_log_error(
"[%s] unable to %s soa to zone %s: failed to replace "
228 "soa minimum rdata", adapi_str, add?
"add":
"delete",
241 ods_log_error(
"[%s] unable to add soa to zone %s: failed to replace "
242 "soa serial rdata (%s)", adapi_str, zone->
name,
248 soa_rdata = ldns_rr_set_rdf(rr, ldns_native2rdf_int32(LDNS_RDF_TYPE_INT32,
251 ldns_rdf_deep_free(soa_rdata);
254 ods_log_error(
"[%s] unable to add soa to zone %s: failed to replace "
255 "soa serial rdata", adapi_str, zone->
name);
270 adapi_process_dnskey(
zone_type* zone, ldns_rr* rr)
279 adapi_str, zone->
name, tmp);
280 ldns_rr_set_ttl(rr, tmp);
290 adapi_process_rr(
zone_type* zone, ldns_rr* rr,
int add,
int backup)
299 if (ldns_rr_get_class(rr) != LDNS_RR_CLASS_IN) {
302 ldns_rr_set_class(rr, LDNS_RR_CLASS_IN);
305 if (ldns_rr_get_type(rr) == LDNS_RR_TYPE_SOA) {
306 if (ldns_dname_compare(ldns_rr_owner(rr), zone->
apex)) {
307 ods_log_error(
"[%s] unable to %s rr to zone: soa record has "
308 "invalid owner name", adapi_str, add?
"add":
"delete");
311 status = adapi_process_soa(zone, rr, add, backup);
314 "record", adapi_str, add?
"add":
"delete");
318 if (ldns_dname_compare(ldns_rr_owner(rr), zone->
apex) &&
319 !ldns_dname_is_subdomain(ldns_rr_owner(rr), zone->
apex)) {
321 "skipping", adapi_str, zone->
name);
323 }
else if (ldns_rr_get_type(rr) == LDNS_RR_TYPE_DNSKEY) {
324 adapi_process_dnskey(zone, rr);
327 "skipping", adapi_str, zone->
name,
328 (
unsigned) ldns_rr_get_type(rr));
353 return adapi_process_rr(zone, rr, 1, backup);
364 return adapi_process_rr(zone, rr, 0, backup);
376 if (!fd || !zone || !zone->
db) {
377 ods_log_error(
"[%s] unable to print zone: file descriptor, zone or "
378 "name database missing", adapi_str);
395 if (!fd || !zone || !zone->
db) {
396 ods_log_error(
"[%s] unable to print axfr: file descriptor, zone or "
397 "name database missing", adapi_str);
419 if (!fd || !zone || !zone->
db || !zone->
ixfr) {
420 ods_log_error(
"[%s] unable to print ixfr: file descriptor, zone or "
421 "name database missing", adapi_str);