new_rrs->next = rrs->next;
rrs->rr = rr;
rrs->next = new_rrs;
- }
- /* Silently ignore equal rr's */
+ } else
+ return LDNS_STATUS_EQUAL_RR;
+
return LDNS_STATUS_OK;
}
*/
ldns_rr_set_ttl(cur_rr, ldns_rr_ttl(prev_rr));
- prev_rr = cur_rr;
#endif
status = ldns_dnssec_zone_add_rr(newzone, cur_rr);
- if (status ==
- LDNS_STATUS_DNSSEC_NSEC3_ORIGINAL_NOT_FOUND) {
-
+ switch(status) {
+ case LDNS_STATUS_DNSSEC_NSEC3_ORIGINAL_NOT_FOUND:
if (rr_is_rrsig_covering(cur_rr,
LDNS_RR_TYPE_NSEC3)){
ldns_rr_list_push_rr(todo_nsec3_rrsigs,
cur_rr);
} else {
ldns_rr_list_push_rr(todo_nsec3s,
- cur_rr);
+ cur_rr);
}
status = LDNS_STATUS_OK;
-
- } else if (status != LDNS_STATUS_OK)
+ break;
+ case LDNS_STATUS_EQUAL_RR:
+ ldns_rr_free(cur_rr);
+#ifndef FASTER_DNSSEC_ZONE_NEW_FRM_FP
+ cur_rr = prev_rr;
+#else
+ cur_rr = NULL;
+#endif
+ status = LDNS_STATUS_OK;
+ break;
+ case LDNS_STATUS_OK:
+ break;
+ default:
goto error;
-
+ }
+#ifndef FASTER_DNSSEC_ZONE_NEW_FRM_FP
+ prev_rr = cur_rr;
+#endif
break;
case LDNS_STATUS_SYNTAX_TTL: /* the ttl was set*/
{ LDNS_STATUS_EDE_OPTION_MALFORMED,
"The extended error code option is malformed, expected "
"at least 2 bytes of option data" },
+ { LDNS_STATUS_EQUAL_RR,
+ "An identical RR already existed in the zone" },
{ 0, NULL }
};
break;
case 'h':
print_usage(stdout, progname);
+ ldns_rr_list_deep_free(keys);
exit(EXIT_SUCCESS);
break;
case 'e':
"P[n]Y[n]M[n]DT[n]H[n]M[n]S\n"
);
}
+ ldns_rr_list_deep_free(keys);
exit(EXIT_FAILURE);
}
if (c == 'e')
"%s: %s\n",optarg,
ldns_get_errorstr_by_id(s));
}
+ ldns_rr_list_deep_free(keys);
exit(EXIT_FAILURE);
}
if (ldns_rr_list_rr_count(keys) == nkeys) {
"No keys found in file %s\n",
optarg);
}
+ ldns_rr_list_deep_free(keys);
exit(EXIT_FAILURE);
}
nkeys = ldns_rr_list_rr_count(keys);
"percentage needs to fall "
"between 0..100\n");
}
+ ldns_rr_list_deep_free(keys);
exit(EXIT_FAILURE);
}
srandom(time(NULL) ^ getpid());
case 'v':
printf("verify-zone version %s (ldns version %s)\n",
LDNS_VERSION, ldns_version());
+ ldns_rr_list_deep_free(keys);
exit(EXIT_SUCCESS);
break;
case 'V':
fprintf(myerr, "Unable to chase "
"signature without keys.\n");
}
+ ldns_rr_list_deep_free(keys);
exit(EXIT_FAILURE);
}
}
fprintf(myerr, "Unable to open %s: %s\n",
filename, strerror(errno));
}
+ ldns_rr_list_deep_free(keys);
exit(EXIT_FAILURE);
}
} else {
print_usage(stderr, progname);
+ ldns_rr_list_deep_free(keys);
exit(EXIT_FAILURE);
}
fprintf(myerr, "%s at line %d\n",
ldns_get_errorstr_by_id(s), line_nr);
}
+ ldns_rr_list_deep_free(keys);
exit(EXIT_FAILURE);
}
if (!dnssec_zone->soa) {
fprintf(myerr,
"; Error: no SOA in the zone\n");
}
+ ldns_rr_list_deep_free(keys);
exit(EXIT_FAILURE);
}
ldns_dnssec_zone_deep_free(dnssec_zone);
fclose(fp);
+ ldns_rr_list_deep_free(keys);
exit(result);
}
LDNS_STATUS_SVCPARAM_KEY_MORE_THAN_ONCE,
LDNS_STATUS_INVALID_SVCPARAM_VALUE,
LDNS_STATUS_NOT_EDE,
- LDNS_STATUS_EDE_OPTION_MALFORMED
+ LDNS_STATUS_EDE_OPTION_MALFORMED,
+ LDNS_STATUS_EQUAL_RR
};
typedef enum ldns_enum_status ldns_status;