40 #include <ldns/ldns.h>
42 static const char* adapi_str =
"adapter";
52 if (!zone || !zone->
db) {
66 if (!zone || !zone->
db) {
96 return LDNS_RR_CLASS_IN;
125 uint32_t num_added = 0;
126 if (!zone || !zone->
db) {
163 uint32_t num_added = 0;
164 if (!zone || !zone->
db) {
197 adapi_process_soa(
zone_type* zone, ldns_rr* rr,
int add,
int backup)
200 ldns_rdf* soa_rdata = NULL;
215 adapi_str, zone->
name, tmp);
216 ldns_rr_set_ttl(rr, tmp);
221 adapi_str, zone->
name, tmp);
222 soa_rdata = ldns_rr_set_rdf(rr,
223 ldns_native2rdf_int32(LDNS_RDF_TYPE_INT32, tmp),
226 ldns_rdf_deep_free(soa_rdata);
229 ods_log_error(
"[%s] unable to %s soa to zone %s: failed to replace "
230 "soa minimum rdata", adapi_str, add?
"add":
"delete",
243 ods_log_error(
"[%s] unable to add soa to zone %s: failed to replace "
244 "soa serial rdata (%s)", adapi_str, zone->
name,
247 ods_log_error(
"[%s] If this is the result of a key rollover, "
248 "please increment the serial in the unsigned zone %s",
249 adapi_str, zone->
name);
255 soa_rdata = ldns_rr_set_rdf(rr, ldns_native2rdf_int32(LDNS_RDF_TYPE_INT32,
258 ldns_rdf_deep_free(soa_rdata);
261 ods_log_error(
"[%s] unable to add soa to zone %s: failed to replace "
262 "soa serial rdata", adapi_str, zone->
name);
275 adapi_process_dnskey(
zone_type* zone, ldns_rr* rr)
284 adapi_str, zone->
name, tmp);
285 ldns_rr_set_ttl(rr, tmp);
295 adapi_process_rr(
zone_type* zone, ldns_rr* rr,
int add,
int backup)
304 if (ldns_rr_get_class(rr) != LDNS_RR_CLASS_IN) {
307 ldns_rr_set_class(rr, LDNS_RR_CLASS_IN);
310 if (ldns_rr_get_type(rr) == LDNS_RR_TYPE_SOA) {
311 if (ldns_dname_compare(ldns_rr_owner(rr), zone->
apex)) {
312 ods_log_error(
"[%s] unable to %s rr to zone: soa record has "
313 "invalid owner name", adapi_str, add?
"add":
"delete");
316 status = adapi_process_soa(zone, rr, add, backup);
319 "record", adapi_str, add?
"add":
"delete");
323 if (ldns_dname_compare(ldns_rr_owner(rr), zone->
apex) &&
324 !ldns_dname_is_subdomain(ldns_rr_owner(rr), zone->
apex)) {
326 "skipping", adapi_str, zone->
name);
328 }
else if (ldns_rr_get_type(rr) == LDNS_RR_TYPE_DNSKEY) {
329 adapi_process_dnskey(zone, rr);
332 "skipping", adapi_str, zone->
name,
333 (
unsigned) ldns_rr_get_type(rr));
358 return adapi_process_rr(zone, rr, 1, backup);
369 return adapi_process_rr(zone, rr, 0, backup);
381 if (!fd || !zone || !zone->
db) {
382 ods_log_error(
"[%s] unable to print zone: file descriptor, zone or "
383 "name database missing", adapi_str);
400 if (!fd || !zone || !zone->
db) {
401 ods_log_error(
"[%s] unable to print axfr: file descriptor, zone or "
402 "name database missing", adapi_str);
424 if (!fd || !zone || !zone->
db || !zone->
ixfr) {
425 ods_log_error(
"[%s] unable to print ixfr: file descriptor, zone or "
426 "name database missing", adapi_str);
void ixfr_print(FILE *fd, ixfr_type *ixfr)
void namedb_export(FILE *fd, namedb_type *db, ods_status *status)
uint32_t adapi_get_serial(zone_type *zone)
enum ods_enum_status ods_status
void ods_log_error(const char *format,...)
lock_basic_type stats_lock
const char * ods_status2str(ods_status status)
#define SE_SOA_RDATA_SERIAL
ods_status namedb_update_serial(namedb_type *db, const char *zone_name, const char *format, uint32_t inbound_serial)
void namedb_diff(namedb_type *db, unsigned is_ixfr, unsigned more_coming)
void namedb_nsecify(namedb_type *db, uint32_t *num_added)
#define lock_basic_lock(lock)
void adapi_set_serial(zone_type *zone, uint32_t serial)
ldns_rr_class adapi_get_class(zone_type *zone)
#define SE_SOA_RDATA_MINIMUM
ldns_rdf * adapi_get_origin(zone_type *zone)
ods_status zone_add_rr(zone_type *zone, ldns_rr *rr, int do_stats)
ods_status adapi_printzone(FILE *fd, zone_type *zone)
ods_status adapi_del_rr(zone_type *zone, ldns_rr *rr, int backup)
time_t duration2time(duration_type *duration)
ods_status zone_del_rr(zone_type *zone, ldns_rr *rr, int do_stats)
void ods_log_verbose(const char *format,...)
lock_basic_type ixfr_lock
rrset_type * zone_lookup_rrset(zone_type *zone, ldns_rdf *owner, ldns_rr_type type)
void adapi_trans_full(zone_type *zone, unsigned more_coming)
ods_status adapi_printixfr(FILE *fd, zone_type *zone)
duration_type * dnskey_ttl
ods_status adapi_add_rr(zone_type *zone, ldns_rr *rr, int backup)
uint32_t adapi_get_ttl(zone_type *zone)
#define ods_log_assert(x)
ods_status adapi_printaxfr(FILE *fd, zone_type *zone)
int util_is_dnssec_rr(ldns_rr *rr)
#define lock_basic_unlock(lock)
void ods_log_warning(const char *format,...)
void rrset_print(FILE *fd, rrset_type *rrset, int skip_rrsigs, ods_status *status)
void adapi_trans_diff(zone_type *zone, unsigned more_coming)