diff options
author | Jakub Jirutka <jakub@jirutka.cz> | 2018-04-02 23:38:36 +0200 |
---|---|---|
committer | Jakub Jirutka <jakub@jirutka.cz> | 2018-04-02 23:39:59 +0200 |
commit | 63900f59e4fd1c6d98030562281626efabe4c08f (patch) | |
tree | bb7e11b6b0641794bc36116800719af4f2056605 /community/crystal/libressl.patch | |
parent | ba92e1b07a254797cd28ebc642e921691e0e8db3 (diff) | |
download | aports-63900f59e4fd1c6d98030562281626efabe4c08f.tar.bz2 aports-63900f59e4fd1c6d98030562281626efabe4c08f.tar.xz |
community/crystal: move from testing
Diffstat (limited to 'community/crystal/libressl.patch')
-rw-r--r-- | community/crystal/libressl.patch | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/community/crystal/libressl.patch b/community/crystal/libressl.patch new file mode 100644 index 0000000000..680c50e5e5 --- /dev/null +++ b/community/crystal/libressl.patch @@ -0,0 +1,120 @@ +From a834b9a274b5dcb076b64ca855bcccc322cdd07c Mon Sep 17 00:00:00 2001 +From: lvmbdv <ata.kuyumcu@protonmail.com> +Date: Fri, 2 Feb 2018 23:31:19 +0300 +Subject: [PATCH] Fixed OpenSSL bindings to recognize LibreSSL + +This patch is ported from https://github.com/crystal-lang/crystal/pull/5676. + +diff --git a/src/openssl/lib_crypto.cr b/src/openssl/lib_crypto.cr +index 458ad13..7e42604 100644 +--- a/src/openssl/lib_crypto.cr ++++ b/src/openssl/lib_crypto.cr +@@ -1,11 +1,23 @@ + {% begin %} + lib LibCrypto +- OPENSSL_110 = {{ `command -v pkg-config > /dev/null && pkg-config --atleast-version=1.1.0 libcrypto || printf %s false`.stringify != "false" }} +- OPENSSL_102 = {{ `command -v pkg-config > /dev/null && pkg-config --atleast-version=1.0.2 libcrypto || printf %s false`.stringify != "false" }} ++ # An extra zero is appended to the output of LIBRESSL_VERSION to make it 0 when LibreSSL does not exist on the system. ++ # Any comparisons to it should be affixed with an extra zero as well e.g. `(LIBRESSL_VERSION_NUMBER >= 0x2050500F0)`. ++ LIBRESSL_VERSION = {{ system("echo \"#include <openssl/opensslv.h>\nLIBRESSL_VERSION_NUMBER\" | " + ++ (env("CC") || "cc") + " " + `pkg-config --cflags --silence-errors libssl || true`.chomp.stringify + " -E -").chomp.split('\n').last.split('L').first.id + "0" }} ++ OPENSSL_VERSION = {{ system("echo \"#include <openssl/opensslv.h>\nOPENSSL_VERSION_NUMBER\" | " + ++ (env("CC") || "cc") + " " + `pkg-config --cflags --silence-errors libssl || true`.chomp.stringify + " -E -").chomp.split('\n').last.split('L').first.id }} + end + {% end %} + +-@[Link(ldflags: "`command -v pkg-config > /dev/null && pkg-config --libs libcrypto || printf %s '-lcrypto'`")] ++{% begin %} ++ lib LibCrypto ++ OPENSSL_110 = {{ (LibCrypto::LIBRESSL_VERSION == 0) && (LibCrypto::OPENSSL_VERSION >= 0x10101000) }} ++ OPENSSL_102 = {{ (LibCrypto::LIBRESSL_VERSION == 0) && (LibCrypto::OPENSSL_VERSION >= 0x10002000) }} ++ LIBRESSL_250 = {{ LibCrypto::LIBRESSL_VERSION >= 0x205000000 }} ++ end ++{% end %} ++ ++@[Link(ldflags: "`command -v pkg-config > /dev/null && pkg-config --libs --silence-errors libcrypto || printf %s ' -lcrypto'`")] + lib LibCrypto + alias Char = LibC::Char + alias Int = LibC::Int +diff --git a/src/openssl/lib_ssl.cr b/src/openssl/lib_ssl.cr +index e69f82b..b8786b8 100644 +--- a/src/openssl/lib_ssl.cr ++++ b/src/openssl/lib_ssl.cr +@@ -2,12 +2,13 @@ require "./lib_crypto" + + {% begin %} + lib LibSSL +- OPENSSL_110 = {{ `command -v pkg-config > /dev/null && pkg-config --atleast-version=1.1.0 libssl || printf %s false`.stringify != "false" }} +- OPENSSL_102 = {{ `command -v pkg-config > /dev/null && pkg-config --atleast-version=1.0.2 libssl || printf %s false`.stringify != "false" }} ++ OPENSSL_110 = {{ LibCrypto::OPENSSL_110 }} ++ OPENSSL_102 = {{ LibCrypto::OPENSSL_102 }} ++ LIBRESSL_250 = {{ LibCrypto::LIBRESSL_250 }} + end + {% end %} + +-@[Link(ldflags: "`command -v pkg-config > /dev/null && pkg-config --libs libssl || printf %s '-lssl -lcrypto'`")] ++@[Link(ldflags: "`command -v pkg-config > /dev/null && pkg-config --libs --silence-errors libssl || printf %s '-lssl -lcrypto'`")] + lib LibSSL + alias Int = LibC::Int + alias Char = LibC::Char +@@ -198,13 +199,17 @@ lib LibSSL + fun sslv23_method = SSLv23_method : SSLMethod + {% end %} + +- {% if OPENSSL_102 %} ++ {% if OPENSSL_102 || LIBRESSL_250 %} + alias ALPNCallback = (SSL, Char**, Char*, Char*, Int, Void*) -> Int +- alias X509VerifyParam = LibCrypto::X509VerifyParam + +- fun ssl_get0_param = SSL_get0_param(handle : SSL) : X509VerifyParam + fun ssl_get0_alpn_selected = SSL_get0_alpn_selected(handle : SSL, data : Char**, len : LibC::UInt*) : Void + fun ssl_ctx_set_alpn_select_cb = SSL_CTX_set_alpn_select_cb(ctx : SSLContext, cb : ALPNCallback, arg : Void*) : Void ++ {% end %} ++ ++ {% if OPENSSL_102 %} ++ alias X509VerifyParam = LibCrypto::X509VerifyParam ++ ++ fun ssl_get0_param = SSL_get0_param(handle : SSL) : X509VerifyParam + fun ssl_ctx_get0_param = SSL_CTX_get0_param(ctx : SSLContext) : X509VerifyParam + fun ssl_ctx_set1_param = SSL_CTX_set1_param(ctx : SSLContext, param : X509VerifyParam) : Int + {% end %} +diff --git a/src/openssl/ssl/context.cr b/src/openssl/ssl/context.cr +index b21568d..a694abd 100644 +--- a/src/openssl/ssl/context.cr ++++ b/src/openssl/ssl/context.cr +@@ -304,7 +304,7 @@ abstract class OpenSSL::SSL::Context + LibSSL.ssl_ctx_set_verify(@handle, mode, nil) + end + +- {% if LibSSL::OPENSSL_102 %} ++ {% if LibSSL::OPENSSL_102 || LibSSL::LIBRESSL_250 %} + + @alpn_protocol : Pointer(Void)? + +@@ -337,6 +337,10 @@ abstract class OpenSSL::SSL::Context + LibSSL.ssl_ctx_set_alpn_select_cb(@handle, alpn_cb, alpn_protocol) + end + ++ {% end %} ++ ++ {% if LibSSL::OPENSSL_102 %} ++ + # Set this context verify param to the default one of the given name. + # + # Depending on the OpenSSL version, the available defaults are +diff --git a/src/openssl/ssl/socket.cr b/src/openssl/ssl/socket.cr +index 10fc100..14c3c16 100644 +--- a/src/openssl/ssl/socket.cr ++++ b/src/openssl/ssl/socket.cr +@@ -119,7 +119,7 @@ abstract class OpenSSL::SSL::Socket < IO + @bio.io.flush + end + +- {% if LibSSL::OPENSSL_102 %} ++ {% if LibSSL::OPENSSL_102 || LibSSL::LIBRESSL_250 %} + # Returns the negotiated ALPN protocol (eg: `"h2"`) of `nil` if no protocol was + # negotiated. + def alpn_protocol +-- +2.10.1 (Apple Git-78) + |