]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
setup-app-layer: remove generator for C parsers
authorJason Ish <jason.ish@oisf.net>
Thu, 17 Nov 2022 15:38:31 +0000 (09:38 -0600)
committerVictor Julien <vjulien@oisf.net>
Tue, 6 Dec 2022 13:09:10 +0000 (14:09 +0100)
Ticket: 4939

.github/workflows/builds.yml
scripts/setup-app-layer.py

index ea33cf9690d5f4ea7fff0425d902ef52ac44d0e7..decc4a243356748b25b136e56937ee046c1bc8a7 100644 (file)
@@ -333,7 +333,7 @@ jobs:
           ./autogen.sh
           CFLAGS="${DEFAULT_CFLAGS}" ./configure
           make -j2
-      - run: ./scripts/setup-app-layer.py --rust --parser --logger --detect FooBar payload
+      - run: ./scripts/setup-app-layer.py --parser --logger --detect FooBar payload
       - run: make -j2
       - run: ./src/suricata --list-app-layer-protos | grep foobar
 
index dd32d54bdc869138311a65c40b9c467c1d7c23c1..92abb9da459a83d967425ca5e7d318477019a4c8 100755 (executable)
@@ -58,39 +58,21 @@ def common_copy_templates(proto, pairs, replacements=()):
                 output.write(line)
         output.close()
 
-def copy_app_layer_templates(proto, rust):
+def copy_app_layer_templates(proto):
     lower = proto.lower()
     upper = proto.upper()
 
-    if rust:
-        pairs = (
-            ("rust/src/applayertemplate/mod.rs",
-             "rust/src/applayer%s/mod.rs" % (lower)),
-            ("rust/src/applayertemplate/template.rs",
-             "rust/src/applayer%s/%s.rs" % (lower, lower)),
-            ("rust/src/applayertemplate/parser.rs",
-             "rust/src/applayer%s/parser.rs" % (lower)),
-        )
-    else:
-        pairs = (
-            ("src/app-layer-template.c",
-             "src/app-layer-%s.c" % (lower)),
-            ("src/app-layer-template.h",
-             "src/app-layer-%s.h" % (lower)),
-        )
+    pairs = (
+        ("rust/src/applayertemplate/mod.rs",
+         "rust/src/applayer%s/mod.rs" % (lower)),
+        ("rust/src/applayertemplate/template.rs",
+         "rust/src/applayer%s/%s.rs" % (lower, lower)),
+        ("rust/src/applayertemplate/parser.rs",
+         "rust/src/applayer%s/parser.rs" % (lower)),
+    )
 
     common_copy_templates(proto, pairs)
 
-def patch_makefile_am(protoname):
-    print("Patching src/Makefile.am.")
-    output = io.StringIO()
-    with open("src/Makefile.am") as infile:
-        for line in infile:
-            if line.lstrip().startswith("app-layer-template."):
-                output.write(line.replace("template", protoname.lower()))
-            output.write(line)
-    open("src/Makefile.am", "w").write(output.getvalue())
-
 def patch_rust_lib_rs(protoname):
     filename = "rust/src/lib.rs"
     print("Patching %s." % (filename))
@@ -166,20 +148,14 @@ def patch_app_layer_detect_proto_c(proto):
         output.write(line)
     open(filename, "w").write(output.getvalue())
 
-def patch_app_layer_parser_c(proto, rust):
+def patch_app_layer_parser_c(proto):
     filename = "src/app-layer-parser.c"
     print("Patching %s." % (filename))
     output = io.StringIO()
     inlines = open(filename).readlines()
     for line in inlines:
-        if rust:
-            if line.find("rs_template_register_parser") > -1:
-                output.write(line.replace("template", proto.lower()))
-        else:
-            if line.find("app-layer-template.h") > -1:
-                output.write(line.replace("template", proto.lower()))
-            if line.find("RegisterTemplateParsers()") > -1:
-                output.write(line.replace("Template", proto))
+        if line.find("rs_template_register_parser") > -1:
+            output.write(line.replace("template", proto.lower()))
         output.write(line)
     open(filename, "w").write(output.getvalue())
 
@@ -249,25 +225,17 @@ def logger_patch_output_c(proto):
         output.write(line)
     open(filename, "w").write(output.getvalue())
 
-def logger_copy_templates(proto, rust):
+def logger_copy_templates(proto):
     lower = proto.lower()
-
-    if rust:
-        pairs = (
-            ("src/output-json-template-rust.h",
-             "src/output-json-%s.h" % (lower)),
-            ("src/output-json-template-rust.c",
-             "src/output-json-%s.c" % (lower)),
-            ("rust/src/applayertemplate/logger.rs",
-             "rust/src/applayer%s/logger.rs" % (lower)),
-        )
-    else:
-        pairs = (
-            ("src/output-json-template.h",
-             "src/output-json-%s.h" % (lower)),
-            ("src/output-json-template.c",
-             "src/output-json-%s.c" % (lower)),
-        )
+    
+    pairs = (
+        ("src/output-json-template-rust.h",
+         "src/output-json-%s.h" % (lower)),
+        ("src/output-json-template-rust.c",
+         "src/output-json-%s.c" % (lower)),
+        ("rust/src/applayertemplate/logger.rs",
+         "rust/src/applayer%s/logger.rs" % (lower)),
+    )
 
     common_copy_templates(proto, pairs)
 
@@ -293,41 +261,25 @@ def logger_patch_util_profiling_c(proto):
             output.write(line)
     open(filename, "w").write(output.getvalue())
 
-def detect_copy_templates(proto, buffername, rust):
+def detect_copy_templates(proto, buffername):
     lower = proto.lower()
     buffername_lower = buffername.lower()
 
-    if rust:
-        pairs = (
-            ("src/detect-template-rust-buffer.h",
-             "src/detect-%s-%s.h" % (lower, buffername_lower)),
-            ("src/detect-template-rust-buffer.c",
-             "src/detect-%s-%s.c" % (lower, buffername_lower)),
-        )
-        replacements = (
-            ("TEMPLATE_RUST_BUFFER", "%s_%s" % (
-                proto.upper(), buffername.upper())),
-            ("template-rust-buffer", "%s-%s" % (
-                proto.lower(), buffername.lower())),
-            ("template_rust_buffer", "%s_%s" % (
-                proto.lower(), buffername.lower())),
-            ("TemplateRustBuffer", "%s%s" % (proto, buffername)),
-        )
-    else:
-        pairs = (
-            ("src/detect-template-buffer.h",
-             "src/detect-%s-%s.h" % (lower, buffername_lower)),
-            ("src/detect-template-buffer.c",
-             "src/detect-%s-%s.c" % (lower, buffername_lower)),
-            ("src/tests/detect-template-buffer.c",
-             "src/tests/detect-%s-%s.c" % (lower, buffername_lower)),
-        )
-        replacements = (
-            ("TEMPLATE_BUFFER", "%s_%s" % (proto.upper(), buffername.upper())),
-            ("template-buffer", "%s-%s" % (proto.lower(), buffername.lower())),
-            ("template_buffer", "%s_%s" % (proto.lower(), buffername.lower())),
-            ("TemplateBuffer", "%s%s" % (proto, buffername)),
-        )
+    pairs = (
+        ("src/detect-template-rust-buffer.h",
+         "src/detect-%s-%s.h" % (lower, buffername_lower)),
+        ("src/detect-template-rust-buffer.c",
+         "src/detect-%s-%s.c" % (lower, buffername_lower)),
+    )
+    replacements = (
+        ("TEMPLATE_RUST_BUFFER", "%s_%s" % (
+            proto.upper(), buffername.upper())),
+        ("template-rust-buffer", "%s-%s" % (
+            proto.lower(), buffername.lower())),
+        ("template_rust_buffer", "%s_%s" % (
+            proto.lower(), buffername.lower())),
+        ("TemplateRustBuffer", "%s%s" % (proto, buffername)),
+    )
 
     common_copy_templates(proto, pairs, replacements)
 
@@ -412,8 +364,6 @@ def main():
     parser = argparse.ArgumentParser(
         formatter_class=argparse.RawDescriptionHelpFormatter,
         epilog=epilog)
-    parser.add_argument("--rust", action="store_true", default=False,
-                        help="Setup Rust protocol template.")
     parser.add_argument("--logger", action="store_true", default=False,
                         help="Generate logger.")
     parser.add_argument("--parser", action="store_true", default=False,
@@ -459,23 +409,19 @@ def main():
     if parser:
         if proto_exists(proto):
             raise SetupError("protocol already exists: %s" % (proto))
-        copy_app_layer_templates(proto, args.rust)
-        if args.rust:
-            patch_rust_lib_rs(proto)
-        if not args.rust:
-            patch_makefile_am(proto)
+        copy_app_layer_templates(proto)
+        patch_rust_lib_rs(proto)
         patch_app_layer_protos_h(proto)
         patch_app_layer_protos_c(proto)
         patch_app_layer_detect_proto_c(proto)
-        patch_app_layer_parser_c(proto, args.rust)
+        patch_app_layer_parser_c(proto)
         patch_suricata_yaml_in(proto)
 
     if logger:
         if not proto_exists(proto):
             raise SetupError("no app-layer parser exists for %s" % (proto))
-        logger_copy_templates(proto, args.rust)
-        if args.rust:
-            patch_rust_applayer_mod_rs(proto)
+        logger_copy_templates(proto)
+        patch_rust_applayer_mod_rs(proto)
         logger_patch_makefile_am(proto)
         logger_patch_suricata_common_h(proto)
         logger_patch_output_c(proto)
@@ -485,14 +431,13 @@ def main():
     if detect:
         if not proto_exists(proto):
             raise SetupError("no app-layer parser exists for %s" % (proto))
-        detect_copy_templates(proto, args.buffer, args.rust)
+        detect_copy_templates(proto, args.buffer)
         detect_patch_makefile_am(proto, args.buffer)
         detect_patch_detect_engine_register_c(proto, args.buffer)
         detect_patch_detect_engine_register_h(proto, args.buffer)
 
     if parser:
-        if args.rust:
-            print("""
+        print("""
 An application detector and parser for the protocol %(proto)s have
 now been setup in the files:
 
@@ -501,20 +446,9 @@ now been setup in the files:
             "proto": proto,
             "proto_lower": proto.lower(),
         })
-        else:
-            print("""
-An application detector and parser for the protocol %(proto)s have
-now been setup in the files:
-
-    src/app-layer-%(proto_lower)s.h
-    src/app-layer-%(proto_lower)s.c""" % {
-            "proto": proto,
-            "proto_lower": proto.lower(),
-        })
 
     if logger:
-        if args.rust:
-            print("""
+        print("""
 A JSON application layer transaction logger for the protocol
 %(proto)s has now been set in the file:
 
@@ -522,16 +456,6 @@ A JSON application layer transaction logger for the protocol
             "proto": proto,
             "proto_lower": proto.lower(),
         })
-        else:
-            print("""
-A JSON application layer transaction logger for the protocol
-%(proto)s has now been set in the files:
-
-    src/output-json-%(proto_lower)s.h
-    src/output-json-%(proto_lower)s.c""" % {
-            "proto": proto,
-            "proto_lower": proto.lower(),
-        })
 
     if detect:
         print("""