]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
applayer: add StringToAppProto
authorPierre Chifflier <chifflier@wzdftpd.net>
Thu, 26 Oct 2017 05:53:12 +0000 (07:53 +0200)
committerVictor Julien <victor@inliniac.net>
Thu, 23 Nov 2017 06:14:17 +0000 (07:14 +0100)
Add StringToAppProto to map a protocol name to a AppProto.

Exposing this function is required to let parsers discover their
AppProto identifier constant dynamically.
For example, a parser can request this value, and use it for
registration without knowing the value.

scripts/setup-app-layer.sh
src/app-layer-protos.c
src/app-layer-protos.h

index 01df12d84c437f0a2ddce24e13136e354c9dbd38..0435ad903e29a3e7550cba48cebe2b7a1494bf29 100755 (executable)
@@ -108,6 +108,10 @@ function patch_app_layer_protos_c {
 s/TEMPLATE/${protoname_upper}/
 +
 s/template/${protoname_lower}/
+/if (strcmp(proto_name,"template")==0)
+t-
+-,.s/TEMPLATE/${protoname_upper}/
+-,.s/template/${protoname_lower}/
 w
 EOF
 }
index fdcaff298ac08211e04afae4fb5b7a7ab905958c..c7c7c0a77318625c2b8b360e0720ee8f7f8d6686 100644 (file)
@@ -103,3 +103,31 @@ const char *AppProtoToString(AppProto alproto)
 
     return proto_name;
 }
+
+AppProto StringToAppProto(const char *proto_name)
+{
+    if (proto_name == NULL) return ALPROTO_UNKNOWN;
+
+    if (strcmp(proto_name,"http")==0) return ALPROTO_HTTP;
+    if (strcmp(proto_name,"ftp")==0) return ALPROTO_FTP;
+    if (strcmp(proto_name,"smtp")==0) return ALPROTO_SMTP;
+    if (strcmp(proto_name,"tls")==0) return ALPROTO_TLS;
+    if (strcmp(proto_name,"ssh")==0) return ALPROTO_SSH;
+    if (strcmp(proto_name,"imap")==0) return ALPROTO_IMAP;
+    if (strcmp(proto_name,"msn")==0) return ALPROTO_MSN;
+    if (strcmp(proto_name,"jabber")==0) return ALPROTO_JABBER;
+    if (strcmp(proto_name,"smb")==0) return ALPROTO_SMB;
+    if (strcmp(proto_name,"smb2")==0) return ALPROTO_SMB2;
+    if (strcmp(proto_name,"dcerpc")==0) return ALPROTO_DCERPC;
+    if (strcmp(proto_name,"irc")==0) return ALPROTO_IRC;
+    if (strcmp(proto_name,"dns")==0) return ALPROTO_DNS;
+    if (strcmp(proto_name,"modbus")==0) return ALPROTO_MODBUS;
+    if (strcmp(proto_name,"enip")==0) return ALPROTO_ENIP;
+    if (strcmp(proto_name,"dnp3")==0) return ALPROTO_DNP3;
+    if (strcmp(proto_name,"nfs")==0) return ALPROTO_NFS;
+    if (strcmp(proto_name,"ntp")==0) return ALPROTO_NTP;
+    if (strcmp(proto_name,"template")==0) return ALPROTO_TEMPLATE;
+    if (strcmp(proto_name,"failed")==0) return ALPROTO_FAILED;
+
+    return ALPROTO_UNKNOWN;
+}
index b765aab7d83459632c54ad81240c0b2e295b0771..6f428c1139f7edb368560ef40869b4295f2c908c 100644 (file)
@@ -70,4 +70,13 @@ typedef uint16_t AppProto;
  */
 const char *AppProtoToString(AppProto alproto);
 
+/**
+ * \brief Maps a string to its ALPROTO_* equivalent.
+ *
+ * \param String equivalent for the alproto.
+ *
+ * \retval alproto App layer protocol id, or ALPROTO_UNKNOWN.
+ */
+AppProto StringToAppProto(const char *proto_name);
+
 #endif /* __APP_LAYER_PROTOS_H__ */