Compatibility with OpenSSL 1.1.0

Defining macros X509_up_ref() and SSL_is_server to use the same
API of OpenSSL 1.1.0.
This commit is contained in:
Bruno Silvestre 2016-09-14 17:47:09 -03:00
parent 80a527d630
commit 4889830d53
2 changed files with 11 additions and 8 deletions

View File

@ -35,10 +35,6 @@ typedef const SSL_METHOD LSEC_SSL_METHOD;
typedef SSL_METHOD LSEC_SSL_METHOD; typedef SSL_METHOD LSEC_SSL_METHOD;
#endif #endif
#if OPENSSL_VERSION_NUMBER>=0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)
#define SSLv23_method() TLS_method()
#endif
/*-- Compat - Lua 5.1 --------------------------------------------------------*/ /*-- Compat - Lua 5.1 --------------------------------------------------------*/
#if (LUA_VERSION_NUM == 501) #if (LUA_VERSION_NUM == 501)

View File

@ -31,6 +31,13 @@
#include "context.h" #include "context.h"
#include "ssl.h" #include "ssl.h"
#if defined(LIBRESSL_VERSION_NUMBER) || OPENSSL_VERSION_NUMBER<0x10100000L
#define SSL_is_server(s) (s->server)
#define X509_up_ref(c) CRYPTO_add(&c->references, 1, CRYPTO_LOCK_X509)
#endif
/** /**
* Underline socket error. * Underline socket error.
*/ */
@ -460,7 +467,7 @@ static int meth_getpeercertificate(lua_State *L)
/* In a server-context, the stack doesn't contain the peer cert, /* In a server-context, the stack doesn't contain the peer cert,
* so adjust accordingly. * so adjust accordingly.
*/ */
if (ssl->ssl->server) if (SSL_is_server(ssl->ssl))
--n; --n;
certs = SSL_get_peer_cert_chain(ssl->ssl); certs = SSL_get_peer_cert_chain(ssl->ssl);
if (n >= sk_X509_num(certs)) { if (n >= sk_X509_num(certs)) {
@ -470,7 +477,7 @@ static int meth_getpeercertificate(lua_State *L)
cert = sk_X509_value(certs, n); cert = sk_X509_value(certs, n);
/* Increment the reference counting of the object. */ /* Increment the reference counting of the object. */
/* See SSL_get_peer_certificate() source code. */ /* See SSL_get_peer_certificate() source code. */
CRYPTO_add(&cert->references, 1, CRYPTO_LOCK_X509); X509_up_ref(cert);
lsec_pushx509(L, cert); lsec_pushx509(L, cert);
return 1; return 1;
} }
@ -492,7 +499,7 @@ static int meth_getpeerchain(lua_State *L)
return 2; return 2;
} }
lua_newtable(L); lua_newtable(L);
if (ssl->ssl->server) { if (SSL_is_server(ssl->ssl)) {
lsec_pushx509(L, SSL_get_peer_certificate(ssl->ssl)); lsec_pushx509(L, SSL_get_peer_certificate(ssl->ssl));
lua_rawseti(L, -2, idx++); lua_rawseti(L, -2, idx++);
} }
@ -502,7 +509,7 @@ static int meth_getpeerchain(lua_State *L)
cert = sk_X509_value(certs, i); cert = sk_X509_value(certs, i);
/* Increment the reference counting of the object. */ /* Increment the reference counting of the object. */
/* See SSL_get_peer_certificate() source code. */ /* See SSL_get_peer_certificate() source code. */
CRYPTO_add(&cert->references, 1, CRYPTO_LOCK_X509); X509_up_ref(cert);
lsec_pushx509(L, cert); lsec_pushx509(L, cert);
lua_rawseti(L, -2, idx++); lua_rawseti(L, -2, idx++);
} }