]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
rust/ftp: update to nom 8
authorJason Ish <jason.ish@oisf.net>
Mon, 27 Oct 2025 16:12:25 +0000 (10:12 -0600)
committerVictor Julien <vjulien@oisf.net>
Wed, 29 Oct 2025 15:33:52 +0000 (15:33 +0000)
Ticket: #8026

rust/src/ftp/mod.rs

index 8181bb0b951840f28b03413b01f8dc436dcb00f6..3f943f1a5ab7e76fb4128ec864838edf1f39ddef 100644 (file)
 
 //! FTP parser and application layer module.
 
-use nom7::bytes::complete::{tag, take_until};
-use nom7::character::complete::{digit1, multispace0};
-use nom7::combinator::{complete, map_res, opt, verify};
-use nom7::sequence::{delimited, tuple};
-use nom7::{Err, IResult};
+use nom8::bytes::complete::{tag, take_until};
+use nom8::character::complete::{digit1, multispace0};
+use nom8::combinator::{complete, map_res, opt, verify};
+use nom8::sequence::delimited;
+use nom8::{Err, IResult, Parser};
 use std;
 use std::str;
 use std::str::FromStr;
@@ -39,18 +39,18 @@ fn getu16(i: &[u8]) -> IResult<&[u8], u16> {
     map_res(
         map_res(delimited(multispace0, digit1, multispace0), str::from_utf8),
         FromStr::from_str,
-    )(i)
+    ).parse(i)
 }
 
 fn parse_u16(i: &[u8]) -> IResult<&[u8], u16> {
-    map_res(map_res(digit1, str::from_utf8), u16::from_str)(i)
+    map_res(map_res(digit1, str::from_utf8), u16::from_str).parse(i)
 }
 
 // PORT 192,168,0,13,234,10
 fn ftp_active_port(i: &[u8]) -> IResult<&[u8], u16> {
-    let (i, _) = tag("PORT")(i)?;
-    let (i, _) = delimited(multispace0, digit1, multispace0)(i)?;
-    let (i, _) = tuple((
+    let (i, _) = tag("PORT").parse(i)?;
+    let (i, _) = delimited(multispace0, digit1, multispace0).parse(i)?;
+    let (i, _) = (
         tag(","),
         digit1,
         tag(","),
@@ -58,19 +58,19 @@ fn ftp_active_port(i: &[u8]) -> IResult<&[u8], u16> {
         tag(","),
         digit1,
         tag(","),
-    ))(i)?;
-    let (i, part1) = verify(parse_u16, |&v| v <= u8::MAX as u16)(i)?;
-    let (i, _) = tag(",")(i)?;
-    let (i, part2) = verify(parse_u16, |&v| v <= u8::MAX as u16)(i)?;
+    ).parse(i)?;
+    let (i, part1) = verify(parse_u16, |&v| v <= u8::MAX as u16).parse(i)?;
+    let (i, _) = tag(",").parse(i)?;
+    let (i, part2) = verify(parse_u16, |&v| v <= u8::MAX as u16).parse(i)?;
     Ok((i, part1 * 256 + part2))
 }
 
 // 227 Entering Passive Mode (212,27,32,66,221,243).
 fn ftp_pasv_response(i: &[u8]) -> IResult<&[u8], u16> {
-    let (i, _) = tag("227")(i)?;
-    let (i, _) = take_until("(")(i)?;
-    let (i, _) = tag("(")(i)?;
-    let (i, _) = tuple((
+    let (i, _) = tag("227").parse(i)?;
+    let (i, _) = take_until("(").parse(i)?;
+    let (i, _) = tag("(").parse(i)?;
+    let (i, _) = (
         digit1,
         tag(","),
         digit1,
@@ -79,13 +79,13 @@ fn ftp_pasv_response(i: &[u8]) -> IResult<&[u8], u16> {
         tag(","),
         digit1,
         tag(","),
-    ))(i)?;
-    let (i, part1) = verify(getu16, |&v| v <= u8::MAX as u16)(i)?;
-    let (i, _) = tag(",")(i)?;
-    let (i, part2) = verify(getu16, |&v| v <= u8::MAX as u16)(i)?;
+    ).parse(i)?;
+    let (i, part1) = verify(getu16, |&v| v <= u8::MAX as u16).parse(i)?;
+    let (i, _) = tag(",").parse(i)?;
+    let (i, part2) = verify(getu16, |&v| v <= u8::MAX as u16).parse(i)?;
     // may also be completed by a final point
-    let (i, _) = tag(")")(i)?;
-    let (i, _) = opt(complete(tag(".")))(i)?;
+    let (i, _) = tag(")").parse(i)?;
+    let (i, _) = opt(complete(tag("."))).parse(i)?;
     Ok((i, part1 * 256 + part2))
 }
 
@@ -131,26 +131,26 @@ pub unsafe extern "C" fn SCFTPParsePortPasv(input: *const u8, len: u32) -> u16 {
 
 // 229 Entering Extended Passive Mode (|||48758|).
 pub fn ftp_epsv_response(i: &[u8]) -> IResult<&[u8], u16> {
-    let (i, _) = tag("229")(i)?;
-    let (i, _) = take_until("|||")(i)?;
-    let (i, _) = tag("|||")(i)?;
+    let (i, _) = tag("229").parse(i)?;
+    let (i, _) = take_until("|||").parse(i)?;
+    let (i, _) = tag("|||").parse(i)?;
     let (i, port) = getu16(i)?;
-    let (i, _) = tag("|)")(i)?;
-    let (i, _) = opt(complete(tag(".")))(i)?;
+    let (i, _) = tag("|)").parse(i)?;
+    let (i, _) = opt(complete(tag("."))).parse(i)?;
     Ok((i, port))
 }
 
 // EPRT |2|2a01:e34:ee97:b130:8c3e:45ea:5ac6:e301|41813|
 fn ftp_active_eprt(i: &[u8]) -> IResult<&[u8], u16> {
-    let (i, _) = tag("EPRT")(i)?;
-    let (i, _) = take_until("|")(i)?;
-    let (i, _) = tag("|")(i)?;
-    let (i, _) = take_until("|")(i)?;
-    let (i, _) = tag("|")(i)?;
-    let (i, _) = take_until("|")(i)?;
-    let (i, _) = tag("|")(i)?;
+    let (i, _) = tag("EPRT").parse(i)?;
+    let (i, _) = take_until("|").parse(i)?;
+    let (i, _) = tag("|").parse(i)?;
+    let (i, _) = take_until("|").parse(i)?;
+    let (i, _) = tag("|").parse(i)?;
+    let (i, _) = take_until("|").parse(i)?;
+    let (i, _) = tag("|").parse(i)?;
     let (i, port) = getu16(i)?;
-    let (i, _) = tag("|")(i)?;
+    let (i, _) = tag("|").parse(i)?;
     Ok((i, port))
 }