]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
krb: bump up crate version
authorPhilippe Antoine <contact@catenacyber.fr>
Tue, 12 Jul 2022 07:17:50 +0000 (09:17 +0200)
committerVictor Julien <vjulien@oisf.net>
Fri, 5 Aug 2022 17:51:07 +0000 (19:51 +0200)
kerberos parser crate is also used by other procotols : nfs and
smb. These protocols use an older der_parser crate version.
Upgrading der_parser will simplify the code further.

rust/Cargo.toml.in
rust/src/kerberos.rs

index 34dbf29593150ea2dbb3a11291f10f20b7491ab8..4a4990a57dd224d39b204fbec9034007ee91e6a6 100644 (file)
@@ -42,7 +42,7 @@ aes-gcm = "~0.8.0"
 sawp-modbus = "~0.11.0"
 sawp = "~0.11.0"
 der-parser = "~4.0.2"
-kerberos-parser = "~0.5.0"
+kerberos-parser = "~0.7.1"
 ntp-parser = "~0.6.0"
 ipsec-parser = "~0.7.0"
 snmp-parser = "~0.6.0"
index 69e04662c266e1c0d059ff613453f6c356e98dec..be910462b2519d440494b2d9c6bef240e7a936ee 100644 (file)
@@ -20,7 +20,7 @@ use kerberos_parser::krb5::{ApReq,Realm,PrincipalName};
 use nom;
 use nom::IResult;
 use nom::error::{ErrorKind, ParseError};
-use nom::number::streaming::le_u16;
+use nom::number::complete::le_u16;
 use der_parser;
 use der_parser::error::BerError;
 use der_parser::der::parse_der_oid;
@@ -29,6 +29,7 @@ use der_parser::der::parse_der_oid;
 pub enum SecBlobError {
     NotSpNego,
     KrbFmtError,
+    KrbReqError,
     Ber(BerError),
     NomError(ErrorKind),
 }
@@ -60,18 +61,17 @@ fn parse_kerberos5_request_do(blob: &[u8]) -> IResult<&[u8], ApReq, SecBlobError
     let blob = b.as_slice().or(
         Err(nom::Err::Error(SecBlobError::KrbFmtError))
     )?;
-    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
-        })
-    )
-    .map_err(nom::Err::convert)
+    let (blob, _) = parse_der_oid(blob).map_err(nom::Err::convert)?;
+    let (blob, _) = le_u16(blob)?;
+    // Should be parse_ap_req(blob).map_err(nom::Err::convert)
+    // But upgraded kerberos parser uses a newer der_parser crate
+    // Hence the enum `der_parser::error::BerError` are different
+    // and we cannot convert to SecBlobError with the From impl
+    // Next is to upgrade the der_parser crate (and nom to nom7 by the way)
+    match parse_ap_req(blob) {
+        Ok((blob, ap_req)) => Ok((blob, ap_req)),
+        _ => Err(nom::Err::Error(SecBlobError::KrbReqError)),
+    }
 }
 
 pub fn parse_kerberos5_request(blob: &[u8]) -> IResult<&[u8], Kerberos5Ticket, SecBlobError>