]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
dns: cleanup: move DnsGetRcode (Lua) to rust
authorJason Ish <jason.ish@oisf.net>
Thu, 9 Jan 2020 17:43:41 +0000 (11:43 -0600)
committerVictor Julien <victor@inliniac.net>
Sat, 14 Mar 2020 19:34:50 +0000 (20:34 +0100)
Move the implementation of Lua DnsGetRcode to Rust.

rust/src/dns/log.rs
rust/src/dns/lua.rs
src/app-layer-dns-common.c
src/app-layer-dns-common.h
src/util-lua-dns.c

index cd8ef9758ce516772e9646ae2a2a3444bf26e188..beade5a35ca17100650f79785dcd0d589456b769 100644 (file)
@@ -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",
index bbd6e0de43ce33ab6bbf78176626fc8897518fd3..f40ea6836ea9c456efc1973820edaa4fa0401c63 100644 (file)
@@ -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)
index 44a49215bee44f895abc51fd9f909069a43f4ef0..ccdf305c28bafb51e7b117cd7e6161aa16c1f86b 100644 (file)
@@ -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);
-    }
-}
index 319c8bdb157de223b806c69846b460b91e74ca82..7fe9869cea75d9507db2f2a2679a2d9a44983f19 100644 (file)
 #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__ */
index 6ffbe8b15491575723c836d49724f1d47113f6d3..33449776c1aabca922003153b6dbac37f6fd657c 100644 (file)
@@ -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)