--- a/src/ssl.c Sat Nov 20 20:04:11 2010 -0800 +++ b/src/ssl.c Sun Nov 21 20:14:31 2010 -0800 @@ -209,20 +209,28 @@ { p_ssl ssl; int mode = ctx_getmode(L, 1); - SSL_CTX *ctx = ctx_getcontext(L, 1); + p_context ctx = checkctx(L, 1); if (mode == MD_CTX_INVALID) { lua_pushnil(L); lua_pushstring(L, "invalid mode"); return 2; } + if (luasec_ssl_idx == -1) { + luasec_ssl_idx = SSL_get_ex_new_index(0, "luasec context", NULL, NULL, NULL); + if (luasec_ssl_idx == -1) { + lua_pushnil(L); + lua_pushstring(L, "error creating luasec SSL index"); + return 2; + } + } ssl = (p_ssl) lua_newuserdata(L, sizeof(t_ssl)); if (!ssl) { lua_pushnil(L); lua_pushstring(L, "error creating SSL object"); return 2; } - ssl->ssl = SSL_new(ctx); + ssl->ssl = SSL_new(ctx->context); if (!ssl->ssl) { lua_pushnil(L); lua_pushstring(L, "error creating SSL object"); @@ -237,6 +245,8 @@ SSL_set_mode(ssl->ssl, SSL_MODE_RELEASE_BUFFERS); #endif + SSL_set_ex_data(ssl->ssl, luasec_ssl_idx, ctx); + if (mode == MD_CTX_SERVER) SSL_set_accept_state(ssl->ssl); else