40 #include <ldns/ldns.h>
42 #include <sys/types.h>
47 static const char* util_str =
"util";
57 ldns_rr_type type = 0;
61 type = ldns_rr_get_type(rr);
62 return (type == LDNS_RR_TYPE_RRSIG ||
63 type == LDNS_RR_TYPE_NSEC ||
64 type == LDNS_RR_TYPE_NSEC3 ||
65 type == LDNS_RR_TYPE_NSEC3PARAMS);
89 for (i = 0; i <= rdata_count; i++) {
91 ldns_rdf_compare(ldns_rr_rdf(rr1, i), ldns_rr_rdf(rr2, i)) != 0) {
112 rr1_len = ldns_rr_uncompressed_size(rr1);
113 rr2_len = ldns_rr_uncompressed_size(rr2);
114 if (ldns_dname_compare(ldns_rr_owner(rr1), ldns_rr_owner(rr2)) != 0) {
117 if (ldns_rr_get_class(rr1) != ldns_rr_get_class(rr2)) {
120 if (ldns_rr_get_type(rr1) != LDNS_RR_TYPE_SOA) {
123 if (ldns_rr_get_type(rr1) != ldns_rr_get_type(rr2)) {
126 if (offset > rr1_len || offset > rr2_len) {
127 if (rr1_len == rr2_len) {
144 ldns_status status = LDNS_STATUS_OK;
147 ldns_buffer* rr1_buf;
148 ldns_buffer* rr2_buf;
151 return LDNS_STATUS_ERR;
153 rr1_len = ldns_rr_uncompressed_size(rr1);
154 rr2_len = ldns_rr_uncompressed_size(rr2);
155 rr1_buf = ldns_buffer_new(rr1_len);
156 rr2_buf = ldns_buffer_new(rr2_len);
158 status = ldns_rr2buffer_wire_canonical(rr1_buf, rr1, LDNS_SECTION_ANY);
159 if (status != LDNS_STATUS_OK) {
160 ldns_buffer_free(rr1_buf);
161 ldns_buffer_free(rr2_buf);
165 status = ldns_rr2buffer_wire_canonical(rr2_buf, rr2, LDNS_SECTION_ANY);
166 if (status != LDNS_STATUS_OK) {
167 ldns_buffer_free(rr1_buf);
168 ldns_buffer_free(rr2_buf);
172 *cmp = ldns_rr_compare_wire(rr1_buf, rr2_buf);
173 ldns_buffer_free(rr1_buf);
174 ldns_buffer_free(rr2_buf);
175 return LDNS_STATUS_OK;
187 ldns_dnssec_rrs *new_rrs = NULL;
188 ldns_status status = LDNS_STATUS_OK;
190 uint32_t default_ttl = 0;
192 if (!rrs || !rrs->rr || !rr) {
193 return LDNS_STATUS_ERR;
196 rr_ttl = ldns_rr_ttl(rr);
198 if (status != LDNS_STATUS_OK) {
207 new_rrs = ldns_dnssec_rrs_new();
210 default_ttl = ldns_rr_ttl(rrs->rr);
211 if (rr_ttl < default_ttl) {
212 ldns_rr_set_ttl(rrs->rr, rr_ttl);
214 ldns_rr_set_ttl(new_rrs->rr, default_ttl);
216 return LDNS_STATUS_OK;
218 }
else if (cmp > 0) {
221 new_rrs = ldns_dnssec_rrs_new();
222 new_rrs->rr = rrs->rr;
223 new_rrs->next = rrs->next;
228 default_ttl = ldns_rr_ttl(new_rrs->rr);
229 if (rr_ttl < default_ttl) {
230 ldns_rr_set_ttl(new_rrs->rr, rr_ttl);
232 ldns_rr_set_ttl(rrs->rr, default_ttl);
235 return LDNS_STATUS_OK;
239 return LDNS_STATUS_NO_DATA;
241 return LDNS_STATUS_OK;
250 util_read_pidfile(
const char* file)
258 if ((fd = open(file, O_RDONLY)) == -1) {
261 if (((l = read(fd, pidbuf,
sizeof(pidbuf)))) == -1) {
271 pid = (pid_t) strtol(pidbuf, &t, 10);
273 if (*t && *t !=
'\n') {
288 struct stat stat_ret;
293 if (stat(pidfile, &stat_ret) != 0) {
294 if (errno != ENOENT) {
295 ods_log_error(
"[%s] cannot stat pidfile %s: %s", util_str, pidfile,
299 if (S_ISREG(stat_ret.st_mode)) {
301 if ((oldpid = util_read_pidfile(pidfile)) == -1) {
303 if (errno != ENOENT) {
305 pidfile, strerror(errno));
308 if (kill(oldpid, 0) == 0 || errno == EPERM) {
310 "a process with pid %u is already running. "
311 "If no ods-signerd process is running, a previous "
312 "instance didn't shutdown cleanly, please remove this "
313 "file and try again.", util_str, pidfile, oldpid);
318 "but no process with pid %u is running. "
319 "A previous instance didn't shutdown cleanly, this "
320 "pidfile is stale.", util_str, pidfile, oldpid);
339 size_t result = 0, size = 0;
344 ods_log_debug(
"[%s] writing pid %lu to pidfile %s", util_str,
345 (
unsigned long) pid, pidfile);
346 snprintf(pidbuf,
sizeof(pidbuf),
"%lu\n", (
unsigned long) pid);
351 size = strlen(pidbuf);
355 result = fwrite((
const void*) pidbuf, 1, size, fd);
358 ods_log_error(
"[%s] write to pidfile %s failed: %s", util_str,
359 pidfile, strerror(errno));
360 }
else if (result < size) {
361 ods_log_error(
"[%s] short write to pidfile %s: disk full?", util_str,
383 ldns_buffer* tmp_buffer = NULL;
390 tmp_buffer = ldns_buffer_new(LDNS_MAX_PACKETLEN);
394 if (ldns_rr2buffer_str_fmt(tmp_buffer, NULL, rr)
397 result = ldns_buffer2str(tmp_buffer);
399 fprintf(fd,
"%s", result);
403 fprintf(fd,
"; Unable to convert rr to string\n");
409 ldns_buffer_free(tmp_buffer);
420 return (((((srcsize + 3) / 4) * 3)) + 1);