]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
eve/nfs: log nfs version
authorVictor Julien <victor@inliniac.net>
Fri, 16 Jun 2017 06:09:48 +0000 (08:09 +0200)
committerVictor Julien <victor@inliniac.net>
Fri, 16 Jun 2017 11:11:36 +0000 (13:11 +0200)
rust/src/nfs/log.rs
rust/src/nfs/nfs.rs
src/output-json-nfs.c

index 2daef3a87aea137c44d467145783d04ea051626c..5d2cb0ebc2e8c9c5cfe55471d7c080c383244c2c 100644 (file)
@@ -76,9 +76,10 @@ fn nfs_file_object(tx: &NFSTransaction) -> Json
     return js;
 }
 
-fn nfs_common_header(tx: &NFSTransaction) -> Json
+fn nfs_common_header(state: &NFSState, tx: &NFSTransaction) -> Json
 {
     let js = Json::object();
+    js.set_integer("version", state.nfs_version as u64);
     js.set_string("procedure", &nfs3_procedure_string(tx.procedure));
     let file_name = String::from_utf8_lossy(&tx.file_name);
     js.set_string("filename", &file_name);
@@ -88,17 +89,17 @@ fn nfs_common_header(tx: &NFSTransaction) -> Json
 }
 
 #[no_mangle]
-pub extern "C" fn rs_nfs_log_json_request(tx: &mut NFSTransaction) -> *mut JsonT
+pub extern "C" fn rs_nfs_log_json_request(state: &mut NFSState, tx: &mut NFSTransaction) -> *mut JsonT
 {
-    let js = nfs_common_header(tx);
+    let js = nfs_common_header(state, tx);
     js.set_string("type", "request");
     return js.unwrap();
 }
 
 #[no_mangle]
-pub extern "C" fn rs_nfs_log_json_response(tx: &mut NFSTransaction) -> *mut JsonT
+pub extern "C" fn rs_nfs_log_json_response(state: &mut NFSState, tx: &mut NFSTransaction) -> *mut JsonT
 {
-    let js = nfs_common_header(tx);
+    let js = nfs_common_header(state, tx);
     js.set_string("type", "response");
 
     js.set_string("status", &nfs3_status_string(tx.nfs_response_status));
index 107ef25058984f6825537496672a322647273462..729d5ef0cadef55349f2510653762e8b88a7f20b 100644 (file)
@@ -299,6 +299,8 @@ pub struct NFSState {
 
     is_udp: bool,
 
+    pub nfs_version: u16,
+
     /// tx counter for assigning incrementing id's to tx's
     tx_id: u64,
 
@@ -329,6 +331,7 @@ impl NFSState {
             ts_gap:false,
             tc_gap:false,
             is_udp:false,
+            nfs_version:0,
             tx_id:0,
             de_state_count:0,
             //ts_txs_updated:false,
@@ -452,6 +455,10 @@ impl NFSState {
         let mut xidmap = NFSRequestXidMap::new(r.progver, r.procedure, 0);
         let mut aux_file_name = Vec::new();
 
+        if self.nfs_version == 0 {
+            self.nfs_version = r.progver as u16;
+        }
+
         if r.procedure == NFSPROC3_LOOKUP {
             self.process_request_record_lookup(r, &mut xidmap);
 
@@ -965,6 +972,10 @@ impl NFSState {
             },
         }
 
+        if self.nfs_version == 0 {
+            self.nfs_version = xidmap.progver as u16;
+        }
+
         match xidmap.progver {
             3 => {
                 SCLogDebug!("NFSv3 reply record");
index 6ca9398d8edcd0e68faf81a72184ec76d67c8fb3..070c279d598ef4fe2014eafe839dbb9372d08752 100644 (file)
@@ -83,7 +83,7 @@ static int JsonNFSLogger(ThreadVars *tv, void *thread_data,
     }
     json_object_set_new(js, "rpc", rpcjs);
 
-    nfsjs = rs_nfs_log_json_response(tx);
+    nfsjs = rs_nfs_log_json_response(state, tx);
     if (unlikely(nfsjs == NULL)) {
         goto error;
     }