|
|
|
@ -23,25 +23,24 @@ use crate::smb::smb::*;
|
|
|
|
|
|
|
|
|
|
use nom;
|
|
|
|
|
use nom::IResult;
|
|
|
|
|
use nom::error::ErrorKind;
|
|
|
|
|
use der_parser::ber::BerObjectContent;
|
|
|
|
|
use der_parser::der::{parse_der_oid, parse_der_sequence};
|
|
|
|
|
|
|
|
|
|
fn parse_secblob_get_spnego(blob: &[u8]) -> IResult<&[u8], &[u8]>
|
|
|
|
|
fn parse_secblob_get_spnego(blob: &[u8]) -> IResult<&[u8], &[u8], SecBlobError>
|
|
|
|
|
{
|
|
|
|
|
let (rem, base_o) = der_parser::parse_der(blob)?;
|
|
|
|
|
let (rem, base_o) = der_parser::parse_der(blob).map_err(|e| nom::Err::convert(e))?;
|
|
|
|
|
SCLogDebug!("parse_secblob_get_spnego: base_o {:?}", base_o);
|
|
|
|
|
let d = match base_o.content.as_slice() {
|
|
|
|
|
Err(_) => { return Err(nom::Err::Error(error_position!(blob,ErrorKind::Custom(SECBLOB_NOT_SPNEGO)))); },
|
|
|
|
|
Err(_) => { return Err(nom::Err::Error(SecBlobError::NotSpNego)); },
|
|
|
|
|
Ok(d) => d,
|
|
|
|
|
};
|
|
|
|
|
let (next, o) = parse_der_oid(d)?;
|
|
|
|
|
let (next, o) = parse_der_oid(d).map_err(|e| nom::Err::convert(e))?;
|
|
|
|
|
SCLogDebug!("parse_secblob_get_spnego: sub_o {:?}", o);
|
|
|
|
|
|
|
|
|
|
let oid = match o.content.as_oid() {
|
|
|
|
|
Ok(oid) => oid,
|
|
|
|
|
Err(_) => {
|
|
|
|
|
return Err(nom::Err::Error(error_position!(blob,ErrorKind::Custom(SECBLOB_NOT_SPNEGO))));
|
|
|
|
|
return Err(nom::Err::Error(SecBlobError::NotSpNego));
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
SCLogDebug!("oid {}", oid.to_string());
|
|
|
|
@ -51,7 +50,7 @@ fn parse_secblob_get_spnego(blob: &[u8]) -> IResult<&[u8], &[u8]>
|
|
|
|
|
SCLogDebug!("SPNEGO {}", oid);
|
|
|
|
|
},
|
|
|
|
|
_ => {
|
|
|
|
|
return Err(nom::Err::Error(error_position!(blob,ErrorKind::Custom(SECBLOB_NOT_SPNEGO))));
|
|
|
|
|
return Err(nom::Err::Error(SecBlobError::NotSpNego));
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -60,16 +59,16 @@ fn parse_secblob_get_spnego(blob: &[u8]) -> IResult<&[u8], &[u8]>
|
|
|
|
|
Ok((rem, next))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn parse_secblob_spnego_start(blob: &[u8]) -> IResult<&[u8], &[u8]>
|
|
|
|
|
fn parse_secblob_spnego_start(blob: &[u8]) -> IResult<&[u8], &[u8], SecBlobError>
|
|
|
|
|
{
|
|
|
|
|
let (rem, o) = der_parser::parse_der(blob)?;
|
|
|
|
|
let (rem, o) = der_parser::parse_der(blob).map_err(|e| nom::Err::convert(e))?;
|
|
|
|
|
let d = match o.content.as_slice() {
|
|
|
|
|
Ok(d) => {
|
|
|
|
|
SCLogDebug!("d: next data len {}",d.len());
|
|
|
|
|
d
|
|
|
|
|
},
|
|
|
|
|
_ => {
|
|
|
|
|
return Err(nom::Err::Error(error_position!(blob,ErrorKind::Custom(SECBLOB_NOT_SPNEGO))));
|
|
|
|
|
return Err(nom::Err::Error(SecBlobError::NotSpNego));
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
Ok((rem, d))
|
|
|
|
|