Browse Source

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 <[email protected]>

SVN-Revision: 31571
Jo-Philipp Wich 13 years ago
parent
commit
54b34ccbc5

+ 10 - 2
package/uhttpd/src/uhttpd-lua.c

@@ -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();
 	const char *err_str = NULL;
@@ -164,12 +164,20 @@ lua_State * uh_lua_init(const char *handler)
 	lua_pushcfunction(L, uh_lua_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 = { ... } */
 	lua_setfield(L, LUA_GLOBALSINDEX, "uhttpd");
 
 
 	/* load Lua handler */
-	switch( luaL_loadfile(L, handler) )
+	switch( luaL_loadfile(L, conf->lua_handler) )
 	{
 		case LUA_ERRSYNTAX:
 			fprintf(stderr,

+ 1 - 1
package/uhttpd/src/uhttpd-lua.h

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

+ 1 - 1
package/uhttpd/src/uhttpd.c

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

+ 1 - 1
package/uhttpd/src/uhttpd.h

@@ -83,7 +83,7 @@ struct config {
 	char *lua_prefix;
 	char *lua_handler;
 	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_request) (struct client *cl, struct http_request *req, lua_State *L);
 #endif