]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
nfs3: parse mkdir and rmdir request records
authorVictor Julien <victor@inliniac.net>
Sun, 11 Jun 2017 09:27:31 +0000 (11:27 +0200)
committerVictor Julien <victor@inliniac.net>
Fri, 16 Jun 2017 11:11:36 +0000 (13:11 +0200)
rust/src/nfs/nfs3.rs
rust/src/nfs/parser.rs

index 228faa9024dec36a881ecbc78b68493fb39977ec..9b3a52db9389d269e2bba7785bb313b9854e55c9 100644 (file)
@@ -499,7 +499,24 @@ impl NFS3State {
                 IResult::Incomplete(_) => { panic!("WEIRD"); },
                 IResult::Error(e) => { panic!("Parsing failed: {:?}",e);  },
             };
-
+        } else if r.procedure == NFSPROC3_MKDIR {
+            match parse_nfs3_request_mkdir(r.prog_data) {
+                IResult::Done(_, mr) => {
+                    xidmap.file_handle = mr.handle.value.to_vec();
+                    xidmap.file_name = mr.name_vec;
+                },
+                IResult::Incomplete(_) => { panic!("WEIRD"); },
+                IResult::Error(e) => { panic!("Parsing failed: {:?}",e);  },
+            };
+        } else if r.procedure == NFSPROC3_RMDIR {
+            match parse_nfs3_request_rmdir(r.prog_data) {
+                IResult::Done(_, rr) => {
+                    xidmap.file_handle = rr.handle.value.to_vec();
+                    xidmap.file_name = rr.name_vec;
+                },
+                IResult::Incomplete(_) => { panic!("WEIRD"); },
+                IResult::Error(e) => { panic!("Parsing failed: {:?}",e);  },
+            };
         } else if r.procedure == NFSPROC3_COMMIT {
             SCLogDebug!("COMMIT, closing shop");
 
index 3e886a8145083e17ddd8b21bb0e97c73dd97c2db..9eb91685f6b2f9488ae931907d3ef65d23102ea9 100644 (file)
@@ -159,6 +159,47 @@ named!(pub parse_nfs3_request_remove<Nfs3RequestRemove>,
         ))
 );
 
+#[derive(Debug,PartialEq)]
+pub struct Nfs3RequestRmdir<'a> {
+    pub handle: Nfs3Handle<'a>,
+    pub name_vec: Vec<u8>,
+}
+
+named!(pub parse_nfs3_request_rmdir<Nfs3RequestRmdir>,
+    do_parse!(
+            dir_handle: parse_nfs3_handle
+        >>  name_len: be_u32
+        >>  name: take!(name_len)
+        >>  fill_bytes: cond!(name_len % 4 != 0, take!(4 - name_len % 4))
+        >> (
+            Nfs3RequestRmdir {
+                handle:dir_handle,
+                name_vec:name.to_vec(),
+            }
+        ))
+);
+
+#[derive(Debug,PartialEq)]
+pub struct Nfs3RequestMkdir<'a> {
+    pub handle: Nfs3Handle<'a>,
+    pub name_vec: Vec<u8>,
+}
+
+named!(pub parse_nfs3_request_mkdir<Nfs3RequestMkdir>,
+    do_parse!(
+            dir_handle: parse_nfs3_handle
+        >>  name_len: be_u32
+        >>  name: take!(name_len)
+        >>  fill_bytes: cond!(name_len % 4 != 0, take!(4 - name_len % 4))
+        >>  attributes: rest
+        >> (
+            Nfs3RequestMkdir {
+                handle:dir_handle,
+                name_vec:name.to_vec(),
+            }
+        ))
+);
+
 #[derive(Debug,PartialEq)]
 pub struct Nfs3RequestRename<'a> {
     pub from_handle: Nfs3Handle<'a>,