int luaopen_sax(lua_State* lua) { #ifdef LUA_SANDBOX lua_newtable(lua); lsb_add_serialize_function(lua, serialize_sax); lsb_add_output_function(lua, output_sax); lua_replace(lua, LUA_ENVIRONINDEX); #endif // LUA_SANDBOX /* We're registering sax_equal separately since it's the only way to make lua * aware that it's exactly the same function each time * (otherwise it doesn't get called on different object types) */ lua_pushcfunction(lua, sax_equal); reg_class(lua, mozsvc_sax_window, saxlib_win); reg_class(lua, mozsvc_sax_word, saxlib_word); lua_newtable(lua); luaL_register(lua, NULL, saxlib_f); reg_module(lua, mozsvc_sax_word_suffix, sax_new_word); reg_module(lua, mozsvc_sax_win_suffix, sax_new_window); lua_pushvalue(lua, -1); lua_setfield(lua, LUA_GLOBALSINDEX, mozsvc_sax_table); return 1; }
static int luaopen_ud(lua_State *lua) { lua_newtable(lua); lsb_add_serialize_function(lua, ud_serialize); lsb_add_output_function(lua, ud_output); lua_replace(lua, LUA_ENVIRONINDEX); luaL_newmetatable(lua, mozsvc_test_ud); luaL_register(lua, "ud", testudlib_f); return 1; }
int luaopen_rjson(lua_State *lua) { #ifdef LUA_SANDBOX lua_newtable(lua); lsb_add_output_function(lua, output_rjson); lua_replace(lua, LUA_ENVIRONINDEX); #endif luaL_newmetatable(lua, mozsvc_rjson_schema); lua_pushvalue(lua, -1); lua_setfield(lua, -2, "__index"); luaL_register(lua, NULL, schemalib_m); lua_pop(lua, 1); luaL_newmetatable(lua, mozsvc_rjson_object_iter); lua_pushvalue(lua, -1); lua_setfield(lua, -2, "__index"); luaL_register(lua, NULL, iterlib_m); lua_pop(lua, 1); luaL_newmetatable(lua, mozsvc_rjson); lua_pushvalue(lua, -1); lua_setfield(lua, -2, "__index"); luaL_register(lua, NULL, rjsonlib_m); luaL_register(lua, "rjson", rjsonlib_f); #ifdef LUA_SANDBOX lua_getfield(lua, LUA_REGISTRYINDEX, LSB_HEKA_THIS_PTR); lsb_heka_sandbox *hsb = static_cast<lsb_heka_sandbox *>(lua_touserdata(lua, -1)); lua_pop(lua, 1); // remove this ptr if (hsb) { lua_pushcfunction(lua, rjson_make_field); lua_setfield(lua, -3, "make_field"); // special case parse_message and give it easy access to the sandbox // configuration value it requires lua_getfield(lua, LUA_REGISTRYINDEX, LSB_CONFIG_TABLE); if (lua_type(lua, -1) != LUA_TTABLE) { return luaL_error(lua, LSB_CONFIG_TABLE " is missing"); } lua_getfield(lua, -1, LSB_HEKA_MAX_MESSAGE_SIZE); lua_pushcclosure(lua, rjson_parse_message, 1); lua_setfield(lua, -3, "parse_message"); lua_pop(lua, 1); // remove LSB_CONFIG_TABLE } #endif return 1; }
int luaopen_hyperloglog(lua_State *lua) { #ifdef LUA_SANDBOX lua_newtable(lua); lsb_add_serialize_function(lua, serialize_hyperloglog); lsb_add_output_function(lua, output_hyperloglog); lua_replace(lua, LUA_ENVIRONINDEX); #endif luaL_newmetatable(lua, mozsvc_hyperloglog); lua_pushvalue(lua, -1); lua_setfield(lua, -2, "__index"); luaL_register(lua, NULL, hyperlogloglib_m); luaL_register(lua, "hyperloglog", hyperlogloglib_f); return 1; }
int luaopen_heka_json(lua_State *lua) { lua_newtable(lua); lsb_add_output_function(lua, output_heka_json); lua_replace(lua, LUA_ENVIRONINDEX); luaL_newmetatable(lua, mozsvc_heka_schema); lua_pushvalue(lua, -1); lua_setfield(lua, -2, "__index"); luaL_register(lua, NULL, schemalib_m); lua_pop(lua, 1); luaL_newmetatable(lua, mozsvc_heka_object_iter); lua_pushvalue(lua, -1); lua_setfield(lua, -2, "__index"); luaL_register(lua, NULL, iterlib_m); lua_pop(lua, 1); luaL_newmetatable(lua, mozsvc_heka_json); lua_pushvalue(lua, -1); lua_setfield(lua, -2, "__index"); luaL_register(lua, NULL, hjlib_m); luaL_register(lua, mozsvc_heka_json_table, hjlib_f); // special case parse_message since it needs access to the sandbox lua_getfield(lua, LUA_REGISTRYINDEX, LSB_CONFIG_TABLE); if (lua_type(lua, -1) != LUA_TTABLE) { return luaL_error(lua, LSB_CONFIG_TABLE " is missing"); } lsb_lua_sandbox *lsb = static_cast<lsb_lua_sandbox *> (lua_touserdata(lua, lua_upvalueindex(1))); lua_pushlightuserdata(lua, static_cast<void *>(lsb)); lua_getfield(lua, -2, LSB_HEKA_MAX_MESSAGE_SIZE); lua_pushcclosure(lua, hj_parse_message, 2); lua_setfield(lua, -3, "parse_message"); lua_pop(lua, 1); // remove LSB_CONFIG_TABLE return 1; }