aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatarLibravatar William Ahern <william@25thandclement.com> 2016-11-23 18:07:51 -0800
committerLibravatarLibravatar William Ahern <william@25thandclement.com> 2016-11-23 18:07:51 -0800
commit7eab0a7ba9b8c1a1e48e03ceb913f2c9c9cefe6d (patch)
tree5f0a01ba9958b7af3974b7c597278a5e0e51152e
parent7dbd5609c0866a101b3e0715e32ab704d91e416f (diff)
parent0362804658c4b7eb4abc2c4c9a64e154855c24ee (diff)
downloadluaossl-7eab0a7ba9b8c1a1e48e03ceb913f2c9c9cefe6d.tar.gz
luaossl-7eab0a7ba9b8c1a1e48e03ceb913f2c9c9cefe6d.tar.bz2
luaossl-7eab0a7ba9b8c1a1e48e03ceb913f2c9c9cefe6d.zip
Merge branch 'ctx-getStore' of https://github.com/daurnimator/luaossl into daurnimator-ctx-getStore
-rw-r--r--src/openssl.c41
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 },