-- -- MySQL LUA Script -- To log SQL errors to the server log. -- lib_mysqludf_log() is required -- local flag = false function read_query( packet ) if packet:byte() == proxy.COM_QUERY then local user = proxy.connection.client.username local host = proxy.connection.client.src.name proxy.queries:append(1, packet, {resultset_is_needed = true}) proxy.queries:append(2, string.char(proxy.COM_QUERY) .. "SET @badquery = \"" .. string.sub(packet, 2) .. "\"", {resultset_is_needed = true} ) proxy.queries:append(3, string.char(proxy.COM_QUERY) .. "SET @baduser = \"" .. user .. "\"", {resultset_is_needed = true} ) proxy.queries:append(4, string.char(proxy.COM_QUERY) .. "SET @badhost = \"" .. host .. "\"", {resultset_is_needed = true} ) proxy.queries:append(5, string.char(proxy.COM_QUERY) .. "SHOW WARNINGS", {resultset_is_needed = true} ) return proxy.PROXY_SEND_QUERY end end function write_log(error_type, error_code, error_message) local query = "SELECT LOG_ERROR(CONCAT(\"SQL-Error: \",NOW(),\" \",@baduser,\"@\",@badhost,\" -> \",\"" .. error_type .. "\",\"" .. " " .. "\",\"" .. error_code .. "\",\"" .. ": " .. "\",\"" .. error_message .. " -- \",@badquery))" proxy.queries:append(6, string.char(proxy.COM_QUERY) .. query, {resultset_is_needed = true}) return proxy.PROXY_SEND_QUERY end function read_query_result(inj) local res = assert(inj.resultset) if inj.id == 1 then flag = false if res.query_status == proxy.MYSQLD_PACKET_ERR then flag = true return proxy.PROXY_IGNORE_RESULT end elseif inj.id == 2 or inj.id == 3 or inj.id == 4 or inj.id == 6 then return proxy.PROXY_IGNORE_RESULT elseif inj.id == 5 then if flag == true then for row in res.rows do proxy.response.type = proxy.MYSQLD_PACKET_ERR proxy.response.errmsg = row[3] write_log(row[1], row[2], row[3]) end return proxy.PROXY_SEND_RESULT end return proxy.PROXY_IGNORE_RESULT end end