From: Victor Julien Date: Fri, 28 Mar 2014 16:24:22 +0000 (+0100) Subject: output-lua: add HttpGetRequestHost callback X-Git-Tag: suricata-2.1beta2~132 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8360b707e88abca5dafaa8a571600a343fcbc48e;p=thirdparty%2Fsuricata.git output-lua: add HttpGetRequestHost callback Get the host from libhtp's tx->request_hostname, which can either be the host portion of the url or the host portion of the Host header. Example: http_host = HttpGetRequestHost() if http_host == nil then http_host = "" end --- diff --git a/src/output-lua-http.c b/src/output-lua-http.c index 2066199775..be7428da64 100644 --- a/src/output-lua-http.c +++ b/src/output-lua-http.c @@ -76,6 +76,22 @@ int LuaStateNeedProto(lua_State *luastate, AppProto alproto) } +static int HttpGetRequestHost(lua_State *luastate) +{ + if (!(LuaStateNeedProto(luastate, ALPROTO_HTTP))) + return LuaCallbackError(luastate, "error: protocol not http"); + + htp_tx_t *tx = LuaStateGetTX(luastate); + if (tx == NULL) + return LuaCallbackError(luastate, "internal error: no tx"); + + if (tx->request_hostname == NULL) + return LuaCallbackError(luastate, "no request hostname"); + + return LuaReturnStringBuffer(luastate, + bstr_ptr(tx->request_hostname), bstr_len(tx->request_hostname)); +} + static int HttpGetRequestUriRaw(lua_State *luastate) { if (!(LuaStateNeedProto(luastate, ALPROTO_HTTP))) @@ -285,6 +301,8 @@ int LogLuaRegisterHttpFunctions(lua_State *luastate) lua_setglobal(luastate, "HttpGetRequestHeaders"); lua_pushcfunction(luastate, HttpGetResponseHeaders); lua_setglobal(luastate, "HttpGetResponseHeaders"); + lua_pushcfunction(luastate, HttpGetRequestHost); + lua_setglobal(luastate, "HttpGetRequestHost"); return 0; }