Control: tags -1 + patch
Control: forwarded https://github.com/tobez/validns/pull/64

A patch to fix compilation with openssl 1.1 is attached.
The patch doesn't apply cleanly to upstream, so I sent them a different
patch.

Chris.

diff --git a/validns-0.8+git20160720/debian/control b/validns-0.8+git20160720/debian/control
index 3714846..d31cb26 100644
--- a/validns-0.8+git20160720/debian/control
+++ b/validns-0.8+git20160720/debian/control
@@ -3,7 +3,7 @@ Section: net
 Priority: extra
 Maintainer: Casper Gielen <casper-ali...@gielen.name>
 Uploaders: Joost van Baal-Ilić <joos...@debian.org>
-Build-Depends: debhelper (>= 9), libssl1.0-dev, libjudy-dev, libtest-command-simple-perl, dpkg-dev (>= 1.16.1~)
+Build-Depends: debhelper (>= 9), libssl-dev, libjudy-dev, libtest-command-simple-perl, dpkg-dev (>= 1.16.1~)
 Standards-Version: 3.9.8
 Homepage: http://www.validns.net/
 Vcs-Git: https://anonscm.debian.org/git/collab-maint/validns.git
diff --git a/validns-0.8+git20160720/dnskey.c b/validns-0.8+git20160720/dnskey.c
index fecc62a..14f2cc2 100644
--- a/validns-0.8+git20160720/dnskey.c
+++ b/validns-0.8+git20160720/dnskey.c
@@ -154,6 +154,7 @@ int dnskey_build_pkey(struct rr_dnskey *rr)
                unsigned int e_bytes;
                unsigned char *pk;
                int l;
+               BIGNUM *n, *e;
 
                rsa = RSA_new();
                if (!rsa)
@@ -174,11 +175,12 @@ int dnskey_build_pkey(struct rr_dnskey *rr)
                if (l < e_bytes) /* public key is too short */
                        goto done;
 
-               rsa->e = BN_bin2bn(pk, e_bytes, NULL);
+               e = BN_bin2bn(pk, e_bytes, NULL);
                pk += e_bytes;
                l -= e_bytes;
 
-               rsa->n = BN_bin2bn(pk, l, NULL);
+               n = BN_bin2bn(pk, l, NULL);
+               RSA_set0_key(rsa, n, e, NULL);
 
                pkey = EVP_PKEY_new();
                if (!pkey)
diff --git a/validns-0.8+git20160720/nsec3checks.c b/validns-0.8+git20160720/nsec3checks.c
index 69c6553..97be1ce 100644
--- a/validns-0.8+git20160720/nsec3checks.c
+++ b/validns-0.8+git20160720/nsec3checks.c
@@ -28,7 +28,7 @@
 static struct binary_data name2hash(char *name, struct rr *param)
 {
     struct rr_nsec3param *p = (struct rr_nsec3param *)param;
-       EVP_MD_CTX ctx;
+       EVP_MD_CTX *ctx;
        unsigned char md0[EVP_MAX_MD_SIZE];
        unsigned char md1[EVP_MAX_MD_SIZE];
        unsigned char *md[2];
@@ -45,22 +45,23 @@ static struct binary_data name2hash(char *name, struct rr *param)
 
        /* XXX Maybe use Init_ex and Final_ex for speed? */
 
-       EVP_MD_CTX_init(&ctx);
-       if (EVP_DigestInit(&ctx, EVP_sha1()) != 1)
+       ctx = EVP_MD_CTX_new();
+       if (EVP_DigestInit(ctx, EVP_sha1()) != 1)
                return r;
-       digest_size = EVP_MD_CTX_size(&ctx);
-       EVP_DigestUpdate(&ctx, wire_name.data, wire_name.length);
-       EVP_DigestUpdate(&ctx, p->salt.data, p->salt.length);
-       EVP_DigestFinal(&ctx, md[mdi], NULL);
+       digest_size = EVP_MD_CTX_size(ctx);
+       EVP_DigestUpdate(ctx, wire_name.data, wire_name.length);
+       EVP_DigestUpdate(ctx, p->salt.data, p->salt.length);
+       EVP_DigestFinal(ctx, md[mdi], NULL);
 
        for (i = 0; i < p->iterations; i++) {
-               if (EVP_DigestInit(&ctx, EVP_sha1()) != 1)
+               if (EVP_DigestInit(ctx, EVP_sha1()) != 1)
                        return r;
-               EVP_DigestUpdate(&ctx, md[mdi], digest_size);
+               EVP_DigestUpdate(ctx, md[mdi], digest_size);
                mdi = (mdi + 1) % 2;
-               EVP_DigestUpdate(&ctx, p->salt.data, p->salt.length);
-               EVP_DigestFinal(&ctx, md[mdi], NULL);
+               EVP_DigestUpdate(ctx, p->salt.data, p->salt.length);
+               EVP_DigestFinal(ctx, md[mdi], NULL);
        }
+       EVP_MD_CTX_free(ctx);
 
        r.length = digest_size;
        r.data = getmem(digest_size);
diff --git a/validns-0.8+git20160720/rrsig.c b/validns-0.8+git20160720/rrsig.c
index 81f24b4..d6ea0c5 100644
--- a/validns-0.8+git20160720/rrsig.c
+++ b/validns-0.8+git20160720/rrsig.c
@@ -26,7 +26,7 @@
 struct verification_data
 {
        struct verification_data *next;
-       EVP_MD_CTX ctx;
+       EVP_MD_CTX *ctx;
        struct rr_dnskey *key;
        struct rr_rrsig *rr;
        int ok;
@@ -180,7 +180,7 @@ void *verification_thread(void *dummy)
                if (d) {
                        int r;
                        d->next = NULL;
-                       r = EVP_VerifyFinal(&d->ctx, (unsigned char *)d->rr->signature.data, d->rr->signature.length, d->key->pkey);
+                       r = EVP_VerifyFinal(d->ctx, (unsigned char *)d->rr->signature.data, d->rr->signature.length, d->key->pkey);
                        if (r == 1) {
                                d->ok = 1;
                        } else {
@@ -232,7 +232,7 @@ static void schedule_verification(struct verification_data *d)
        } else {
                int r;
                G.stats.signatures_verified++;
-               r = EVP_VerifyFinal(&d->ctx, (unsigned char *)d->rr->signature.data, d->rr->signature.length, d->key->pkey);
+               r = EVP_VerifyFinal(d->ctx, (unsigned char *)d->rr->signature.data, d->rr->signature.length, d->key->pkey);
                if (r == 1) {
                        d->ok = 1;
                } else {
@@ -250,21 +250,21 @@ static int verify_signature(struct verification_data *d, struct rr_set *signed_s
        struct rr *signed_rr;
        int i;
 
-       EVP_MD_CTX_init(&d->ctx);
+       d->ctx = EVP_MD_CTX_new();
        switch (d->rr->algorithm) {
        case ALG_DSA:
        case ALG_RSASHA1:
        case ALG_DSA_NSEC3_SHA1:
        case ALG_RSASHA1_NSEC3_SHA1:
-               if (EVP_VerifyInit(&d->ctx, EVP_sha1()) != 1)
+               if (EVP_VerifyInit(d->ctx, EVP_sha1()) != 1)
                        return 0;
                break;
        case ALG_RSASHA256:
-               if (EVP_VerifyInit(&d->ctx, EVP_sha256()) != 1)
+               if (EVP_VerifyInit(d->ctx, EVP_sha256()) != 1)
                        return 0;
                break;
        case ALG_RSASHA512:
-               if (EVP_VerifyInit(&d->ctx, EVP_sha512()) != 1)
+               if (EVP_VerifyInit(d->ctx, EVP_sha512()) != 1)
                        return 0;
                break;
        default:
@@ -274,7 +274,7 @@ static int verify_signature(struct verification_data *d, struct rr_set *signed_s
        chunk = rrsig_wirerdata_ex(&d->rr->rr, 0);
        if (chunk.length < 0)
                return 0;
-       EVP_VerifyUpdate(&d->ctx, chunk.data, chunk.length);
+       EVP_VerifyUpdate(d->ctx, chunk.data, chunk.length);
 
        set = getmem_temp(sizeof(*set) * signed_set->count);
 
@@ -294,12 +294,12 @@ static int verify_signature(struct verification_data *d, struct rr_set *signed_s
                chunk = name2wire_name(signed_set->named_rr->name);
                if (chunk.length < 0)
                        return 0;
-               EVP_VerifyUpdate(&d->ctx, chunk.data, chunk.length);
-               b2 = htons(set[i].rr->rdtype);    EVP_VerifyUpdate(&d->ctx, &b2, 2);
-               b2 = htons(1);  /* class IN */   EVP_VerifyUpdate(&d->ctx, &b2, 2);
-               b4 = htonl(set[i].rr->ttl);       EVP_VerifyUpdate(&d->ctx, &b4, 4);
-               b2 = htons(set[i].wired.length); EVP_VerifyUpdate(&d->ctx, &b2, 2);
-               EVP_VerifyUpdate(&d->ctx, set[i].wired.data, set[i].wired.length);
+               EVP_VerifyUpdate(d->ctx, chunk.data, chunk.length);
+               b2 = htons(set[i].rr->rdtype);    EVP_VerifyUpdate(d->ctx, &b2, 2);
+               b2 = htons(1);  /* class IN */   EVP_VerifyUpdate(d->ctx, &b2, 2);
+               b4 = htonl(set[i].rr->ttl);       EVP_VerifyUpdate(d->ctx, &b4, 4);
+               b2 = htons(set[i].wired.length); EVP_VerifyUpdate(d->ctx, &b2, 2);
+               EVP_VerifyUpdate(d->ctx, set[i].wired.data, set[i].wired.length);
        }
 
        schedule_verification(d);
@@ -374,7 +374,7 @@ static void *rrsig_validate(struct rr *rrv)
 static pthread_mutex_t *lock_cs;
 static long *lock_count;
 
-static unsigned long pthreads_thread_id(void)
+unsigned long pthreads_thread_id(void)
 {
        unsigned long ret;
 
@@ -382,7 +382,7 @@ static unsigned long pthreads_thread_id(void)
        return(ret);
 }
 
-static void pthreads_locking_callback(int mode, int type, char *file, int line)
+void pthreads_locking_callback(int mode, int type, char *file, int line)
 {
        if (mode & CRYPTO_LOCK) {
                pthread_mutex_lock(&(lock_cs[type]));
@@ -446,6 +446,7 @@ void verify_all_keys(void)
                                if (k->to_verify[i].openssl_error != 0)
                                        e = k->to_verify[i].openssl_error;
                        }
+                       EVP_MD_CTX_free(k->to_verify[i].ctx);
                }
                if (!ok) {
                        struct named_rr *named_rr;

Reply via email to