40 #include <ldns/ldns.h>
42 static const char* util_str =
"util";
52 ldns_rr_type type = 0;
58 type = ldns_rr_get_type(rr);
59 return (type == LDNS_RR_TYPE_RRSIG ||
60 type == LDNS_RR_TYPE_NSEC ||
61 type == LDNS_RR_TYPE_NSEC3 ||
62 type == LDNS_RR_TYPE_NSEC3PARAMS);
76 for (i = 0; i <= rdata_count; i++) {
78 ldns_rdf_compare(ldns_rr_rdf(rr1, i), ldns_rr_rdf(rr2, i)) != 0) {
101 rr1_len = ldns_rr_uncompressed_size(rr1);
102 rr2_len = ldns_rr_uncompressed_size(rr2);
103 if (ldns_dname_compare(ldns_rr_owner(rr1), ldns_rr_owner(rr2)) != 0) {
106 if (ldns_rr_get_class(rr1) != ldns_rr_get_class(rr2)) {
109 if (ldns_rr_get_type(rr1) != LDNS_RR_TYPE_SOA) {
112 if (ldns_rr_get_type(rr1) != ldns_rr_get_type(rr2)) {
115 if (offset > rr1_len || offset > rr2_len) {
116 if (rr1_len == rr2_len) {
134 ldns_status status = LDNS_STATUS_OK;
137 ldns_buffer* rr1_buf;
138 ldns_buffer* rr2_buf;
141 return LDNS_STATUS_ERR;
144 rr1_len = ldns_rr_uncompressed_size(rr1);
145 rr2_len = ldns_rr_uncompressed_size(rr2);
146 rr1_buf = ldns_buffer_new(rr1_len);
147 rr2_buf = ldns_buffer_new(rr2_len);
150 status = ldns_rr2buffer_wire_canonical(rr1_buf, rr1, LDNS_SECTION_ANY);
151 if (status != LDNS_STATUS_OK) {
152 ldns_buffer_free(rr1_buf);
153 ldns_buffer_free(rr2_buf);
157 status = ldns_rr2buffer_wire_canonical(rr2_buf, rr2, LDNS_SECTION_ANY);
158 if (status != LDNS_STATUS_OK) {
159 ldns_buffer_free(rr1_buf);
160 ldns_buffer_free(rr2_buf);
164 *cmp = ldns_rr_compare_wire(rr1_buf, rr2_buf);
165 ldns_buffer_free(rr1_buf);
166 ldns_buffer_free(rr2_buf);
167 return LDNS_STATUS_OK;
179 ldns_dnssec_rrs *new_rrs = NULL;
180 ldns_status status = LDNS_STATUS_OK;
182 uint32_t default_ttl = 0;
184 if (!rrs || !rrs->rr || !rr) {
185 return LDNS_STATUS_ERR;
188 rr_ttl = ldns_rr_ttl(rr);
190 if (status != LDNS_STATUS_OK) {
199 new_rrs = ldns_dnssec_rrs_new();
202 default_ttl = ldns_rr_ttl(rrs->rr);
203 if (rr_ttl < default_ttl) {
204 ldns_rr_set_ttl(rrs->rr, rr_ttl);
206 ldns_rr_set_ttl(new_rrs->rr, default_ttl);
208 return LDNS_STATUS_OK;
210 }
else if (cmp > 0) {
213 new_rrs = ldns_dnssec_rrs_new();
214 new_rrs->rr = rrs->rr;
215 new_rrs->next = rrs->next;
220 default_ttl = ldns_rr_ttl(new_rrs->rr);
221 if (rr_ttl < default_ttl) {
222 ldns_rr_set_ttl(new_rrs->rr, rr_ttl);
224 ldns_rr_set_ttl(rrs->rr, default_ttl);
227 return LDNS_STATUS_OK;
231 return LDNS_STATUS_NO_DATA;
233 return LDNS_STATUS_OK;
246 size_t result = 0, size = 0;
250 ods_log_debug(
"[%s] writing pid %lu to pidfile %s", util_str,
251 (
unsigned long) pid, pidfile);
252 snprintf(pidbuf,
sizeof(pidbuf),
"%lu\n", (
unsigned long) pid);
257 size = strlen(pidbuf);
261 result = fwrite((
const void*) pidbuf, 1, size, fd);
264 ods_log_error(
"[%s] write to pidfile %s failed: %s", util_str,
265 pidfile, strerror(errno));
266 }
else if (result < size) {
267 ods_log_error(
"[%s] short write to pidfile %s: disk full?", util_str,