src/ssl.c

changeset 41
e26f1f91118a
parent 40
85d59ac3328b
--- a/src/ssl.c	Sun Jul 03 13:13:36 2011 -0700
+++ b/src/ssl.c	Sun Jul 03 13:13:36 2011 -0700
@@ -23,7 +23,7 @@
 /* index into the SSL storage where the t_ssl is.
  * see SSL_get_ex_data().
  */
- static int luasec_ssl_idx;
+ int luasec_ssl_idx;
 
 /**
  * Map error code into string.
@@ -61,6 +61,8 @@
     SSL_free(ssl->ssl);
     ssl->ssl = NULL;
   }
+  luaL_unref(L, LUA_REGISTRYINDEX, ssl->t_cert_errors);
+  ssl->t_cert_errors = LUA_NOREF;
   return 0;
 }
 
@@ -251,6 +253,7 @@
 #endif
 
   SSL_set_ex_data(ssl->ssl, luasec_ssl_idx, ssl);
+  ssl->t_cert_errors = LUA_NOREF;
 
   if (mode == MD_CTX_SERVER)
     SSL_set_accept_state(ssl->ssl);
@@ -403,18 +406,12 @@
 /**
  * Return the validation state of the peer chain
  */
-static int meth_getpeerchainvalid(lua_State *L)
+static int meth_getpeerverification(lua_State *L)
 {
   p_ssl ssl = (p_ssl)luaL_checkudata(L, 1, "SSL:Connection");
-  long result = SSL_get_verify_result(ssl->ssl);
 
-  if (result == X509_V_OK) {
-    lua_pushboolean(L, 1);
-    return 1;
-  }
-
-  lua_pushboolean(L, 0);
-  lua_pushstring(L, X509_verify_cert_error_string(result));
+  lua_pushboolean(L, SSL_get_verify_result(ssl->ssl) == X509_V_OK);
+  lua_rawgeti(L, LUA_REGISTRYINDEX, ssl->t_cert_errors);
   return 2;
 }
 
@@ -552,7 +549,7 @@
   {"compression",       meth_compression},
   {"getpeercertificate",meth_getpeercertificate},
   {"getpeerchain",      meth_getpeerchain},
-  {"getpeerchainvalid", meth_getpeerchainvalid},
+  {"getpeerverification", meth_getpeerverification},
   {"getfinished",       meth_getfinished},
   {"getpeerfinished",   meth_getpeerfinished},
   {NULL,                NULL}

mercurial