From: Sam Muhammed Date: Sun, 20 Feb 2022 12:27:17 +0000 (+0200) Subject: rust/nfs4: Add NFSPROC4_RECLAIM_COMPLETE op parsers X-Git-Tag: suricata-7.0.0-beta1~817 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b35d635ac723108f1611e0e63a8b17d40cd6fbf6;p=thirdparty%2Fsuricata.git rust/nfs4: Add NFSPROC4_RECLAIM_COMPLETE op parsers --- diff --git a/rust/src/nfs/nfs4_records.rs b/rust/src/nfs/nfs4_records.rs index d6f716a9b2..61915b0676 100644 --- a/rust/src/nfs/nfs4_records.rs +++ b/rust/src/nfs/nfs4_records.rs @@ -61,6 +61,7 @@ pub enum Nfs4RequestContent<'a> { ExchangeId(Nfs4RequestExchangeId<'a>), Sequence(Nfs4RequestSequence<'a>), CreateSession(Nfs4RequestCreateSession<'a>), + ReclaimComplete(u32), } #[derive(Debug,PartialEq)] @@ -418,6 +419,10 @@ fn nfs4_req_commit(i: &[u8]) -> IResult<&[u8], Nfs4RequestContent> { Ok((i, Nfs4RequestContent::Commit)) } +fn nfs4_req_reclaim_complete(i: &[u8]) -> IResult<&[u8], Nfs4RequestContent> { + map(verify(be_u32, |&v| v <= 1), Nfs4RequestContent::ReclaimComplete) (i) +} + #[derive(Debug,PartialEq)] pub struct Nfs4RequestExchangeId<'a> { pub client_string: &'a[u8], @@ -488,6 +493,7 @@ fn parse_request_compound_command(i: &[u8]) -> IResult<&[u8], Nfs4RequestContent NFSPROC4_SEQUENCE => nfs4_req_sequence(i)?, NFSPROC4_EXCHANGE_ID => nfs4_req_exchangeid(i)?, NFSPROC4_CREATE_SESSION => nfs4_req_create_session(i)?, + NFSPROC4_RECLAIM_COMPLETE => nfs4_req_reclaim_complete(i)?, _ => { return Err(Err::Error(make_error(i, ErrorKind::Switch))); } }; Ok((i, cmd_data)) @@ -537,6 +543,7 @@ pub enum Nfs4ResponseContent<'a> { ExchangeId(u32, Option>), Sequence(u32, Option>), CreateSession(u32, Option>), + ReclaimComplete(u32), } #[derive(Debug, PartialEq)] @@ -594,6 +601,10 @@ fn nfs4_parse_res_exchangeid(i: &[u8]) -> IResult<&[u8], Nfs4ResponseExchangeId> })) } +fn nfs4_res_reclaim_complete(i: &[u8]) -> IResult<&[u8], Nfs4ResponseContent> { + map(be_u32, Nfs4ResponseContent::ReclaimComplete) (i) +} + fn nfs4_res_exchangeid(i: &[u8]) -> IResult<&[u8], Nfs4ResponseContent> { let (i, status) = be_u32(i)?; let (i, xchngid_data) = cond(status == 0, nfs4_parse_res_exchangeid)(i)?; @@ -946,6 +957,7 @@ fn nfs4_res_compound_command(i: &[u8]) -> IResult<&[u8], Nfs4ResponseContent> { NFSPROC4_SEQUENCE => nfs4_res_sequence(i)?, NFSPROC4_RENEW => nfs4_res_renew(i)?, NFSPROC4_CREATE_SESSION => nfs4_res_create_session(i)?, + NFSPROC4_RECLAIM_COMPLETE => nfs4_res_reclaim_complete(i)?, _ => { return Err(Err::Error(make_error(i, ErrorKind::Switch))); } }; Ok((i, cmd_data)) diff --git a/rust/src/nfs/types.rs b/rust/src/nfs/types.rs index 07e2cf76c9..f20f1a2946 100644 --- a/rust/src/nfs/types.rs +++ b/rust/src/nfs/types.rs @@ -273,11 +273,10 @@ pub const NFSPROC4_SETCLIENTID_CONFIRM: u32 = 36; pub const NFSPROC4_VERIFY: u32 = 37; pub const NFSPROC4_WRITE: u32 = 38; pub const NFSPROC4_RELEASE_LOCKOWNER: u32 = 39; +pub const NFSPROC4_EXCHANGE_ID: u32 = 42; pub const NFSPROC4_CREATE_SESSION: u32 = 43; pub const NFSPROC4_SEQUENCE: u32 = 53; - - -pub const NFSPROC4_EXCHANGE_ID: u32 = 42; +pub const NFSPROC4_RECLAIM_COMPLETE: u32 = 58; pub const NFSPROC4_ILLEGAL: u32 = 10044;