40 #include <ldns/ldns.h>
42 #include <sys/types.h>
47 static const char* util_str =
"util";
57 ldns_rr_type type = 0;
63 type = ldns_rr_get_type(rr);
64 return (type == LDNS_RR_TYPE_RRSIG ||
65 type == LDNS_RR_TYPE_NSEC ||
66 type == LDNS_RR_TYPE_NSEC3 ||
67 type == LDNS_RR_TYPE_NSEC3PARAMS);
81 for (i = 0; i <= rdata_count; i++) {
83 ldns_rdf_compare(ldns_rr_rdf(rr1, i), ldns_rr_rdf(rr2, i)) != 0) {
106 rr1_len = ldns_rr_uncompressed_size(rr1);
107 rr2_len = ldns_rr_uncompressed_size(rr2);
108 if (ldns_dname_compare(ldns_rr_owner(rr1), ldns_rr_owner(rr2)) != 0) {
111 if (ldns_rr_get_class(rr1) != ldns_rr_get_class(rr2)) {
114 if (ldns_rr_get_type(rr1) != LDNS_RR_TYPE_SOA) {
117 if (ldns_rr_get_type(rr1) != ldns_rr_get_type(rr2)) {
120 if (offset > rr1_len || offset > rr2_len) {
121 if (rr1_len == rr2_len) {
139 ldns_status status = LDNS_STATUS_OK;
142 ldns_buffer* rr1_buf;
143 ldns_buffer* rr2_buf;
146 return LDNS_STATUS_ERR;
149 rr1_len = ldns_rr_uncompressed_size(rr1);
150 rr2_len = ldns_rr_uncompressed_size(rr2);
151 rr1_buf = ldns_buffer_new(rr1_len);
152 rr2_buf = ldns_buffer_new(rr2_len);
155 status = ldns_rr2buffer_wire_canonical(rr1_buf, rr1, LDNS_SECTION_ANY);
156 if (status != LDNS_STATUS_OK) {
157 ldns_buffer_free(rr1_buf);
158 ldns_buffer_free(rr2_buf);
162 status = ldns_rr2buffer_wire_canonical(rr2_buf, rr2, LDNS_SECTION_ANY);
163 if (status != LDNS_STATUS_OK) {
164 ldns_buffer_free(rr1_buf);
165 ldns_buffer_free(rr2_buf);
169 *cmp = ldns_rr_compare_wire(rr1_buf, rr2_buf);
170 ldns_buffer_free(rr1_buf);
171 ldns_buffer_free(rr2_buf);
172 return LDNS_STATUS_OK;
184 ldns_dnssec_rrs *new_rrs = NULL;
185 ldns_status status = LDNS_STATUS_OK;
187 uint32_t default_ttl = 0;
189 if (!rrs || !rrs->rr || !rr) {
190 return LDNS_STATUS_ERR;
193 rr_ttl = ldns_rr_ttl(rr);
195 if (status != LDNS_STATUS_OK) {
204 new_rrs = ldns_dnssec_rrs_new();
207 default_ttl = ldns_rr_ttl(rrs->rr);
208 if (rr_ttl < default_ttl) {
209 ldns_rr_set_ttl(rrs->rr, rr_ttl);
211 ldns_rr_set_ttl(new_rrs->rr, default_ttl);
213 return LDNS_STATUS_OK;
215 }
else if (cmp > 0) {
218 new_rrs = ldns_dnssec_rrs_new();
219 new_rrs->rr = rrs->rr;
220 new_rrs->next = rrs->next;
225 default_ttl = ldns_rr_ttl(new_rrs->rr);
226 if (rr_ttl < default_ttl) {
227 ldns_rr_set_ttl(new_rrs->rr, rr_ttl);
229 ldns_rr_set_ttl(rrs->rr, default_ttl);
232 return LDNS_STATUS_OK;
236 return LDNS_STATUS_NO_DATA;
238 return LDNS_STATUS_OK;
247 util_read_pidfile(
const char* file)
255 if ((fd = open(file, O_RDONLY)) == -1) {
258 if (((l = read(fd, pidbuf,
sizeof(pidbuf)))) == -1) {
268 pid = (pid_t) strtol(pidbuf, &t, 10);
270 if (*t && *t !=
'\n') {
285 struct stat stat_ret;
294 if (stat(pidfile, &stat_ret) != 0) {
295 if (errno != ENOENT) {
296 ods_log_error(
"[%s] cannot stat pidfile %s: %s", util_str, pidfile,
300 if (S_ISREG(stat_ret.st_mode)) {
302 if ((oldpid = util_read_pidfile(pidfile)) == -1) {
304 if (errno != ENOENT) {
306 pidfile, strerror(errno));
309 if (kill(oldpid, 0) == 0 || errno == EPERM) {
311 "a process with pid %u is already running. "
312 "If no ods-signerd process is running, a previous "
313 "instance didn't shutdown cleanly, please remove this "
314 "file and try again.", util_str, pidfile, oldpid);
319 "but no process with pid %u is running. "
320 "A previous instance didn't shutdown cleanly, this "
321 "pidfile is stale.", util_str, pidfile, oldpid);
339 size_t result = 0, size = 0;
341 if (!pidfile || !pid) {
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,