mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-07-25 20:25:28 +03:00
120 lines
5.3 KiB
Diff
120 lines
5.3 KiB
Diff
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)
|
|
|