Загрузка библиотек Lua при старте
Раздел : Для админов и билдеров
Опубликовано Flanker [06.06.2013]

При запуске Луа в маде есть некоторые особенности о которых хотелось бы написать отдельно. Проблема в том, что стандартный старт Луа и библиотек выглядит примерно так:

 

 

lua_State *vLm;

vLm = lua_open();

luaL_openlibs(vLm);

 

 

При При таком запуске Lua у нас запускается сам Луа,дальше подгружаются все стандартные библиотеки. Не знаю как вас, а меня это не очень устраивает по причине того, что в этом случае любой сторонний пользователь кого мы будем допускать к работе с нашим Луа будет иметь полный доступ к файловой системе сервера и ряду функций операционной системы, что имхо не очень хорошо. Что же делать?

Совсем не подключать стандартные бибилиотеки плохо нам наверняка понадобится и математическая библиотека и библиотека для работы со строками ну и конечно библиотека таблиц. Погуглив интернет я нашел следующее решение проблемы:

 //Сам Lua мы открываем как обычно

 

lua_State *vLm;

vLm = lua_open();

//А вот дальше грузим только нужные нам библиотеки следующим образом

lua_pushcfunction(vLm,luaopen_base);
lua_pushstring(vLm,"");
lua_call(vLm,1,0);
lua_pushcfunction(vLm,luaopen_math);
lua_pushstring(vLm,"");
lua_call(vLm,1,0);
lua_pushcfunction(vLm,luaopen_table);
lua_pushstring(vLm,"");
lua_call(vLm,1,0);
lua_pushcfunction(vLm,luaopen_string);
lua_pushstring(vLm,"");
lua_call(vLm,1,0);
lua_pushcfunction(vLm,luaopen_package);
lua_pushstring(vLm,LUA_LOADLIBNAME);
lua_call(vLm,1,0);

 

 И вуаля! У нас загрузилась базовая, математическая, табличная библиотека и библиотека для работы с пакетами, а вот библиотека ввода-вывода(IO) и библиотека операционной системы (OS) не загружены и функции их не работают. В процессе работы вы все же выясните, что разрешить пользователю Луа доступ к вводу-выводу все же надо, но как-то ограничить, неплохую возможность для этого я опишу в следующей статье.