]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
pgsql: move database into opt parameters list
authorJuliana Fajardini <jufajardini@oisf.net>
Wed, 7 Sep 2022 19:41:48 +0000 (16:41 -0300)
committerVictor Julien <vjulien@oisf.net>
Fri, 28 Oct 2022 15:08:03 +0000 (17:08 +0200)
For StartupMessages, the database parameter is optional. This moves the
parameter into the optional_parameters list.

Bug #5579

rust/src/pgsql/logger.rs
rust/src/pgsql/parser.rs

index 87926d81f5896e4f46cea5adbea67e0fe0c5aedf..9173e112e5b4e7735eb7b5c02f4b2e4dbc1ba556 100644 (file)
@@ -271,10 +271,6 @@ fn log_startup_parameters(params: &PgsqlStartupParameters) -> Result<JsonBuilder
     let mut jb = JsonBuilder::new_object();
     // User is a mandatory field in a pgsql message
     jb.set_string_from_bytes("user", &params.user.value)?;
-    if let Some(PgsqlParameter { name: _, value }) = &params.database {
-        jb.set_string_from_bytes("database", value)?;
-    }
-
     if let Some(parameters) = &params.optional_params {
         jb.open_array("optional_parameters")?;
         for parameter in parameters {
index 3a913c40276fa60934ae7b169a88893ef0ca71a3..c7022795ed49c64ca6ae8a107b02c3551875c435 100644 (file)
@@ -122,7 +122,6 @@ pub struct PgsqlParameter {
 #[derive(Debug, PartialEq, Eq)]
 pub struct PgsqlStartupParameters {
     pub user: PgsqlParameter,
-    pub database: Option<PgsqlParameter>,
     pub optional_params: Option<Vec<PgsqlParameter>>,
 }
 
@@ -554,26 +553,25 @@ fn pgsql_parse_generic_parameter(i: &[u8]) -> IResult<&[u8], PgsqlParameter> {
 }
 
 pub fn pgsql_parse_startup_parameters(i: &[u8]) -> IResult<&[u8], PgsqlStartupParameters> {
-    let (i, optional) = opt(terminated(many1(pgsql_parse_generic_parameter), tag("\x00")))(i)?;
-    if let Some(ref params) = optional {
+    let (i, mut optional) = opt(terminated(many1(pgsql_parse_generic_parameter), tag("\x00")))(i)?;
+    if let Some(ref mut params) = optional {
         let mut user = PgsqlParameter{name: PgsqlParameters::User, value: Vec::new() };
-        let mut database = None;
+        let mut index: usize = 0;
         for j in 0..params.len() {
             if params[j].name == PgsqlParameters::User {
                 user.value.extend_from_slice(&params[j].value);
-            } else if params[j].name == PgsqlParameters::Database {
-                let mut d1 = PgsqlParameter{name: PgsqlParameters::Database, value: Vec::new() };
-                d1.value.extend_from_slice(&params[j].value);
-                database = Some(d1);
+                index = j;
             }
         }
+        params.remove(index);
         if user.value.len() == 0 {
             return Err(Err::Error(make_error(i, ErrorKind::Tag)));
         }
         return Ok((i, PgsqlStartupParameters{
             user,
-            database,
-            optional_params: optional,
+            optional_params: if !params.is_empty() {
+                optional
+            } else { None },
         }));
     }
     return Err(Err::Error(make_error(i, ErrorKind::Tag)));
@@ -1159,10 +1157,11 @@ mod tests {
             name: PgsqlParameters::Database,
             value: br#"mailstore"#.to_vec(),
         };
+        let mut database_param: Vec<PgsqlParameter> = Vec::new();
+        database_param.push(database);
         let params = PgsqlStartupParameters {
             user,
-            database: Some(database),
-            optional_params: None,
+            optional_params: Some(database_param),
         };
         let expected_result = PgsqlFEMessage::StartupMessage(StartupPacket {
             length: 38,
@@ -1199,7 +1198,6 @@ mod tests {
         };
         let params = PgsqlStartupParameters {
             user,
-            database: None,
             optional_params: None,
         };
         let expected_result = PgsqlFEMessage::StartupMessage(StartupPacket {