aboutsummaryrefslogtreecommitdiff
path: root/validator
diff options
context:
space:
mode:
Diffstat (limited to 'validator')
-rw-r--r--validator/autotrust.c32
-rw-r--r--validator/val_anchor.c4
-rw-r--r--validator/val_secalgo.c6
-rw-r--r--validator/val_sigcrypt.c22
-rw-r--r--validator/validator.c2
5 files changed, 42 insertions, 24 deletions
diff --git a/validator/autotrust.c b/validator/autotrust.c
index a72967302df1..fd9fb3cf1991 100644
--- a/validator/autotrust.c
+++ b/validator/autotrust.c
@@ -86,7 +86,6 @@ void autr_global_delete(struct autr_global_data* global)
if(!global)
return;
/* elements deleted by parent */
- memset(global, 0, sizeof(*global));
free(global);
}
@@ -370,10 +369,10 @@ autr_tp_create(struct val_anchors* anchors, uint8_t* own, size_t own_len,
free(tp);
return NULL;
}
- lock_basic_unlock(&anchors->lock);
lock_basic_init(&tp->lock);
lock_protect(&tp->lock, tp, sizeof(*tp));
lock_protect(&tp->lock, tp->autr, sizeof(*tp->autr));
+ lock_basic_unlock(&anchors->lock);
return tp;
}
@@ -1175,15 +1174,32 @@ void autr_write_file(struct module_env* env, struct trust_anchor* tp)
{
FILE* out;
char* fname = tp->autr->file;
+#ifndef S_SPLINT_S
+ long long llvalue;
+#endif
char tempf[2048];
log_assert(tp->autr);
if(!env) {
log_err("autr_write_file: Module environment is NULL.");
return;
}
- /* unique name with pid number and thread number */
- snprintf(tempf, sizeof(tempf), "%s.%d-%d", fname, (int)getpid(),
- env->worker?*(int*)env->worker:0);
+ /* unique name with pid number, thread number, and struct pointer
+ * (the pointer uniquifies for multiple libunbound contexts) */
+#ifndef S_SPLINT_S
+#if defined(SIZE_MAX) && defined(UINT32_MAX) && (UINT32_MAX == SIZE_MAX || INT32_MAX == SIZE_MAX)
+ /* avoid warning about upcast on 32bit systems */
+ llvalue = (unsigned long)tp;
+#else
+ llvalue = (unsigned long long)tp;
+#endif
+#ifndef USE_WINSOCK
+ snprintf(tempf, sizeof(tempf), "%s.%d-%d-%llx", fname, (int)getpid(),
+ env->worker?*(int*)env->worker:0, llvalue);
+#else
+ snprintf(tempf, sizeof(tempf), "%s.%d-%d-%I64x", fname, (int)getpid(),
+ env->worker?*(int*)env->worker:0, llvalue);
+#endif
+#endif /* S_SPLINT_S */
verbose(VERB_ALGO, "autotrust: write to disk: %s", tempf);
out = fopen(tempf, "w");
if(!out) {
@@ -2245,7 +2261,7 @@ autr_debug_print_ta(struct autr_ta* ta)
log_info("out of memory in debug_print_ta");
return;
}
- if(str && str[0]) str[strlen(str)-1]=0; /* remove newline */
+ if(str[0]) str[strlen(str)-1]=0; /* remove newline */
ctime_r(&ta->last_change, buf);
if(buf[0]) buf[strlen(buf)-1]=0; /* remove newline */
log_info("[%s] %s ;;state:%d ;;pending_count:%d%s%s last:%s",
@@ -2267,10 +2283,10 @@ autr_debug_print_tp(struct trust_anchor* tp)
log_info("assembled %d DS and %d DNSKEYs",
(int)tp->numDS, (int)tp->numDNSKEY);
if(tp->ds_rrset) {
- log_packed_rrset(0, "DS:", tp->ds_rrset);
+ log_packed_rrset(NO_VERBOSE, "DS:", tp->ds_rrset);
}
if(tp->dnskey_rrset) {
- log_packed_rrset(0, "DNSKEY:", tp->dnskey_rrset);
+ log_packed_rrset(NO_VERBOSE, "DNSKEY:", tp->dnskey_rrset);
}
log_info("file %s", tp->autr->file);
ctime_r(&tp->autr->last_queried, buf);
diff --git a/validator/val_anchor.c b/validator/val_anchor.c
index 8ae9e7f3bce0..7224f00a21b6 100644
--- a/validator/val_anchor.c
+++ b/validator/val_anchor.c
@@ -1007,12 +1007,12 @@ anchors_assemble_rrsets(struct val_anchors* anchors)
nods = anchors_ds_unsupported(ta);
nokey = anchors_dnskey_unsupported(ta);
if(nods) {
- log_nametypeclass(0, "warning: unsupported "
+ log_nametypeclass(NO_VERBOSE, "warning: unsupported "
"algorithm for trust anchor",
ta->name, LDNS_RR_TYPE_DS, ta->dclass);
}
if(nokey) {
- log_nametypeclass(0, "warning: unsupported "
+ log_nametypeclass(NO_VERBOSE, "warning: unsupported "
"algorithm for trust anchor",
ta->name, LDNS_RR_TYPE_DNSKEY, ta->dclass);
}
diff --git a/validator/val_secalgo.c b/validator/val_secalgo.c
index 0613316c9088..5e02f6bdbad2 100644
--- a/validator/val_secalgo.c
+++ b/validator/val_secalgo.c
@@ -326,8 +326,10 @@ setup_dsa_sig(unsigned char** sig, unsigned int* len)
#ifdef HAVE_DSA_SIG_SET0
if(!DSA_SIG_set0(dsasig, R, S)) return 0;
#else
+# ifndef S_SPLINT_S
dsasig->r = R;
dsasig->s = S;
+# endif /* S_SPLINT_S */
#endif
*sig = NULL;
newlen = i2d_DSA_SIG(dsasig, sig);
@@ -1725,7 +1727,7 @@ _verify_nettle_ecdsa(sldns_buffer* buf, unsigned int digest_size, unsigned char*
{
uint8_t digest[SHA256_DIGEST_SIZE];
mpz_t x, y;
- nettle_ecc_point_init(&pubkey, &nettle_secp_256r1);
+ nettle_ecc_point_init(&pubkey, nettle_get_secp_256r1());
nettle_mpz_init_set_str_256_u(x, SHA256_DIGEST_SIZE, key);
nettle_mpz_init_set_str_256_u(y, SHA256_DIGEST_SIZE, key+SHA256_DIGEST_SIZE);
nettle_mpz_set_str_256_u(signature.r, SHA256_DIGEST_SIZE, sigblock);
@@ -1742,7 +1744,7 @@ _verify_nettle_ecdsa(sldns_buffer* buf, unsigned int digest_size, unsigned char*
{
uint8_t digest[SHA384_DIGEST_SIZE];
mpz_t x, y;
- nettle_ecc_point_init(&pubkey, &nettle_secp_384r1);
+ nettle_ecc_point_init(&pubkey, nettle_get_secp_384r1());
nettle_mpz_init_set_str_256_u(x, SHA384_DIGEST_SIZE, key);
nettle_mpz_init_set_str_256_u(y, SHA384_DIGEST_SIZE, key+SHA384_DIGEST_SIZE);
nettle_mpz_set_str_256_u(signature.r, SHA384_DIGEST_SIZE, sigblock);
diff --git a/validator/val_sigcrypt.c b/validator/val_sigcrypt.c
index cfa3eadcf6a0..33d206de8d7f 100644
--- a/validator/val_sigcrypt.c
+++ b/validator/val_sigcrypt.c
@@ -1225,11 +1225,11 @@ sigdate_error(const char* str, int32_t expi, int32_t incep, int32_t now)
(unsigned)incep, (unsigned)now);
}
-/** RFC 1918 comparison, uses unsigned integers, and tries to avoid
+/** RFC 1982 comparison, uses unsigned integers, and tries to avoid
* compiler optimization (eg. by avoiding a-b<0 comparisons),
* this routine matches compare_serial(), for SOA serial number checks */
static int
-compare_1918(uint32_t a, uint32_t b)
+compare_1982(uint32_t a, uint32_t b)
{
/* for 32 bit values */
const uint32_t cutoff = ((uint32_t) 1 << (32 - 1));
@@ -1244,9 +1244,9 @@ compare_1918(uint32_t a, uint32_t b)
}
/** if we know that b is larger than a, return the difference between them,
- * that is the distance between them. in RFC1918 arith */
+ * that is the distance between them. in RFC1982 arith */
static uint32_t
-subtract_1918(uint32_t a, uint32_t b)
+subtract_1982(uint32_t a, uint32_t b)
{
/* for 32 bit values */
const uint32_t cutoff = ((uint32_t) 1 << (32 - 1));
@@ -1286,18 +1286,18 @@ check_dates(struct val_env* ve, uint32_t unow,
} else now = unow;
/* check them */
- if(compare_1918(incep, expi) > 0) {
+ if(compare_1982(incep, expi) > 0) {
sigdate_error("verify: inception after expiration, "
"signature bad", expi, incep, now);
*reason = "signature inception after expiration";
return 0;
}
- if(compare_1918(incep, now) > 0) {
+ if(compare_1982(incep, now) > 0) {
/* within skew ? (calc here to avoid calculation normally) */
- uint32_t skew = subtract_1918(incep, expi)/10;
+ uint32_t skew = subtract_1982(incep, expi)/10;
if(skew < (uint32_t)ve->skew_min) skew = ve->skew_min;
if(skew > (uint32_t)ve->skew_max) skew = ve->skew_max;
- if(subtract_1918(now, incep) > skew) {
+ if(subtract_1982(now, incep) > skew) {
sigdate_error("verify: signature bad, current time is"
" before inception date", expi, incep, now);
*reason = "signature before inception date";
@@ -1306,11 +1306,11 @@ check_dates(struct val_env* ve, uint32_t unow,
sigdate_error("verify warning suspicious signature inception "
" or bad local clock", expi, incep, now);
}
- if(compare_1918(now, expi) > 0) {
- uint32_t skew = subtract_1918(incep, expi)/10;
+ if(compare_1982(now, expi) > 0) {
+ uint32_t skew = subtract_1982(incep, expi)/10;
if(skew < (uint32_t)ve->skew_min) skew = ve->skew_min;
if(skew > (uint32_t)ve->skew_max) skew = ve->skew_max;
- if(subtract_1918(expi, now) > skew) {
+ if(subtract_1982(expi, now) > skew) {
sigdate_error("verify: signature expired", expi,
incep, now);
*reason = "signature expired";
diff --git a/validator/validator.c b/validator/validator.c
index fa8d5419a80a..4c560a8e1de1 100644
--- a/validator/validator.c
+++ b/validator/validator.c
@@ -2242,7 +2242,7 @@ processFinished(struct module_qstate* qstate, struct val_qstate* vq,
!qstate->env->cfg->val_log_squelch) {
if(qstate->env->cfg->val_log_level < 2 &&
!qstate->env->cfg->log_servfail)
- log_query_info(0, "validation failure",
+ log_query_info(NO_VERBOSE, "validation failure",
&qstate->qinfo);
else {
char* err = errinf_to_str_bogus(qstate);