]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
output-lua: add HttpGetRequestHost callback
authorVictor Julien <victor@inliniac.net>
Fri, 28 Mar 2014 16:24:22 +0000 (17:24 +0100)
committerVictor Julien <victor@inliniac.net>
Fri, 15 Aug 2014 11:58:26 +0000 (13:58 +0200)
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 = "<hostname unknown>"
    end

src/output-lua-http.c

index 2066199775e2cef2ed4c0c9a80a16559c2a0eb24..be7428da64ce137a1b3e5675666f34e8652e5d6d 100644 (file)
@@ -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;
 }