diff --git a/src/maat_compile.c b/src/maat_compile.c index 14bf699..390bcf5 100644 --- a/src/maat_compile.c +++ b/src/maat_compile.c @@ -1630,7 +1630,13 @@ int compile_runtime_commit(void *compile_runtime, const char *table_name) struct bool_matcher *old_bool_matcher = NULL; struct bool_matcher *new_bool_matcher = NULL; + pthread_rwlock_rdlock(&compile_rt->rwlock); size_t compile_cnt = HASH_COUNT(compile_rt->compile_hash); + pthread_rwlock_unlock(&compile_rt->rwlock); + if (0 == compile_cnt) { + return 0; + } + log_info(compile_rt->logger, MODULE_COMPILE, "table[%s] committing %zu compile rules for rebuilding compile bool_matcher engine", table_name, compile_cnt); diff --git a/test/maat_framework_gtest.cpp b/test/maat_framework_gtest.cpp index 6dd7126..d475d66 100644 --- a/test/maat_framework_gtest.cpp +++ b/test/maat_framework_gtest.cpp @@ -693,9 +693,10 @@ TEST_F(MaatStringScan, StreamInput) { //TODO: #if 0 TEST_F(MaatStringScan, ShouldNotHitExprPlus) { - long long results[ARRAY] = {0}; + long long results[ARRAY_SIZE] = {0}; size_t n_hit_result = 0; struct maat_state *state = NULL; + struct maat *maat_instance = MaatStringScan::_shared_maat_instance; const char *region_name = "tcp.payload"; unsigned char udp_payload_not_hit[] = { /* Stun packet */ 0x00, 0x03, 0x00, 0x4a, 0x21, 0x12, 0xa4, 0x42, @@ -711,13 +712,13 @@ TEST_F(MaatStringScan, ShouldNotHitExprPlus) { 0xf6, 0x30, 0x81, 0xf4, 0x3f, 0xc2, 0x19, 0x6a, 0x68, 0x61, 0x93, 0x08, 0xc0, 0x0a, 0xab, 0x00 }; - int table_id = maat_get_table_id(g_maat_instance, "APP_PAYLOAD"); + int table_id = maat_get_table_id(maat_instance, "APP_PAYLOAD"); ASSERT_GT(table_id, 0); - int ret = maat_state_set_scan_district(g_maat_instance, &state, region_name, strlen(region_name)); + int ret = maat_state_set_scan_district(maat_instance, &state, region_name, strlen(region_name)); ASSERT_EQ(ret, 0); - ret = maat_scan_string(g_maat_instance, table_id, 0, (char *)udp_payload_not_hit, sizeof(udp_payload_not_hit), + ret = maat_scan_string(maat_instance, table_id, 0, (char *)udp_payload_not_hit, sizeof(udp_payload_not_hit), results, ARRAY_SIZE, &n_hit_result, &state); EXPECT_EQ(ret, MAAT_SCAN_HALF_HIT); maat_state_free(&state); @@ -727,29 +728,30 @@ TEST_F(MaatStringScan, ExprPlusWithHex) { long long results[ARRAY_SIZE] = {0}; size_t n_hit_result = 0; struct maat_state *state = NULL; + struct maat *maat_instance = MaatStringScan::_shared_maat_instance; const char *scan_data1 = "text/html; charset=UTF-8"; const char *scan_data2 = "Batman\\:Take me Home.Superman/:Fine,stay with me."; const char *region_name1 = "Content-Type"; const char *region_name2 = "User-Agent"; - int table_id = maat_get_table_id(g_maat_instance, "HTTP_SIGNATURE"); + int table_id = maat_get_table_id(maat_instance, "HTTP_SIGNATURE"); ASSERT_GT(table_id, 0); - int ret = maat_state_set_scan_district(g_maat_instance, &state, region_name1, strlen(region_name1)); + int ret = maat_state_set_scan_district(maat_instance, &state, region_name1, strlen(region_name1)); ASSERT_EQ(ret, 0); - ret = maat_scan_string(g_maat_instance, table_id, 0, scan_data1, strlen(scan_data1), + ret = maat_scan_string(maat_instance, table_id, 0, scan_data1, strlen(scan_data1), results, ARRAY_SIZE, &n_hit_result, &state); EXPECT_EQ(ret, MAAT_SCAN_HIT); EXPECT_EQ(results[0], 156); - ret = maat_state_set_scan_district(g_maat_instance, &state, region_name2, strlen(region_name2)); + ret = maat_state_set_scan_district(maat_instance, &state, region_name2, strlen(region_name2)); ASSERT_EQ(ret, 0); - ret = maat_scan_string(g_maat_instance, table_id, 0, scan_data1, strlen(scan_data1), + ret = maat_scan_string(maat_instance, table_id, 0, scan_data1, strlen(scan_data1), results, ARRAY_SIZE, &n_hit_result, &state); EXPECT_EQ(ret, MAAT_SCAN_HALF_HIT); - table_id = maat_get_table_id(g_maat_instance, "KEYWORDS_TABLE"); - ret = maat_scan_string(g_maat_instance, table_id, 0, scan_data2, strlen(scan_data2), + table_id = maat_get_table_id(maat_instance, "KEYWORDS_TABLE"); + ret = maat_scan_string(maat_instance, table_id, 0, scan_data2, strlen(scan_data2), results, ARRAY_SIZE, &n_hit_result, &state); EXPECT_EQ(ret, MAAT_SCAN_HIT); EXPECT_EQ(results[0], 132); @@ -761,6 +763,7 @@ TEST_F(MaatStringScan, ExprPlusWithOffset) long long results[ARRAY_SIZE] = {0}; size_t n_hit_result = 0; struct maat_state *state = NULL; + struct maat *maat_instance = MaatStringScan::_shared_maat_instance; const char *region_name = "Payload"; unsigned char udp_payload_not_hit[] = { /* Stun packet */ 0x00, 0x03, 0x00, 0x4a, 0x21, 0x12, 0xa4, 0x42, @@ -789,17 +792,17 @@ TEST_F(MaatStringScan, ExprPlusWithOffset) 0xf6, 0x30, 0x81, 0xf4, 0x3f, 0xc2, 0x19, 0x6a, 0x68, 0x61, 0x93, 0x08, 0xc0, 0x0a }; - int table_id = maat_get_table_id(g_maat_instance, "APP_PAYLOAD"); + int table_id = maat_get_table_id(maat_instance, "APP_PAYLOAD"); ASSERT_GT(table_id, 0); - int ret = maat_state_set_scan_district(g_maat_instance, &state, region_name, strlen(region_name)); + int ret = maat_state_set_scan_district(maat_instance, &state, region_name, strlen(region_name)); EXPECT_EQ(ret, 0); - ret = maat_scan_string(g_maat_instance, table_id, 0, (char*)udp_payload_not_hit, sizeof(udp_payload_not_hit), + ret = maat_scan_string(maat_instance, table_id, 0, (char*)udp_payload_not_hit, sizeof(udp_payload_not_hit), results, ARRAY_SIZE, &n_hit_result, &state); EXPECT_EQ(ret, MAAT_SCAN_OK); - ret = maat_scan_string(g_maat_instance, table_id, 0, (char*)udp_payload_hit, sizeof(udp_payload_hit), + ret = maat_scan_string(maat_instance, table_id, 0, (char*)udp_payload_hit, sizeof(udp_payload_hit), results, ARRAY_SIZE, &n_hit_result, &state); EXPECT_EQ(ret, MAAT_SCAN_HIT); EXPECT_EQ(results[0], 148); diff --git a/test/table_info.conf b/test/table_info.conf index 4a9ea54..7ecbaee 100644 --- a/test/table_info.conf +++ b/test/table_info.conf @@ -233,7 +233,7 @@ "valid_column":8, "custom": { "scan_mode":"block", - "pattern_type":"literal", + "pattern_type":"regex", "item_id":1, "group_id":2, "district":3, diff --git a/vendor/CMakeLists.txt b/vendor/CMakeLists.txt index e79b4a3..d133a3f 100644 --- a/vendor/CMakeLists.txt +++ b/vendor/CMakeLists.txt @@ -10,9 +10,9 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall") # GoogleTest ExternalProject_Add(GoogleTest PREFIX GoogleTest - URL ${CMAKE_CURRENT_SOURCE_DIR}/googletest-release-1.8.0.tar.gz - URL_MD5 16877098823401d1bf2ed7891d7dce36 - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${VENDOR_BUILD} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) + URL ${CMAKE_CURRENT_SOURCE_DIR}/googletest-release-1.8.0.tar.gz + URL_MD5 16877098823401d1bf2ed7891d7dce36 + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${VENDOR_BUILD} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}) ExternalProject_Get_Property(GoogleTest INSTALL_DIR) file(MAKE_DIRECTORY ${VENDOR_BUILD}/include) @@ -24,26 +24,26 @@ set_property(TARGET gtest_static PROPERTY INTERFACE_LINK_LIBRARIES pthread) # colm-0.13.0.5 ExternalProject_Add(colm PREFIX colm - URL ${CMAKE_CURRENT_SOURCE_DIR}/colm-0.13.0.5.tar.gz - CONFIGURE_COMMAND ./autogen.sh && ./configure --prefix=${VENDOR_BUILD} - BUILD_COMMAND make - INSTALL_COMMAND make install - BUILD_IN_SOURCE 1) + URL ${CMAKE_CURRENT_SOURCE_DIR}/colm-0.13.0.5.tar.gz + CONFIGURE_COMMAND ./autogen.sh && ./configure --prefix=${VENDOR_BUILD} + BUILD_COMMAND make + INSTALL_COMMAND make install + BUILD_IN_SOURCE 1) # ragel-7.0.0.10 ExternalProject_Add(ragel PREFIX ragel - URL ${CMAKE_CURRENT_SOURCE_DIR}/ragel-7.0.0.10.tar.gz - CONFIGURE_COMMAND ./autogen.sh && ./configure --prefix=${VENDOR_BUILD} - DEPENDS colm - BUILD_COMMAND make - INSTALL_COMMAND make install - BUILD_IN_SOURCE 1) + URL ${CMAKE_CURRENT_SOURCE_DIR}/ragel-7.0.0.10.tar.gz + CONFIGURE_COMMAND ./autogen.sh && ./configure --prefix=${VENDOR_BUILD} --with-colm=${VENDOR_BUILD} + DEPENDS colm + BUILD_COMMAND make + INSTALL_COMMAND make install + BUILD_IN_SOURCE 1) # HyperScan 5.4.0 ExternalProject_Add(hyperscan PREFIX hyperscan - URL ${CMAKE_CURRENT_SOURCE_DIR}/hyperscan-5.4.0.tar.gz - DEPENDS ragel - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${VENDOR_BUILD} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_C_FLAGS="-fPIC" -DCMAKE_CXX_FLAGS="-fPIC") + URL ${CMAKE_CURRENT_SOURCE_DIR}/hyperscan-5.4.0.tar.gz + DEPENDS ragel + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${VENDOR_BUILD} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_C_FLAGS="-fPIC" -DCMAKE_CXX_FLAGS="-fPIC") ExternalProject_Get_Property(hyperscan INSTALL_DIR) file(MAKE_DIRECTORY ${VENDOR_BUILD}/include) @@ -60,8 +60,8 @@ set_property(TARGET hyperscan_runtime_static PROPERTY INTERFACE_INCLUDE_DIRECTOR # hiredis-1.1.0 ExternalProject_Add(hiredis PREFIX hiredis - URL ${CMAKE_CURRENT_SOURCE_DIR}/hiredis-1.1.0.tar.gz - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${VENDOR_BUILD} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_C_FLAGS="-fPIC") + URL ${CMAKE_CURRENT_SOURCE_DIR}/hiredis-1.1.0.tar.gz + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${VENDOR_BUILD} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -DCMAKE_C_FLAGS="-fPIC") ExternalProject_Get_Property(hiredis INSTALL_DIR) file(MAKE_DIRECTORY ${VENDOR_BUILD}/include) @@ -78,12 +78,12 @@ endif() #igraph-0.7.1 ExternalProject_Add(igraph PREFIX igraph - URL ${CMAKE_CURRENT_SOURCE_DIR}/igraph-0.7.1.tar.gz - URL_MD5 4f6e7c16b45fce8ed423516a9786e4e8 - CONFIGURE_COMMAND ./configure --prefix=${VENDOR_BUILD} --disable-shared --with-pic - BUILD_COMMAND make - INSTALL_COMMAND make install - BUILD_IN_SOURCE 1) + URL ${CMAKE_CURRENT_SOURCE_DIR}/igraph-0.7.1.tar.gz + URL_MD5 4f6e7c16b45fce8ed423516a9786e4e8 + CONFIGURE_COMMAND ./configure --prefix=${VENDOR_BUILD} --disable-shared --with-pic + BUILD_COMMAND make + INSTALL_COMMAND make install + BUILD_IN_SOURCE 1) ExternalProject_Get_Property(igraph INSTALL_DIR) file(MAKE_DIRECTORY ${VENDOR_BUILD}/include) diff --git a/vendor/hyperscan-5.4.0.tar.gz b/vendor/hyperscan-5.4.0.tar.gz index 415858d..67a4e18 100644 Binary files a/vendor/hyperscan-5.4.0.tar.gz and b/vendor/hyperscan-5.4.0.tar.gz differ