63 lines
1.5 KiB
OpenEdge ABL
63 lines
1.5 KiB
OpenEdge ABL
|
/* libinjection.i SWIG interface file */
|
||
|
%module libinjection
|
||
|
%{
|
||
|
#include "libinjection.h"
|
||
|
#include "libinjection_sqli.h"
|
||
|
|
||
|
static char libinjection_lua_lookup_word(sfilter* sf, int lookup_type,
|
||
|
const char* s, size_t len)
|
||
|
{
|
||
|
lua_State* L = (lua_State*) sf->userdata;
|
||
|
//char* luafunc = (char *)lua_tostring(L, 2);
|
||
|
lua_getglobal(L, "lookup_word");
|
||
|
SWIG_NewPointerObj(L, (void*)sf, SWIGTYPE_p_libinjection_sqli_state, 0);
|
||
|
lua_pushnumber(L, lookup_type);
|
||
|
lua_pushlstring(L, s, len);
|
||
|
|
||
|
if (lua_pcall(L, 3, 1, 0)) {
|
||
|
printf("Something bad happened");
|
||
|
}
|
||
|
|
||
|
const char* result = lua_tostring(L, -1);
|
||
|
if (result == NULL) {
|
||
|
return 0;
|
||
|
} else {
|
||
|
return result[0];
|
||
|
}
|
||
|
}
|
||
|
%}
|
||
|
%include "typemaps.i"
|
||
|
|
||
|
|
||
|
// The C functions all start with 'libinjection_' as a namespace
|
||
|
// We don't need this since it's in the libinjection table
|
||
|
// i.e. libinjection.libinjection_is_sqli --> libinjection.is_sqli
|
||
|
//
|
||
|
%rename("%(strip:[libinjection_])s") "";
|
||
|
|
||
|
%typemap(in) (ptr_lookup_fn fn, void* userdata) {
|
||
|
if (lua_isnil(L, 1)) {
|
||
|
arg2 = NULL;
|
||
|
arg3 = NULL;
|
||
|
} else {
|
||
|
arg2 = libinjection_lua_lookup_word;
|
||
|
arg3 = (void *) L;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
%typemap(out) stoken_t [ANY] {
|
||
|
int i;
|
||
|
lua_newtable(L);
|
||
|
for (i = 0; i < $1_dim0; i++) {
|
||
|
lua_pushnumber(L, i+1);
|
||
|
SWIG_NewPointerObj(L, (void*)(& $1[i]), SWIGTYPE_p_stoken_t,0);
|
||
|
lua_settable(L, -3);
|
||
|
}
|
||
|
SWIG_arg += 1;
|
||
|
}
|
||
|
|
||
|
|
||
|
%include "libinjection.h"
|
||
|
%include "libinjection_sqli.h"
|