rust/telnet: convert to nom 8

Ticket: #8043
pull/14207/head
Jason Ish 1 week ago
parent 2ff2eb1325
commit 7c70f74942

@ -15,16 +15,16 @@
* 02110-1301, USA.
*/
use crate::common::nom7::take_until_and_consume;
use nom7::combinator::peek;
use nom7::bytes::complete::take;
use nom7::{IResult};
use nom7::number::streaming::le_u8;
use nom7::bytes::streaming::tag;
use nom7::bytes::streaming::{take_until};
use crate::common::nom8::take_until_and_consume;
use nom8::combinator::peek;
use nom8::bytes::complete::take;
use nom8::{IResult, Parser};
use nom8::number::streaming::le_u8;
use nom8::bytes::streaming::tag;
use nom8::bytes::streaming::{take_until};
pub fn peek_message_is_ctl(i: &[u8]) -> IResult<&[u8], bool> {
let (i, v) = peek(le_u8)(i)?;
let (i, v) = peek(le_u8).parse(i)?;
Ok((i, v == b'\xff'))
}
@ -36,13 +36,13 @@ pub enum TelnetMessageType<'a> {
pub fn parse_ctl_suboption<'a>(i: &'a[u8], full: &'a[u8]) -> IResult<&'a[u8], &'a[u8]> {
let (i, _sc) = le_u8(i)?;
let tag: &[u8] = b"\xff\xf0";
let (i, x) = take_until(tag)(i)?;
let (i, x) = take_until(tag).parse(i)?;
let o = &full[..(x.len()+3)];
Ok((i, o))
}
pub fn parse_ctl_message(oi: &[u8]) -> IResult<&[u8], &[u8]> {
let (i, _) = tag(b"\xff")(oi)?;
let (i, _) = tag(&b"\xff"[..])(oi)?;
let (i, cmd) = le_u8(i)?;
let (i, d) = match cmd {
251..=254 => take(3_usize)(oi)?,
@ -54,7 +54,7 @@ pub fn parse_ctl_message(oi: &[u8]) -> IResult<&[u8], &[u8]> {
}
pub fn parse_message(i: &[u8]) -> IResult<&[u8], TelnetMessageType<'_>> {
let (i, v) = peek(le_u8)(i)?;
let (i, v) = peek(le_u8).parse(i)?;
if v == b'\xff' {
let (i, c) = parse_ctl_message(i)?;
Ok((i, TelnetMessageType::Control(c)))
@ -66,7 +66,7 @@ pub fn parse_message(i: &[u8]) -> IResult<&[u8], TelnetMessageType<'_>> {
// 'login: ', 'Password: ', possibly with leading ctls
pub fn parse_welcome_message(i: &[u8]) -> IResult<&[u8], TelnetMessageType<'_>> {
let (i, v) = peek(le_u8)(i)?;
let (i, v) = peek(le_u8).parse(i)?;
if v == b'\xff' {
let (i, c) = parse_ctl_message(i)?;
Ok((i, TelnetMessageType::Control(c)))

@ -21,7 +21,7 @@ use crate::applayer::{self, *};
use crate::flow::Flow;
use crate::frames::*;
use std::ffi::CString;
use nom7::IResult;
use nom8::IResult;
use suricata_sys::sys::{
AppLayerParserState, AppProto, SCAppLayerParserConfParserEnabled,
SCAppLayerParserStateIssetFlag, SCAppLayerProtoDetectConfProtoDetectionEnabled,
@ -236,7 +236,7 @@ impl TelnetState {
SCLogDebug!("request {:?}", _c);
}
}
Err(nom7::Err::Incomplete(_)) => {
Err(nom8::Err::Incomplete(_)) => {
// Not enough data. This parser doesn't give us a good indication
// of how much data is missing so just ask for one more byte so the
// parse is called as soon as more data is received.
@ -344,7 +344,7 @@ impl TelnetState {
SCLogDebug!("response {:?}", _c);
}
}
Err(nom7::Err::Incomplete(_)) => {
Err(nom8::Err::Incomplete(_)) => {
let consumed = input.len() - start.len();
let needed = start.len() + 1;
return AppLayerResult::incomplete(consumed as u32, needed as u32);

Loading…
Cancel
Save