]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
SMB: simplify code
authorPierre Chifflier <chifflier@wzdftpd.net>
Fri, 16 Mar 2018 06:50:12 +0000 (07:50 +0100)
committerVictor Julien <victor@inliniac.net>
Fri, 16 Mar 2018 11:25:36 +0000 (12:25 +0100)
rust/src/smb/auth.rs
rust/src/smb/log.rs
rust/src/smb/smb1_records.rs

index 8ec2b9bcab0c232dcaa0f9fea336889702e6ab05..4d9c898429e9e41af35a9f48714d861a3f9a2c58 100644 (file)
  * 02110-1301, USA.
  */
 
-use smb::kerberos_parser::krb5_parser;
+use smb::kerberos_parser::krb5_parser::parse_ap_req;
 use smb::kerberos_parser::krb5::{ApReq,Realm,PrincipalName};
 
 use log::*;
 use smb::ntlmssp_records::*;
 use smb::smb::*;
 
-use nom;
-use nom::{IResult, ErrorKind};
+use nom::{IResult, ErrorKind, le_u16};
 use der_parser;
+use der_parser::parse_der_oid;
 
 #[derive(Debug,PartialEq)]
 pub struct Kerberos5Ticket {
@@ -50,22 +50,17 @@ fn parse_kerberos5_request(blob: &[u8]) -> IResult<&[u8], ApReq>
         IResult::Incomplete(needed) => { return IResult::Incomplete(needed); },
         IResult::Error(err) => { return IResult::Error(err); },
     };
-    let (rem, base_o) = match der_parser::parse_der_oid(blob) {
-        IResult::Done(rem, o) => (rem, o),
-        IResult::Incomplete(needed) => { return IResult::Incomplete(needed); },
-        IResult::Error(err) => { return IResult::Error(err); },
-    };
-    SCLogDebug!("parse_kerberos5_request: base_o {:?}", base_o);
-
-    // not DER encoded 2 byte length field
-    let (rem, tok_id) = match nom::le_u16(rem) {
-        IResult::Done(rem, o) => (rem, o),
-        IResult::Incomplete(needed) => { return IResult::Incomplete(needed); },
-        IResult::Error(err) => { return IResult::Error(err); },
-    };
-    SCLogDebug!("parse_kerberos5_request: tok_id {}", tok_id);
-
-    krb5_parser::parse_ap_req(rem)
+    do_parse!(
+        blob,
+        base_o: parse_der_oid >>
+        tok_id: le_u16 >>
+        ap_req: parse_ap_req >>
+        ({
+            SCLogDebug!("parse_kerberos5_request: base_o {:?}", base_o.as_oid());
+            SCLogDebug!("parse_kerberos5_request: tok_id {}", tok_id);
+            ap_req
+        })
+    )
 }
 
 
index 12d2af9dd91e1c2d67de357d2ee1e70b191a55e8..734b13e57ae7e940c50d940aeeef2991c330f5b3 100644 (file)
@@ -42,12 +42,10 @@ fn fuid_to_string(fuid: &Vec<u8>) -> String {
     if fuid_len == 16 {
         guid_to_string(fuid)
     } else if fuid_len == 2 {
-        let o = format!("{:02x}{:02x}", fuid[1], fuid[0]);
-        o.to_string()
+        format!("{:02x}{:02x}", fuid[1], fuid[0])
     } else if fuid_len == 6 {
         let pure_fid = &fuid[0..2];
-        let o = format!("{:02x}{:02x}", pure_fid[1], pure_fid[0]);
-        o.to_string()
+        format!("{:02x}{:02x}", pure_fid[1], pure_fid[0])
     } else {
         "".to_string()
     }
@@ -76,13 +74,8 @@ fn smb_common_header(state: &SMBState, tx: &SMBTransaction) -> Json
         js.set_string("dialect", &dialect);
     } else {
         let dialect = match &state.dialect_vec {
-            &Some(ref d) => {
-                match str::from_utf8(&d) {
-                    Ok(v) => v,
-                    Err(_) => "invalid",
-                }
-            },
-            &None => { "unknown" },
+            &Some(ref d) => str::from_utf8(&d).unwrap_or("invalid"),
+            &None        => "unknown",
         };
         js.set_string("dialect", &dialect);
     }
index baceac64e76f8cb0472158703aad06913c02cf36..c4f9d395bd04d126e2c837b1a2ae8e97b7a171e0 100644 (file)
@@ -31,13 +31,11 @@ fn smb_get_unicode_string_with_offset(i: &[u8], offset: usize) -> IResult<&[u8],
 
 /// take a string, unicode or ascii based on record
 pub fn smb1_get_string<'a>(i: &'a[u8], r: &SmbRecord, offset: usize) -> IResult<&'a[u8], Vec<u8>> {
-    do_parse!(i,
-          u: value!(r.has_unicode_support())
-       >> s: switch!(value!(u),
-                true => apply!(smb_get_unicode_string_with_offset, offset) |
-                false => call!(smb_get_ascii_string))
-       >> ( s )
-    )
+    if r.has_unicode_support() {
+        smb_get_unicode_string_with_offset(i, offset)
+    } else {
+        smb_get_ascii_string(i)
+    }
 }
 
 #[derive(Debug,PartialEq)]