/** * Create a SSL context. */ static int create(lua_State *L) { p_context ctx; SSL_METHOD *method; method = str2method(luaL_checkstring(L, 1)); if (!method) { lua_pushnil(L); lua_pushstring(L, "invalid protocol"); return 2; } ctx = (p_context) lua_newuserdata(L, sizeof(t_context)); if (!ctx) { lua_pushnil(L); lua_pushstring(L, "error creating context"); return 2; } ctx->context = SSL_CTX_new(method); if (!ctx->context) { lua_pushnil(L); lua_pushstring(L, "error creating context"); return 2; } ctx->mode = MD_CTX_INVALID; /* No session support */ SSL_CTX_set_session_cache_mode(ctx->context, SSL_SESS_CACHE_OFF); luaL_getmetatable(L, "SSL:Context"); lua_setmetatable(L, -2); return 1; }
/** * Create a SSL context. */ static int create(lua_State *L) { p_context ctx; const char *str_method; LSEC_SSL_METHOD *method; str_method = luaL_checkstring(L, 1); method = str2method(str_method); if (!method) { lua_pushnil(L); lua_pushfstring(L, "invalid protocol (%s)", str_method); return 2; } ctx = (p_context) lua_newuserdata(L, sizeof(t_context)); if (!ctx) { lua_pushnil(L); lua_pushstring(L, "error creating context"); return 2; } memset(ctx, 0, sizeof(t_context)); ctx->context = SSL_CTX_new(method); if (!ctx->context) { lua_pushnil(L); lua_pushfstring(L, "error creating context (%s)", ERR_reason_error_string(ERR_get_error())); return 2; } ctx->mode = LSEC_MODE_INVALID; ctx->L = L; luaL_getmetatable(L, "SSL:Context"); lua_setmetatable(L, -2); /* No session support */ SSL_CTX_set_session_cache_mode(ctx->context, SSL_SESS_CACHE_OFF); /* Link LuaSec context with the OpenSSL context */ SSL_CTX_set_app_data(ctx->context, ctx); return 1; }