]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
rust/nfs4: Add NFSPROC4_DESTROY_CLIENTID op parsers
authorSam Muhammed <ghostinthehive.vx@gmail.com>
Sun, 20 Feb 2022 17:46:03 +0000 (19:46 +0200)
committerVictor Julien <vjulien@oisf.net>
Fri, 4 Mar 2022 15:50:55 +0000 (16:50 +0100)
rust/src/nfs/nfs4_records.rs
rust/src/nfs/types.rs

index 59be59cbbd1d36251ae75c6c9385193d34c1ae4a..8302ef0b6110a7b8bd67b31f88f5e85a292dfbb6 100644 (file)
@@ -69,6 +69,7 @@ pub enum Nfs4RequestContent<'a> {
     GetDevInfo(Nfs4RequestGetDevInfo<'a>),
     LayoutReturn(Nfs4RequestLayoutReturn<'a>),
     DestroySession(&'a[u8]),
+    DestroyClientID(&'a[u8]),
 }
 
 #[derive(Debug,PartialEq)]
@@ -489,6 +490,11 @@ fn nfs4_req_reclaim_complete(i: &[u8]) -> IResult<&[u8], Nfs4RequestContent> {
     map(verify(be_u32, |&v| v <= 1), Nfs4RequestContent::ReclaimComplete) (i)
 }
 
+fn nfs4_req_destroy_clientid(i: &[u8]) -> IResult<&[u8], Nfs4RequestContent> {
+    let (i, client_id) = take(8_usize)(i)?;
+    Ok((i, Nfs4RequestContent::DestroyClientID(client_id)))
+}
+
 #[derive(Debug, PartialEq)]
 pub struct Nfs4RequestLayoutGet<'a> {
     pub layout_type: u32,
@@ -591,6 +597,7 @@ fn parse_request_compound_command(i: &[u8]) -> IResult<&[u8], Nfs4RequestContent
         NFSPROC4_GETDEVINFO => nfs4_req_getdevinfo(i)?,
         NFSPROC4_LAYOUTRETURN => nfs4_req_layoutreturn(i)?,
         NFSPROC4_DESTROY_SESSION => nfs4_req_destroy_session(i)?,
+        NFSPROC4_DESTROY_CLIENTID => nfs4_req_destroy_clientid(i)?,
         _ => { return Err(Err::Error(make_error(i, ErrorKind::Switch))); }
     };
     Ok((i, cmd_data))
@@ -646,6 +653,7 @@ pub enum Nfs4ResponseContent<'a> {
     GetDevInfo(u32, Option<Nfs4ResponseGetDevInfo<'a>>),
     LayoutReturn(u32),
     DestroySession(u32),
+    DestroyClientID(u32),
 }
 
 // might need improvment with a stateid_present = yes case
@@ -1140,6 +1148,10 @@ fn nfs4_res_destroy_session(i: &[u8]) -> IResult<&[u8], Nfs4ResponseContent> {
     map(be_u32, Nfs4ResponseContent::DestroySession) (i)
 }
 
+fn nfs4_res_destroy_clientid(i: &[u8]) -> IResult<&[u8], Nfs4ResponseContent> {
+    map(be_u32, Nfs4ResponseContent::DestroyClientID) (i)
+}
+
 fn nfs4_res_compound_command(i: &[u8]) -> IResult<&[u8], Nfs4ResponseContent> {
     let (i, cmd) = be_u32(i)?;
     let (i, cmd_data) = match cmd {
@@ -1174,6 +1186,7 @@ fn nfs4_res_compound_command(i: &[u8]) -> IResult<&[u8], Nfs4ResponseContent> {
         NFSPROC4_GETDEVINFO => nfs4_res_getdevinfo(i)?,
         NFSPROC4_LAYOUTRETURN => nfs4_res_layoutreturn(i)?,
         NFSPROC4_DESTROY_SESSION => nfs4_res_destroy_session(i)?,
+        NFSPROC4_DESTROY_CLIENTID => nfs4_res_destroy_clientid(i)?,
         _ => { return Err(Err::Error(make_error(i, ErrorKind::Switch))); }
     };
     Ok((i, cmd_data))
@@ -2046,7 +2059,5 @@ mod tests {
             }
             _ => { panic!("Failure"); }
         }
-
-
     }
 }
index 61005997dd35536e4588fc4096b6de0e3d4bc65c..749f710546b8fa57283f23b689dbbb0046f64f18 100644 (file)
@@ -281,6 +281,7 @@ pub const NFSPROC4_LAYOUTGET:           u32 = 50;
 pub const NFSPROC4_LAYOUTRETURN:        u32 = 51;
 pub const NFSPROC4_SECINFO_NO_NAME:     u32 = 52;
 pub const NFSPROC4_SEQUENCE:            u32 = 53;
+pub const NFSPROC4_DESTROY_CLIENTID:    u32 = 57;
 pub const NFSPROC4_RECLAIM_COMPLETE:    u32 = 58;
 
 pub const NFSPROC4_ILLEGAL:             u32 = 10044;