From: Russ Combs Date: Wed, 21 Dec 2016 17:00:52 +0000 (-0500) Subject: refactor plugin loading so that builtins are loaded X-Git-Tag: 3.0.0-233~126 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2f5bf09644a4effbe4ba5b22cbf9a4690ff48d68;p=thirdparty%2Fsnort3.git refactor plugin loading so that builtins are loaded with the same lists as dynamic plugins. --- diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b8848ede8..08a62d96f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -71,8 +71,9 @@ add_executable( snort target_link_libraries( snort ${UNIT_TESTS_LIBRARIES} managers - loggers + main codecs + loggers ip_codecs misc_codecs ${STATIC_CODEC_LIBRARIES} @@ -94,11 +95,10 @@ target_link_libraries( snort stream_file stream_paf mime - ${PIGLET_LIBRARIES} ips_options search_engines target_based - main + ${PIGLET_LIBRARIES} codec_module memory host_tracker diff --git a/src/Makefile.am b/src/Makefile.am index c40bfeea9..99ec8e95a 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -44,11 +44,12 @@ snort_LDFLAGS = $(AM_LDFLAGS) -export-dynamic snort_LDADD = \ $(test_list) \ managers/libmanagers.a \ -loggers/libloggers.a \ +main/libmain.a \ codecs/libcodecs.a \ codecs/ip/libip_codecs.a \ codecs/misc/libmisc_codecs.a \ $(codec_list) \ +loggers/libloggers.a \ network_inspectors/libnetwork_inspectors.a \ network_inspectors/appid/libappid.a \ network_inspectors/binder/libbinder.a \ @@ -76,11 +77,10 @@ stream/user/libstream_user.a \ stream/file/libstream_file.a \ stream/libstream_paf.a \ mime/libmime.a \ -$(pig_list) \ ips_options/libips_options.a \ search_engines/libsearch_engines.a \ target_based/libtarget_based.a \ -main/libmain.a \ +$(pig_list) \ codecs/libcodec_module.a \ memory/libmemory.a \ host_tracker/libhost_tracker.a \ diff --git a/src/actions/act_react.cc b/src/actions/act_react.cc index 4b792dd29..ea9be0be8 100644 --- a/src/actions/act_react.cc +++ b/src/actions/act_react.cc @@ -357,11 +357,11 @@ static const ActionApi react_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* act_react[] = +#endif { &react_api.base, nullptr }; -#else -const BaseApi* act_react = &react_api.base; -#endif diff --git a/src/actions/act_reject.cc b/src/actions/act_reject.cc index 28501c194..3e589d86f 100644 --- a/src/actions/act_reject.cc +++ b/src/actions/act_reject.cc @@ -240,11 +240,11 @@ static const ActionApi rej_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* act_reject[] = +#endif { &rej_api.base, nullptr }; -#else -const BaseApi* act_reject = &rej_api.base; -#endif diff --git a/src/actions/act_replace.cc b/src/actions/act_replace.cc index 9e2a5229d..c250c03ed 100644 --- a/src/actions/act_replace.cc +++ b/src/actions/act_replace.cc @@ -203,11 +203,11 @@ static ActionApi rep_api #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* act_replace[] = +#endif { &rep_api.base, nullptr }; -#else -const BaseApi* act_replace = &rep_api.base; -#endif diff --git a/src/actions/ips_actions.cc b/src/actions/ips_actions.cc index 969a0bc4a..79d1673f2 100644 --- a/src/actions/ips_actions.cc +++ b/src/actions/ips_actions.cc @@ -18,24 +18,24 @@ // ips_actions.cc author Russ Combs #include "ips_actions.h" +#include "managers/plugin_manager.h" #ifdef HAVE_CONFIG_H #include "config.h" #endif #ifdef STATIC_IPS_ACTIONS -extern const BaseApi* act_react; -extern const BaseApi* act_reject; +extern const BaseApi* act_react[]; +extern const BaseApi* act_reject[]; #endif -extern const BaseApi* act_replace; +extern const BaseApi* act_replace[]; -const BaseApi* ips_actions[] = +void load_actions() { #ifdef STATIC_IPS_ACTIONS - act_react, - act_reject, + PluginManager::load_plugins(act_react); + PluginManager::load_plugins(act_reject); #endif - act_replace, - nullptr, -}; + PluginManager::load_plugins(act_replace); +} diff --git a/src/actions/ips_actions.h b/src/actions/ips_actions.h index 4ca691827..a021e45dc 100644 --- a/src/actions/ips_actions.h +++ b/src/actions/ips_actions.h @@ -20,7 +20,7 @@ #ifndef IPS_ACTIONS_H #define IPS_ACTIONS_H -extern const struct BaseApi* ips_actions[]; +void load_actions(); #endif diff --git a/src/codecs/codec_api.cc b/src/codecs/codec_api.cc index b982d2d85..4838efc3f 100644 --- a/src/codecs/codec_api.cc +++ b/src/codecs/codec_api.cc @@ -24,93 +24,90 @@ #endif #include "framework/codec.h" +#include "managers/plugin_manager.h" -extern const BaseApi* cd_ipv4; // static due to dependence on fpdetect -extern const BaseApi* cd_hopopts; // static to ensure the symbols CheckIPV6HopOptions - // and CheckIPv6ExtensionOrder the final executuable. -extern const BaseApi* cd_tcp; // static because only file that specific functions - // (symbols will be removed from final executabel) +extern const BaseApi* cd_ipv4[]; // static due to dependence on fpdetect +extern const BaseApi* cd_hopopts[]; // static to ensure the symbols CheckIPV6HopOptions + // and CheckIPv6ExtensionOrder the final executuable. +extern const BaseApi* cd_tcp[]; // static because only file that specific functions + // (symbols will be removed from final executabel) #ifdef STATIC_CODECS -extern const BaseApi* cd_ah; -extern const BaseApi* cd_arp; -extern const BaseApi* cd_ciscometadata; -extern const BaseApi* cd_dstopts; -extern const BaseApi* cd_erspan2; -extern const BaseApi* cd_erspan3; -extern const BaseApi* cd_esp; -extern const BaseApi* cd_eth; -extern const BaseApi* cd_fabricpath; -extern const BaseApi* cd_frag; -extern const BaseApi* cd_gre; -extern const BaseApi* cd_gtp; -extern const BaseApi* cd_icmp4; -extern const BaseApi* cd_icmp4_ip; -extern const BaseApi* cd_icmp6; -extern const BaseApi* cd_icmp6_ip; -extern const BaseApi* cd_ipv6; -extern const BaseApi* cd_igmp; -extern const BaseApi* cd_llc; -extern const BaseApi* cd_mobility; -extern const BaseApi* cd_mpls; -extern const BaseApi* cd_no_next; -extern const BaseApi* cd_pgm; -extern const BaseApi* cd_pppencap; -extern const BaseApi* cd_pppoepkt_disc; -extern const BaseApi* cd_pppoepkt_sess; -extern const BaseApi* cd_routing; -extern const BaseApi* cd_sun_nd; -extern const BaseApi* cd_swipe; -extern const BaseApi* cd_teredo; -extern const BaseApi* cd_transbridge; -extern const BaseApi* cd_udp; -extern const BaseApi* cd_user; -extern const BaseApi* cd_vlan; +extern const BaseApi* cd_ah[]; +extern const BaseApi* cd_arp[]; +extern const BaseApi* cd_ciscometadata[]; +extern const BaseApi* cd_dstopts[]; +extern const BaseApi* cd_erspan2[]; +extern const BaseApi* cd_erspan3[]; +extern const BaseApi* cd_esp[]; +extern const BaseApi* cd_eth[]; +extern const BaseApi* cd_fabricpath[]; +extern const BaseApi* cd_frag[]; +extern const BaseApi* cd_gre[]; +extern const BaseApi* cd_gtp[]; +extern const BaseApi* cd_icmp4[]; +extern const BaseApi* cd_icmp4_ip[]; +extern const BaseApi* cd_icmp6[]; +extern const BaseApi* cd_icmp6_ip[]; +extern const BaseApi* cd_ipv6[]; +extern const BaseApi* cd_igmp[]; +extern const BaseApi* cd_llc[]; +extern const BaseApi* cd_mobility[]; +extern const BaseApi* cd_mpls[]; +extern const BaseApi* cd_no_next[]; +extern const BaseApi* cd_pgm[]; +extern const BaseApi* cd_pppencap[]; +extern const BaseApi* cd_pppoepkt[]; +extern const BaseApi* cd_routing[]; +extern const BaseApi* cd_sun_nd[]; +extern const BaseApi* cd_swipe[]; +extern const BaseApi* cd_teredo[]; +extern const BaseApi* cd_transbridge[]; +extern const BaseApi* cd_udp[]; +extern const BaseApi* cd_user[]; +extern const BaseApi* cd_vlan[]; #endif -const BaseApi* codecs[] = +void load_codecs() { - cd_ipv4, - cd_tcp, - cd_hopopts, + PluginManager::load_plugins(cd_ipv4); + PluginManager::load_plugins(cd_tcp); + PluginManager::load_plugins(cd_hopopts); #ifdef STATIC_CODECS - cd_ah, - cd_arp, - cd_ciscometadata, - cd_dstopts, - cd_erspan2, - cd_erspan3, - cd_esp, - cd_eth, - cd_fabricpath, - cd_frag, - cd_gre, - cd_gtp, - cd_icmp4, - cd_icmp4_ip, - cd_icmp6, - cd_icmp6_ip, - cd_ipv6, - cd_igmp, - cd_llc, - cd_mobility, - cd_mpls, - cd_no_next, - cd_pgm, - cd_pppencap, - cd_pppoepkt_disc, - cd_pppoepkt_sess, - cd_routing, - cd_sun_nd, - cd_swipe, - cd_teredo, - cd_transbridge, - cd_udp, - cd_user, - cd_vlan, + PluginManager::load_plugins(cd_ah); + PluginManager::load_plugins(cd_arp); + PluginManager::load_plugins(cd_ciscometadata); + PluginManager::load_plugins(cd_dstopts); + PluginManager::load_plugins(cd_erspan2); + PluginManager::load_plugins(cd_erspan3); + PluginManager::load_plugins(cd_esp); + PluginManager::load_plugins(cd_eth); + PluginManager::load_plugins(cd_fabricpath); + PluginManager::load_plugins(cd_frag); + PluginManager::load_plugins(cd_gre); + PluginManager::load_plugins(cd_gtp); + PluginManager::load_plugins(cd_icmp4); + PluginManager::load_plugins(cd_icmp4_ip); + PluginManager::load_plugins(cd_icmp6); + PluginManager::load_plugins(cd_icmp6_ip); + PluginManager::load_plugins(cd_ipv6); + PluginManager::load_plugins(cd_igmp); + PluginManager::load_plugins(cd_llc); + PluginManager::load_plugins(cd_mobility); + PluginManager::load_plugins(cd_mpls); + PluginManager::load_plugins(cd_no_next); + PluginManager::load_plugins(cd_pgm); + PluginManager::load_plugins(cd_pppencap); + PluginManager::load_plugins(cd_pppoepkt); + PluginManager::load_plugins(cd_routing); + PluginManager::load_plugins(cd_sun_nd); + PluginManager::load_plugins(cd_swipe); + PluginManager::load_plugins(cd_teredo); + PluginManager::load_plugins(cd_transbridge); + PluginManager::load_plugins(cd_udp); + PluginManager::load_plugins(cd_user); + PluginManager::load_plugins(cd_vlan); #endif - - nullptr -}; +} diff --git a/src/codecs/codec_api.h b/src/codecs/codec_api.h index cdd9540c6..11bf411d2 100644 --- a/src/codecs/codec_api.h +++ b/src/codecs/codec_api.h @@ -17,10 +17,10 @@ //-------------------------------------------------------------------------- // codec_api.h author Josh Rosenbaum -#ifndef CODEC_CODECS_API_H -#define CODEC_CODECS_API_H +#ifndef CODEC_API_H +#define CODEC_API_H -extern const struct BaseApi* codecs[]; +void load_codecs(); #endif diff --git a/src/codecs/ip/cd_auth.cc b/src/codecs/ip/cd_auth.cc index 68d0c78b6..68b475824 100644 --- a/src/codecs/ip/cd_auth.cc +++ b/src/codecs/ip/cd_auth.cc @@ -160,11 +160,11 @@ static const CodecApi ah_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_ah[] = +#endif { &ah_api.base, nullptr }; -#else -const BaseApi* cd_ah = &ah_api.base; -#endif diff --git a/src/codecs/ip/cd_dst_opts.cc b/src/codecs/ip/cd_dst_opts.cc index 4029343f5..0787be025 100644 --- a/src/codecs/ip/cd_dst_opts.cc +++ b/src/codecs/ip/cd_dst_opts.cc @@ -126,11 +126,11 @@ static const CodecApi ipv6_dstopts_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_dstopts[] = +#endif { &ipv6_dstopts_api.base, nullptr }; -#else -const BaseApi* cd_dstopts = &ipv6_dstopts_api.base; -#endif diff --git a/src/codecs/ip/cd_esp.cc b/src/codecs/ip/cd_esp.cc index ad4fc907c..344008ffe 100644 --- a/src/codecs/ip/cd_esp.cc +++ b/src/codecs/ip/cd_esp.cc @@ -217,11 +217,11 @@ static const CodecApi esp_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_esp[] = +#endif { &esp_api.base, nullptr }; -#else -const BaseApi* cd_esp = &esp_api.base; -#endif diff --git a/src/codecs/ip/cd_frag.cc b/src/codecs/ip/cd_frag.cc index e199b0099..df4e90fdc 100644 --- a/src/codecs/ip/cd_frag.cc +++ b/src/codecs/ip/cd_frag.cc @@ -183,11 +183,11 @@ static const CodecApi ipv6_frag_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_frag[] = +#endif { &ipv6_frag_api.base, nullptr }; -#else -const BaseApi* cd_frag = &ipv6_frag_api.base; -#endif diff --git a/src/codecs/ip/cd_gre.cc b/src/codecs/ip/cd_gre.cc index 2cbedba8b..8c78b0172 100644 --- a/src/codecs/ip/cd_gre.cc +++ b/src/codecs/ip/cd_gre.cc @@ -265,11 +265,11 @@ static const CodecApi gre_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_gre[] = +#endif { &gre_api.base, nullptr }; -#else -const BaseApi* cd_gre = &gre_api.base; -#endif diff --git a/src/codecs/ip/cd_hop_opts.cc b/src/codecs/ip/cd_hop_opts.cc index bcfa0c7c6..55698d6fe 100644 --- a/src/codecs/ip/cd_hop_opts.cc +++ b/src/codecs/ip/cd_hop_opts.cc @@ -130,23 +130,15 @@ static const CodecApi ipv6_hopopts_api = /* This codec is static to ensure the symbols CheckIPV6HopOptions * and CheckIPv6ExtensionOrder are included in the binary. - * - * If this Codec is no longer static, also edit the file codec_api.cc */ -#if 0 -#ifdef BUILDING_SO -SO_PUBLIC const BaseApi* snort_plugins[] = +//#ifdef BUILDING_SO +//SO_PUBLIC const BaseApi* snort_plugins[] = +//#else +const BaseApi* cd_hopopts[] = +//#endif { &ipv6_hopopts_api.base, nullptr }; -#else -const BaseApi* cd_hopopts = &ipv6_hopopts_api.base; -#endif - -#else /* 0 */ -const BaseApi* cd_hopopts = &ipv6_hopopts_api.base; - -#endif /* 0 */ diff --git a/src/codecs/ip/cd_icmp4.cc b/src/codecs/ip/cd_icmp4.cc index 30597a030..989bcae7d 100644 --- a/src/codecs/ip/cd_icmp4.cc +++ b/src/codecs/ip/cd_icmp4.cc @@ -615,11 +615,11 @@ static const CodecApi icmp4_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_icmp4[] = +#endif { &icmp4_api.base, nullptr }; -#else -const BaseApi* cd_icmp4 = &icmp4_api.base; -#endif diff --git a/src/codecs/ip/cd_icmp6.cc b/src/codecs/ip/cd_icmp6.cc index e59a8c995..749e183de 100644 --- a/src/codecs/ip/cd_icmp6.cc +++ b/src/codecs/ip/cd_icmp6.cc @@ -405,11 +405,11 @@ static const CodecApi ipv6_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_icmp6[] = +#endif { &ipv6_api.base, nullptr }; -#else -const BaseApi* cd_icmp6 = &ipv6_api.base; -#endif diff --git a/src/codecs/ip/cd_igmp.cc b/src/codecs/ip/cd_igmp.cc index fd388a937..2a1f5deaa 100644 --- a/src/codecs/ip/cd_igmp.cc +++ b/src/codecs/ip/cd_igmp.cc @@ -129,11 +129,11 @@ static const CodecApi igmp_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_igmp[] = +#endif { &igmp_api.base, nullptr }; -#else -const BaseApi* cd_igmp = &igmp_api.base; -#endif diff --git a/src/codecs/ip/cd_ipv4.cc b/src/codecs/ip/cd_ipv4.cc index 46e0ff49e..78d866804 100644 --- a/src/codecs/ip/cd_ipv4.cc +++ b/src/codecs/ip/cd_ipv4.cc @@ -783,18 +783,13 @@ static const CodecApi ipv4_api = dtor, // dtor }; -#if 0 #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_ipv4[] = +#endif { &ipv4_api.base, nullptr }; -#else -const BaseApi* cd_ipv4 = &ipv4_api.base; -#endif -#endif - -// Currently needs to be static -const BaseApi* cd_ipv4 = &ipv4_api.base; diff --git a/src/codecs/ip/cd_ipv6.cc b/src/codecs/ip/cd_ipv6.cc index 6ea817a3b..e05f489c4 100644 --- a/src/codecs/ip/cd_ipv6.cc +++ b/src/codecs/ip/cd_ipv6.cc @@ -670,11 +670,11 @@ static const CodecApi ipv6_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_ipv6[] = +#endif { &ipv6_api.base, nullptr }; -#else -const BaseApi* cd_ipv6 = &ipv6_api.base; -#endif diff --git a/src/codecs/ip/cd_mobility.cc b/src/codecs/ip/cd_mobility.cc index a8bfdc585..69460d701 100644 --- a/src/codecs/ip/cd_mobility.cc +++ b/src/codecs/ip/cd_mobility.cc @@ -95,11 +95,11 @@ static const CodecApi mobility_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_mobility[] = +#endif { &mobility_api.base, nullptr }; -#else -const BaseApi* cd_mobility = &mobility_api.base; -#endif diff --git a/src/codecs/ip/cd_no_next.cc b/src/codecs/ip/cd_no_next.cc index 73ce9201c..dfe719d37 100644 --- a/src/codecs/ip/cd_no_next.cc +++ b/src/codecs/ip/cd_no_next.cc @@ -104,11 +104,11 @@ static const CodecApi no_next_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_no_next[] = +#endif { &no_next_api.base, nullptr }; -#else -const BaseApi* cd_no_next = &no_next_api.base; -#endif diff --git a/src/codecs/ip/cd_pgm.cc b/src/codecs/ip/cd_pgm.cc index c09f9fed6..83e2be249 100644 --- a/src/codecs/ip/cd_pgm.cc +++ b/src/codecs/ip/cd_pgm.cc @@ -192,11 +192,11 @@ static const CodecApi pgm_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_pgm[] = +#endif { &pgm_api.base, nullptr }; -#else -const BaseApi* cd_pgm = &pgm_api.base; -#endif diff --git a/src/codecs/ip/cd_routing.cc b/src/codecs/ip/cd_routing.cc index 587953ccd..06df4e5a6 100644 --- a/src/codecs/ip/cd_routing.cc +++ b/src/codecs/ip/cd_routing.cc @@ -154,11 +154,11 @@ static const CodecApi ipv6_routing_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_routing[] = +#endif { &ipv6_routing_api.base, nullptr }; -#else -const BaseApi* cd_routing = &ipv6_routing_api.base; -#endif diff --git a/src/codecs/ip/cd_sun_nd.cc b/src/codecs/ip/cd_sun_nd.cc index 9aeeb5ee4..bbaa036b1 100644 --- a/src/codecs/ip/cd_sun_nd.cc +++ b/src/codecs/ip/cd_sun_nd.cc @@ -87,11 +87,11 @@ static const CodecApi sun_nd_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_sun_nd[] = +#endif { &sun_nd_api.base, nullptr }; -#else -const BaseApi* cd_sun_nd = &sun_nd_api.base; -#endif diff --git a/src/codecs/ip/cd_swipe.cc b/src/codecs/ip/cd_swipe.cc index 5640ea8f0..608f7e067 100644 --- a/src/codecs/ip/cd_swipe.cc +++ b/src/codecs/ip/cd_swipe.cc @@ -84,11 +84,11 @@ static const CodecApi swipe_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_swipe[] = +#endif { &swipe_api.base, nullptr }; -#else -const BaseApi* cd_swipe = &swipe_api.base; -#endif diff --git a/src/codecs/ip/cd_tcp.cc b/src/codecs/ip/cd_tcp.cc index 6c6ab6beb..571a704d6 100644 --- a/src/codecs/ip/cd_tcp.cc +++ b/src/codecs/ip/cd_tcp.cc @@ -784,5 +784,13 @@ static const CodecApi tcp_api = dtor, // dtor }; -const BaseApi* cd_tcp = &tcp_api.base; +//#ifdef BUILDING_SO +//SO_PUBLIC const BaseApi* snort_plugins[] = +//#else +const BaseApi* cd_tcp[] = +//#endif +{ + &tcp_api.base, + nullptr +}; diff --git a/src/codecs/ip/cd_udp.cc b/src/codecs/ip/cd_udp.cc index 672dbada1..e42521e35 100644 --- a/src/codecs/ip/cd_udp.cc +++ b/src/codecs/ip/cd_udp.cc @@ -495,11 +495,11 @@ static const CodecApi udp_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_udp[] = +#endif { &udp_api.base, nullptr }; -#else -const BaseApi* cd_udp = &udp_api.base; -#endif diff --git a/src/codecs/link/cd_arp.cc b/src/codecs/link/cd_arp.cc index 116cb2de9..9d669f347 100644 --- a/src/codecs/link/cd_arp.cc +++ b/src/codecs/link/cd_arp.cc @@ -123,11 +123,11 @@ static const CodecApi arp_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_arp[] = +#endif { &arp_api.base, nullptr }; -#else -const BaseApi* cd_arp = &arp_api.base; -#endif diff --git a/src/codecs/link/cd_ciscometadata.cc b/src/codecs/link/cd_ciscometadata.cc index 377e4c973..17abcb5d5 100644 --- a/src/codecs/link/cd_ciscometadata.cc +++ b/src/codecs/link/cd_ciscometadata.cc @@ -176,11 +176,11 @@ static const CodecApi ciscometadata_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_ciscometadata[] = +#endif { &ciscometadata_api.base, nullptr }; -#else -const BaseApi* cd_ciscometadata = &ciscometadata_api.base; -#endif diff --git a/src/codecs/link/cd_erspan2.cc b/src/codecs/link/cd_erspan2.cc index 457358277..32f62ee91 100644 --- a/src/codecs/link/cd_erspan2.cc +++ b/src/codecs/link/cd_erspan2.cc @@ -132,11 +132,11 @@ static const CodecApi erspan2_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_erspan2[] = +#endif { &erspan2_api.base, nullptr }; -#else -const BaseApi* cd_erspan2 = &erspan2_api.base; -#endif diff --git a/src/codecs/link/cd_erspan3.cc b/src/codecs/link/cd_erspan3.cc index ee40181b1..69cf1c230 100644 --- a/src/codecs/link/cd_erspan3.cc +++ b/src/codecs/link/cd_erspan3.cc @@ -144,11 +144,11 @@ static const CodecApi erspan3_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_erspan3[] = +#endif { &erspan3_api.base, nullptr }; -#else -const BaseApi* cd_erspan3 = &erspan3_api.base; -#endif diff --git a/src/codecs/link/cd_fabricpath.cc b/src/codecs/link/cd_fabricpath.cc index 917b02405..0b1aed80d 100644 --- a/src/codecs/link/cd_fabricpath.cc +++ b/src/codecs/link/cd_fabricpath.cc @@ -173,11 +173,11 @@ static const CodecApi fabricpath_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_fabricpath[] = +#endif { &fabricpath_api.base, nullptr }; -#else -const BaseApi* cd_fabricpath = &fabricpath_api.base; -#endif diff --git a/src/codecs/link/cd_mpls.cc b/src/codecs/link/cd_mpls.cc index edae2aaef..059fe39f5 100644 --- a/src/codecs/link/cd_mpls.cc +++ b/src/codecs/link/cd_mpls.cc @@ -390,11 +390,11 @@ static const CodecApi mpls_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_mpls[] = +#endif { &mpls_api.base, nullptr }; -#else -const BaseApi* cd_mpls = &mpls_api.base; -#endif diff --git a/src/codecs/link/cd_ppp_encap.cc b/src/codecs/link/cd_ppp_encap.cc index cd2576d39..d9ba8a6f1 100644 --- a/src/codecs/link/cd_ppp_encap.cc +++ b/src/codecs/link/cd_ppp_encap.cc @@ -148,11 +148,11 @@ static const CodecApi pppencap_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_pppencap[] = +#endif { &pppencap_api.base, nullptr }; -#else -const BaseApi* cd_pppencap = &pppencap_api.base; -#endif diff --git a/src/codecs/link/cd_pppoe.cc b/src/codecs/link/cd_pppoe.cc index f31442415..1120202b1 100644 --- a/src/codecs/link/cd_pppoe.cc +++ b/src/codecs/link/cd_pppoe.cc @@ -382,13 +382,12 @@ static const CodecApi pppoepkt_sess_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_pppoepkt[] = +#endif { &pppoepkt_disc_api.base, &pppoepkt_sess_api.base, nullptr }; -#else -const BaseApi* cd_pppoepkt_disc = &pppoepkt_disc_api.base; -const BaseApi* cd_pppoepkt_sess = &pppoepkt_sess_api.base; -#endif diff --git a/src/codecs/link/cd_trans_bridge.cc b/src/codecs/link/cd_trans_bridge.cc index 1e3dad45c..88f743e1a 100644 --- a/src/codecs/link/cd_trans_bridge.cc +++ b/src/codecs/link/cd_trans_bridge.cc @@ -101,11 +101,11 @@ static const CodecApi transbridge_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_transbridge[] = +#endif { &transbridge_api.base, nullptr }; -#else -const BaseApi* cd_transbridge = &transbridge_api.base; -#endif diff --git a/src/codecs/link/cd_vlan.cc b/src/codecs/link/cd_vlan.cc index a2dbbd04d..0c5a9f71b 100644 --- a/src/codecs/link/cd_vlan.cc +++ b/src/codecs/link/cd_vlan.cc @@ -164,11 +164,11 @@ static const CodecApi vlan_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_vlan[] = +#endif { &vlan_api.base, nullptr }; -#else -const BaseApi* cd_vlan = &vlan_api.base; -#endif diff --git a/src/codecs/misc/cd_default.cc b/src/codecs/misc/cd_default.cc index cafe68c4d..12d4f44bb 100644 --- a/src/codecs/misc/cd_default.cc +++ b/src/codecs/misc/cd_default.cc @@ -71,5 +71,9 @@ static const CodecApi default_api = dtor, // dtor }; -const CodecApi* default_codec = &default_api; +const CodecApi* default_codec[] = +{ + &default_api, + nullptr +}; diff --git a/src/codecs/misc/cd_gtp.cc b/src/codecs/misc/cd_gtp.cc index 2c5e1ce9f..b75f0c351 100644 --- a/src/codecs/misc/cd_gtp.cc +++ b/src/codecs/misc/cd_gtp.cc @@ -293,11 +293,11 @@ static const CodecApi gtp_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_gtp[] = +#endif { >p_api.base, nullptr }; -#else -const BaseApi* cd_gtp = >p_api.base; -#endif diff --git a/src/codecs/misc/cd_icmp4_ip.cc b/src/codecs/misc/cd_icmp4_ip.cc index 105ef72e3..d71cf62f0 100644 --- a/src/codecs/misc/cd_icmp4_ip.cc +++ b/src/codecs/misc/cd_icmp4_ip.cc @@ -337,11 +337,11 @@ static const CodecApi icmp4_ip_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_icmp4_ip[] = +#endif { &icmp4_ip_api.base, nullptr }; -#else -const BaseApi* cd_icmp4_ip = &icmp4_ip_api.base; -#endif diff --git a/src/codecs/misc/cd_icmp6_ip.cc b/src/codecs/misc/cd_icmp6_ip.cc index 3f75573d3..b18b121e5 100644 --- a/src/codecs/misc/cd_icmp6_ip.cc +++ b/src/codecs/misc/cd_icmp6_ip.cc @@ -154,11 +154,11 @@ static const CodecApi icmp6_ip_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_icmp6_ip[] = +#endif { &icmp6_ip_api.base, nullptr }; -#else -const BaseApi* cd_icmp6_ip = &icmp6_ip_api.base; -#endif diff --git a/src/codecs/misc/cd_llc.cc b/src/codecs/misc/cd_llc.cc index 39f8e2886..22abad96d 100644 --- a/src/codecs/misc/cd_llc.cc +++ b/src/codecs/misc/cd_llc.cc @@ -174,11 +174,11 @@ static const CodecApi llc_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_llc[] = +#endif { &llc_api.base, nullptr }; -#else -const BaseApi* cd_llc = &llc_api.base; -#endif diff --git a/src/codecs/misc/cd_teredo.cc b/src/codecs/misc/cd_teredo.cc index 78ed8787e..c1fccc7dd 100644 --- a/src/codecs/misc/cd_teredo.cc +++ b/src/codecs/misc/cd_teredo.cc @@ -137,11 +137,11 @@ static const CodecApi teredo_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_teredo[] = +#endif { &teredo_api.base, nullptr }; -#else -const BaseApi* cd_teredo = &teredo_api.base; -#endif diff --git a/src/codecs/misc/cd_user.cc b/src/codecs/misc/cd_user.cc index 513636a2c..de4b235c8 100644 --- a/src/codecs/misc/cd_user.cc +++ b/src/codecs/misc/cd_user.cc @@ -147,11 +147,11 @@ static const CodecApi user_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_user[] = +#endif { &user_api.base, nullptr }; -#else -const BaseApi* cd_user = &user_api.base; -#endif diff --git a/src/codecs/root/cd_eth.cc b/src/codecs/root/cd_eth.cc index f5fc29967..afb45c4b5 100644 --- a/src/codecs/root/cd_eth.cc +++ b/src/codecs/root/cd_eth.cc @@ -260,11 +260,11 @@ static const CodecApi eth_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* cd_eth[] = +#endif { ð_api.base, nullptr }; -#else -const BaseApi* cd_eth = ð_api.base; -#endif diff --git a/src/connectors/connectors.cc b/src/connectors/connectors.cc index 400a9ac85..cda850530 100644 --- a/src/connectors/connectors.cc +++ b/src/connectors/connectors.cc @@ -19,14 +19,14 @@ #include "connectors.h" #include "framework/connector.h" +#include "managers/plugin_manager.h" -extern const BaseApi* file_connector; -extern const BaseApi* tcp_connector; +extern const BaseApi* file_connector[]; +extern const BaseApi* tcp_connector[]; -const BaseApi* connectors[] = +void load_connectors() { - file_connector, - tcp_connector, - nullptr -}; + PluginManager::load_plugins(file_connector); + PluginManager::load_plugins(tcp_connector); +} diff --git a/src/connectors/connectors.h b/src/connectors/connectors.h index 92aa3305f..ff923a854 100644 --- a/src/connectors/connectors.h +++ b/src/connectors/connectors.h @@ -16,10 +16,10 @@ // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. //-------------------------------------------------------------------------- -#ifndef CONNECTORS -#define CONNECTORS +#ifndef CONNECTORS_H +#define CONNECTORS_H -extern const struct BaseApi* connectors[]; +void load_connectors(); #endif diff --git a/src/connectors/file_connector/file_connector.cc b/src/connectors/file_connector/file_connector.cc index 594ed4fb6..5d48d6683 100644 --- a/src/connectors/file_connector/file_connector.cc +++ b/src/connectors/file_connector/file_connector.cc @@ -353,11 +353,11 @@ const ConnectorApi file_connector_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* file_connector[] = +#endif { &file_connector_api.base, nullptr }; -#else -const BaseApi* file_connector = &file_connector_api.base; -#endif diff --git a/src/connectors/tcp_connector/tcp_connector.cc b/src/connectors/tcp_connector/tcp_connector.cc index b4758f94b..fe5672311 100644 --- a/src/connectors/tcp_connector/tcp_connector.cc +++ b/src/connectors/tcp_connector/tcp_connector.cc @@ -501,11 +501,11 @@ const ConnectorApi tcp_connector_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* tcp_connector[] = +#endif { &tcp_connector_api.base, nullptr }; -#else -const BaseApi* tcp_connector = &tcp_connector_api.base; -#endif diff --git a/src/file_api/file_flows.cc b/src/file_api/file_flows.cc index 0e0a4be92..6c1282470 100644 --- a/src/file_api/file_flows.cc +++ b/src/file_api/file_flows.cc @@ -302,5 +302,5 @@ static const InspectApi file_inspect_api = nullptr // reset }; -const BaseApi* sin_file = &file_inspect_api.base; +const BaseApi* sin_file_flow = &file_inspect_api.base; diff --git a/src/file_api/file_log.cc b/src/file_api/file_log.cc index 0d52e2bca..49c139ecb 100644 --- a/src/file_api/file_log.cc +++ b/src/file_api/file_log.cc @@ -302,12 +302,12 @@ static const InspectApi fl_api nullptr // reset }; -extern const BaseApi* sin_file; +extern const BaseApi* sin_file_flow; -const BaseApi* file_inspectors[] = +const BaseApi* sin_file[] = { &fl_api.base, - sin_file, + sin_file_flow, nullptr }; diff --git a/src/file_api/file_service.h b/src/file_api/file_service.h index 7392ede5b..c2974d9b8 100644 --- a/src/file_api/file_service.h +++ b/src/file_api/file_service.h @@ -67,6 +67,5 @@ private: static FileCache* file_cache; }; -extern const struct BaseApi* file_inspectors[]; #endif diff --git a/src/ips_options/ips_ack.cc b/src/ips_options/ips_ack.cc index e6f54f138..447ed17a9 100644 --- a/src/ips_options/ips_ack.cc +++ b/src/ips_options/ips_ack.cc @@ -192,11 +192,11 @@ static const IpsApi ack_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_ack[] = +#endif { &ack_api.base, nullptr }; -#else -const BaseApi* ips_ack = &ack_api.base; -#endif diff --git a/src/ips_options/ips_asn1.cc b/src/ips_options/ips_asn1.cc index acfbc581d..5a98b1204 100644 --- a/src/ips_options/ips_asn1.cc +++ b/src/ips_options/ips_asn1.cc @@ -310,11 +310,11 @@ static const IpsApi asn1_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_asn1[] = +#endif { &asn1_api.base, nullptr }; -#else -const BaseApi* ips_asn1 = &asn1_api.base; -#endif diff --git a/src/ips_options/ips_base64.cc b/src/ips_options/ips_base64.cc index 547a32cf8..0e05ed495 100644 --- a/src/ips_options/ips_base64.cc +++ b/src/ips_options/ips_base64.cc @@ -355,13 +355,12 @@ static const IpsApi base64_data_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_base64[] = +#endif { &base64_decode_api.base, &base64_data_api.base, nullptr }; -#else -const BaseApi* ips_base64_decode = &base64_decode_api.base; -const BaseApi* ips_base64_data = &base64_data_api.base; -#endif diff --git a/src/ips_options/ips_bufferlen.cc b/src/ips_options/ips_bufferlen.cc index 237064cdb..33136ca17 100644 --- a/src/ips_options/ips_bufferlen.cc +++ b/src/ips_options/ips_bufferlen.cc @@ -187,11 +187,11 @@ static const IpsApi len_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_bufferlen[] = +#endif { &len_api.base, nullptr }; -#else -const BaseApi* ips_bufferlen = &len_api.base; -#endif diff --git a/src/ips_options/ips_byte_jump.cc b/src/ips_options/ips_byte_jump.cc index 7fa6762b5..243c4a9f1 100644 --- a/src/ips_options/ips_byte_jump.cc +++ b/src/ips_options/ips_byte_jump.cc @@ -503,11 +503,11 @@ static const IpsApi byte_jump_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_byte_jump[] = +#endif { &byte_jump_api.base, nullptr }; -#else -const BaseApi* ips_byte_jump = &byte_jump_api.base; -#endif diff --git a/src/ips_options/ips_byte_test.cc b/src/ips_options/ips_byte_test.cc index 7f0235f51..ef18a0719 100644 --- a/src/ips_options/ips_byte_test.cc +++ b/src/ips_options/ips_byte_test.cc @@ -648,11 +648,11 @@ static const IpsApi byte_test_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_byte_test[] = +#endif { &byte_test_api.base, nullptr }; -#else -const BaseApi* ips_byte_test = &byte_test_api.base; -#endif diff --git a/src/ips_options/ips_cvs.cc b/src/ips_options/ips_cvs.cc index a480d998f..26b75c3e9 100644 --- a/src/ips_options/ips_cvs.cc +++ b/src/ips_options/ips_cvs.cc @@ -494,11 +494,11 @@ static const IpsApi cvs_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_cvs[] = +#endif { &cvs_api.base, nullptr }; -#else -const BaseApi* ips_cvs = &cvs_api.base; -#endif diff --git a/src/ips_options/ips_dsize.cc b/src/ips_options/ips_dsize.cc index bdcb26940..981434819 100644 --- a/src/ips_options/ips_dsize.cc +++ b/src/ips_options/ips_dsize.cc @@ -200,11 +200,11 @@ static const IpsApi dsize_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_dsize[] = +#endif { &dsize_api.base, nullptr }; -#else -const BaseApi* ips_dsize = &dsize_api.base; -#endif diff --git a/src/ips_options/ips_file_data.cc b/src/ips_options/ips_file_data.cc index 94715dffa..d1f050587 100644 --- a/src/ips_options/ips_file_data.cc +++ b/src/ips_options/ips_file_data.cc @@ -137,11 +137,11 @@ static const IpsApi file_data_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_file_data[] = +#endif { &file_data_api.base, nullptr }; -#else -const BaseApi* ips_file_data = &file_data_api.base; -#endif diff --git a/src/ips_options/ips_file_type.cc b/src/ips_options/ips_file_type.cc index 543bf6bc1..a55a446ed 100644 --- a/src/ips_options/ips_file_type.cc +++ b/src/ips_options/ips_file_type.cc @@ -213,11 +213,11 @@ static const IpsApi file_type_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_file_type[] = +#endif { &file_type_api.base, nullptr }; -#else -const BaseApi* ips_file_type = &file_type_api.base; -#endif diff --git a/src/ips_options/ips_flags.cc b/src/ips_options/ips_flags.cc index 3df71e4dd..874540db7 100644 --- a/src/ips_options/ips_flags.cc +++ b/src/ips_options/ips_flags.cc @@ -490,11 +490,11 @@ static const IpsApi flags_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_flags[] = +#endif { &flags_api.base, nullptr }; -#else -const BaseApi* ips_flags = &flags_api.base; -#endif diff --git a/src/ips_options/ips_fragbits.cc b/src/ips_options/ips_fragbits.cc index 3194eb39c..7508d18d4 100644 --- a/src/ips_options/ips_fragbits.cc +++ b/src/ips_options/ips_fragbits.cc @@ -460,10 +460,11 @@ static const IpsApi fragbits_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_fragbits[] = +#endif { &fragbits_api.base, nullptr }; -#else -const BaseApi* ips_fragbits = &fragbits_api.base; -#endif + diff --git a/src/ips_options/ips_fragoffset.cc b/src/ips_options/ips_fragoffset.cc index 06c8cdf82..fe8f78452 100644 --- a/src/ips_options/ips_fragoffset.cc +++ b/src/ips_options/ips_fragoffset.cc @@ -193,11 +193,11 @@ static const IpsApi fragoffset_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_fragoffset[] = +#endif { &fragoffset_api.base, nullptr }; -#else -const BaseApi* ips_fragoffset = &fragoffset_api.base; -#endif diff --git a/src/ips_options/ips_gid.cc b/src/ips_options/ips_gid.cc index de0f19091..ca620ce87 100644 --- a/src/ips_options/ips_gid.cc +++ b/src/ips_options/ips_gid.cc @@ -114,11 +114,11 @@ static const IpsApi gid_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_gid[] = +#endif { &gid_api.base, nullptr }; -#else -const BaseApi* ips_gid = &gid_api.base; -#endif diff --git a/src/ips_options/ips_icmp_id.cc b/src/ips_options/ips_icmp_id.cc index 487196f5d..f57159fa5 100644 --- a/src/ips_options/ips_icmp_id.cc +++ b/src/ips_options/ips_icmp_id.cc @@ -220,11 +220,11 @@ static const IpsApi icmp_id_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_icmp_id[] = +#endif { &icmp_id_api.base, nullptr }; -#else -const BaseApi* ips_icmp_id = &icmp_id_api.base; -#endif diff --git a/src/ips_options/ips_icmp_seq.cc b/src/ips_options/ips_icmp_seq.cc index a10485e67..afabd2bdd 100644 --- a/src/ips_options/ips_icmp_seq.cc +++ b/src/ips_options/ips_icmp_seq.cc @@ -221,11 +221,11 @@ static const IpsApi icmp_seq_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_icmp_seq[] = +#endif { &icmp_seq_api.base, nullptr }; -#else -const BaseApi* ips_icmp_seq = &icmp_seq_api.base; -#endif diff --git a/src/ips_options/ips_icode.cc b/src/ips_options/ips_icode.cc index 24909610a..8cb61f116 100644 --- a/src/ips_options/ips_icode.cc +++ b/src/ips_options/ips_icode.cc @@ -193,11 +193,11 @@ static const IpsApi icode_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_icode[] = +#endif { &icode_api.base, nullptr }; -#else -const BaseApi* ips_icode = &icode_api.base; -#endif diff --git a/src/ips_options/ips_id.cc b/src/ips_options/ips_id.cc index 1c804c74d..afa83307b 100644 --- a/src/ips_options/ips_id.cc +++ b/src/ips_options/ips_id.cc @@ -193,11 +193,11 @@ static const IpsApi id_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_id[] = +#endif { &id_api.base, nullptr }; -#else -const BaseApi* ips_id = &id_api.base; -#endif diff --git a/src/ips_options/ips_ip_proto.cc b/src/ips_options/ips_ip_proto.cc index 9a5c2168c..7f8bd59de 100644 --- a/src/ips_options/ips_ip_proto.cc +++ b/src/ips_options/ips_ip_proto.cc @@ -320,11 +320,11 @@ static const IpsApi ip_proto_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_ip_proto[] = +#endif { &ip_proto_api.base, nullptr }; -#else -const BaseApi* ips_ip_proto = &ip_proto_api.base; -#endif diff --git a/src/ips_options/ips_ipopts.cc b/src/ips_options/ips_ipopts.cc index 469eb6941..9e6ea9c6b 100644 --- a/src/ips_options/ips_ipopts.cc +++ b/src/ips_options/ips_ipopts.cc @@ -299,11 +299,11 @@ static const IpsApi ipopts_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_ipopts[] = +#endif { &ipopts_api.base, nullptr }; -#else -const BaseApi* ips_ipopts = &ipopts_api.base; -#endif diff --git a/src/ips_options/ips_isdataat.cc b/src/ips_options/ips_isdataat.cc index b07442f5f..d15aaab31 100644 --- a/src/ips_options/ips_isdataat.cc +++ b/src/ips_options/ips_isdataat.cc @@ -342,11 +342,11 @@ static const IpsApi isdataat_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_isdataat[] = +#endif { &isdataat_api.base, nullptr }; -#else -const BaseApi* ips_isdataat = &isdataat_api.base; -#endif diff --git a/src/ips_options/ips_itype.cc b/src/ips_options/ips_itype.cc index 9caff5f8e..4ef4e6adc 100644 --- a/src/ips_options/ips_itype.cc +++ b/src/ips_options/ips_itype.cc @@ -190,11 +190,11 @@ static const IpsApi itype_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_itype[] = +#endif { &itype_api.base, nullptr }; -#else -const BaseApi* ips_itype = &itype_api.base; -#endif diff --git a/src/ips_options/ips_msg.cc b/src/ips_options/ips_msg.cc index eaca6cc3d..de505984e 100644 --- a/src/ips_options/ips_msg.cc +++ b/src/ips_options/ips_msg.cc @@ -117,11 +117,11 @@ static const IpsApi msg_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_msg[] = +#endif { &msg_api.base, nullptr }; -#else -const BaseApi* ips_msg = &msg_api.base; -#endif diff --git a/src/ips_options/ips_options.cc b/src/ips_options/ips_options.cc index a823b558d..f7d7b0340 100644 --- a/src/ips_options/ips_options.cc +++ b/src/ips_options/ips_options.cc @@ -22,7 +22,9 @@ #ifdef HAVE_CONFIG_H #include "config.h" #endif + #include "framework/ips_option.h" +#include "managers/plugin_manager.h" extern const BaseApi* ips_byte_extract; extern const BaseApi* ips_classtype; @@ -47,44 +49,43 @@ extern const BaseApi* ips_sha512; extern const BaseApi* ips_so; #ifdef STATIC_IPS_OPTIONS -extern const BaseApi* ips_ack; -extern const BaseApi* ips_asn1; -extern const BaseApi* ips_base64_data; -extern const BaseApi* ips_base64_decode; -extern const BaseApi* ips_byte_jump; -extern const BaseApi* ips_byte_test; -extern const BaseApi* ips_cvs; -extern const BaseApi* ips_file_type; -extern const BaseApi* ips_flags; -extern const BaseApi* ips_fragbits; -extern const BaseApi* ips_fragoffset; -extern const BaseApi* ips_gid; -extern const BaseApi* ips_icmp_id; -extern const BaseApi* ips_icmp_seq; -extern const BaseApi* ips_icode; -extern const BaseApi* ips_id; -extern const BaseApi* ips_ipopts; -extern const BaseApi* ips_ip_proto; -extern const BaseApi* ips_isdataat; -extern const BaseApi* ips_itype; -extern const BaseApi* ips_msg; -extern const BaseApi* ips_priority; -extern const BaseApi* ips_raw_data; -extern const BaseApi* ips_rem; -extern const BaseApi* ips_rev; -extern const BaseApi* ips_rpc; -extern const BaseApi* ips_seq; -extern const BaseApi* ips_session; -extern const BaseApi* ips_sid; -extern const BaseApi* ips_soid; -extern const BaseApi* ips_tag; -extern const BaseApi* ips_tos; -extern const BaseApi* ips_ttl; -extern const BaseApi* ips_bufferlen; -extern const BaseApi* ips_window; +extern const BaseApi* ips_ack[]; +extern const BaseApi* ips_asn1[]; +extern const BaseApi* ips_base64[]; +extern const BaseApi* ips_byte_jump[]; +extern const BaseApi* ips_byte_test[]; +extern const BaseApi* ips_cvs[]; +extern const BaseApi* ips_file_type[]; +extern const BaseApi* ips_flags[]; +extern const BaseApi* ips_fragbits[]; +extern const BaseApi* ips_fragoffset[]; +extern const BaseApi* ips_gid[]; +extern const BaseApi* ips_icmp_id[]; +extern const BaseApi* ips_icmp_seq[]; +extern const BaseApi* ips_icode[]; +extern const BaseApi* ips_id[]; +extern const BaseApi* ips_ipopts[]; +extern const BaseApi* ips_ip_proto[]; +extern const BaseApi* ips_isdataat[]; +extern const BaseApi* ips_itype[]; +extern const BaseApi* ips_msg[]; +extern const BaseApi* ips_priority[]; +extern const BaseApi* ips_raw_data[]; +extern const BaseApi* ips_rem[]; +extern const BaseApi* ips_rev[]; +extern const BaseApi* ips_rpc[]; +extern const BaseApi* ips_seq[]; +extern const BaseApi* ips_session[]; +extern const BaseApi* ips_sid[]; +extern const BaseApi* ips_soid[]; +extern const BaseApi* ips_tag[]; +extern const BaseApi* ips_tos[]; +extern const BaseApi* ips_ttl[]; +extern const BaseApi* ips_bufferlen[]; +extern const BaseApi* ips_window[]; #endif -const BaseApi* ips_options[] = +static const BaseApi* ips_options[] = { ips_byte_extract, ips_classtype, @@ -107,44 +108,48 @@ const BaseApi* ips_options[] = ips_sha256, ips_sha512, ips_so, + nullptr +}; + +void load_ips_options() +{ + PluginManager::load_plugins(ips_options); #ifdef STATIC_IPS_OPTIONS - ips_ack, - ips_asn1, - ips_base64_data, - ips_base64_decode, - ips_byte_jump, - ips_byte_test, - ips_cvs, - ips_file_type, - ips_flags, - ips_fragbits, - ips_fragoffset, - ips_gid, - ips_icmp_id, - ips_icmp_seq, - ips_icode, - ips_id, - ips_ipopts, - ips_ip_proto, - ips_isdataat, - ips_itype, - ips_msg, - ips_priority, - ips_raw_data, - ips_rem, - ips_rev, - ips_rpc, - ips_seq, - ips_session, - ips_sid, - ips_soid, - ips_tag, - ips_tos, - ips_ttl, - ips_bufferlen, - ips_window, + PluginManager::load_plugins(ips_ack); + PluginManager::load_plugins(ips_asn1); + PluginManager::load_plugins(ips_base64); + PluginManager::load_plugins(ips_byte_jump); + PluginManager::load_plugins(ips_byte_test); + PluginManager::load_plugins(ips_cvs); + PluginManager::load_plugins(ips_file_type); + PluginManager::load_plugins(ips_flags); + PluginManager::load_plugins(ips_fragbits); + PluginManager::load_plugins(ips_fragoffset); + PluginManager::load_plugins(ips_gid); + PluginManager::load_plugins(ips_icmp_id); + PluginManager::load_plugins(ips_icmp_seq); + PluginManager::load_plugins(ips_icode); + PluginManager::load_plugins(ips_id); + PluginManager::load_plugins(ips_ipopts); + PluginManager::load_plugins(ips_ip_proto); + PluginManager::load_plugins(ips_isdataat); + PluginManager::load_plugins(ips_itype); + PluginManager::load_plugins(ips_msg); + PluginManager::load_plugins(ips_priority); + PluginManager::load_plugins(ips_raw_data); + PluginManager::load_plugins(ips_rem); + PluginManager::load_plugins(ips_rev); + PluginManager::load_plugins(ips_rpc); + PluginManager::load_plugins(ips_seq); + PluginManager::load_plugins(ips_session); + PluginManager::load_plugins(ips_sid); + PluginManager::load_plugins(ips_soid); + PluginManager::load_plugins(ips_tag); + PluginManager::load_plugins(ips_tos); + PluginManager::load_plugins(ips_ttl); + PluginManager::load_plugins(ips_bufferlen); + PluginManager::load_plugins(ips_window); #endif - nullptr -}; +} diff --git a/src/ips_options/ips_options.h b/src/ips_options/ips_options.h index ff7ac00eb..901a2a2ff 100644 --- a/src/ips_options/ips_options.h +++ b/src/ips_options/ips_options.h @@ -20,7 +20,7 @@ #ifndef IPS_OPTIONS_H #define IPS_OPTIONS_H -extern const struct BaseApi* ips_options[]; +void load_ips_options(); #endif diff --git a/src/ips_options/ips_priority.cc b/src/ips_options/ips_priority.cc index 0b874a510..701e9f4ce 100644 --- a/src/ips_options/ips_priority.cc +++ b/src/ips_options/ips_priority.cc @@ -114,11 +114,11 @@ static const IpsApi priority_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_priority[] = +#endif { &priority_api.base, nullptr }; -#else -const BaseApi* ips_priority = &priority_api.base; -#endif diff --git a/src/ips_options/ips_raw_data.cc b/src/ips_options/ips_raw_data.cc index 9ef3c57ed..91da11d25 100644 --- a/src/ips_options/ips_raw_data.cc +++ b/src/ips_options/ips_raw_data.cc @@ -121,11 +121,11 @@ static const IpsApi raw_data_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_raw_data[] = +#endif { &raw_data_api.base, nullptr }; -#else -const BaseApi* ips_raw_data = &raw_data_api.base; -#endif diff --git a/src/ips_options/ips_rem.cc b/src/ips_options/ips_rem.cc index dc9bbdd7f..7ad89dcdb 100644 --- a/src/ips_options/ips_rem.cc +++ b/src/ips_options/ips_rem.cc @@ -109,11 +109,11 @@ static const IpsApi rem_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_rem[] = +#endif { &rem_api.base, nullptr }; -#else -const BaseApi* ips_rem = &rem_api.base; -#endif diff --git a/src/ips_options/ips_replace.cc b/src/ips_options/ips_replace.cc index edf8ef143..209727ba0 100644 --- a/src/ips_options/ips_replace.cc +++ b/src/ips_options/ips_replace.cc @@ -293,11 +293,11 @@ static const IpsApi replace_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_replace[] = +#endif { &replace_api.base, nullptr }; -#else -const BaseApi* ips_replace = &replace_api.base; -#endif diff --git a/src/ips_options/ips_rev.cc b/src/ips_options/ips_rev.cc index b3809b424..c568e5101 100644 --- a/src/ips_options/ips_rev.cc +++ b/src/ips_options/ips_rev.cc @@ -112,11 +112,11 @@ static const IpsApi rev_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_rev[] = +#endif { &rev_api.base, nullptr }; -#else -const BaseApi* ips_rev = &rev_api.base; -#endif diff --git a/src/ips_options/ips_rpc.cc b/src/ips_options/ips_rpc.cc index c8638aa48..2976c1e83 100644 --- a/src/ips_options/ips_rpc.cc +++ b/src/ips_options/ips_rpc.cc @@ -363,10 +363,11 @@ static const IpsApi rpc_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_rpc[] = +#endif { &rpc_api.base, nullptr }; -#else -const BaseApi* ips_rpc = &rpc_api.base; -#endif + diff --git a/src/ips_options/ips_sd_pattern.cc b/src/ips_options/ips_sd_pattern.cc index 4b2cf6baf..390a0f28a 100644 --- a/src/ips_options/ips_sd_pattern.cc +++ b/src/ips_options/ips_sd_pattern.cc @@ -435,11 +435,11 @@ static const IpsApi sd_pattern_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_sd_pattern[] = +#endif { &sd_pattern_api.base, nullptr }; -#else -const BaseApi* ips_sd_pattern = &sd_pattern_api.base; -#endif diff --git a/src/ips_options/ips_seq.cc b/src/ips_options/ips_seq.cc index 66d6bdf16..9fd166906 100644 --- a/src/ips_options/ips_seq.cc +++ b/src/ips_options/ips_seq.cc @@ -187,11 +187,11 @@ static const IpsApi seq_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_seq[] = +#endif { &seq_api.base, nullptr }; -#else -const BaseApi* ips_seq = &seq_api.base; -#endif diff --git a/src/ips_options/ips_session.cc b/src/ips_options/ips_session.cc index ccf031815..d85512ec2 100644 --- a/src/ips_options/ips_session.cc +++ b/src/ips_options/ips_session.cc @@ -412,11 +412,11 @@ static const IpsApi session_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_session[] = +#endif { &session_api.base, nullptr }; -#else -const BaseApi* ips_session = &session_api.base; -#endif diff --git a/src/ips_options/ips_sid.cc b/src/ips_options/ips_sid.cc index f52774d5f..9db9dd17e 100644 --- a/src/ips_options/ips_sid.cc +++ b/src/ips_options/ips_sid.cc @@ -112,11 +112,11 @@ static const IpsApi sid_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_sid[] = +#endif { &sid_api.base, nullptr }; -#else -const BaseApi* ips_sid = &sid_api.base; -#endif diff --git a/src/ips_options/ips_soid.cc b/src/ips_options/ips_soid.cc index 57e9252e7..ca7af2c42 100644 --- a/src/ips_options/ips_soid.cc +++ b/src/ips_options/ips_soid.cc @@ -117,11 +117,11 @@ static const IpsApi soid_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_soid[] = +#endif { &soid_api.base, nullptr }; -#else -const BaseApi* ips_soid = &soid_api.base; -#endif diff --git a/src/ips_options/ips_tag.cc b/src/ips_options/ips_tag.cc index 71a221b19..d0f5166d9 100644 --- a/src/ips_options/ips_tag.cc +++ b/src/ips_options/ips_tag.cc @@ -189,11 +189,11 @@ static const IpsApi tag_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_tag[] = +#endif { &tag_api.base, nullptr }; -#else -const BaseApi* ips_tag = &tag_api.base; -#endif diff --git a/src/ips_options/ips_tos.cc b/src/ips_options/ips_tos.cc index f8b312cb1..36d933a7b 100644 --- a/src/ips_options/ips_tos.cc +++ b/src/ips_options/ips_tos.cc @@ -190,11 +190,11 @@ static const IpsApi tos_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_tos[] = +#endif { &tos_api.base, nullptr }; -#else -const BaseApi* ips_tos = &tos_api.base; -#endif diff --git a/src/ips_options/ips_ttl.cc b/src/ips_options/ips_ttl.cc index 8b75f8ee2..69a0e4cd2 100644 --- a/src/ips_options/ips_ttl.cc +++ b/src/ips_options/ips_ttl.cc @@ -188,11 +188,11 @@ static const IpsApi ttl_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_ttl[] = +#endif { &ttl_api.base, nullptr }; -#else -const BaseApi* ips_ttl = &ttl_api.base; -#endif diff --git a/src/ips_options/ips_window.cc b/src/ips_options/ips_window.cc index 1b981cbce..b49f66609 100644 --- a/src/ips_options/ips_window.cc +++ b/src/ips_options/ips_window.cc @@ -188,11 +188,11 @@ static const IpsApi window_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* ips_window[] = +#endif { &window_api.base, nullptr }; -#else -const BaseApi* ips_window = &window_api.base; -#endif diff --git a/src/loggers/alert_csv.cc b/src/loggers/alert_csv.cc index 64c6cfc75..e7f35f603 100644 --- a/src/loggers/alert_csv.cc +++ b/src/loggers/alert_csv.cc @@ -562,11 +562,11 @@ static LogApi csv_api #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* alert_csv[] = +#endif { &csv_api.base, nullptr }; -#else -const BaseApi* alert_csv = &csv_api.base; -#endif diff --git a/src/loggers/alert_fast.cc b/src/loggers/alert_fast.cc index e57735c07..e62741a53 100644 --- a/src/loggers/alert_fast.cc +++ b/src/loggers/alert_fast.cc @@ -278,11 +278,11 @@ static LogApi fast_api #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* alert_fast[] = +#endif { &fast_api.base, nullptr }; -#else -const BaseApi* alert_fast = &fast_api.base; -#endif diff --git a/src/loggers/alert_full.cc b/src/loggers/alert_full.cc index cb2ab821a..b5e411984 100644 --- a/src/loggers/alert_full.cc +++ b/src/loggers/alert_full.cc @@ -290,11 +290,11 @@ static LogApi full_api #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* alert_full[] = +#endif { &full_api.base, nullptr }; -#else -const BaseApi* alert_full = &full_api.base; -#endif diff --git a/src/loggers/alert_sf_socket.cc b/src/loggers/alert_sf_socket.cc index 5d6bb1830..96daa14a6 100644 --- a/src/loggers/alert_sf_socket.cc +++ b/src/loggers/alert_sf_socket.cc @@ -26,7 +26,7 @@ #include "config.h" #endif -#if defined(__linux__) +#ifdef __linux__ #include #include @@ -415,8 +415,13 @@ static LogApi sf_sock_api sf_sock_ctor, sf_sock_dtor }; - -const BaseApi* alert_sf_socket = &sf_sock_api.base; - #endif /* __linux__ */ +const BaseApi* alert_sf_socket[] = +{ +#ifdef __linux__ + &sf_sock_api.base, +#endif + nullptr +}; + diff --git a/src/loggers/alert_syslog.cc b/src/loggers/alert_syslog.cc index 24a43e543..a64bc948a 100644 --- a/src/loggers/alert_syslog.cc +++ b/src/loggers/alert_syslog.cc @@ -371,11 +371,11 @@ static LogApi syslog_api #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* alert_syslog[] = +#endif { &syslog_api.base, nullptr }; -#else -const BaseApi* alert_syslog = &syslog_api.base; -#endif diff --git a/src/loggers/log_codecs.cc b/src/loggers/log_codecs.cc index f0081d09c..66b9ef610 100644 --- a/src/loggers/log_codecs.cc +++ b/src/loggers/log_codecs.cc @@ -201,5 +201,9 @@ static const LogApi log_codecs_api = codec_log_dtor }; -const BaseApi* log_codecs = &log_codecs_api.base; +const BaseApi* log_codecs[] = +{ + &log_codecs_api.base, + nullptr +}; diff --git a/src/loggers/log_hext.cc b/src/loggers/log_hext.cc index aa91e8ef1..658c7d765 100644 --- a/src/loggers/log_hext.cc +++ b/src/loggers/log_hext.cc @@ -279,11 +279,11 @@ static const LogApi hext_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* log_hext[] = +#endif { &hext_api.base, nullptr }; -#else -const BaseApi* log_hext = &hext_api.base; -#endif diff --git a/src/loggers/log_pcap.cc b/src/loggers/log_pcap.cc index e6fd0e09d..4c7c69f8d 100644 --- a/src/loggers/log_pcap.cc +++ b/src/loggers/log_pcap.cc @@ -371,11 +371,11 @@ static LogApi tcpdump_api #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* log_pcap[] = +#endif { &tcpdump_api.base, nullptr }; -#else -const BaseApi* log_pcap = &tcpdump_api.base; -#endif diff --git a/src/loggers/loggers.cc b/src/loggers/loggers.cc index 6deb62d5c..88532879e 100644 --- a/src/loggers/loggers.cc +++ b/src/loggers/loggers.cc @@ -24,48 +24,41 @@ #endif #include "framework/logger.h" +#include "managers/plugin_manager.h" // to ensure PacketManager::log_protocols() is built into Snort++ -extern const BaseApi* log_codecs; - -#if defined(__linux__) -extern const BaseApi* alert_sf_socket; -#endif +extern const BaseApi* log_codecs[]; +extern const BaseApi* alert_sf_socket[]; #ifdef STATIC_LOGGERS -extern const BaseApi* alert_csv; -extern const BaseApi* alert_fast; -extern const BaseApi* alert_full; -extern const BaseApi* alert_syslog; -extern const BaseApi* log_hext; -extern const BaseApi* log_pcap; -extern const BaseApi* eh_unified2; +extern const BaseApi* alert_csv[]; +extern const BaseApi* alert_fast[]; +extern const BaseApi* alert_full[]; +extern const BaseApi* alert_syslog[]; +extern const BaseApi* log_hext[]; +extern const BaseApi* log_pcap[]; +extern const BaseApi* eh_unified2[]; #endif -const BaseApi* loggers[] = +void load_loggers() { // loggers - log_codecs, - -#if defined(__linux__) - alert_sf_socket, -#endif + PluginManager::load_plugins(log_codecs); + PluginManager::load_plugins(alert_sf_socket); #ifdef STATIC_LOGGERS // alerters - alert_csv, - alert_fast, - alert_full, - alert_syslog, + PluginManager::load_plugins(alert_csv); + PluginManager::load_plugins(alert_fast); + PluginManager::load_plugins(alert_full); + PluginManager::load_plugins(alert_syslog); // loggers - log_hext, - log_pcap, + PluginManager::load_plugins(log_hext); + PluginManager::load_plugins(log_pcap); // both - eh_unified2, + PluginManager::load_plugins(eh_unified2); #endif - - nullptr -}; +} diff --git a/src/loggers/loggers.h b/src/loggers/loggers.h index 59dcda5d3..085f20cd1 100644 --- a/src/loggers/loggers.h +++ b/src/loggers/loggers.h @@ -20,7 +20,7 @@ #ifndef LOGGERS_H #define LOGGERS_H -extern const struct BaseApi* loggers[]; +void load_loggers(); #endif diff --git a/src/loggers/unified2.cc b/src/loggers/unified2.cc index b724db24a..a93641a2f 100644 --- a/src/loggers/unified2.cc +++ b/src/loggers/unified2.cc @@ -984,11 +984,11 @@ static LogApi u2_api #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* eh_unified2[] = +#endif { &u2_api.base, nullptr }; -#else -const BaseApi* eh_unified2 = &u2_api.base; -#endif diff --git a/src/main/snort.cc b/src/main/snort.cc index a57ddfb04..ab7b8b005 100644 --- a/src/main/snort.cc +++ b/src/main/snort.cc @@ -35,6 +35,9 @@ #include #include +#include "actions/ips_actions.h" +#include "codecs/codec_api.h" +#include "connectors/connectors.h" #include "decompress/file_decomp.h" #include "detection/detect.h" #include "detection/detection_util.h" @@ -50,9 +53,11 @@ #include "helpers/process.h" #include "host_tracker/host_cache.h" #include "ips_options/ips_flowbits.h" +#include "ips_options/ips_options.h" #include "latency/packet_latency.h" #include "latency/rule_latency.h" #include "log/messages.h" +#include "loggers/loggers.h" #include "managers/action_manager.h" #include "managers/codec_manager.h" #include "managers/inspector_manager.h" @@ -62,6 +67,7 @@ #include "managers/mpse_manager.h" #include "managers/plugin_manager.h" #include "managers/script_manager.h" +#include "network_inspectors/network_inspectors.h" #include "packet_io/sfdaq.h" #include "packet_io/active.h" #include "packet_io/trough.h" @@ -71,8 +77,11 @@ #include "profiler/profiler.h" #include "protocols/packet.h" #include "protocols/packet_manager.h" +#include "search_engines/search_engines.h" +#include "service_inspectors/service_inspectors.h" #include "side_channel/side_channel.h" #include "stream/stream.h" +#include "stream/stream_inspectors.h" #include "target_based/sftarget_reader.h" #include "time/packet_time.h" #include "time/periodic.h" @@ -84,6 +93,7 @@ #ifdef PIGLET #include "piglet/piglet.h" #include "piglet/piglet_manager.h" +#include "piglet_plugins/piglet_plugins.h" #endif #include "build.h" @@ -214,6 +224,19 @@ void Snort::init(int argc, char** argv) InitProtoNames(); SFAT_Init(); + load_actions(); + load_codecs(); + load_connectors(); + load_ips_options(); + load_loggers(); +#ifdef PIGLET + load_piglets(); +#endif + load_search_engines(); + load_stream_inspectors(); + load_network_inspectors(); + load_service_inspectors(); + /* chew up the command line */ snort_cmd_line_conf = parse_cmd_line(argc, argv); snort_conf = snort_cmd_line_conf; diff --git a/src/managers/action_manager.cc b/src/managers/action_manager.cc index 9a94a95c2..954fc319e 100644 --- a/src/managers/action_manager.cc +++ b/src/managers/action_manager.cc @@ -23,16 +23,17 @@ #include +#include "actions/act_replace.h" +#include "actions/ips_actions.h" +#include "framework/ips_action.h" +#include "log/messages.h" #include "main/snort_types.h" #include "main/snort_config.h" #include "main/snort_debug.h" -#include "utils/util.h" #include "managers/module_manager.h" -#include "framework/ips_action.h" #include "parser/parser.h" -#include "log/messages.h" -#include "actions/act_replace.h" #include "packet_io/active.h" +#include "utils/util.h" using namespace std; diff --git a/src/managers/plugin_manager.cc b/src/managers/plugin_manager.cc index ac70ab946..521fe8eab 100644 --- a/src/managers/plugin_manager.cc +++ b/src/managers/plugin_manager.cc @@ -31,25 +31,11 @@ #include #include -#include "action_manager.h" -#include "event_manager.h" -#include "inspector_manager.h" -#include "ips_manager.h" -#include "module_manager.h" -#include "mpse_manager.h" -#include "codec_manager.h" -#include "script_manager.h" -#include "so_manager.h" - #ifdef PIGLET #include "piglet/piglet_api.h" #include "piglet/piglet_manager.h" -#include "piglet_plugins/piglet_plugins.h" #endif -#include "connector_manager.h" -#include "connectors/connectors.h" - #include "framework/codec.h" #include "framework/logger.h" #include "framework/ips_action.h" @@ -58,19 +44,21 @@ #include "framework/mpse.h" #include "framework/so_rule.h" -#include "loggers/loggers.h" -#include "ips_options/ips_options.h" -#include "actions/ips_actions.h" #include "log/messages.h" -#include "stream/stream_inspectors.h" -#include "network_inspectors/network_inspectors.h" -#include "service_inspectors/service_inspectors.h" -#include "search_engines/search_engines.h" -#include "codecs/codec_api.h" #include "helpers/directory.h" #include "helpers/markup.h" #include "parser/parser.h" -#include "file_api/file_service.h" + +#include "action_manager.h" +#include "connector_manager.h" +#include "event_manager.h" +#include "inspector_manager.h" +#include "ips_manager.h" +#include "module_manager.h" +#include "mpse_manager.h" +#include "codec_manager.h" +#include "script_manager.h" +#include "so_manager.h" using namespace std; @@ -401,23 +389,14 @@ static void unload_plugins() // framework methods //------------------------------------------------------------------------- -void PluginManager::load_plugins(const std::string& paths) +void PluginManager::load_plugins(const BaseApi** lp) { // builtins - load_list(codecs); - load_list(ips_actions); - load_list(ips_options); - load_list(stream_inspectors); - load_list(network_inspectors); - load_list(service_inspectors); - load_list(search_engines); - load_list(loggers); - load_list(connectors); - load_list(file_inspectors); -#ifdef PIGLET - load_list(piglets); -#endif + load_list(lp); +} +void PluginManager::load_plugins(const std::string& paths) +{ // dynamic plugins if ( !paths.empty() ) ::load_plugins(paths); diff --git a/src/managers/plugin_manager.h b/src/managers/plugin_manager.h index 9885913d4..1c97cd0c9 100644 --- a/src/managers/plugin_manager.h +++ b/src/managers/plugin_manager.h @@ -44,7 +44,9 @@ class PluginManager { public: // plugin methods + static void load_plugins(const BaseApi**); static void load_plugins(const std::string& lib_paths); + static void list_plugins(); static void show_plugins(); static void dump_plugins(); diff --git a/src/network_inspectors/appid/appid_inspector.cc b/src/network_inspectors/appid/appid_inspector.cc index 3cc93775a..75bfda4d1 100644 --- a/src/network_inspectors/appid/appid_inspector.cc +++ b/src/network_inspectors/appid/appid_inspector.cc @@ -227,18 +227,18 @@ const InspectApi appid_inspector_api = nullptr // reset }; -#ifdef BUILDING_SO extern const BaseApi* ips_appid; +#ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* nin_appid[] = +#endif { &appid_inspector_api.base, ips_appid, nullptr }; -#else -const BaseApi* nin_appid = &appid_inspector_api.base; -#endif /** * @returns 1 if some appid is found, 0 otherwise. diff --git a/src/network_inspectors/arp_spoof/arp_spoof.cc b/src/network_inspectors/arp_spoof/arp_spoof.cc index 0e75ed757..579c7965d 100644 --- a/src/network_inspectors/arp_spoof/arp_spoof.cc +++ b/src/network_inspectors/arp_spoof/arp_spoof.cc @@ -317,11 +317,11 @@ static const InspectApi as_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* nin_arp_spoof[] = +#endif { &as_api.base, nullptr }; -#else -const BaseApi* nin_arp_spoof = &as_api.base; -#endif diff --git a/src/network_inspectors/network_inspectors.cc b/src/network_inspectors/network_inspectors.cc index 8afcb029b..3c02009ed 100644 --- a/src/network_inspectors/network_inspectors.cc +++ b/src/network_inspectors/network_inspectors.cc @@ -21,39 +21,41 @@ #ifdef HAVE_CONFIG_H #include "config.h" #endif + #include "framework/inspector.h" +#include "managers/plugin_manager.h" -extern const BaseApi* nin_appid; extern const BaseApi* nin_binder; extern const BaseApi* nin_normalize; extern const BaseApi* nin_perf_monitor; -extern const BaseApi* nin_port_scan_global; -extern const BaseApi* nin_port_scan; extern const BaseApi* nin_reputation; -extern const BaseApi* ips_appid; +extern const BaseApi* nin_appid[]; +extern const BaseApi* nin_port_scan[]; #ifdef STATIC_INSPECTORS -extern const BaseApi* nin_arp_spoof; -extern const BaseApi* nin_packet_capture; +extern const BaseApi* nin_arp_spoof[]; +extern const BaseApi* nin_packet_capture[]; #endif -const BaseApi* network_inspectors[] = +static const BaseApi* network_inspectors[] = { - nin_appid, nin_binder, nin_normalize, nin_perf_monitor, - nin_port_scan_global, - nin_port_scan, nin_reputation, + nullptr +}; - ips_appid, +void load_network_inspectors() +{ + PluginManager::load_plugins(network_inspectors); + PluginManager::load_plugins(nin_appid); + PluginManager::load_plugins(nin_port_scan); #ifdef STATIC_INSPECTORS - nin_arp_spoof, - nin_packet_capture, + PluginManager::load_plugins(nin_arp_spoof); + PluginManager::load_plugins(nin_packet_capture); #endif - nullptr -}; +} diff --git a/src/network_inspectors/network_inspectors.h b/src/network_inspectors/network_inspectors.h index 66f163284..c798a08ca 100644 --- a/src/network_inspectors/network_inspectors.h +++ b/src/network_inspectors/network_inspectors.h @@ -20,7 +20,7 @@ #ifndef NETWORK_INSPECTORS_H #define NETWORK_INSPECTORS_H -extern const struct BaseApi* network_inspectors[]; +void load_network_inspectors(); #endif diff --git a/src/network_inspectors/packet_capture/packet_capture.cc b/src/network_inspectors/packet_capture/packet_capture.cc index d3cb6f658..4ffeb8a68 100644 --- a/src/network_inspectors/packet_capture/packet_capture.cc +++ b/src/network_inspectors/packet_capture/packet_capture.cc @@ -213,13 +213,13 @@ static const InspectApi pc_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* nin_packet_capture[] = +#endif { &pc_api.base, nullptr }; -#else -const BaseApi* nin_packet_capture = &pc_api.base; -#endif #ifdef UNIT_TEST static Packet* init_null_packet() diff --git a/src/network_inspectors/port_scan/port_scan.cc b/src/network_inspectors/port_scan/port_scan.cc index 3736307ef..c00c842c2 100644 --- a/src/network_inspectors/port_scan/port_scan.cc +++ b/src/network_inspectors/port_scan/port_scan.cc @@ -1038,13 +1038,12 @@ static const InspectApi sp_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* nin_port_scan[] = +#endif { &sd_api.base, &sp_api.base, nullptr }; -#else -const BaseApi* nin_port_scan_global = &sd_api.base; -const BaseApi* nin_port_scan = &sp_api.base; -#endif diff --git a/src/piglet_plugins/piglet_plugins.cc b/src/piglet_plugins/piglet_plugins.cc index f5c2da334..d1c520267 100644 --- a/src/piglet_plugins/piglet_plugins.cc +++ b/src/piglet_plugins/piglet_plugins.cc @@ -19,6 +19,8 @@ #include "piglet_plugins.h" +#include "managers/plugin_manager.h" + extern const BaseApi* pp_codec; extern const BaseApi* pp_inspector; extern const BaseApi* pp_ips_action; @@ -28,7 +30,8 @@ extern const BaseApi* pp_search_engine; extern const BaseApi* pp_so_rule; extern const BaseApi* pp_test; -const struct BaseApi* piglets[] = { +static const BaseApi* pp_piglets[] = +{ pp_codec, pp_inspector, pp_ips_action, @@ -40,3 +43,8 @@ const struct BaseApi* piglets[] = { nullptr }; +void load_piglets() +{ + PluginManager::load_plugins(pp_piglets); +} + diff --git a/src/piglet_plugins/piglet_plugins.h b/src/piglet_plugins/piglet_plugins.h index 31d3afa38..283a8dccb 100644 --- a/src/piglet_plugins/piglet_plugins.h +++ b/src/piglet_plugins/piglet_plugins.h @@ -20,7 +20,7 @@ #ifndef PIGLET_PLUGINS_H #define PIGLET_PLUGINS_H -extern const struct BaseApi* piglets[]; +void load_piglets(); #endif diff --git a/src/search_engines/CMakeLists.txt b/src/search_engines/CMakeLists.txt index 3166be46f..06ed9d009 100644 --- a/src/search_engines/CMakeLists.txt +++ b/src/search_engines/CMakeLists.txt @@ -18,6 +18,7 @@ set (ACSMX2_SOURCES ac_sparse_bands.cc acsmx2.cc acsmx2.h + acsmx2_api.cc ) set (BNFA_SOURCES @@ -66,7 +67,7 @@ else ( STATIC_SEARCH_ENGINES) ) add_shared_library(acsmx search_engines ${ACSMX_SOURCES}) - add_shared_library(acsmx2 search_engines ${ACSMX2_SOURCES} acsmx2_api.cc) + add_shared_library(acsmx2 search_engines ${ACSMX2_SOURCES}) endif (STATIC_SEARCH_ENGINES) diff --git a/src/search_engines/Makefile.am b/src/search_engines/Makefile.am index 99a1131de..2ca19c128 100644 --- a/src/search_engines/Makefile.am +++ b/src/search_engines/Makefile.am @@ -19,7 +19,8 @@ ac_full.cc \ ac_sparse.cc \ ac_sparse_bands.cc \ acsmx2.cc \ -acsmx2.h +acsmx2.h \ +acsmx2_api.cc bnfa_sources = \ ac_bnfa.cc \ @@ -64,7 +65,7 @@ libacsmx_la_SOURCES = $(acsmx_sources) mpselib_LTLIBRARIES += libacsmx2.la libacsmx2_la_CXXFLAGS = $(AM_CXXFLAGS) -DBUILDING_SO libacsmx2_la_LDFLAGS = $(AM_LDFLAGS) -export-dynamic -shared -libacsmx2_la_SOURCES = $(acsmx2_sources) acsmx2_api.cc +libacsmx2_la_SOURCES = $(acsmx2_sources) endif if BUILD_CPPUTESTS diff --git a/src/search_engines/ac_banded.cc b/src/search_engines/ac_banded.cc index 2dcde3cd8..2e4ddddbf 100644 --- a/src/search_engines/ac_banded.cc +++ b/src/search_engines/ac_banded.cc @@ -17,15 +17,15 @@ // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. //-------------------------------------------------------------------------- -#include "acsmx.h" -#include "acsmx2.h" - +#include "framework/mpse.h" #include "main/snort_debug.h" #include "main/snort_types.h" #include "main/snort_config.h" -#include "utils/util.h" #include "profiler/profiler.h" -#include "framework/mpse.h" +#include "utils/util.h" + +#include "acsmx.h" +#include "acsmx2.h" //------------------------------------------------------------------------- // "ac_banded" diff --git a/src/search_engines/ac_bnfa.cc b/src/search_engines/ac_bnfa.cc index 1afa1aaed..f0c56f3cb 100644 --- a/src/search_engines/ac_bnfa.cc +++ b/src/search_engines/ac_bnfa.cc @@ -26,14 +26,14 @@ * 3/06 - Added AC_BNFA search */ -#include "bnfa_search.h" - +#include "framework/mpse.h" #include "main/snort_debug.h" #include "main/snort_types.h" #include "main/snort_config.h" -#include "utils/util.h" #include "profiler/profiler.h" -#include "framework/mpse.h" +#include "utils/util.h" + +#include "bnfa_search.h" //------------------------------------------------------------------------- // "ac_bnfa" @@ -150,5 +150,9 @@ static const MpseApi bnfa_api = bnfa_print, }; -const BaseApi* se_ac_bnfa = &bnfa_api.base; +const BaseApi* se_ac_bnfa[] = +{ + &bnfa_api.base, + nullptr +}; diff --git a/src/search_engines/ac_full.cc b/src/search_engines/ac_full.cc index b73fbfedd..3264ce4ed 100644 --- a/src/search_engines/ac_full.cc +++ b/src/search_engines/ac_full.cc @@ -17,15 +17,15 @@ // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. //-------------------------------------------------------------------------- -#include "acsmx.h" -#include "acsmx2.h" - +#include "framework/mpse.h" #include "main/snort_debug.h" #include "main/snort_types.h" #include "main/snort_config.h" -#include "utils/util.h" #include "profiler/profiler.h" -#include "framework/mpse.h" +#include "utils/util.h" + +#include "acsmx.h" +#include "acsmx2.h" //------------------------------------------------------------------------- // "ac_full" diff --git a/src/search_engines/ac_sparse.cc b/src/search_engines/ac_sparse.cc index 41351b894..ab104a051 100644 --- a/src/search_engines/ac_sparse.cc +++ b/src/search_engines/ac_sparse.cc @@ -17,15 +17,15 @@ // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. //-------------------------------------------------------------------------- -#include "acsmx.h" -#include "acsmx2.h" - +#include "framework/mpse.h" #include "main/snort_debug.h" #include "main/snort_types.h" #include "main/snort_config.h" -#include "utils/util.h" #include "profiler/profiler.h" -#include "framework/mpse.h" +#include "utils/util.h" + +#include "acsmx.h" +#include "acsmx2.h" //------------------------------------------------------------------------- // "ac_sparse" diff --git a/src/search_engines/ac_sparse_bands.cc b/src/search_engines/ac_sparse_bands.cc index 57417fc73..97ebebcb6 100644 --- a/src/search_engines/ac_sparse_bands.cc +++ b/src/search_engines/ac_sparse_bands.cc @@ -17,15 +17,15 @@ // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. //-------------------------------------------------------------------------- -#include "acsmx.h" -#include "acsmx2.h" - +#include "framework/mpse.h" #include "main/snort_debug.h" #include "main/snort_types.h" #include "main/snort_config.h" -#include "utils/util.h" #include "profiler/profiler.h" -#include "framework/mpse.h" +#include "utils/util.h" + +#include "acsmx.h" +#include "acsmx2.h" //------------------------------------------------------------------------- // "ac_sparse_bands" diff --git a/src/search_engines/ac_std.cc b/src/search_engines/ac_std.cc index 58743354c..c8384f1e1 100644 --- a/src/search_engines/ac_std.cc +++ b/src/search_engines/ac_std.cc @@ -21,15 +21,15 @@ #include "config.h" #endif -#include "acsmx.h" -#include "acsmx2.h" - +#include "framework/mpse.h" #include "main/snort_debug.h" #include "main/snort_types.h" #include "main/snort_config.h" -#include "utils/util.h" #include "profiler/profiler.h" -#include "framework/mpse.h" +#include "utils/util.h" + +#include "acsmx.h" +#include "acsmx2.h" //------------------------------------------------------------------------- // "ac_std" @@ -124,11 +124,11 @@ static const MpseApi ac_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* se_ac_std[] = +#endif { &ac_api.base, nullptr }; -#else -const BaseApi* se_ac_std = &ac_api.base; -#endif diff --git a/src/search_engines/acsmx2_api.cc b/src/search_engines/acsmx2_api.cc index c6b5fb367..6b65cf911 100644 --- a/src/search_engines/acsmx2_api.cc +++ b/src/search_engines/acsmx2_api.cc @@ -21,16 +21,19 @@ #include "config.h" #endif -#include "search_engines.h" #include "framework/mpse.h" +#include "search_engines.h" -#ifdef BUILDING_SO extern const BaseApi* se_ac_banded; extern const BaseApi* se_ac_full; extern const BaseApi* se_ac_sparse; extern const BaseApi* se_ac_sparse_bands; +#ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* se_acsmx2[] = +#endif { se_ac_banded, se_ac_full, @@ -38,5 +41,4 @@ SO_PUBLIC const BaseApi* snort_plugins[] = se_ac_sparse_bands, nullptr }; -#endif diff --git a/src/search_engines/hyperscan.cc b/src/search_engines/hyperscan.cc index 57153a531..7349ff9bb 100644 --- a/src/search_engines/hyperscan.cc +++ b/src/search_engines/hyperscan.cc @@ -362,11 +362,11 @@ static const MpseApi hs_api = //#ifdef BUILDING_SO //SO_PUBLIC const BaseApi* snort_plugins[] = -//{ -// &hs_api.base, -// nullptr -//}; //#else -const BaseApi* se_hyperscan = &hs_api.base; +const BaseApi* se_hyperscan[] = //#endif +{ + &hs_api.base, + nullptr +}; diff --git a/src/search_engines/intel_cpm.cc b/src/search_engines/intel_cpm.cc index 10b0c5b56..13179bdb7 100644 --- a/src/search_engines/intel_cpm.cc +++ b/src/search_engines/intel_cpm.cc @@ -24,12 +24,12 @@ #include "config.h" #endif +#include "framework/mpse.h" #include "main/snort_debug.h" #include "main/snort_types.h" #include "main/snort_config.h" -#include "utils/util.h" #include "profiler/profiler.h" -#include "framework/mpse.h" +#include "utils/util.h" //------------------------------------------------------------------------- // "intel_cpm" @@ -149,13 +149,13 @@ static const MpseApi cpm_api = #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* se_intel_cpm[] = +#endif { &cpm_api.base, nullptr }; -#else -const BaseApi* se_intel_cpm = &cpm_api.base; -#endif #endif diff --git a/src/search_engines/search_engines.cc b/src/search_engines/search_engines.cc index d2b6346c3..a758a7d42 100644 --- a/src/search_engines/search_engines.cc +++ b/src/search_engines/search_engines.cc @@ -22,46 +22,39 @@ #include "config.h" #endif -struct BaseApi; +#include "managers/plugin_manager.h" -extern const BaseApi* se_ac_bnfa; +struct BaseApi; +extern const BaseApi* se_ac_bnfa[]; #ifdef INTEL_SOFT_CPM -extern const BaseApi* se_intel_cpm; +extern const BaseApi* se_intel_cpm[]; #endif #ifdef HAVE_HYPERSCAN -extern const BaseApi* se_hyperscan; +extern const BaseApi* se_hyperscan[]; #endif #ifdef STATIC_SEARCH_ENGINES -extern const BaseApi* se_ac_banded; -extern const BaseApi* se_ac_full; -extern const BaseApi* se_ac_sparse; -extern const BaseApi* se_ac_sparse_bands; -extern const BaseApi* se_ac_std; +extern const BaseApi* se_ac_std[]; +extern const BaseApi* se_acsmx2[]; #endif -const BaseApi* search_engines[] = +void load_search_engines() { - se_ac_bnfa, + PluginManager::load_plugins(se_ac_bnfa); #ifdef INTEL_SOFT_CPM - se_intel_cpm, + PluginManager::load_plugins(se_intel_cpm); #endif #ifdef HAVE_HYPERSCAN - se_hyperscan, + PluginManager::load_plugins(se_hyperscan); #endif #ifdef STATIC_SEARCH_ENGINES - se_ac_banded, - se_ac_full, - se_ac_sparse, - se_ac_sparse_bands, - se_ac_std, + PluginManager::load_plugins(se_ac_std); + PluginManager::load_plugins(se_acsmx2); #endif - - nullptr -}; +} diff --git a/src/search_engines/search_engines.h b/src/search_engines/search_engines.h index 0bcd9156d..02e3f9d1a 100644 --- a/src/search_engines/search_engines.h +++ b/src/search_engines/search_engines.h @@ -21,7 +21,7 @@ struct BaseApi; -extern const BaseApi* search_engines[]; +void load_search_engines(); #endif diff --git a/src/search_engines/test/search_tool_test.cc b/src/search_engines/test/search_tool_test.cc index 99fa6de29..a82c5db71 100644 --- a/src/search_engines/test/search_tool_test.cc +++ b/src/search_engines/test/search_tool_test.cc @@ -111,17 +111,17 @@ static MpseAgent s_agent = [](void** ppl) { CHECK(*ppl == s_list); } }; -extern const BaseApi* se_ac_full; -const MpseApi* mpse_api = (MpseApi*)se_ac_full; +extern const BaseApi* se_ac_bnfa; +const MpseApi* mpse_api = (MpseApi*)se_ac_bnfa; Mpse* acf = nullptr; Mpse* MpseManager::get_search_engine(const char *type) { acf = nullptr; - if(strcmp(type, "ac_full") == 0) + if(strcmp(type, "ac_bnfa") == 0) { - CHECK(se_ac_full); + CHECK(se_ac_bnfa); mpse_api->init(); acf = mpse_api->ctor(snort_conf, nullptr, false, &s_agent); CHECK(acf); @@ -168,18 +168,13 @@ TEST_GROUP(search_tool_tests) { void setup() { - CHECK(se_ac_full); + CHECK(se_ac_bnfa); } }; -TEST(search_tool_tests, ac_full) +TEST(search_tool_tests, ac_bnfa) { - // get_search_engine returns nullptr any search engine other than ac_full. SearchTool *stool = new SearchTool; - CHECK(!stool->mpse); - delete stool; - - stool = new SearchTool("ac_full"); CHECK(stool->mpse); pattern_id = 1; @@ -206,9 +201,9 @@ TEST(search_tool_tests, ac_full) delete stool; } -TEST(search_tool_tests, search_all_ac_full) +TEST(search_tool_tests, search_all_ac_bnfa) { - SearchTool *stool = new SearchTool("ac_full"); + SearchTool *stool = new SearchTool("ac_bnfa"); CHECK(stool->mpse); pattern_id = 1; diff --git a/src/service_inspectors/dce_rpc/dce_common.cc b/src/service_inspectors/dce_rpc/dce_common.cc index dd3f7b172..c51a31b04 100644 --- a/src/service_inspectors/dce_rpc/dce_common.cc +++ b/src/service_inspectors/dce_rpc/dce_common.cc @@ -577,13 +577,15 @@ DCE2_Ret DCE2_AddDataToRpkt(Packet* rpkt, const uint8_t* data, uint32_t data_len return DCE2_RET__SUCCESS; } -#ifdef BUILDING_SO - extern const BaseApi* ips_dce_iface; extern const BaseApi* ips_dce_opnum; extern const BaseApi* ips_dce_stub_data; +#ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* sin_dce[] = +#endif { &dce2_tcp_api.base, &dce2_smb_api.base, @@ -593,11 +595,4 @@ SO_PUBLIC const BaseApi* snort_plugins[] = ips_dce_stub_data, nullptr }; -#else - -const BaseApi* sin_dce_tcp = &dce2_tcp_api.base; -const BaseApi* sin_dce_smb = &dce2_smb_api.base; -const BaseApi* sin_dce_udp = &dce2_udp_api.base; - -#endif diff --git a/src/service_inspectors/dnp3/dnp3.cc b/src/service_inspectors/dnp3/dnp3.cc index ad46cefed..e145bc27d 100644 --- a/src/service_inspectors/dnp3/dnp3.cc +++ b/src/service_inspectors/dnp3/dnp3.cc @@ -317,13 +317,17 @@ const InspectApi dnp3_api = nullptr, // ssn nullptr // reset }; -#ifdef BUILDING_SO + extern const BaseApi* ips_dnp3_func; extern const BaseApi* ips_dnp3_ind; extern const BaseApi* ips_dnp3_obj; extern const BaseApi* ips_dnp3_data; +#ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* sin_dnp3[] = +#endif { &dnp3_api.base, ips_dnp3_func, @@ -332,7 +336,4 @@ SO_PUBLIC const BaseApi* snort_plugins[] = ips_dnp3_data, nullptr }; -#else -const BaseApi* sin_dnp3 = &dnp3_api.base; -#endif diff --git a/src/service_inspectors/gtp/gtp_inspect.cc b/src/service_inspectors/gtp/gtp_inspect.cc index 48d4f8a0e..6d4115e28 100644 --- a/src/service_inspectors/gtp/gtp_inspect.cc +++ b/src/service_inspectors/gtp/gtp_inspect.cc @@ -207,12 +207,15 @@ static const InspectApi gtp_api = nullptr // reset }; -#ifdef BUILDING_SO extern const BaseApi* ips_gtp_info; extern const BaseApi* ips_gtp_type; extern const BaseApi* ips_gtp_version; +#ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* sin_gtp[] = +#endif { >p_api.base, ips_gtp_info, @@ -220,7 +223,4 @@ SO_PUBLIC const BaseApi* snort_plugins[] = ips_gtp_version, nullptr }; -#else -const BaseApi* sin_gtp = >p_api.base; -#endif diff --git a/src/service_inspectors/http_inspect/http_api.cc b/src/service_inspectors/http_inspect/http_api.cc index 71a17483e..fcfb0c8a1 100644 --- a/src/service_inspectors/http_inspect/http_api.cc +++ b/src/service_inspectors/http_inspect/http_api.cc @@ -81,7 +81,6 @@ const InspectApi HttpApi::http_api = nullptr }; -#ifdef BUILDING_SO extern const BaseApi* ips_http_uri; extern const BaseApi* ips_http_client_body; extern const BaseApi* ips_http_method; @@ -98,7 +97,11 @@ extern const BaseApi* ips_http_raw_trailer; extern const BaseApi* ips_http_raw_request; extern const BaseApi* ips_http_raw_status; +#ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* sin_http[] = +#endif { &HttpApi::http_api.base, ips_http_uri, @@ -118,7 +121,4 @@ SO_PUBLIC const BaseApi* snort_plugins[] = ips_http_raw_status, nullptr }; -#else -const BaseApi* sin_http = &HttpApi::http_api.base; -#endif diff --git a/src/service_inspectors/modbus/modbus.cc b/src/service_inspectors/modbus/modbus.cc index e7b0faf31..8e745deec 100644 --- a/src/service_inspectors/modbus/modbus.cc +++ b/src/service_inspectors/modbus/modbus.cc @@ -161,12 +161,15 @@ static const InspectApi modbus_api = nullptr // reset }; -#ifdef BUILDING_SO extern const BaseApi* ips_modbus_data; extern const BaseApi* ips_modbus_func; extern const BaseApi* ips_modbus_unit; +#ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* sin_modbus[] = +#endif { &modbus_api.base, ips_modbus_data, @@ -174,7 +177,4 @@ SO_PUBLIC const BaseApi* snort_plugins[] = ips_modbus_unit, nullptr }; -#else -const BaseApi* sin_modbus = &modbus_api.base; -#endif diff --git a/src/service_inspectors/service_inspectors.cc b/src/service_inspectors/service_inspectors.cc index e53b87438..7a377818d 100644 --- a/src/service_inspectors/service_inspectors.cc +++ b/src/service_inspectors/service_inspectors.cc @@ -22,133 +22,71 @@ #ifdef HAVE_CONFIG_H #include "config.h" #endif + #include "framework/inspector.h" +#include "managers/plugin_manager.h" -extern const BaseApi* sin_http; extern const BaseApi* sin_imap; extern const BaseApi* sin_pop; -extern const BaseApi* sin_sip; extern const BaseApi* sin_smtp; -extern const BaseApi* sin_ssl; -extern const BaseApi* ips_http_uri; -extern const BaseApi* ips_http_client_body; -extern const BaseApi* ips_http_method; -extern const BaseApi* ips_http_cookie; -extern const BaseApi* ips_http_stat_code; -extern const BaseApi* ips_http_stat_msg; -extern const BaseApi* ips_http_raw_uri; -extern const BaseApi* ips_http_raw_header; -extern const BaseApi* ips_http_raw_cookie; -extern const BaseApi* ips_http_version; -extern const BaseApi* ips_http_header; -extern const BaseApi* ips_http_trailer; -extern const BaseApi* ips_http_raw_trailer; -extern const BaseApi* ips_http_raw_request; -extern const BaseApi* ips_http_raw_status; -extern const BaseApi* ips_sip_body; -extern const BaseApi* ips_sip_header; -extern const BaseApi* ips_sip_method; -extern const BaseApi* ips_sip_stat_code; -extern const BaseApi* ips_ssl_state; -extern const BaseApi* ips_ssl_version; +extern const BaseApi* sin_file[]; +extern const BaseApi* sin_http[]; +extern const BaseApi* sin_sip[]; +extern const BaseApi* sin_ssl[]; #ifdef STATIC_INSPECTORS -extern const BaseApi* ips_dce_iface; -extern const BaseApi* ips_dce_opnum; -extern const BaseApi* ips_dce_stub_data; -extern const BaseApi* ips_dnp3_data; -extern const BaseApi* ips_dnp3_func; -extern const BaseApi* ips_dnp3_ind; -extern const BaseApi* ips_dnp3_obj; -extern const BaseApi* ips_gtp_info; -extern const BaseApi* ips_gtp_type; -extern const BaseApi* ips_gtp_version; -extern const BaseApi* ips_modbus_data; -extern const BaseApi* ips_modbus_func; -extern const BaseApi* ips_modbus_unit; - -// FIXIT-L use snort_plugins aliases for static builds -// so only one extern symbol per library is required extern const BaseApi* sin_bo; -extern const BaseApi* sin_dce_smb; -extern const BaseApi* sin_dce_tcp; -extern const BaseApi* sin_dce_udp; -extern const BaseApi* sin_dnp3; extern const BaseApi* sin_dns; extern const BaseApi* sin_ftp_client; extern const BaseApi* sin_ftp_server; extern const BaseApi* sin_ftp_data; -extern const BaseApi* sin_gtp; -extern const BaseApi* sin_modbus; extern const BaseApi* sin_rpc_decode; extern const BaseApi* sin_ssh; extern const BaseApi* sin_telnet; extern const BaseApi* sin_wizard; + +extern const BaseApi* sin_dce[]; +extern const BaseApi* sin_dnp3[]; +extern const BaseApi* sin_gtp[]; +extern const BaseApi* sin_modbus[]; #endif const BaseApi* service_inspectors[] = { - sin_http, sin_imap, sin_pop, - sin_sip, sin_smtp, - sin_ssl, - - ips_http_uri, - ips_http_client_body, - ips_http_method, - ips_http_cookie, - ips_http_stat_code, - ips_http_stat_msg, - ips_http_raw_uri, - ips_http_raw_header, - ips_http_raw_cookie, - ips_http_version, - ips_http_header, - ips_http_trailer, - ips_http_raw_trailer, - ips_http_raw_request, - ips_http_raw_status, - ips_sip_body, - ips_sip_header, - ips_sip_method, - ips_sip_stat_code, - ips_ssl_state, - ips_ssl_version, #ifdef STATIC_INSPECTORS - ips_dce_iface, - ips_dce_opnum, - ips_dce_stub_data, - ips_dnp3_data, - ips_dnp3_func, - ips_dnp3_ind, - ips_dnp3_obj, - ips_gtp_info, - ips_gtp_type, - ips_gtp_version, - ips_modbus_data, - ips_modbus_func, - ips_modbus_unit, - sin_bo, - sin_dce_smb, - sin_dce_tcp, - sin_dce_udp, - sin_dnp3, sin_dns, sin_ftp_client, sin_ftp_server, sin_ftp_data, - sin_gtp, - sin_modbus, sin_rpc_decode, sin_ssh, sin_telnet, sin_wizard, #endif + nullptr }; +void load_service_inspectors() +{ + PluginManager::load_plugins(service_inspectors); + + PluginManager::load_plugins(sin_file); + PluginManager::load_plugins(sin_http); + PluginManager::load_plugins(sin_sip); + PluginManager::load_plugins(sin_ssl); + +#ifdef STATIC_INSPECTORS + PluginManager::load_plugins(sin_dce); + PluginManager::load_plugins(sin_dnp3); + PluginManager::load_plugins(sin_gtp); + PluginManager::load_plugins(sin_modbus); +#endif +} + diff --git a/src/service_inspectors/service_inspectors.h b/src/service_inspectors/service_inspectors.h index d3f2a7359..7ee621be9 100644 --- a/src/service_inspectors/service_inspectors.h +++ b/src/service_inspectors/service_inspectors.h @@ -20,7 +20,7 @@ #ifndef SERVICE_INSPECTORS_H #define SERVICE_INSPECTORS_H -extern const struct BaseApi* service_inspectors[]; +void load_service_inspectors(); #endif diff --git a/src/service_inspectors/sip/sip.cc b/src/service_inspectors/sip/sip.cc index 3d0e6b1a3..87e641493 100644 --- a/src/service_inspectors/sip/sip.cc +++ b/src/service_inspectors/sip/sip.cc @@ -428,13 +428,16 @@ const InspectApi sip_api = nullptr // reset }; -#ifdef BUILDING_SO extern const BaseApi* ips_sip_header; extern const BaseApi* ips_sip_body; extern const BaseApi* ips_sip_method; extern const BaseApi* ips_sip_stat_code; +#ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* sin_sip[] = +#endif { &sip_api.base, ips_sip_header, @@ -443,7 +446,4 @@ SO_PUBLIC const BaseApi* snort_plugins[] = ips_sip_stat_code, nullptr }; -#else -const BaseApi* sin_sip = &sip_api.base; -#endif diff --git a/src/service_inspectors/ssl/ssl_inspector.cc b/src/service_inspectors/ssl/ssl_inspector.cc index 454edd84b..17532d0dc 100644 --- a/src/service_inspectors/ssl/ssl_inspector.cc +++ b/src/service_inspectors/ssl/ssl_inspector.cc @@ -513,13 +513,18 @@ const InspectApi ssl_api = #undef BUILDING_SO // FIXIT-L can't be linked dynamically yet +extern const BaseApi* ips_ssl_state; +extern const BaseApi* ips_ssl_version; + #ifdef BUILDING_SO SO_PUBLIC const BaseApi* snort_plugins[] = +#else +const BaseApi* sin_ssl[] = +#endif { &ssl_api.base, + ips_ssl_state, + ips_ssl_version, nullptr }; -#else -const BaseApi* sin_ssl = &ssl_api.base; -#endif diff --git a/src/stream/stream_inspectors.cc b/src/stream/stream_inspectors.cc index f70af7731..14a030eef 100644 --- a/src/stream/stream_inspectors.cc +++ b/src/stream/stream_inspectors.cc @@ -19,10 +19,8 @@ #include "stream_inspectors.h" -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif #include "framework/inspector.h" +#include "managers/plugin_manager.h" extern const BaseApi* nin_stream_base; extern const BaseApi* nin_stream_ip; @@ -35,7 +33,7 @@ extern const BaseApi* nin_stream_file; extern const BaseApi* ips_stream_reassemble; extern const BaseApi* ips_stream_size; -const BaseApi* stream_inspectors[] = +static const BaseApi* stream_inspectors[] = { nin_stream_base, nin_stream_ip, @@ -51,3 +49,8 @@ const BaseApi* stream_inspectors[] = nullptr }; +void load_stream_inspectors() +{ + PluginManager::load_plugins(stream_inspectors); +} + diff --git a/src/stream/stream_inspectors.h b/src/stream/stream_inspectors.h index 0bbc34e74..8c618dba4 100644 --- a/src/stream/stream_inspectors.h +++ b/src/stream/stream_inspectors.h @@ -20,7 +20,7 @@ #ifndef STREAM_INSPECTORS_H #define STREAM_INSPECTORS_H -extern const struct BaseApi* stream_inspectors[]; +void load_stream_inspectors(); #endif