]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
smb: expose smb1 request/reply flags with a method
authorJason Ish <jason.ish@oisf.net>
Fri, 18 Feb 2022 17:43:17 +0000 (11:43 -0600)
committerVictor Julien <vjulien@oisf.net>
Fri, 4 Mar 2022 15:50:54 +0000 (16:50 +0100)
Adds `.is_request()` and `.is_reply()` to check if a SMB record flags
say the message is a request or a reply.

rust/src/smb/smb1_records.rs

index 97e26337c2625b4feb012c9e9ce4b60e000e77ba..1d3b175b285c6fd72e777adff52dfc7a8a9ada5b 100644 (file)
@@ -27,6 +27,9 @@ use nom7::IResult;
 
 pub const SMB1_HEADER_SIZE: usize = 32;
 
+// SMB_FLAGS_REPLY in Microsoft docs.
+const SMB1_FLAGS_RESPONSE: u8 = 0x80;
+
 fn smb_get_unicode_string_with_offset(i: &[u8], offset: usize) -> IResult<&[u8], Vec<u8>, SmbError>
 {
     let (i, _) = cond(offset % 2 == 1, take(1_usize))(i)?;
@@ -815,6 +818,16 @@ impl<'a> SmbRecord<'a> {
     pub fn is_dos_error(&self) -> bool {
         self.flags2 & 0x4000_u16 != 0
     }
+
+    /// Return true if record is a request.
+    pub fn is_request(&self) -> bool {
+        self.flags & SMB1_FLAGS_RESPONSE == 0
+    }
+
+    /// Return true if record is a reply.
+    pub fn is_response(&self) -> bool {
+        self.flags & SMB1_FLAGS_RESPONSE != 0
+    }
 }
 
 pub fn parse_smb_record(i: &[u8]) -> IResult<&[u8], SmbRecord> {