src/ssl.c

changeset 34
510432315106
parent 31
87625285de20
child 37
8904bda2369f
--- 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

mercurial