]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
detect/template2: setup script
authorVictor Julien <victor@inliniac.net>
Wed, 19 Sep 2018 16:49:15 +0000 (18:49 +0200)
committerVictor Julien <victor@inliniac.net>
Wed, 19 Sep 2018 18:57:32 +0000 (20:57 +0200)
scripts/setup-simple-detect2.sh [new file with mode: 0755]

diff --git a/scripts/setup-simple-detect2.sh b/scripts/setup-simple-detect2.sh
new file mode 100755 (executable)
index 0000000..0d53cdd
--- /dev/null
@@ -0,0 +1,127 @@
+#!/bin/bash
+#
+# Script to setup a new 'simple' detect module.
+# Written by Victor Julien <victor@inliniac.net>
+#
+
+set -e
+#set -x
+
+function Usage {
+    echo
+    echo "$(basename $0) -- script to provision a detect module. The script"
+    echo "makes a copy of detect-template, sets the name and updates"
+    echo "the build system."
+    echo
+    echo "Call from the 'src' directory, with one argument: the detect module"
+    echo "name."
+    echo
+    echo "E.g. inside 'src': ../scripts/$(basename $0) helloworld"
+    echo
+}
+
+function Done {
+    echo
+    echo "Detect module $NR has been set up in $FILE_C and $FILE_H"
+    echo "and the build system has been updated."
+    echo
+    echo "The detect module should now compile cleanly. Try running 'make'."
+    echo
+    echo "Next steps are to edit the files to implement the actual"
+    echo "detection logic of $NR."
+    echo
+}
+
+# Make sure we are running from the correct directory.
+set_dir() {
+    if [ -e ./suricata.c ]; then
+       # Do nothing.
+       true
+    elif [ -e ./src/suricata.c ]; then
+       cd src
+    else
+       echo "error: this does not appear to be a suricata source directory."
+       exit 1
+    fi
+}
+
+if [ $# -ne "1" ]; then
+    Usage
+    echo "ERROR: call with one argument"
+    exit 1
+fi
+
+INPUT=$1
+# lowercase
+LC=${INPUT,,}
+#echo $LC
+# UPPERCASE
+UC=${LC^^}
+#echo $UC
+# Normal
+NR=${LC^}
+#echo $NR
+
+FILE_C="detect-${LC}.c"
+FILE_H="detect-${LC}.h"
+
+set_dir
+
+if [ ! -e detect-template2.c ] || [ ! -e detect-template2.h ]; then
+    Usage
+    echo "ERROR: input files detect-template.c and/or detect-template.h are missing"
+    exit 1
+fi
+if [ -e $FILE_C ] || [ -e $FILE_H ]; then
+    Usage
+    echo "ERROR: file(s) $FILE_C and/or $FILE_H already exist, won't overwrite"
+    exit 1
+fi
+
+FILE_C="tests/detect-${LC}.c"
+if [ ! -e tests/detect-template2.c ]; then
+    Usage
+    echo "ERROR: input file tests/detect-template.c is missing"
+    exit 1
+fi
+if [ -e $FILE_C ]; then
+    Usage
+    echo "ERROR: file $FILE_C already exist, won't overwrite"
+    exit 1
+fi
+
+FILE_C="detect-${LC}.c"
+FILE_H="detect-${LC}.h"
+cp detect-template2.c $FILE_C
+cp detect-template2.h $FILE_H
+
+# search and replaces
+sed -i "s/TEMPLATE2/${UC}/g" $FILE_C
+sed -i "s/TEMPLATE2/${UC}/g" $FILE_H
+sed -i "s/Template2/${NR}/g" $FILE_C
+sed -i "s/Template2/${NR}/g" $FILE_H
+sed -i "s/template2/${LC}/g" $FILE_C
+sed -i "s/template2/${LC}/g" $FILE_H
+# add to Makefile.am
+sed -i "s/detect-template2.c detect-template2.h \\\/detect-template2.c detect-template2.h \\\\\n${FILE_C} ${FILE_H} \\\/g" Makefile.am
+
+# update enum
+sed -i "s/DETECT_TEMPLATE2,/DETECT_TEMPLATE2,\\n    DETECT_${UC},/g" detect-engine-register.h
+
+# add include to detect-engine-register.c
+sed -i "s/#include \"detect-template2.h\"/#include \"detect-template2.h\"\\n#include \"${FILE_H}\"/g" detect-engine-register.c
+
+# add reg func to detect-engine-register.c
+sed -i "s/DetectTemplate2Register();/DetectTemplate2Register();\\n    Detect${NR}Register();/g" detect-engine-register.c
+
+# tests file
+FILE_C="tests/detect-${LC}.c"
+cp tests/detect-template2.c $FILE_C
+
+# search and replaces
+sed -i "s/TEMPLATE2/${UC}/g" $FILE_C
+sed -i "s/Template2/${NR}/g" $FILE_C
+sed -i "s/template2/${LC}/g" $FILE_C
+
+Done
+exit 0