Пример #1
0
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;
}
Пример #2
0
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;
}
Пример #3
0
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;
}
Пример #5
0
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;
}