diff options
Diffstat (limited to 'net-libs/liboauth')
-rw-r--r-- | net-libs/liboauth/files/liboauth-1.0.3-openssl-1.1.patch | 143 | ||||
-rw-r--r-- | net-libs/liboauth/liboauth-1.0.3-r1.ebuild | 80 |
2 files changed, 223 insertions, 0 deletions
diff --git a/net-libs/liboauth/files/liboauth-1.0.3-openssl-1.1.patch b/net-libs/liboauth/files/liboauth-1.0.3-openssl-1.1.patch new file mode 100644 index 000000000000..f39747fd12f1 --- /dev/null +++ b/net-libs/liboauth/files/liboauth-1.0.3-openssl-1.1.patch @@ -0,0 +1,143 @@ +From bf51f1f17bdfcdbf09b7edad9995ccbf17c41109 Mon Sep 17 00:00:00 2001 +From: Lars Wendler <polynomial-c@gentoo.org> +Date: Thu, 15 Nov 2018 12:11:11 +0100 +Subject: [PATCH] Fixed build with openssl-1.1 + +https://github.com/x42/liboauth/issues/9 +--- + src/hash.c | 60 +++++++++++++++++++++++++++++++++++------------------- + 1 file changed, 39 insertions(+), 21 deletions(-) + +diff --git a/src/hash.c b/src/hash.c +index 17ff5c8..551991f 100644 +--- a/src/hash.c ++++ b/src/hash.c +@@ -362,6 +362,11 @@ looser: + #include "oauth.h" // base64 encode fn's. + #include <openssl/hmac.h> + ++#if OPENSSL_VERSION_NUMBER < 0x10100000 ++#define EVP_MD_CTX_new EVP_MD_CTX_create ++#define EVP_MD_CTX_free EVP_MD_CTX_destroy ++#endif ++ + char *oauth_sign_hmac_sha1 (const char *m, const char *k) { + return(oauth_sign_hmac_sha1_raw (m, strlen(m), k, strlen(k))); + } +@@ -386,7 +391,7 @@ char *oauth_sign_rsa_sha1 (const char *m, const char *k) { + unsigned char *sig = NULL; + unsigned char *passphrase = NULL; + unsigned int len=0; +- EVP_MD_CTX md_ctx; ++ EVP_MD_CTX *md_ctx; + + EVP_PKEY *pkey; + BIO *in; +@@ -399,24 +404,31 @@ char *oauth_sign_rsa_sha1 (const char *m, const char *k) { + return xstrdup("liboauth/OpenSSL: can not read private key"); + } + ++ md_ctx = EVP_MD_CTX_new(); ++ if (md_ctx == NULL) { ++ return xstrdup("liboauth/OpenSSL: failed to allocate EVP_MD_CTX"); ++ } ++ + len = EVP_PKEY_size(pkey); + sig = (unsigned char*)xmalloc((len+1)*sizeof(char)); + +- EVP_SignInit(&md_ctx, EVP_sha1()); +- EVP_SignUpdate(&md_ctx, m, strlen(m)); +- if (EVP_SignFinal (&md_ctx, sig, &len, pkey)) { ++ EVP_SignInit(md_ctx, EVP_sha1()); ++ EVP_SignUpdate(md_ctx, m, strlen(m)); ++ if (EVP_SignFinal (md_ctx, sig, &len, pkey)) { + char *tmp; + sig[len] = '\0'; + tmp = oauth_encode_base64(len,sig); + OPENSSL_free(sig); + EVP_PKEY_free(pkey); ++ EVP_MD_CTX_free(md_ctx); + return tmp; + } ++ EVP_MD_CTX_free(md_ctx); + return xstrdup("liboauth/OpenSSL: rsa-sha1 signing failed"); + } + + int oauth_verify_rsa_sha1 (const char *m, const char *c, const char *s) { +- EVP_MD_CTX md_ctx; ++ EVP_MD_CTX *md_ctx; + EVP_PKEY *pkey; + BIO *in; + X509 *cert = NULL; +@@ -440,10 +452,10 @@ int oauth_verify_rsa_sha1 (const char *m, const char *c, const char *s) { + b64d= (unsigned char*) xmalloc(sizeof(char)*strlen(s)); + slen = oauth_decode_base64(b64d, s); + +- EVP_VerifyInit(&md_ctx, EVP_sha1()); +- EVP_VerifyUpdate(&md_ctx, m, strlen(m)); +- err = EVP_VerifyFinal(&md_ctx, b64d, slen, pkey); +- EVP_MD_CTX_cleanup(&md_ctx); ++ EVP_VerifyInit(md_ctx, EVP_sha1()); ++ EVP_VerifyUpdate(md_ctx, m, strlen(m)); ++ err = EVP_VerifyFinal(md_ctx, b64d, slen, pkey); ++ EVP_MD_CTX_cleanup(md_ctx); + EVP_PKEY_free(pkey); + xfree(b64d); + return (err); +@@ -455,35 +467,41 @@ int oauth_verify_rsa_sha1 (const char *m, const char *c, const char *s) { + */ + char *oauth_body_hash_file(char *filename) { + unsigned char fb[BUFSIZ]; +- EVP_MD_CTX ctx; ++ EVP_MD_CTX *ctx; + size_t len=0; + unsigned char *md; + FILE *F= fopen(filename, "r"); + if (!F) return NULL; + +- EVP_MD_CTX_init(&ctx); +- EVP_DigestInit(&ctx,EVP_sha1()); ++ ctx = EVP_MD_CTX_new(); ++ if (ctx == NULL) { ++ return xstrdup("liboauth/OpenSSL: failed to allocate EVP_MD_CTX"); ++ } ++ EVP_DigestInit(ctx,EVP_sha1()); + while (!feof(F) && (len=fread(fb,sizeof(char),BUFSIZ, F))>0) { +- EVP_DigestUpdate(&ctx, fb, len); ++ EVP_DigestUpdate(ctx, fb, len); + } + fclose(F); + len=0; + md=(unsigned char*) xcalloc(EVP_MD_size(EVP_sha1()),sizeof(unsigned char)); +- EVP_DigestFinal(&ctx, md,(unsigned int*) &len); +- EVP_MD_CTX_cleanup(&ctx); ++ EVP_DigestFinal(ctx, md,(unsigned int*) &len); ++ EVP_MD_CTX_cleanup(ctx); + return oauth_body_hash_encode(len, md); + } + + char *oauth_body_hash_data(size_t length, const char *data) { +- EVP_MD_CTX ctx; ++ EVP_MD_CTX *ctx; + size_t len=0; + unsigned char *md; + md=(unsigned char*) xcalloc(EVP_MD_size(EVP_sha1()),sizeof(unsigned char)); +- EVP_MD_CTX_init(&ctx); +- EVP_DigestInit(&ctx,EVP_sha1()); +- EVP_DigestUpdate(&ctx, data, length); +- EVP_DigestFinal(&ctx, md,(unsigned int*) &len); +- EVP_MD_CTX_cleanup(&ctx); ++ ctx = EVP_MD_CTX_new(); ++ if (ctx == NULL) { ++ return xstrdup("liboauth/OpenSSL: failed to allocate EVP_MD_CTX"); ++ } ++ EVP_DigestInit(ctx,EVP_sha1()); ++ EVP_DigestUpdate(ctx, data, length); ++ EVP_DigestFinal(ctx, md,(unsigned int*) &len); ++ EVP_MD_CTX_free(ctx); + return oauth_body_hash_encode(len, md); + } + +-- +2.19.1 + diff --git a/net-libs/liboauth/liboauth-1.0.3-r1.ebuild b/net-libs/liboauth/liboauth-1.0.3-r1.ebuild new file mode 100644 index 000000000000..96cf577256ea --- /dev/null +++ b/net-libs/liboauth/liboauth-1.0.3-r1.ebuild @@ -0,0 +1,80 @@ +# Copyright 1999-2018 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +DESCRIPTION="C library implementing the OAuth secure authentication protocol" +HOMEPAGE="http://liboauth.sourceforge.net/" +SRC_URI="mirror://sourceforge/project/${PN}/${P}.tar.gz" + +LICENSE="|| ( GPL-2 MIT )" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~ppc ~ppc64 ~sparc ~x86 ~x64-macos" +IUSE="bindist curl doc libressl +nss" + +REQUIRED_USE="bindist? ( nss )" + +PATCHES=( + "${FILESDIR}"/${PN}-1.0.1-doxygen-out-of-tree.patch + "${FILESDIR}"/${PN}-1.0.3-openssl-1.1.patch +) + +CDEPEND=" + curl? ( net-misc/curl ) + nss? ( dev-libs/nss + curl? ( || ( + net-misc/curl[ssl,curl_ssl_nss] + net-misc/curl[-ssl] + ) ) + ) + !nss? ( + !libressl? ( dev-libs/openssl:0= ) + libressl? ( dev-libs/libressl:= ) + curl? ( || ( + net-misc/curl[ssl,curl_ssl_openssl] + net-misc/curl[-ssl] + ) ) + ) +" + +RDEPEND="${CDEPEND}" + +DEPEND=" + ${CDEPEND} + doc? ( + app-doc/doxygen + media-gfx/graphviz + media-fonts/freefont + ) +" +BDEPEND=" + virtual/pkgconfig +" + +src_configure() { + local myeconfargs=( + --disable-static + $(use_enable !curl curl) + $(use_enable curl libcurl) + $(use_enable nss) + ) + econf "${myeconfargs[@]}" +} + +src_compile() { + default + + if use doc ; then + # make sure fonts are found + export DOTFONTPATH="${EPREFIX}"/usr/share/fonts/freefont-ttf + emake dox + fi +} + +DOCS=( AUTHORS ChangeLog LICENSE.OpenSSL README ) + +src_install() { + use doc && HTML_DOCS=( doc/html/. ) + default + find "${ED}" -name "*.la" -delete || die +} |