summaryrefslogtreecommitdiff
path: root/modules/lua/lua_vmprep.c
diff options
context:
space:
mode:
Diffstat (limited to 'modules/lua/lua_vmprep.c')
-rw-r--r--modules/lua/lua_vmprep.c218
1 files changed, 81 insertions, 137 deletions
diff --git a/modules/lua/lua_vmprep.c b/modules/lua/lua_vmprep.c
index 7c383ca9..e821fee3 100644
--- a/modules/lua/lua_vmprep.c
+++ b/modules/lua/lua_vmprep.c
@@ -19,6 +19,7 @@
#include "apr_uuid.h"
#include "lua_config.h"
#include "apr_file_info.h"
+#include "mod_auth.h"
APLOG_USE_MODULE(lua);
@@ -96,6 +97,8 @@ static void pstack_dump(lua_State *L, apr_pool_t *r, int level,
/* BEGIN apache lmodule */
+#define makeintegerfield(L, n) lua_pushinteger(L, n); lua_setfield(L, -2, #n)
+
AP_LUA_DECLARE(void) ap_lua_load_apache2_lmodule(lua_State *L)
{
lua_getglobal(L, "package");
@@ -106,130 +109,83 @@ AP_LUA_DECLARE(void) ap_lua_load_apache2_lmodule(lua_State *L)
lua_pop(L, 1); /* empty stack */
lua_getglobal(L, "apache2");
- lua_pushinteger(L, OK);
- lua_setfield(L, -2, "OK");
-
- lua_pushinteger(L, DECLINED);
- lua_setfield(L, -2, "DECLINED");
-
- lua_pushinteger(L, DONE);
- lua_setfield(L, -2, "DONE");
lua_pushstring(L, ap_get_server_banner());
lua_setfield(L, -2, "version");
- lua_pushinteger(L, HTTP_MOVED_TEMPORARILY);
- lua_setfield(L, -2, "HTTP_MOVED_TEMPORARILY");
-
- lua_pushinteger(L, PROXYREQ_NONE);
- lua_setfield(L, -2, "PROXYREQ_NONE");
-
- lua_pushinteger(L, PROXYREQ_PROXY);
- lua_setfield(L, -2, "PROXYREQ_PROXY");
-
- lua_pushinteger(L, PROXYREQ_REVERSE);
- lua_setfield(L, -2, "PROXYREQ_REVERSE");
-
- lua_pushinteger(L, PROXYREQ_RESPONSE);
- lua_setfield(L, -2, "PROXYREQ_RESPONSE");
+ makeintegerfield(L, OK);
+ makeintegerfield(L, DECLINED);
+ makeintegerfield(L, DONE);
+ makeintegerfield(L, HTTP_MOVED_TEMPORARILY);
+ makeintegerfield(L, PROXYREQ_NONE);
+ makeintegerfield(L, PROXYREQ_PROXY);
+ makeintegerfield(L, PROXYREQ_REVERSE);
+ makeintegerfield(L, PROXYREQ_RESPONSE);
+ makeintegerfield(L, PROXYREQ_RESPONSE);
+ makeintegerfield(L, AUTHZ_DENIED);
+ makeintegerfield(L, AUTHZ_GRANTED);
+ makeintegerfield(L, AUTHZ_NEUTRAL);
+ makeintegerfield(L, AUTHZ_GENERAL_ERROR);
+ makeintegerfield(L, AUTHZ_DENIED_NO_USER);
/*
- lua_pushinteger(L, HTTP_CONTINUE);
- lua_setfield(L, -2, "HTTP_CONTINUE");
- lua_pushinteger(L, HTTP_SWITCHING_PROTOCOLS);
- lua_setfield(L, -2, "HTTP_SWITCHING_PROTOCOLS");
- lua_pushinteger(L, HTTP_PROCESSING);
- lua_setfield(L, -2, "HTTP_PROCESSING");
- lua_pushinteger(L, HTTP_OK);
- lua_setfield(L, -2, "HTTP_OK");
- lua_pushinteger(L, HTTP_CREATED);
- lua_setfield(L, -2, "HTTP_CREATED");
- lua_pushinteger(L, HTTP_ACCEPTED);
- lua_setfield(L, -2, "HTTP_ACCEPTED");
- lua_pushinteger(L, HTTP_NON_AUTHORITATIVE);
- lua_setfield(L, -2, "HTTP_NON_AUTHORITATIVE");
- lua_pushinteger(L, HTTP_NO_CONTENT);
- lua_setfield(L, -2, "HTTP_NO_CONTENT");
- lua_pushinteger(L, HTTP_RESET_CONTENT);
- lua_setfield(L, -2, "HTTP_RESET_CONTENT");
- lua_pushinteger(L, HTTP_PARTIAL_CONTENT);
- lua_setfield(L, -2, "HTTP_PARTIAL_CONTENT");
- lua_pushinteger(L, HTTP_MULTI_STATUS);
- lua_setfield(L, -2, "HTTP_MULTI_STATUS");
- lua_pushinteger(L, HTTP_MULTIPLE_CHOICES);
- lua_setfield(L, -2, "HTTP_MULTIPLE_CHOICES");
- lua_pushinteger(L, HTTP_MOVED_PERMANENTLY);
- lua_setfield(L, -2, "HTTP_MOVED_PERMANENTLY");
- lua_pushinteger(L, HTTP_SEE_OTHER);
- lua_setfield(L, -2, "HTTP_SEE_OTHER");
- lua_pushinteger(L, HTTP_NOT_MODIFIED);
- lua_setfield(L, -2, "HTTP_NOT_MODIFIED");
- lua_pushinteger(L, HTTP_USE_PROXY);
- lua_setfield(L, -2, "HTTP_USE_PROXY");
- lua_pushinteger(L, HTTP_TEMPORARY_REDIRECT);
- lua_setfield(L, -2, "HTTP_TEMPORARY_REDIRECT");
- lua_pushinteger(L, HTTP_BAD_REQUEST);
- lua_setfield(L, -2, "HTTP_BAD_REQUEST");
- lua_pushinteger(L, HTTP_UNAUTHORIZED);
- lua_setfield(L, -2, "HTTP_UNAUTHORIZED");
- lua_pushinteger(L, HTTP_PAYMENT_REQUIRED);
- lua_setfield(L, -2, "HTTP_PAYMENT_REQUIRED");
- lua_pushinteger(L, HTTP_FORBIDDEN);
- lua_setfield(L, -2, "HTTP_FORBIDDEN");
- lua_pushinteger(L, HTTP_NOT_FOUND);
- lua_setfield(L, -2, "HTTP_NOT_FOUND");
- lua_pushinteger(L, HTTP_METHOD_NOT_ALLOWED);
- lua_setfield(L, -2, "HTTP_METHOD_NOT_ALLOWED");
- lua_pushinteger(L, HTTP_NOT_ACCEPTABLE);
- lua_setfield(L, -2, "HTTP_NOT_ACCEPTABLE");
- lua_pushinteger(L, HTTP_PROXY_AUTHENTICATION_REQUIRED);
- lua_setfield(L, -2, "HTTP_PROXY_AUTHENTICATION_REQUIRED");
- lua_pushinteger(L, HTTP_REQUEST_TIME_OUT);
- lua_setfield(L, -2, "HTTP_REQUEST_TIME_OUT");
- lua_pushinteger(L, HTTP_CONFLICT);
- lua_setfield(L, -2, "HTTP_CONFLICT");
- lua_pushinteger(L, HTTP_GONE);
- lua_setfield(L, -2, "HTTP_GONE");
- lua_pushinteger(L, HTTP_LENGTH_REQUIRED);
- lua_setfield(L, -2, "HTTP_LENGTH_REQUIRED");
- lua_pushinteger(L, HTTP_PRECONDITION_FAILED);
- lua_setfield(L, -2, "HTTP_PRECONDITION_FAILED");
- lua_pushinteger(L, HTTP_REQUEST_ENTITY_TOO_LARGE);
- lua_setfield(L, -2, "HTTP_REQUEST_ENTITY_TOO_LARGE");
- lua_pushinteger(L, HTTP_REQUEST_URI_TOO_LARGE);
- lua_setfield(L, -2, "HTTP_REQUEST_URI_TOO_LARGE");
- lua_pushinteger(L, HTTP_UNSUPPORTED_MEDIA_TYPE);
- lua_setfield(L, -2, "HTTP_UNSUPPORTED_MEDIA_TYPE");
- lua_pushinteger(L, HTTP_RANGE_NOT_SATISFIABLE);
- lua_setfield(L, -2, "HTTP_RANGE_NOT_SATISFIABLE");
- lua_pushinteger(L, HTTP_EXPECTATION_FAILED);
- lua_setfield(L, -2, "HTTP_EXPECTATION_FAILED");
- lua_pushinteger(L, HTTP_UNPROCESSABLE_ENTITY);
- lua_setfield(L, -2, "HTTP_UNPROCESSABLE_ENTITY");
- lua_pushinteger(L, HTTP_LOCKED);
- lua_setfield(L, -2, "HTTP_LOCKED");
- lua_pushinteger(L, HTTP_FAILED_DEPENDENCY);
- lua_setfield(L, -2, "HTTP_FAILED_DEPENDENCY");
- lua_pushinteger(L, HTTP_UPGRADE_REQUIRED);
- lua_setfield(L, -2, "HTTP_UPGRADE_REQUIRED");
- lua_pushinteger(L, HTTP_INTERNAL_SERVER_ERROR);
- lua_setfield(L, -2, "HTTP_INTERNAL_SERVER_ERROR");
- lua_pushinteger(L, HTTP_NOT_IMPLEMENTED);
- lua_setfield(L, -2, "HTTP_NOT_IMPLEMENTED");
- lua_pushinteger(L, HTTP_BAD_GATEWAY);
- lua_setfield(L, -2, "HTTP_BAD_GATEWAY");
- lua_pushinteger(L, HTTP_SERVICE_UNAVAILABLE);
- lua_setfield(L, -2, "HTTP_SERVICE_UNAVAILABLE");
- lua_pushinteger(L, HTTP_GATEWAY_TIME_OUT);
- lua_setfield(L, -2, "HTTP_GATEWAY_TIME_OUT");
- lua_pushinteger(L, HTTP_VERSION_NOT_SUPPORTED);
- lua_setfield(L, -2, "HTTP_VERSION_NOT_SUPPORTED");
- lua_pushinteger(L, HTTP_VARIANT_ALSO_VARIES);
- lua_setfield(L, -2, "HTTP_VARIANT_ALSO_VARIES");
- lua_pushinteger(L, HTTP_INSUFFICIENT_STORAGE);
- lua_setfield(L, -2, "HTTP_INSUFFICIENT_STORAGE");
- lua_pushinteger(L, HTTP_NOT_EXTENDED);
- lua_setfield(L, -2, "HTTP_NOT_EXTENDED");
+ makeintegerfield(L, HTTP_CONTINUE);
+ makeintegerfield(L, HTTP_SWITCHING_PROTOCOLS);
+ makeintegerfield(L, HTTP_PROCESSING);
+ makeintegerfield(L, HTTP_OK);
+ makeintegerfield(L, HTTP_CREATED);
+ makeintegerfield(L, HTTP_ACCEPTED);
+ makeintegerfield(L, HTTP_NON_AUTHORITATIVE);
+ makeintegerfield(L, HTTP_NO_CONTENT);
+ makeintegerfield(L, HTTP_RESET_CONTENT);
+ makeintegerfield(L, HTTP_PARTIAL_CONTENT);
+ makeintegerfield(L, HTTP_MULTI_STATUS);
+ makeintegerfield(L, HTTP_ALREADY_REPORTED);
+ makeintegerfield(L, HTTP_IM_USED);
+ makeintegerfield(L, HTTP_MULTIPLE_CHOICES);
+ makeintegerfield(L, HTTP_MOVED_PERMANENTLY);
+ makeintegerfield(L, HTTP_MOVED_TEMPORARILY);
+ makeintegerfield(L, HTTP_SEE_OTHER);
+ makeintegerfield(L, HTTP_NOT_MODIFIED);
+ makeintegerfield(L, HTTP_USE_PROXY);
+ makeintegerfield(L, HTTP_TEMPORARY_REDIRECT);
+ makeintegerfield(L, HTTP_PERMANENT_REDIRECT);
+ makeintegerfield(L, HTTP_BAD_REQUEST);
+ makeintegerfield(L, HTTP_UNAUTHORIZED);
+ makeintegerfield(L, HTTP_PAYMENT_REQUIRED);
+ makeintegerfield(L, HTTP_FORBIDDEN);
+ makeintegerfield(L, HTTP_NOT_FOUND);
+ makeintegerfield(L, HTTP_METHOD_NOT_ALLOWED);
+ makeintegerfield(L, HTTP_NOT_ACCEPTABLE);
+ makeintegerfield(L, HTTP_PROXY_AUTHENTICATION_REQUIRED);
+ makeintegerfield(L, HTTP_REQUEST_TIME_OUT);
+ makeintegerfield(L, HTTP_CONFLICT);
+ makeintegerfield(L, HTTP_GONE);
+ makeintegerfield(L, HTTP_LENGTH_REQUIRED);
+ makeintegerfield(L, HTTP_PRECONDITION_FAILED);
+ makeintegerfield(L, HTTP_REQUEST_ENTITY_TOO_LARGE);
+ makeintegerfield(L, HTTP_REQUEST_URI_TOO_LARGE);
+ makeintegerfield(L, HTTP_UNSUPPORTED_MEDIA_TYPE);
+ makeintegerfield(L, HTTP_RANGE_NOT_SATISFIABLE);
+ makeintegerfield(L, HTTP_EXPECTATION_FAILED);
+ makeintegerfield(L, HTTP_UNPROCESSABLE_ENTITY);
+ makeintegerfield(L, HTTP_LOCKED);
+ makeintegerfield(L, HTTP_FAILED_DEPENDENCY);
+ makeintegerfield(L, HTTP_UPGRADE_REQUIRED);
+ makeintegerfield(L, HTTP_PRECONDITION_REQUIRED);
+ makeintegerfield(L, HTTP_TOO_MANY_REQUESTS);
+ makeintegerfield(L, HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE);
+ makeintegerfield(L, HTTP_INTERNAL_SERVER_ERROR);
+ makeintegerfield(L, HTTP_NOT_IMPLEMENTED);
+ makeintegerfield(L, HTTP_BAD_GATEWAY);
+ makeintegerfield(L, HTTP_SERVICE_UNAVAILABLE);
+ makeintegerfield(L, HTTP_GATEWAY_TIME_OUT);
+ makeintegerfield(L, HTTP_VERSION_NOT_SUPPORTED);
+ makeintegerfield(L, HTTP_VARIANT_ALSO_VARIES);
+ makeintegerfield(L, HTTP_INSUFFICIENT_STORAGE);
+ makeintegerfield(L, HTTP_LOOP_DETECTED);
+ makeintegerfield(L, HTTP_NOT_EXTENDED);
+ makeintegerfield(L, HTTP_NETWORK_AUTHENTICATION_REQUIRED);
*/
}
@@ -240,6 +196,7 @@ AP_LUA_DECLARE(void) ap_lua_load_apache2_lmodule(lua_State *L)
/* callback for cleaning up a lua vm when pool is closed */
static apr_status_t cleanup_lua(void *l)
{
+ AP_DEBUG_ASSERT(l != NULL);
lua_close((lua_State *) l);
return APR_SUCCESS;
}
@@ -319,7 +276,7 @@ static int loadjitmodule(lua_State *L, apr_pool_t *lifecycle_pool) {
#endif
-static apr_status_t vm_construct(void **vm, void *params, apr_pool_t *lifecycle_pool)
+static apr_status_t vm_construct(lua_State **vm, void *params, apr_pool_t *lifecycle_pool)
{
lua_State* L;
@@ -357,24 +314,10 @@ static apr_status_t vm_construct(void **vm, void *params, apr_pool_t *lifecycle_
"loading lua file %s", spec->file);
rc = luaL_loadfile(L, spec->file);
if (rc != 0) {
- char *err;
- switch (rc) {
- case LUA_ERRSYNTAX:
- err = "syntax error";
- break;
- case LUA_ERRMEM:
- err = "memory allocation error";
- break;
- case LUA_ERRFILE:
- err = "error opening or reading file";
- break;
- default:
- err = "unknown error";
- break;
- }
ap_log_perror(APLOG_MARK, APLOG_ERR, 0, lifecycle_pool, APLOGNO(01482)
- "Loading lua file %s: %s",
- spec->file, err);
+ "Error loading %s: %s", spec->file,
+ rc == LUA_ERRMEM ? "memory allocation error"
+ : lua_tostring(L, 0));
return APR_EBADF;
}
lua_pcall(L, 0, LUA_MULTRET, 0);
@@ -407,7 +350,8 @@ AP_LUA_DECLARE(lua_State*)ap_lua_get_lua_state(apr_pool_t *lifecycle_pool,
"creating lua_State with file %s", spec->file);
/* not available, so create */
- if(!vm_construct((void **)&L, spec, lifecycle_pool)) {
+ if(!vm_construct(&L, spec, lifecycle_pool)) {
+ AP_DEBUG_ASSERT(L != NULL);
apr_pool_userdata_set(L,
spec->file,
cleanup_lua,