if self.request_gap {
match ldap_parse_msg(input) {
- Ok((_, msg)) => {
- let ldap_msg = LdapMessage::from(msg);
- if ldap_msg.is_unknown() {
- return AppLayerResult::err();
- }
+ Ok((_, _msg)) => {
AppLayerResult::ok();
}
Err(_e) => {
if self.response_gap {
match ldap_parse_msg(input) {
- Ok((_, msg)) => {
- let ldap_msg = LdapMessage::from(msg);
- if ldap_msg.is_unknown() {
- return AppLayerResult::err();
- }
+ Ok((_, _msg)) => {
AppLayerResult::ok();
}
Err(_e) => {
match ldap_parse_msg(input) {
Ok((_, msg)) => {
let ldap_msg = LdapMessage::from(msg);
- if ldap_msg.is_unknown() {
- return ALPROTO_FAILED;
- }
if direction == Direction::ToServer && !ldap_msg.is_request() {
unsafe {
*rdir = Direction::ToClient.into();
pub ava: AttributeValueAssertion,
}
+#[derive(Clone, Debug, Eq, PartialEq)]
+pub struct AbandonRequest {
+ pub message_id: u32,
+}
+
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct ExtendedRequest {
pub request_name: LdapOID,
ExtendedRequest(ExtendedRequest),
ExtendedResponse(ExtendedResponse),
IntermediateResponse(IntermediateResponse),
- Unknown,
+ AbandonRequest(AbandonRequest),
}
impl Display for ProtocolOp {
ProtocolOp::ModDnResponse(_) => write!(f, "mod_dn_response"),
ProtocolOp::CompareRequest(_) => write!(f, "compare_request"),
ProtocolOp::CompareResponse(_) => write!(f, "compare_response"),
+ ProtocolOp::AbandonRequest(_) => write!(f, "abandon_request"),
ProtocolOp::ExtendedRequest(_) => write!(f, "extended_request"),
ProtocolOp::ExtendedResponse(_) => write!(f, "extended_response"),
ProtocolOp::IntermediateResponse(_) => write!(f, "intermediate_response"),
- ProtocolOp::Unknown => write!(f, "unknown"),
}
}
}
ldap_parser::ldap::ProtocolOp::IntermediateResponse(msg) => {
Self::from_intermediate_response(msg)
}
- ldap_parser::ldap::ProtocolOp::AbandonRequest(_) => ProtocolOp::Unknown,
+ ldap_parser::ldap::ProtocolOp::AbandonRequest(msg) => Self::from_abandon_request(msg),
};
let controls = ldap_msg.controls.map(|ctls| {
ctls.iter()
}
impl LdapMessage {
- pub fn is_unknown(&self) -> bool {
- match self.protocol_op {
- ProtocolOp::Unknown => return true,
- _ => return false,
- }
- }
-
pub fn is_request(&self) -> bool {
match self.protocol_op {
ProtocolOp::BindRequest(_)
| ProtocolOp::DelRequest(_)
| ProtocolOp::ModDnRequest(_)
| ProtocolOp::CompareRequest(_)
- | ProtocolOp::Unknown // AbandonRequest
+ | ProtocolOp::AbandonRequest(_)
| ProtocolOp::ExtendedRequest(_) => {
return true;
}
})
}
+ fn from_abandon_request(msg: ldap_parser::ldap::MessageID) -> ProtocolOp {
+ ProtocolOp::AbandonRequest(AbandonRequest {message_id: msg.0})
+ }
+
fn from_extended_request(msg: ldap_parser::ldap::ExtendedRequest) -> ProtocolOp {
ProtocolOp::ExtendedRequest(ExtendedRequest {
request_name: LdapOID(msg.request_name.0.to_string()),