uhttpd: added uhttpd.docroot

Passes the document-root to the Lua handler by placing it in uhttpd.docroot.

It could alternatively be placed in env.DOCUMENT_ROOT which would more closely
resemble the CGI protocol; but would mean that it is not available at the time
when the handler-chunk is loaded but rather not until the handler is called,
without any code savings.

Signed-off-by: David Favro <openwrt@meta-dynamic.com>

SVN-Revision: 31571
This commit is contained in:
Jo-Philipp Wich 2012-05-03 17:19:20 +00:00
parent bcd8d530d1
commit 54b34ccbc5
4 changed files with 13 additions and 5 deletions

View file

@ -137,7 +137,7 @@ static int uh_lua_urlencode(lua_State *L)
} }
lua_State * uh_lua_init(const char *handler) lua_State * uh_lua_init(const struct config *conf)
{ {
lua_State *L = lua_open(); lua_State *L = lua_open();
const char *err_str = NULL; const char *err_str = NULL;
@ -164,12 +164,20 @@ lua_State * uh_lua_init(const char *handler)
lua_pushcfunction(L, uh_lua_urlencode); lua_pushcfunction(L, uh_lua_urlencode);
lua_setfield(L, -2, "urlencode"); lua_setfield(L, -2, "urlencode");
/* Pass the document-root to the Lua handler by placing it in
** uhttpd.docroot. It could alternatively be placed in env.DOCUMENT_ROOT
** which would more closely resemble the CGI protocol; but would mean that
** it is not available at the time when the handler-chunk is loaded but
** rather not until the handler is called, without any code savings. */
lua_pushstring(L, conf->docroot);
lua_setfield(L, -2, "docroot");
/* _G.uhttpd = { ... } */ /* _G.uhttpd = { ... } */
lua_setfield(L, LUA_GLOBALSINDEX, "uhttpd"); lua_setfield(L, LUA_GLOBALSINDEX, "uhttpd");
/* load Lua handler */ /* load Lua handler */
switch( luaL_loadfile(L, handler) ) switch( luaL_loadfile(L, conf->lua_handler) )
{ {
case LUA_ERRSYNTAX: case LUA_ERRSYNTAX:
fprintf(stderr, fprintf(stderr,

View file

@ -32,7 +32,7 @@
#define UH_LUA_ERR_PARAM -3 #define UH_LUA_ERR_PARAM -3
lua_State * uh_lua_init(); lua_State * uh_lua_init(const struct config *conf);
void uh_lua_request( void uh_lua_request(
struct client *cl, struct http_request *req, lua_State *L struct client *cl, struct http_request *req, lua_State *L

View file

@ -1089,7 +1089,7 @@ int main (int argc, char **argv)
if( ! conf.lua_prefix ) if( ! conf.lua_prefix )
conf.lua_prefix = "/lua"; conf.lua_prefix = "/lua";
conf.lua_state = conf.lua_init(conf.lua_handler); conf.lua_state = conf.lua_init(&conf);
} }
} }
#endif #endif

View file

@ -83,7 +83,7 @@ struct config {
char *lua_prefix; char *lua_prefix;
char *lua_handler; char *lua_handler;
lua_State *lua_state; lua_State *lua_state;
lua_State * (*lua_init) (const char *handler); lua_State * (*lua_init) (const struct config *conf);
void (*lua_close) (lua_State *L); void (*lua_close) (lua_State *L);
void (*lua_request) (struct client *cl, struct http_request *req, lua_State *L); void (*lua_request) (struct client *cl, struct http_request *req, lua_State *L);
#endif #endif