Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 13 Nov 2018 21:35:30 +0000 (UTC)
From:      Tilman Keskinoz <arved@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r484900 - in head/mail/enma: . files
Message-ID:  <201811132135.wADLZUEt022506@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: arved
Date: Tue Nov 13 21:35:30 2018
New Revision: 484900
URL: https://svnweb.freebsd.org/changeset/ports/484900

Log:
  Fix build with openssl 1.1
  
  PR:             233130
  Submitted by:   Yoshihiro Takahashi

Added:
  head/mail/enma/files/patch-libsauth_src_dkimdigester.c   (contents, props changed)
  head/mail/enma/files/patch-libsauth_src_dkimpublickey.c   (contents, props changed)
Modified:
  head/mail/enma/Makefile

Modified: head/mail/enma/Makefile
==============================================================================
--- head/mail/enma/Makefile	Tue Nov 13 21:11:54 2018	(r484899)
+++ head/mail/enma/Makefile	Tue Nov 13 21:35:30 2018	(r484900)
@@ -3,7 +3,7 @@
 
 PORTNAME=	enma
 PORTVERSION=	1.2.0
-PORTREVISION=	4
+PORTREVISION=	5
 CATEGORIES=	mail
 MASTER_SITES=	SF/${PORTNAME}/ENMA/${PORTVERSION}
 

Added: head/mail/enma/files/patch-libsauth_src_dkimdigester.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/mail/enma/files/patch-libsauth_src_dkimdigester.c	Tue Nov 13 21:35:30 2018	(r484900)
@@ -0,0 +1,153 @@
+--- ./libsauth/src/dkimdigester.c.org	2011-10-16 17:08:36.000000000 +0900
++++ ./libsauth/src/dkimdigester.c	2018-11-11 18:20:49.869300000 +0900
+@@ -32,12 +32,17 @@
+ #include "dkimpolicybase.h"
+ #include "dkimdigester.h"
+ 
++#if (OPENSSL_VERSION_NUMBER < 0x10100000L)
++#define EVP_MD_CTX_new EVP_MD_CTX_create
++#define EVP_MD_CTX_free EVP_MD_CTX_destroy
++#endif
++
+ struct DkimDigester {
+     const DkimPolicyBase *policy;
+     const EVP_MD *digest_alg;
+     int pubkey_alg;
+-    EVP_MD_CTX header_digest;
+-    EVP_MD_CTX body_digest;
++    EVP_MD_CTX *header_digest;
++    EVP_MD_CTX *body_digest;
+     DkimCanonicalizer *canon;
+     /// body length limit. sig-l-tag itself. -1 for unlimited.
+     long long body_length_limit;
+@@ -210,13 +215,23 @@
+     if (NULL == self->canon) {
+         goto cleanup;
+     }   // end if
+-    if (0 == EVP_DigestInit(&(self->header_digest), self->digest_alg)) {
++    if (NULL == (self->header_digest = EVP_MD_CTX_new())) {
++        DkimLogNoResource(self->policy);
++        DkimDigester_free(self);
++        return DSTAT_SYSERR_NORESOURCE;
++    }   // end if
++    if (0 == EVP_DigestInit(self->header_digest, self->digest_alg)) {
+         DkimLogSysError(policy, "Digest Initialization (of header) failed");
+         DkimDigester_logOpenSSLErrors(self);
+         SETDEREF(dstat, DSTAT_SYSERR_NORESOURCE);
+         goto cleanup;
+     }   // end if
+-    if (0 == EVP_DigestInit(&(self->body_digest), self->digest_alg)) {
++    if (NULL == (self->body_digest = EVP_MD_CTX_new())) {
++        DkimLogNoResource(self->policy);
++        DkimDigester_free(self);
++        return DSTAT_SYSERR_NORESOURCE;
++    }   // end if
++    if (0 == EVP_DigestInit(self->body_digest, self->digest_alg)) {
+         DkimLogSysError(policy, "Digest Initialization (of body) failed");
+         DkimDigester_logOpenSSLErrors(self);
+         SETDEREF(dstat, DSTAT_SYSERR_NORESOURCE);
+@@ -246,9 +261,14 @@
+     if (NULL != self->canon) {
+         DkimCanonicalizer_free(self->canon);
+     }   // end if
+-    (void) EVP_MD_CTX_cleanup(&(self->header_digest));
+-    (void) EVP_MD_CTX_cleanup(&(self->body_digest));
+ 
++    if (NULL != self->header_digest) {
++        EVP_MD_CTX_free(self->header_digest);
++    }
++    if (NULL != self->body_digest) {
++        EVP_MD_CTX_free(self->body_digest);
++    }
++
+     // No need to clean up "self->digest_alg"
+ 
+     free(self);
+@@ -289,7 +309,7 @@
+     }   // end if
+ 
+     if (0 < srclen) {
+-        if (0 == EVP_DigestUpdate(&self->body_digest, buf, srclen)) {
++        if (0 == EVP_DigestUpdate(self->body_digest, buf, srclen)) {
+             DkimLogSysError(self->policy, "Digest update (of body) failed");
+             DkimDigester_logOpenSSLErrors(self);
+             return DSTAT_SYSERR_DIGEST_UPDATE_FAILURE;
+@@ -360,7 +380,7 @@
+     // discard errors occurred in functions for debugging
+     (void) DkimDigester_dumpCanonicalizedHeader(self, canonbuf, canonsize);
+ 
+-    if (0 == EVP_DigestUpdate(&self->header_digest, canonbuf, canonsize)) {
++    if (0 == EVP_DigestUpdate(self->header_digest, canonbuf, canonsize)) {
+         DkimLogSysError(self->policy, "Digest update (of header) failed");
+         DkimDigester_logOpenSSLErrors(self);
+         return DSTAT_SYSERR_DIGEST_UPDATE_FAILURE;
+@@ -487,7 +507,7 @@
+     (void) DkimDigester_dumpCanonicalizedHeader(self, canonbuf, canonsize);
+ 
+     // update digest
+-    if (0 == EVP_DigestUpdate(&self->header_digest, canonbuf, canonsize)) {
++    if (0 == EVP_DigestUpdate(self->header_digest, canonbuf, canonsize)) {
+         DkimLogSysError(self->policy, "Digest update (of signature header) failed");
+         DkimDigester_logOpenSSLErrors(self);
+         return DSTAT_SYSERR_DIGEST_UPDATE_FAILURE;
+@@ -524,9 +544,9 @@
+ 
+     // check if the type of the public key is suitable for the algorithm
+     // specified by sig-a-tag of the DKIM-Signature header.
+-    if (publickey->type != self->pubkey_alg) {
++    if (EVP_PKEY_base_id(publickey) != self->pubkey_alg) {
+         DkimLogPermFail(self->policy, "Public key algorithm mismatch: signature=0x%x, pubkey=0x%x",
+-                        publickey->type, self->pubkey_alg);
++                        EVP_PKEY_base_id(publickey), self->pubkey_alg);
+         return DSTAT_PERMFAIL_PUBLICKEY_TYPE_MISMATCH;
+     }   // end if
+ 
+@@ -541,7 +561,7 @@
+     if (DSTAT_OK != ret) {
+         return ret;
+     }   // end if
+-    if (0 == EVP_DigestFinal(&self->body_digest, md, &mdlen)) {
++    if (0 == EVP_DigestFinal(self->body_digest, md, &mdlen)) {
+         DkimLogSysError(self->policy, "Digest finish (of body) failed");
+         DkimDigester_logOpenSSLErrors(self);
+         return DSTAT_SYSERR_DIGEST_UPDATE_FAILURE;
+@@ -573,7 +593,7 @@
+     const XBuffer *headerhash = DkimSignature_getSignatureValue(signature);
+     signbuf = (const unsigned char *) XBuffer_getBytes(headerhash);
+     signlen = XBuffer_getSize(headerhash);
+-    int vret = EVP_VerifyFinal(&self->header_digest, signbuf, signlen, publickey);
++    int vret = EVP_VerifyFinal(self->header_digest, signbuf, signlen, publickey);
+     // EVP_VerifyFinal() returns 1 for a correct signature, 0 for failure and -1 if some other error occurred.
+     switch (vret) {
+     case 1:    // the signature is correct
+@@ -614,10 +634,10 @@
+     assert(NULL != privatekey);
+ 
+     // XXX signature と self の署名/ダイジェストアルゴリズムが一致しているか確認した方がいい
+-    if (privatekey->type != self->pubkey_alg) {
++    if (EVP_PKEY_base_id(privatekey) != self->pubkey_alg) {
+         DkimLogPermFail(self->policy,
+                         "Public key algorithm mismatch: signature=0x%x, privatekey=0x%x",
+-                        privatekey->type, self->pubkey_alg);
++                        EVP_PKEY_base_id(privatekey), self->pubkey_alg);
+         return DSTAT_PERMFAIL_PUBLICKEY_TYPE_MISMATCH;
+     }   // end if
+ 
+@@ -636,7 +656,7 @@
+     unsigned char bodyhashbuf[EVP_MD_size(self->digest_alg)];   // EVP_MAX_MD_SIZE instead of EVP_MD_size() is safer(?)
+     unsigned int bodyhashlen;
+     bodyhashlen = EVP_MD_size(self->digest_alg);
+-    if (0 == EVP_DigestFinal(&self->body_digest, bodyhashbuf, &bodyhashlen)) {
++    if (0 == EVP_DigestFinal(self->body_digest, bodyhashbuf, &bodyhashlen)) {
+         DkimLogSysError(self->policy, "DigestFinal (of body) failed");
+         DkimDigester_logOpenSSLErrors(self);
+         return DSTAT_SYSERR_DIGEST_UPDATE_FAILURE;
+@@ -676,7 +696,7 @@
+ 
+     unsigned char signbuf[EVP_PKEY_size(privatekey)];
+     unsigned int signlen;
+-    if (0 == EVP_SignFinal(&self->header_digest, signbuf, &signlen, privatekey)) {
++    if (0 == EVP_SignFinal(self->header_digest, signbuf, &signlen, privatekey)) {
+         DkimLogSysError(self->policy, "SignFinal (of body) failed");
+         DkimDigester_logOpenSSLErrors(self);
+         return DSTAT_SYSERR_DIGEST_UPDATE_FAILURE;

Added: head/mail/enma/files/patch-libsauth_src_dkimpublickey.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/mail/enma/files/patch-libsauth_src_dkimpublickey.c	Tue Nov 13 21:35:30 2018	(r484900)
@@ -0,0 +1,16 @@
+--- ./libsauth/src/dkimpublickey.c.org	2018-11-11 18:07:34.804563000 +0900
++++ ./libsauth/src/dkimpublickey.c	2018-11-11 17:48:47.356482000 +0900
+@@ -398,11 +398,11 @@
+     // compare key type key-k-tag declared and stored in key-p-tag
+     switch (self->keytype) {
+     case DKIM_KEY_TYPE_RSA:
+-        if (EVP_PKEY_RSA != EVP_PKEY_type(self->pkey->type)) {
++        if (EVP_PKEY_RSA != EVP_PKEY_base_id(self->pkey)) {
+             DkimLogPermFail
+                 (policy,
+                  "key-k-tag and key-p-tag doesn't match: domain=%s, keyalg=0x%x, keytype=0x%x",
+-                 domain, self->keytype, EVP_PKEY_type(self->pkey->type));
++                 domain, self->keytype, EVP_PKEY_base_id(self->pkey));
+             SETDEREF(dstat, DSTAT_PERMFAIL_PUBLICKEY_TYPE_MISMATCH);
+             goto cleanup;
+         }   // end if



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201811132135.wADLZUEt022506>