41 #include <ldns/ldns.h>
45 static const char* nsec3_str =
"nsec3";
65 *salt_len = (uint8_t) strlen(salt_str);
66 if (*salt_len == 1 && salt_str[0] ==
'-') {
70 }
else if (*salt_len % 2 != 0) {
77 salt_tmp = (uint8_t*) calloc(*salt_len / 2,
sizeof(uint8_t));
78 for (c = 0; c < *salt_len; c += 2) {
79 if (isxdigit((
int) salt_str[c]) && isxdigit((
int) salt_str[c+1])) {
80 salt_tmp[c/2] = (uint8_t) ldns_hexdigit_to_int(salt_str[c]) * 16 +
81 ldns_hexdigit_to_int(salt_str[c+1]);
84 free((
void*)salt_tmp);
90 *salt_len = *salt_len / 2;
109 ods_log_error(
"[%s] unable to create: create allocator failed",
118 ods_log_error(
"[%s] unable to create: allocator failed", nsec3_str);
126 nsec3params->
flags = flags;
130 free((
void*)nsec3params);
135 nsec3params->
rr = NULL;
146 uint16_t iter,
const char* salt, ldns_rr* rr)
151 fprintf(fd,
";;Nsec3parameters: salt %s algorithm %u optout %u "
152 "iterations %u\n", salt?salt:
"-", (
unsigned) algo,
153 (
unsigned) flags, (
unsigned) iter);
155 ldns_rr_print(fd, rr);
157 fprintf(fd,
";;Nsec3done\n");
170 const char* salt = NULL;
171 uint8_t algorithm = 0;
173 uint16_t iterations = 0;
174 ldns_rr* nsec3params_rr = NULL;
185 ldns_rr_new_frm_fp(&nsec3params_rr, fd, NULL, NULL, NULL)
189 ods_log_error(
"[%s] nsec3params part in backup file is corrupted", nsec3_str);
190 if (nsec3params_rr) {
191 ldns_rr_free(nsec3params_rr);
192 nsec3params_rr = NULL;
203 nsec3params->
flags = flags;
207 free((
void*)nsec3params);
209 ldns_rr_free(nsec3params_rr);
215 *rr = nsec3params_rr;
216 nsec3params->
rr = ldns_rr_clone(nsec3params_rr);
229 uint8_t salt_length = 0;
230 uint8_t salt_pos = 0;
233 ldns_buffer* buffer = NULL;
235 salt_length = nsec3params->
salt_len;
239 if (salt_length == 0) {
240 buffer = ldns_buffer_new(2);
241 written = ldns_buffer_printf(buffer,
"-");
243 buffer = ldns_buffer_new(salt_pos+1);
244 for (salt_pos = 0; salt_pos < salt_length; salt_pos++) {
245 written = ldns_buffer_printf(buffer,
"%02x", data[salt_pos]);
249 if (ldns_buffer_status(buffer) == LDNS_STATUS_OK) {
250 str = ldns_buffer2str(buffer);
252 ods_log_error(
"[%s] unable to convert nsec3 salt to string: %s",
253 nsec3_str, ldns_get_errorstr_by_id(ldns_buffer_status(buffer)));
255 ldns_buffer_free(buffer);
256 return (
const char*) str;
272 ldns_rr_free(nsec3params->
rr);