1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
#include "masscan.h"
#include "scripting.h"
#include "stub-lua.h"
#include "logger.h"
#include <stdlib.h>
/***************************************************************************
***************************************************************************/
void
scripting_init(struct Masscan *masscan)
{
int version;
struct lua_State *L;
const char *filename = masscan->scripting.name;
int x;
if (filename == 0 || filename[0] == '\0') {
LOG(0, "%s: no script specified, use --script option\n", "SCRIPTING");
exit(1);
}
/* Dynamically link the library */
stublua_init();
/* Test to see if the loading was successful */
version = (int)*lua_version(0);
LOG(1, "Lua version = %d\n", version);
if (version != 503 && version != 502) {
LOG(0, "Unable to load Lua library\n");
exit(1);
}
/*
* Create a Lua VM
*/
L = luaL_newstate();
luaL_openlibs(L);
masscan->scripting.L = L;
/*
* TODO: Sanbox stuff
*/
/* We need to do a bunch of sandboxing here to prevent hostile or badly
* written scripts from disrupting the system */
/*
* Create the Masscan object
*/
scripting_masscan_init(masscan);
/*
* Load the script. This will verify the syntax.
*/
x = luaL_loadfile(L, filename);
if (x != LUA_OK) {
LOG(0, "%s error loading: %s: %s\n", "SCRIPTING:", filename, lua_tostring(L, -1));
lua_close(L);
exit(1);
}
/*
* Lua: Start running the script. At this stage, the "onConnection()" function doesn't
* run. Instead, it's registered as a global function to be called later.
*/
LOG(1, "%s running script: %s\n", "SCRIPTING:", filename);
x = lua_pcall(L, 0, 0, 0);
if (x != LUA_OK) {
LOG(0, "%s error running: %s: %s\n", "SCRIPTING:", filename, lua_tostring(L, -1));
lua_close(L);
exit(1);
}
}
|