diff options
author | William Ahern <william@25thandclement.com> | 2016-11-23 18:07:51 -0800 |
---|---|---|
committer | William Ahern <william@25thandclement.com> | 2016-11-23 18:07:51 -0800 |
commit | 7eab0a7ba9b8c1a1e48e03ceb913f2c9c9cefe6d (patch) | |
tree | 5f0a01ba9958b7af3974b7c597278a5e0e51152e /src | |
parent | 7dbd5609c0866a101b3e0715e32ab704d91e416f (diff) | |
parent | 0362804658c4b7eb4abc2c4c9a64e154855c24ee (diff) | |
download | luaossl-7eab0a7ba9b8c1a1e48e03ceb913f2c9c9cefe6d.tar.gz luaossl-7eab0a7ba9b8c1a1e48e03ceb913f2c9c9cefe6d.tar.bz2 luaossl-7eab0a7ba9b8c1a1e48e03ceb913f2c9c9cefe6d.zip |
Merge branch 'ctx-getStore' of https://github.com/daurnimator/luaossl into daurnimator-ctx-getStore
Diffstat (limited to 'src')
-rw-r--r-- | src/openssl.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/openssl.c b/src/openssl.c index 8af1d3d..ee2cd68 100644 --- a/src/openssl.c +++ b/src/openssl.c @@ -285,6 +285,10 @@ #define HAVE_X509_UP_REF OPENSSL_PREREQ(1,1,0) #endif +#ifndef HAVE_X509_STORE_UP_REF +#define HAVE_X509_STORE_UP_REF OPENSSL_PREREQ(1,1,0) +#endif + #ifndef HMAC_INIT_EX_INT #define HMAC_INIT_EX_INT OPENSSL_PREREQ(1,0,0) #endif @@ -1637,6 +1641,18 @@ static int compat_X509_up_ref(X509 *crt) { } /* compat_X509_up_ref() */ #endif +#if !HAVE_X509_STORE_UP_REF +#define X509_STORE_up_ref(...) compat_X509_STORE_up_ref(__VA_ARGS__) + +static int compat_X509_STORE_up_ref(X509_STORE *crt) { + /* our caller should already have had a proper reference */ + if (CRYPTO_add(&crt->references, 1, CRYPTO_LOCK_X509_STORE) < 2) + return 0; /* fail */ + + return 1; +} /* compat_X509_STORE_up_ref() */ +#endif + static int compat_init(void) { static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; static int store_index = -1, ssl_ctx_index = -1, done; @@ -6826,6 +6842,16 @@ static int xs_new(lua_State *L) { } /* xs_new() */ +static X509_STORE *xs_push(lua_State *L, X509_STORE *store) { + X509_STORE **ud = prepsimple(L, X509_STORE_CLASS); + + X509_STORE_up_ref(store); + *ud = store; + + return *ud; +} /* xs_push() */ + + static int xs_interpose(lua_State *L) { return interpose(L, X509_STORE_CLASS); } /* xs_interpose() */ @@ -7348,6 +7374,20 @@ static int sx_setStore(lua_State *L) { } /* sx_setStore() */ +static int sx_getStore(lua_State *L) { + SSL_CTX *ctx = checksimple(L, 1, SSL_CTX_CLASS); + X509_STORE *store; + + if((store = SSL_CTX_get_cert_store(ctx))) { + xs_push(L, store); + } else { + lua_pushnil(L); + } + + return 1; +} /* sx_getStore() */ + + static int sx_setVerify(lua_State *L) { SSL_CTX *ctx = checksimple(L, 1, SSL_CTX_CLASS); int mode = luaL_optint(L, 2, -1); @@ -7614,6 +7654,7 @@ static const auxL_Reg sx_methods[] = { { "getOptions", &sx_getOptions }, { "clearOptions", &sx_clearOptions }, { "setStore", &sx_setStore }, + { "getStore", &sx_getStore }, { "setVerify", &sx_setVerify }, { "getVerify", &sx_getVerify }, { "setCertificate", &sx_setCertificate }, |