]> git.ipfire.org Git - people/ms/suricata.git/commitdiff
rust/nfs: convert parser to nom7 functions (NFS v2 records)
authorPierre Chifflier <chifflier@wzdftpd.net>
Tue, 9 Nov 2021 19:17:27 +0000 (20:17 +0100)
committerVictor Julien <vjulien@oisf.net>
Mon, 22 Nov 2021 10:20:23 +0000 (11:20 +0100)
rust/src/nfs/nfs2.rs
rust/src/nfs/nfs2_records.rs
rust/src/nfs/nfs3.rs

index 945ba25f0aa1342c0baf69b1d9c80d7cb9124166..68c916d176bba6ddcf575ecc0644a5e1517e94c6 100644 (file)
@@ -22,8 +22,8 @@ use crate::nfs::types::*;
 use crate::nfs::rpc_records::*;
 use crate::nfs::nfs2_records::*;
 
 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
 
 impl NFSState {
     /// complete request record
index ed5500db1c2248f0e5fa566f8ca48283d18be4b8..991c0ba33317bff781c1feba681539505b698e72 100644 (file)
  */
 
 //! Nom parsers for NFSv2 records
  */
 
 //! Nom parsers for NFSv2 records
-use nom::combinator::rest;
-use nom::number::streaming::be_u32;
+
 use crate::nfs::nfs_records::*;
 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],
 }
 
 
 #[derive(Debug,PartialEq)]
 pub struct Nfs2Handle<'a> {
     pub value: &'a[u8],
 }
 
-named!(pub parse_nfs2_handle<Nfs2Handle>,
-    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> {
 
 #[derive(Debug,PartialEq)]
 pub struct Nfs2RequestLookup<'a> {
@@ -41,19 +39,17 @@ pub struct Nfs2RequestLookup<'a> {
     pub name_vec: Vec<u8>,
 }
 
     pub name_vec: Vec<u8>,
 }
 
-named!(pub parse_nfs2_request_lookup<Nfs2RequestLookup>,
-    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> {
 
 #[derive(Debug,PartialEq)]
 pub struct Nfs2RequestRead<'a> {
@@ -61,37 +57,30 @@ pub struct Nfs2RequestRead<'a> {
     pub offset: u32,
 }
 
     pub offset: u32,
 }
 
-named!(pub parse_nfs2_request_read<Nfs2RequestRead>,
-    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<NfsReplyRead>,
-    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<> {
 
 #[derive(Debug,PartialEq)]
 pub struct Nfs2Attributes<> {
@@ -99,16 +88,11 @@ pub struct Nfs2Attributes<> {
     pub asize: u32,
 }
 
     pub asize: u32,
 }
 
-named!(pub parse_nfs2_attribs<Nfs2Attributes>,
-    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))
+}
index b9fb120f76924e5a13fa807a9f92c6e2312bab1f..67d0b57a412bdcdd40c226d10aa32d5e0e10e41a 100644 (file)
@@ -24,8 +24,8 @@ use crate::nfs::types::*;
 use crate::nfs::rpc_records::*;
 use crate::nfs::nfs3_records::*;
 
 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
 
 impl NFSState {
     /// complete NFS3 request record