Migrate to Rust 2018 edition.
Credit to Danny Browning for first demontrating this:
https://github.com/OISF/suricata/pull/3604/commits
*/
use std;
-use json::*;
+use crate::json::*;
use super::template::TemplateTransaction;
fn log_template(tx: &TemplateTransaction) -> Option<Json> {
*/
use std;
-use core::{self, ALPROTO_UNKNOWN, AppProto, Flow, IPPROTO_TCP};
-use log::*;
+use crate::core::{self, ALPROTO_UNKNOWN, AppProto, Flow, IPPROTO_TCP};
+use crate::log::*;
use std::mem::transmute;
-use applayer::{self, LoggerFlags};
-use parser::*;
+use crate::applayer::{self, LoggerFlags};
+use crate::parser::*;
use std::ffi::CString;
use nom;
use super::parser;
use std::ptr;
use std::str;
-use log::*;
+use crate::log::*;
extern {
fn ConfGet(key: *const c_char, res: *mut *const c_char) -> i8;
// This file exposes items from the core "C" code to Rust.
use std;
-use filecontainer::*;
+use crate::filecontainer::*;
/// Opaque C types.
pub enum Flow {}
* 02110-1301, USA.
*/
-use applayer;
-use core;
-use core::{ALPROTO_UNKNOWN, AppProto, Flow, IPPROTO_UDP};
-use core::{sc_detect_engine_state_free, sc_app_layer_decoder_events_free_events};
-use dhcp::parser::*;
-use log::*;
-use parser::*;
+use crate::applayer;
+use crate::core;
+use crate::core::{ALPROTO_UNKNOWN, AppProto, Flow, IPPROTO_UDP};
+use crate::core::{sc_detect_engine_state_free, sc_app_layer_decoder_events_free_events};
+use crate::dhcp::parser::*;
+use crate::log::*;
+use crate::parser::*;
use std;
use std::ffi::{CStr,CString};
use std::mem::transmute;
use std;
use std::os::raw::c_void;
-use dhcp::dhcp::*;
-use dhcp::parser::{DHCPOptionWrapper,DHCPOptGeneric};
-use dns::log::dns_print_addr;
-use json::*;
-use conf::ConfNode;
+use crate::dhcp::dhcp::*;
+use crate::dhcp::parser::{DHCPOptionWrapper,DHCPOptGeneric};
+use crate::dns::log::dns_print_addr;
+use crate::json::*;
+use crate::conf::ConfNode;
pub struct DHCPLogger {
extended: bool,
use std::cmp::min;
-use dhcp::dhcp::*;
+use crate::dhcp::dhcp::*;
use nom::*;
pub struct DHCPMessage {
#[cfg(test)]
mod tests {
- use dhcp::dhcp::*;
- use dhcp::parser::*;
+ use crate::dhcp::dhcp::*;
+ use crate::dhcp::parser::*;
#[test]
fn test_parse_discover() {
use std;
use std::mem::transmute;
-use log::*;
-use applayer::LoggerFlags;
-use core;
-use dns::parser;
+use crate::log::*;
+use crate::applayer::LoggerFlags;
+use crate::core;
+use crate::dns::parser;
/// DNS record types.
pub const DNS_RECORD_TYPE_A : u16 = 1;
#[cfg(test)]
mod tests {
- use dns::dns::DNSState;
+ use crate::dns::dns::DNSState;
#[test]
fn test_dns_parse_request_tcp_valid() {
use std::string::String;
use std::collections::HashMap;
-use json::*;
-use dns::dns::*;
+use crate::json::*;
+use crate::dns::dns::*;
pub const LOG_QUERIES : u64 = BIT_U64!(0);
pub const LOG_ANSWER : u64 = BIT_U64!(1);
use nom::{IResult, be_u8, be_u16, be_u32};
use nom;
-use dns::dns::*;
+use crate::dns::dns::*;
// Parse a DNS header.
named!(pub dns_parse_header<DNSHeader>,
#[cfg(test)]
mod tests {
- use dns::dns::{DNSHeader,DNSAnswerEntry};
- use dns::parser::*;
+ use crate::dns::dns::{DNSHeader,DNSAnswerEntry};
+ use crate::dns::parser::*;
/// Parse a simple name with no pointers.
#[test]
use std::ptr;
use std::os::raw::{c_void};
-use log::*;
-use core::*;
+use crate::log::*;
+use crate::core::*;
pub struct File;
#[repr(C)]
* The tracker does continue to follow the file.
*/
-use log::*;
-use core::*;
+use crate::log::*;
+use crate::core::*;
use std::collections::HashMap;
use std::collections::hash_map::Entry::{Occupied, Vacant};
-use filecontainer::*;
+use crate::filecontainer::*;
#[derive(Debug)]
pub struct FileChunk {
use std;
use std::str::FromStr;
-use log::*;
+use crate::log::*;
// We transform an integer string into a i64, ignoring surrounding whitespaces
// We look for a digit suite, and try to convert it.
// written by Pierre Chifflier <chifflier@wzdftpd.net>
-use ikev2::ipsec_parser::*;
-use ikev2::state::IKEV2ConnectionState;
-use core;
-use core::{AppProto,Flow,ALPROTO_UNKNOWN,ALPROTO_FAILED,STREAM_TOSERVER,STREAM_TOCLIENT};
-use applayer;
-use parser::*;
+use crate::ikev2::ipsec_parser::*;
+use crate::ikev2::state::IKEV2ConnectionState;
+use crate::core;
+use crate::core::{AppProto,Flow,ALPROTO_UNKNOWN,ALPROTO_FAILED,STREAM_TOSERVER,STREAM_TOCLIENT};
+use crate::applayer;
+use crate::parser::*;
use std;
use std::ffi::{CStr,CString};
-use log::*;
+use crate::log::*;
use nom;
// written by Pierre Chifflier <chifflier@wzdftpd.net>
-use json::*;
-use ikev2::ikev2::{IKEV2State,IKEV2Transaction};
+use crate::json::*;
+use crate::ikev2::ikev2::{IKEV2State,IKEV2Transaction};
-use ikev2::ipsec_parser::IKEV2_FLAG_INITIATOR;
+use crate::ikev2::ipsec_parser::IKEV2_FLAG_INITIATOR;
#[no_mangle]
pub extern "C" fn rs_ikev2_log_json_response(state: &mut IKEV2State, tx: &mut IKEV2Transaction) -> *mut JsonT
#[cfg(test)]
mod tests {
- use json::to_cstring;
+ use crate::json::to_cstring;
#[test]
fn test_to_string() {
use der_parser;
use der_parser::parse_der_oid;
-use log::*;
+use crate::log::*;
pub const SECBLOB_NOT_SPNEGO : u32 = 128;
pub const SECBLOB_KRB_FMT_ERR : u32 = 129;
// written by Pierre Chifflier <chifflier@wzdftpd.net>
-use krb::krb5::KRB5Transaction;
+use crate::krb::krb5::KRB5Transaction;
#[no_mangle]
pub unsafe extern "C" fn rs_krb5_tx_get_msgtype(tx: &mut KRB5Transaction,
use der_parser::der_read_element_header;
use kerberos_parser::krb5_parser;
use kerberos_parser::krb5::{EncryptionType,ErrorCode,MessageType,PrincipalName,Realm};
-use applayer;
-use core;
-use core::{AppProto,Flow,ALPROTO_FAILED,ALPROTO_UNKNOWN,STREAM_TOCLIENT,STREAM_TOSERVER,sc_detect_engine_state_free};
-use parser::*;
+use crate::applayer;
+use crate::core;
+use crate::core::{AppProto,Flow,ALPROTO_FAILED,ALPROTO_UNKNOWN,STREAM_TOCLIENT,STREAM_TOSERVER,sc_detect_engine_state_free};
+use crate::parser::*;
-use log::*;
+use crate::log::*;
#[repr(u32)]
pub enum KRB5Event {
// written by Pierre Chifflier <chifflier@wzdftpd.net>
-use json::*;
-use krb::krb5::{KRB5State,KRB5Transaction,test_weak_encryption};
+use crate::json::*;
+use crate::krb::krb5::{KRB5State,KRB5Transaction,test_weak_encryption};
#[no_mangle]
pub extern "C" fn rs_krb5_log_json_response(_state: &mut KRB5State, tx: &mut KRB5Transaction) -> *mut JsonT
use std::ffi::CString;
use std::path::Path;
-use core::*;
+use crate::core::*;
#[derive(Debug)]
pub enum Level {
*/
use std::string::String;
-use json::*;
-use nfs::types::*;
-use nfs::nfs::*;
+use crate::json::*;
+use crate::nfs::types::*;
+use crate::nfs::nfs::*;
use crc::crc32;
#[no_mangle]
use nom;
-use log::*;
-use applayer;
-use applayer::LoggerFlags;
-use core::*;
-use filetracker::*;
-use filecontainer::*;
-
-use nfs::types::*;
-use nfs::rpc_records::*;
-use nfs::nfs_records::*;
-use nfs::nfs2_records::*;
-use nfs::nfs3_records::*;
+use crate::log::*;
+use crate::applayer;
+use crate::applayer::LoggerFlags;
+use crate::core::*;
+use crate::filetracker::*;
+use crate::filecontainer::*;
+
+use crate::nfs::types::*;
+use crate::nfs::rpc_records::*;
+use crate::nfs::nfs_records::*;
+use crate::nfs::nfs2_records::*;
+use crate::nfs::nfs3_records::*;
pub static mut SURICATA_NFS_FILE_CONFIG: Option<&'static SuricataFileContext> = None;
// written by Victor Julien
use nom;
-use log::*;
+use crate::log::*;
-use nfs::nfs::*;
-use nfs::types::*;
-use nfs::rpc_records::*;
-use nfs::nfs2_records::*;
+use crate::nfs::nfs::*;
+use crate::nfs::types::*;
+use crate::nfs::rpc_records::*;
+use crate::nfs::nfs2_records::*;
impl NFSState {
/// complete request record
//! Nom parsers for NFSv2 records
use nom::{be_u32, rest};
-use nfs::nfs_records::*;
+use crate::nfs::nfs_records::*;
#[derive(Debug,PartialEq)]
pub struct Nfs2Handle<'a> {
// written by Victor Julien
use nom;
-use log::*;
-use core::*;
+use crate::log::*;
+use crate::core::*;
-use nfs::nfs::*;
-use nfs::types::*;
-use nfs::rpc_records::*;
-use nfs::nfs3_records::*;
+use crate::nfs::nfs::*;
+use crate::nfs::types::*;
+use crate::nfs::rpc_records::*;
+use crate::nfs::nfs3_records::*;
impl NFSState {
/// complete NFS3 request record
//! Nom parsers for RPC & NFSv3
use nom::{IResult, be_u32, be_u64, rest};
-use nfs::nfs_records::*;
+use crate::nfs::nfs_records::*;
#[derive(Debug,PartialEq)]
pub struct Nfs3Handle<'a> {
use nom;
use nom::be_u32;
-use core::*;
-use log::*;
+use crate::core::*;
+use crate::log::*;
-use nfs::nfs::*;
-use nfs::types::*;
-use nfs::rpc_records::*;
-use nfs::nfs_records::*;
-use nfs::nfs4_records::*;
+use crate::nfs::nfs::*;
+use crate::nfs::types::*;
+use crate::nfs::rpc_records::*;
+use crate::nfs::nfs_records::*;
+use crate::nfs::nfs4_records::*;
-use kerberos;
+use crate::kerberos;
named!(parse_req_gssapi<kerberos::Kerberos5Ticket>,
do_parse!(
//! Nom parsers for NFSv4 records
use nom::{be_u32, be_u64};
-use nfs::types::*;
+use crate::nfs::types::*;
#[derive(Debug,PartialEq)]
pub enum Nfs4RequestContent<'a> {
extern crate ntp_parser;
use self::ntp_parser::*;
-use core;
-use core::{AppProto,Flow,ALPROTO_UNKNOWN,ALPROTO_FAILED};
-use applayer;
-use parser::*;
+use crate::core;
+use crate::core::{AppProto,Flow,ALPROTO_UNKNOWN,ALPROTO_FAILED};
+use crate::applayer;
+use crate::parser::*;
use std;
use std::ffi::{CStr,CString};
-use log::*;
+use crate::log::*;
use nom;
//! Parser registration functions and common interface
-use core::{DetectEngineState,Flow,AppLayerEventType,AppLayerDecoderEvents,AppProto};
-use filecontainer::FileContainer;
-use applayer;
+use crate::core::{DetectEngineState,Flow,AppLayerEventType,AppLayerDecoderEvents,AppProto};
+use crate::filecontainer::FileContainer;
+use crate::applayer;
use std::os::raw::{c_void,c_char,c_int};
-use applayer::{AppLayerGetTxIterTuple};
+use crate::applayer::{AppLayerGetTxIterTuple};
/// Rust parser declaration
#[repr(C)]
* 02110-1301, USA.
*/
-use kerberos::*;
+use crate::kerberos::*;
-use log::*;
-use smb::ntlmssp_records::*;
-use smb::smb::*;
+use crate::log::*;
+use crate::smb::ntlmssp_records::*;
+use crate::smb::smb::*;
use nom;
use nom::{IResult, ErrorKind};
// written by Victor Julien
-use log::*;
+use crate::log::*;
-use smb::smb::*;
-use smb::smb2::*;
-use smb::dcerpc_records::*;
-use smb::events::*;
+use crate::smb::smb::*;
+use crate::smb::smb2::*;
+use crate::smb::dcerpc_records::*;
+use crate::smb::events::*;
pub const DCERPC_TYPE_REQUEST: u8 = 0;
pub const DCERPC_TYPE_PING: u8 = 1;
* 02110-1301, USA.
*/
-use smb::smb::*;
+use crate::smb::smb::*;
#[cfg(feature = "debug")]
use log::*;
use std;
use std::ptr;
-use core::*;
-use log::*;
-use smb::smb::*;
+use crate::core::*;
+use crate::log::*;
+use crate::smb::smb::*;
#[no_mangle]
pub extern "C" fn rs_smb_tx_get_share(tx: &mut SMBTransaction,
* 02110-1301, USA.
*/
-use core::*;
-use log::*;
-use smb::smb::*;
+use crate::core::*;
+use crate::log::*;
+use crate::smb::smb::*;
#[repr(u32)]
pub enum SMBEvent {
* 02110-1301, USA.
*/
-use core::*;
-use log::*;
-use filetracker::*;
-use filecontainer::*;
+use crate::core::*;
+use crate::log::*;
+use crate::filetracker::*;
+use crate::filecontainer::*;
-use smb::smb::*;
+use crate::smb::smb::*;
/// File tracking transaction. Single direction only.
#[derive(Debug)]
use std::str;
use std::string::String;
-use json::*;
-use smb::smb::*;
-use smb::smb1::*;
-use smb::smb2::*;
-use smb::dcerpc::*;
-use smb::funcs::*;
+use crate::json::*;
+use crate::smb::smb::*;
+use crate::smb::smb1::*;
+use crate::smb::smb2::*;
+use crate::smb::dcerpc::*;
+use crate::smb::funcs::*;
#[cfg(not(feature = "debug"))]
fn debug_add_progress(_js: &Json, _tx: &SMBTransaction) { }
* 02110-1301, USA.
*/
-use log::*;
-use kerberos::*;
-use smb::smb::*;
-use smb::smb1_session::*;
-use smb::auth::*;
+use crate::log::*;
+use crate::kerberos::*;
+use crate::smb::smb::*;
+use crate::smb::smb1_session::*;
+use crate::smb::auth::*;
#[derive(Debug)]
pub struct SMBTransactionSessionSetup {
use nom;
-use core::*;
-use log::*;
-use applayer;
-use applayer::LoggerFlags;
-
-use smb::nbss_records::*;
-use smb::smb1_records::*;
-use smb::smb2_records::*;
-
-use smb::smb1::*;
-use smb::smb2::*;
-use smb::smb3::*;
-use smb::dcerpc::*;
-use smb::session::*;
-use smb::events::*;
-use smb::files::*;
-use smb::smb2_ioctl::*;
+use crate::core::*;
+use crate::log::*;
+use crate::applayer;
+use crate::applayer::LoggerFlags;
+
+use crate::smb::nbss_records::*;
+use crate::smb::smb1_records::*;
+use crate::smb::smb2_records::*;
+
+use crate::smb::smb1::*;
+use crate::smb::smb2::*;
+use crate::smb::smb3::*;
+use crate::smb::dcerpc::*;
+use crate::smb::session::*;
+use crate::smb::events::*;
+use crate::smb::files::*;
+use crate::smb::smb2_ioctl::*;
pub static mut SURICATA_SMB_FILE_CONFIG: Option<&'static SuricataFileContext> = None;
use nom;
-use core::*;
-use log::*;
+use crate::core::*;
+use crate::log::*;
-use smb::smb::*;
-use smb::dcerpc::*;
-use smb::events::*;
-use smb::files::*;
+use crate::smb::smb::*;
+use crate::smb::dcerpc::*;
+use crate::smb::events::*;
+use crate::smb::files::*;
-use smb::smb1_records::*;
-use smb::smb1_session::*;
+use crate::smb::smb1_records::*;
+use crate::smb::smb1_session::*;
// https://msdn.microsoft.com/en-us/library/ee441741.aspx
pub const SMB1_COMMAND_CREATE_DIRECTORY: u8 = 0x00;
* 02110-1301, USA.
*/
-use log::*;
+use crate::log::*;
use nom::{rest, le_u8, le_u16, le_u32, le_u64, IResult};
-use smb::smb::*;
-use smb::smb_records::*;
+use crate::smb::smb::*;
+use crate::smb::smb_records::*;
fn smb_get_unicode_string_with_offset(i: &[u8], offset: usize) -> IResult<&[u8], Vec<u8>>
{
* 02110-1301, USA.
*/
-use log::*;
+use crate::log::*;
-use smb::smb_records::*;
-use smb::smb1_records::*;
-use smb::smb::*;
-use smb::events::*;
-use smb::auth::*;
+use crate::smb::smb_records::*;
+use crate::smb::smb1_records::*;
+use crate::smb::smb::*;
+use crate::smb::events::*;
+use crate::smb::auth::*;
#[derive(Debug)]
pub struct SessionSetupRequest {
use nom;
-use core::*;
-use log::*;
-
-use smb::smb::*;
-use smb::smb2_records::*;
-use smb::smb2_session::*;
-use smb::smb2_ioctl::*;
-use smb::dcerpc::*;
-use smb::events::*;
-use smb::files::*;
+use crate::core::*;
+use crate::log::*;
+
+use crate::smb::smb::*;
+use crate::smb::smb2_records::*;
+use crate::smb::smb2_session::*;
+use crate::smb::smb2_ioctl::*;
+use crate::smb::dcerpc::*;
+use crate::smb::events::*;
+use crate::smb::files::*;
pub const SMB2_COMMAND_NEGOTIATE_PROTOCOL: u16 = 0;
pub const SMB2_COMMAND_SESSION_SETUP: u16 = 1;
* 02110-1301, USA.
*/
-use log::*;
-use smb::smb::*;
-use smb::smb2::*;
-use smb::smb2_records::*;
-use smb::dcerpc::*;
-use smb::events::*;
-use smb::funcs::*;
+use crate::log::*;
+use crate::smb::smb::*;
+use crate::smb::smb2::*;
+use crate::smb::smb2_records::*;
+use crate::smb::dcerpc::*;
+use crate::smb::events::*;
+use crate::smb::funcs::*;
#[derive(Debug)]
pub struct SMBTransactionIoctl {
use nom;
use nom::{rest, le_u8, le_u16, le_u32, le_u64, IResult};
-use smb::smb::*;
+use crate::smb::smb::*;
#[derive(Debug,PartialEq)]
pub struct Smb2SecBlobRecord<'a> {
* 02110-1301, USA.
*/
-use log::*;
+use crate::log::*;
-use smb::smb2_records::*;
-use smb::smb::*;
+use crate::smb::smb2_records::*;
+use crate::smb::smb::*;
//use smb::events::*;
-use smb::auth::*;
+use crate::smb::auth::*;
pub fn smb2_session_setup_request(state: &mut SMBState, r: &Smb2Record)
{
use nom;
use nom::{ErrorKind, IResult};
-use log::*;
+use crate::log::*;
/// parse a UTF16 string that is null terminated. Normally by 2 null
/// bytes, but at the end of the data it can also be a single null.
// written by Pierre Chifflier <chifflier@wzdftpd.net>
-use snmp::snmp::SNMPTransaction;
+use crate::snmp::snmp::SNMPTransaction;
#[no_mangle]
pub extern "C" fn rs_snmp_tx_get_version(tx: &mut SNMPTransaction,
// written by Pierre Chifflier <chifflier@wzdftpd.net>
-use json::*;
-use snmp::snmp::{SNMPState,SNMPTransaction};
-use snmp::snmp_parser::{NetworkAddress,PduType};
+use crate::json::*;
+use crate::snmp::snmp::{SNMPState,SNMPTransaction};
+use crate::snmp::snmp_parser::{NetworkAddress,PduType};
use std::borrow::Cow;
fn str_of_pdu_type(t:&PduType) -> Cow<str> {
// written by Pierre Chifflier <chifflier@wzdftpd.net>
-use snmp::snmp_parser::*;
-use core;
-use core::{AppProto,Flow,ALPROTO_UNKNOWN,ALPROTO_FAILED,STREAM_TOSERVER,STREAM_TOCLIENT};
-use applayer;
-use parser::*;
+use crate::snmp::snmp_parser::*;
+use crate::core;
+use crate::core::{AppProto,Flow,ALPROTO_UNKNOWN,ALPROTO_FAILED,STREAM_TOSERVER,STREAM_TOCLIENT};
+use crate::applayer;
+use crate::parser::*;
use std;
use std::ffi::{CStr,CString};
use std::mem::transmute;
-use log::*;
+use crate::log::*;
use der_parser::{DerObjectContent,parse_der_sequence};
use der_parser::oid::Oid;
// written by Clément Galland <clement.galland@epita.fr>
-use json::*;
-use tftp::tftp::*;
+use crate::json::*;
+use crate::tftp::tftp::*;
#[no_mangle]
pub extern "C" fn rs_tftp_log_json_request(tx: &mut TFTPTransaction) -> *mut JsonT
use std;
use std::mem::transmute;
-use applayer::LoggerFlags;
+use crate::applayer::LoggerFlags;
#[derive(Debug)]
pub struct TFTPTransaction {