From: Pierre Chifflier Date: Tue, 9 Nov 2021 19:17:27 +0000 (+0100) Subject: rust/nfs: convert parser to nom7 functions (NFS v2 records) X-Git-Tag: suricata-7.0.0-beta1~1179 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=acb3ec6db159e85b957775ad6cdc284626a7dc9f;p=thirdparty%2Fsuricata.git rust/nfs: convert parser to nom7 functions (NFS v2 records) --- diff --git a/rust/src/nfs/nfs2.rs b/rust/src/nfs/nfs2.rs index 945ba25f0a..68c916d176 100644 --- a/rust/src/nfs/nfs2.rs +++ b/rust/src/nfs/nfs2.rs @@ -22,8 +22,8 @@ use crate::nfs::types::*; use crate::nfs::rpc_records::*; use crate::nfs::nfs2_records::*; -use nom::IResult; -use nom::number::streaming::be_u32; +use nom7::IResult; +use nom7::number::streaming::be_u32; impl NFSState { /// complete request record diff --git a/rust/src/nfs/nfs2_records.rs b/rust/src/nfs/nfs2_records.rs index ed5500db1c..991c0ba333 100644 --- a/rust/src/nfs/nfs2_records.rs +++ b/rust/src/nfs/nfs2_records.rs @@ -16,24 +16,22 @@ */ //! Nom parsers for NFSv2 records -use nom::combinator::rest; -use nom::number::streaming::be_u32; + use crate::nfs::nfs_records::*; +use nom7::bytes::streaming::take; +use nom7::combinator::rest; +use nom7::number::streaming::be_u32; +use nom7::IResult; #[derive(Debug,PartialEq)] pub struct Nfs2Handle<'a> { pub value: &'a[u8], } -named!(pub parse_nfs2_handle, - do_parse!( - handle: take!(32) - >> ( - Nfs2Handle { - value:handle, - } - )) -); +pub fn parse_nfs2_handle(i: &[u8]) -> IResult<&[u8], Nfs2Handle> { + let (i, value) = take(32_usize)(i)?; + Ok((i, Nfs2Handle { value })) +} #[derive(Debug,PartialEq)] pub struct Nfs2RequestLookup<'a> { @@ -41,19 +39,17 @@ pub struct Nfs2RequestLookup<'a> { pub name_vec: Vec, } -named!(pub parse_nfs2_request_lookup, - do_parse!( - handle: parse_nfs2_handle - >> name_len: be_u32 - >> name_contents: take!(name_len) - >> _name_padding: rest - >> ( - Nfs2RequestLookup { - handle, - name_vec:name_contents.to_vec(), - } - )) -); +pub fn parse_nfs2_request_lookup(i: &[u8]) -> IResult<&[u8], Nfs2RequestLookup> { + let (i, handle) = parse_nfs2_handle(i)?; + let (i, name_len) = be_u32(i)?; + let (i, name_contents) = take(name_len as usize)(i)?; + let (i, _name_padding) = rest(i)?; + let req = Nfs2RequestLookup { + handle, + name_vec: name_contents.to_vec(), + }; + Ok((i, req)) +} #[derive(Debug,PartialEq)] pub struct Nfs2RequestRead<'a> { @@ -61,37 +57,30 @@ pub struct Nfs2RequestRead<'a> { pub offset: u32, } -named!(pub parse_nfs2_request_read, - do_parse!( - handle: parse_nfs2_handle - >> offset: be_u32 - >> _count: be_u32 - >> ( - Nfs2RequestRead { - handle, - offset - } - )) -); +pub fn parse_nfs2_request_read(i: &[u8]) -> IResult<&[u8], Nfs2RequestRead> { + let (i, handle) = parse_nfs2_handle(i)?; + let (i, offset) = be_u32(i)?; + let (i, _count) = be_u32(i)?; + let req = Nfs2RequestRead { handle, offset }; + Ok((i, req)) +} -named!(pub parse_nfs2_reply_read, - do_parse!( - status: be_u32 - >> attr_blob: take!(68) - >> data_len: be_u32 - >> data_contents: rest - >> ( - NfsReplyRead { - status, - attr_follows:1, - attr_blob, - count:data_len, - eof:false, - data_len, - data:data_contents, - } - )) -); +pub fn parse_nfs2_reply_read(i: &[u8]) -> IResult<&[u8], NfsReplyRead> { + let (i, status) = be_u32(i)?; + let (i, attr_blob) = take(68_usize)(i)?; + let (i, data_len) = be_u32(i)?; + let (i, data_contents) = rest(i)?; + let reply = NfsReplyRead { + status, + attr_follows: 1, + attr_blob, + count: data_len, + eof: false, + data_len, + data: data_contents, + }; + Ok((i, reply)) +} #[derive(Debug,PartialEq)] pub struct Nfs2Attributes<> { @@ -99,16 +88,11 @@ pub struct Nfs2Attributes<> { pub asize: u32, } -named!(pub parse_nfs2_attribs, - do_parse!( - atype: be_u32 - >> _blob1: take!(16) - >> asize: be_u32 - >> _blob2: take!(44) - >> ( - Nfs2Attributes { - atype, - asize - } - )) -); +pub fn parse_nfs2_attribs(i: &[u8]) -> IResult<&[u8], Nfs2Attributes> { + let (i, atype) = be_u32(i)?; + let (i, _blob1) = take(16_usize)(i)?; + let (i, asize) = be_u32(i)?; + let (i, _blob2) = take(44_usize)(i)?; + let attrs = Nfs2Attributes { atype, asize }; + Ok((i, attrs)) +} diff --git a/rust/src/nfs/nfs3.rs b/rust/src/nfs/nfs3.rs index b9fb120f76..67d0b57a41 100644 --- a/rust/src/nfs/nfs3.rs +++ b/rust/src/nfs/nfs3.rs @@ -24,8 +24,8 @@ use crate::nfs::types::*; use crate::nfs::rpc_records::*; use crate::nfs::nfs3_records::*; -use nom::IResult; -use nom::number::streaming::be_u32; +use nom7::IResult; +use nom7::number::streaming::be_u32; impl NFSState { /// complete NFS3 request record