use std;
use std::string::String;
-use std::ascii::AsciiExt;
use json::*;
use dns::dns::*;
}.to_string()
}
-fn safe_bytes_to_string(input: &[u8]) -> String {
- // First attempt to convert from UTF8.
- match std::str::from_utf8(input) {
- Ok(value) => {
- return String::from(value);
- },
- _ => {}
- }
-
- // If that fails create a string from the printabe characters with
- // the non-printable characters as hex.
- let mut output: String = "".to_owned();
- for c in input {
- if (*c as char).is_ascii() {
- output.push(*c as char);
- } else {
- output.push_str(&format!("\\x{:x}", c));
- }
- }
- return output;
-}
-
fn dns_rcode_string(flags: u16) -> String {
match flags & 0x000f {
DNS_RCODE_NOERROR => "NOERROR",
let js = Json::object();
js.set_string("type", "query");
js.set_integer("id", request.header.tx_id as u64);
- js.set_string("rrname", query.name());
+ js.set_string_from_bytes("rrname", &query.name);
js.set_string("rrtype", &dns_rrtype_string(query.rrtype));
js.set_integer("tx_id", tx.id - 1);
return js.unwrap();
js.set_string("type", "answer");
js.set_integer("id", header.tx_id as u64);
js.set_string("rcode", &dns_rcode_string(header.flags));
- js.set_string("rrname", answer.name());
+ js.set_string_from_bytes("rrname", &answer.name);
js.set_string("rrtype", &dns_rrtype_string(answer.rrtype));
js.set_integer("ttl", answer.ttl as u64);
DNS_RTYPE_MX |
DNS_RTYPE_TXT |
DNS_RTYPE_PTR => {
- js.set_string("rdata", answer.data_to_string());
+ js.set_string_from_bytes("rdata", &answer.data);
},
DNS_RTYPE_SSHFP => {
dns_log_sshfp(&js, &answer);
js.set_string("type", "answer");
js.set_integer("id", r.header.tx_id as u64);
js.set_string("rcode", &dns_rcode_string(r.header.flags));
- js.set_string("rrname", &safe_bytes_to_string(&query.name));
+ js.set_string_from_bytes("rrname", &query.name);
return js.unwrap();
}
}
return std::ptr::null_mut();
}
-
-#[cfg(test)]
-mod tests {
-
- use dns::log::safe_bytes_to_string;
-
- #[test]
- fn test_safe_bytes_to_string() {
- assert_eq!("suricata-ids.org",
- safe_bytes_to_string(
- &String::from("suricata-ids.org").into_bytes()));
- assert_eq!("A\\xf0\\xf1\\xf2",
- safe_bytes_to_string(&[ 0x41, 0xf0, 0xf1, 0xf2 ]));
- }
-
-}
for request in &tx.request {
for query in &request.queries {
- lua.pushstring(query.name());
+ lua.pushstring(&String::from_utf8_lossy(&query.name));
return 1;
}
}
for response in &tx.response {
for query in &response.queries {
- lua.pushstring(query.name());
+ lua.pushstring(&String::from_utf8_lossy(&query.name));
return 1;
}
}
lua.settable(-3);
lua.pushstring("rrname");
- lua.pushstring(query.name());
+ lua.pushstring(&String::from_utf8_lossy(&query.name));
lua.settable(-3);
lua.settable(-3);
lua.settable(-3);
lua.pushstring("rrname");
- lua.pushstring(answer.name());
+ lua.pushstring(&String::from_utf8_lossy(&answer.name));
lua.settable(-3);
if answer.data.len() > 0 {
lua.pushstring(&dns_print_addr(&answer.data));
}
_ => {
- lua.pushstring(answer.data_to_string());
+ lua.pushstring(&String::from_utf8_lossy(&answer.data));
}
}
lua.settable(-3);
lua.settable(-3);
lua.pushstring("rrname");
- lua.pushstring(answer.name());
+ lua.pushstring(&String::from_utf8_lossy(&answer.name));
lua.settable(-3);
lua.settable(-3);