46 #include <ldns/ldns.h>
48 static const char* zone_str =
"zone";
61 if (!name || !klass) {
66 ods_log_error(
"[%s] unable to create zone %s: allocator_create() "
67 "failed", zone_str, name);
72 ods_log_error(
"[%s] unable to create zone %s: allocator_alloc()",
73 "failed", zone_str, name);
79 if (strlen(name) > 1 && name[strlen(name)-1] ==
'.') {
80 name[strlen(name)-1] =
'\0';
85 ods_log_error(
"[%s] unable to create zone %s: allocator_strdup() "
86 "failed", zone_str, name);
92 zone->
apex = ldns_dname_new_frm_str(name);
107 ods_log_error(
"[%s] unable to create zone %s: namedb_create() "
108 "failed", zone_str, name);
114 ods_log_error(
"[%s] unable to create zone %s: ixfr_create() "
115 "failed", zone_str, name);
121 ods_log_error(
"[%s] unable to create zone %s: signconf_create() "
122 "failed", zone_str, name);
142 char* datestamp = NULL;
149 "insecure?", zone_str, zone->
name);
157 ods_log_alert(
"[%s] unable to load signconf for zone %s: signconf "
158 "status ok but no signconf stored", zone_str, zone->
name);
163 ods_log_debug(
"[%s] zone %s signconf file %s is modified since %s",
165 datestamp?datestamp:
"Unknown");
166 free((
void*)datestamp);
167 *new_signconf = signconf;
170 "%Y-%m-%d %T", &datestamp);
173 datestamp?datestamp:
"Unknown");
174 free((
void*)datestamp);
176 ods_log_error(
"[%s] unable to load signconf for zone %s: signconf %s "
202 if (task->
what != what) {
208 if (task->
what > what) {
216 "task is not queued (task will be rescheduled when it is put "
217 "back on the queue)", zone_str, zone->
name);
235 hsm_ctx_t* ctx = NULL;
248 ctx = hsm_create_context();
251 "error creating libhsm context", zone_str, zone->
name);
270 "error creating dnskey", zone_str, zone->
name);
292 "error adding dnskey", zone_str, zone->
name);
297 hsm_destroy_context(ctx);
321 if (dnskey && !dnskey->
exists &&
354 rr = ldns_rr_new_frm_type(LDNS_RR_TYPE_NSEC3PARAMS);
356 ods_log_error(
"[%s] unable to publish nsec3params for zone %s: "
357 "error creating rr (%s)", zone_str, zone->
name,
361 ldns_rr_set_class(rr, zone->
klass);
362 ldns_rr_set_ttl(rr, 0);
363 ldns_rr_set_owner(rr, ldns_rdf_clone(zone->
apex));
364 ldns_nsec3_add_param_rdfs(rr,
373 ldns_set_bit(ldns_rdf_data(ldns_rr_rdf(rr, 1)), 7, 0);
390 ods_log_error(
"[%s] unable to publish nsec3params for zone %s: "
391 "error adding nsec3params (%s)", zone_str,
414 if (n3prr && !n3prr->
exists &&
434 ldns_rdf* soa_rdata = NULL;
445 zone_str, zone->
name);
453 rr = ldns_rr_clone(rrset->
rrs[0].
rr);
455 ods_log_error(
"[%s] unable to update zone %s soa serial: failed to "
456 "clone soa rr", zone_str, zone->
name);
462 ods_log_error(
"[%s] unable to update zone %s soa serial: %s",
469 soa_rdata = ldns_rr_set_rdf(rr,
470 ldns_native2rdf_int32(LDNS_RDF_TYPE_INT32,
473 ldns_rdf_deep_free(soa_rdata);
476 ods_log_error(
"[%s] unable to update zone %s soa serial: failed to "
477 "replace soa serial rdata", zone_str, zone->
name);
497 if (!zone || !owner || !type) {
531 "failed to add domain", zone_str, zone->
name);
534 if (ldns_dname_compare(domain->
dname, zone->
apex) == 0) {
540 "failed to entize domain", zone_str, zone->
name);
550 "failed to add RRset", zone_str, zone->
name);
559 if (ldns_rr_ttl(rr) != ldns_rr_ttl(record->
rr)) {
560 ldns_rr_set_ttl(record->
rr, ldns_rr_ttl(rr));
571 if (do_stats && zone->
stats) {
596 "domain not found", zone_str, zone->
name);
602 "RRset not found", zone_str, zone->
name);
608 "RR not found", zone_str, zone->
name);
615 if (do_stats && zone->
stats) {
658 ods_log_error(
"[%s] failed to merge signconf filename %s to "
704 ldns_rdf_deep_free(zone->
apex);
733 char* filename = NULL;
735 const char* token = NULL;
741 uint32_t inbound = 0,
internal = 0, outbound = 0;
745 const char* salt = NULL;
760 ods_log_error(
"[%s] corrupted backup file zone %s: read magic "
761 "error", zone_str, zone->
name);
766 ods_log_error(
"[%s] corrupted backup file zone %s: read time "
767 "error", zone_str, zone->
name);
774 ods_log_error(
"[%s] corrupted backup file zone %s: read name "
775 "error", zone_str, zone->
name);
780 ods_log_error(
"[%s] corrupted backup file zone %s: read class "
781 "error", zone_str, zone->
name);
790 ods_log_error(
"[%s] corrupted backup file zone %s: read serial "
791 "error", zone_str, zone->
name);
794 zone->
klass = (ldns_rr_class) klass;
826 ods_log_error(
"[%s] corrupted backup file zone %s: read signconf "
827 "error", zone_str, zone->
name);
842 "nsec3parameters error", zone_str, zone->
name);
856 ods_log_error(
"[%s] corrupted backup file zone %s: unable to "
857 "create nsec3param", zone_str, zone->
name);
869 "key error", zone_str, zone->
name);
887 ods_log_error(
"[%s] corrupted backup file zone %s: unable to "
888 "publish dnskeys (%s)", zone_str, zone->
name,
895 ods_log_error(
"[%s] corrupted backup file zone %s: unable to "
896 "publish nsec3param (%s)", zone_str, zone->
name,
903 ods_log_error(
"[%s] corrupted backup file zone %s: unable to "
904 "read resource records (%s)", zone_str, zone->
name,
912 "create task", zone_str, zone->
name);
915 zone->
task = (
void*) task;
916 free((
void*)filename);
929 "skipping (%s)", zone_str, zone->
name,
940 free((
void*)filename);
952 free((
void*)filename);
981 char* filename = NULL;
982 char* tmpfile = NULL;
996 if (!tmpfile || !filename) {
1001 fprintf(fd,
"%s\n", ODS_SE_FILE_MAGIC_V3);
1003 fprintf(fd,
";;Time: %u\n", (
unsigned) task->
when);
1005 fprintf(fd,
";;Zone: name %s class %i inbound %u internal %u "
1006 "outbound %u\n", zone->
name, (
int) zone->
klass,
1020 ODS_SE_FILE_MAGIC_V3);
1024 fprintf(fd,
";;\n");
1028 fprintf(fd,
"%s\n", ODS_SE_FILE_MAGIC_V3);
1030 ret = rename(tmpfile, filename);
1032 ods_log_error(
"[%s] unable to rename zone %s backup %s to %s: %s",
1033 zone_str, zone->
name, tmpfile, filename, strerror(errno));
1040 free((
void*) tmpfile);
1041 free((
void*) filename);