From: Jason Ish Date: Thu, 9 Jan 2020 17:43:41 +0000 (-0600) Subject: dns: cleanup: move DnsGetRcode (Lua) to rust X-Git-Tag: suricata-6.0.0-beta1~667 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d809b0959b2466de38f171cd1ab0ea9173eef0b7;p=thirdparty%2Fsuricata.git dns: cleanup: move DnsGetRcode (Lua) to rust Move the implementation of Lua DnsGetRcode to Rust. --- diff --git a/rust/src/dns/log.rs b/rust/src/dns/log.rs index cd8ef9758c..beade5a35c 100644 --- a/rust/src/dns/log.rs +++ b/rust/src/dns/log.rs @@ -340,7 +340,7 @@ pub fn dns_rrtype_string(rrtype: u16) -> String { }.to_string() } -fn dns_rcode_string(flags: u16) -> String { +pub fn dns_rcode_string(flags: u16) -> String { match flags & 0x000f { DNS_RCODE_NOERROR => "NOERROR", DNS_RCODE_FORMERR => "FORMERR", diff --git a/rust/src/dns/lua.rs b/rust/src/dns/lua.rs index bbd6e0de43..f40ea6836e 100644 --- a/rust/src/dns/lua.rs +++ b/rust/src/dns/lua.rs @@ -56,6 +56,24 @@ pub extern "C" fn rs_dns_lua_get_rrname(clua: &mut CLuaState, return 0; } +#[no_mangle] +pub extern "C" fn rs_dns_lua_get_rcode(clua: &mut CLuaState, + tx: &mut DNSTransaction) + -> c_int +{ + let lua = LuaState{ + lua: clua, + }; + + let rcode = tx.rcode(); + if rcode > 0 { + lua.pushstring(&dns_rcode_string(rcode)); + return 1; + } + + return 0; +} + #[no_mangle] pub extern "C" fn rs_dns_lua_get_query_table(clua: &mut CLuaState, tx: &mut DNSTransaction) diff --git a/src/app-layer-dns-common.c b/src/app-layer-dns-common.c index 44a49215be..ccdf305c28 100644 --- a/src/app-layer-dns-common.c +++ b/src/app-layer-dns-common.c @@ -81,68 +81,3 @@ void DNSAppLayerRegisterGetEventInfoById(uint8_t ipproto, AppProto alproto) return; } - -void DNSCreateRcodeString(uint8_t rcode, char *str, size_t str_size) -{ - switch (rcode) { - case DNS_RCODE_NOERROR: - snprintf(str, str_size, "NOERROR"); - break; - case DNS_RCODE_FORMERR: - snprintf(str, str_size, "FORMERR"); - break; - case DNS_RCODE_SERVFAIL: - snprintf(str, str_size, "SERVFAIL"); - break; - case DNS_RCODE_NXDOMAIN: - snprintf(str, str_size, "NXDOMAIN"); - break; - case DNS_RCODE_NOTIMP: - snprintf(str, str_size, "NOTIMP"); - break; - case DNS_RCODE_REFUSED: - snprintf(str, str_size, "REFUSED"); - break; - case DNS_RCODE_YXDOMAIN: - snprintf(str, str_size, "YXDOMAIN"); - break; - case DNS_RCODE_YXRRSET: - snprintf(str, str_size, "YXRRSET"); - break; - case DNS_RCODE_NXRRSET: - snprintf(str, str_size, "NXRRSET"); - break; - case DNS_RCODE_NOTAUTH: - snprintf(str, str_size, "NOTAUTH"); - break; - case DNS_RCODE_NOTZONE: - snprintf(str, str_size, "NOTZONE"); - break; - /* these are the same, need more logic */ - case DNS_RCODE_BADVERS: - //case DNS_RCODE_BADSIG: - snprintf(str, str_size, "BADVERS/BADSIG"); - break; - case DNS_RCODE_BADKEY: - snprintf(str, str_size, "BADKEY"); - break; - case DNS_RCODE_BADTIME: - snprintf(str, str_size, "BADTIME"); - break; - case DNS_RCODE_BADMODE: - snprintf(str, str_size, "BADMODE"); - break; - case DNS_RCODE_BADNAME: - snprintf(str, str_size, "BADNAME"); - break; - case DNS_RCODE_BADALG: - snprintf(str, str_size, "BADALG"); - break; - case DNS_RCODE_BADTRUNC: - snprintf(str, str_size, "BADTRUNC"); - break; - default: - SCLogDebug("could not map DNS rcode to name, bug!"); - snprintf(str, str_size, "%04x/%u", rcode, rcode); - } -} diff --git a/src/app-layer-dns-common.h b/src/app-layer-dns-common.h index 319c8bdb15..7fe9869cea 100644 --- a/src/app-layer-dns-common.h +++ b/src/app-layer-dns-common.h @@ -88,28 +88,6 @@ #define DNS_RECORD_TYPE_ANY 255 #define DNS_RECORD_TYPE_URI 256 -#define DNS_RCODE_NOERROR 0 -#define DNS_RCODE_FORMERR 1 -#define DNS_RCODE_SERVFAIL 2 -#define DNS_RCODE_NXDOMAIN 3 -#define DNS_RCODE_NOTIMP 4 -#define DNS_RCODE_REFUSED 5 -#define DNS_RCODE_YXDOMAIN 6 -#define DNS_RCODE_YXRRSET 7 -#define DNS_RCODE_NXRRSET 8 -#define DNS_RCODE_NOTAUTH 9 -#define DNS_RCODE_NOTZONE 10 -// Support for OPT RR from RFC6891 will be needed to -// parse RCODE values over 15 -#define DNS_RCODE_BADVERS 16 -#define DNS_RCODE_BADSIG 16 -#define DNS_RCODE_BADKEY 17 -#define DNS_RCODE_BADTIME 18 -#define DNS_RCODE_BADMODE 19 -#define DNS_RCODE_BADNAME 20 -#define DNS_RCODE_BADALG 21 -#define DNS_RCODE_BADTRUNC 22 - enum { DNS_DECODER_EVENT_UNSOLLICITED_RESPONSE, DNS_DECODER_EVENT_MALFORMED_DATA, @@ -139,6 +117,4 @@ int DNSStateGetEventInfoById(int event_id, const char **event_name, void DNSAppLayerRegisterGetEventInfo(uint8_t ipproto, AppProto alproto); void DNSAppLayerRegisterGetEventInfoById(uint8_t ipproto, AppProto alproto); -void DNSCreateRcodeString(uint8_t rcode, char *str, size_t str_size); - #endif /* __APP_LAYER_DNS_COMMON_H__ */ diff --git a/src/util-lua-dns.c b/src/util-lua-dns.c index 6ffbe8b154..33449776c1 100644 --- a/src/util-lua-dns.c +++ b/src/util-lua-dns.c @@ -86,20 +86,11 @@ static int DnsGetRcode(lua_State *luastate) { if (!(LuaStateNeedProto(luastate, ALPROTO_DNS))) return LuaCallbackError(luastate, "error: protocol not dns"); - uint16_t rcode = 0; RSDNSTransaction *tx = LuaStateGetTX(luastate); if (tx == NULL) { return LuaCallbackError(luastate, "internal error: no tx"); } - uint16_t flags = rs_dns_tx_get_response_flags(tx); - rcode = flags & 0x000f; - if (rcode) { - char rcode_str[16] = ""; - DNSCreateRcodeString(rcode, rcode_str, sizeof(rcode_str)); - return LuaPushStringBuffer(luastate, (const uint8_t *)rcode_str, strlen(rcode_str)); - } else { - return 0; - } + return rs_dns_lua_get_rcode(luastate, tx); } static int DnsGetRecursionDesired(lua_State *luastate)