summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorzhengchao <[email protected]>2019-07-05 00:35:03 +0600
committerzhengchao <[email protected]>2019-07-11 17:05:39 +0800
commit91faf9dcc6063ee7510a6c74f83a15550703b936 (patch)
tree826965a0c9b0ff03d627c254da6656e7b532b05a /tools
parente12059c0aad69ae650bdfd7bd067671914c29e51 (diff)
增加maat_debug_tool.
Diffstat (limited to 'tools')
-rw-r--r--tools/CMakeLists.txt5
-rw-r--r--tools/maat_debug_tool.cpp174
2 files changed, 179 insertions, 0 deletions
diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt
index bbfd508..e235b8b 100644
--- a/tools/CMakeLists.txt
+++ b/tools/CMakeLists.txt
@@ -8,4 +8,9 @@ target_link_libraries(maat_redis_tool maat_frame_static ${MAAT_DEPEND_DYN_LIB})
target_include_directories(maat_redis_tool PRIVATE ${PROJECT_SOURCE_DIR}/src/inc_internal/)
target_include_directories(maat_redis_tool PRIVATE hiredis-vip-static)
+add_executable(maat_debug_tool maat_debug_tool.cpp)
+add_dependencies(maat_debug_tool maat_frame_shared)
+target_link_libraries(maat_debug_tool maat_frame_static ${MAAT_DEPEND_DYN_LIB})
+target_include_directories(maat_debug_tool PRIVATE ${PROJECT_SOURCE_DIR}/src/inc_internal/)
+
install(TARGETS maat_redis_tool DESTINATION /usr/local/bin/)
diff --git a/tools/maat_debug_tool.cpp b/tools/maat_debug_tool.cpp
new file mode 100644
index 0000000..5b8d3be
--- /dev/null
+++ b/tools/maat_debug_tool.cpp
@@ -0,0 +1,174 @@
+#include "Maat_rule.h"
+#include "Maat_command.h"
+#include <MESA/MESA_handle_logger.h>
+
+#include <stdio.h> /* for printf */
+#include <stdlib.h> /* for exit */
+#include <getopt.h>
+#include <sys/stat.h>
+
+
+int debug_maat_str_scan(Maat_feather_t feather, const char* table_name, const char* district, char* data, size_t sz)
+{
+ int table_id=0,ret=0;
+ int i=0;
+ int scan_result_max=64;
+ struct Maat_rule_t result[scan_result_max];
+ scan_status_t mid=NULL;
+
+
+ table_id=Maat_table_register(feather, table_name);
+ if(table_id<0)
+ {
+ printf("Unkown table %s\n", table_name);
+ }
+
+ struct Maat_hit_detail_t *hit_detail=(struct Maat_hit_detail_t *)malloc(sizeof(struct Maat_hit_detail_t)*10);
+
+ enum MAAT_CHARSET maat_charset=CHARSET_UTF8;
+
+ if(strlen(district)>0)
+ {
+ ret=Maat_set_scan_status(feather, &mid, MAAT_SET_SCAN_DISTRICT, district, strlen(district));
+ }
+
+ ret=Maat_full_scan_string(feather, table_id, maat_charset, data, sz,
+ result, NULL, scan_result_max,
+ &mid, 0);
+ printf("Scan table %s ", table_name);
+ if(ret==-1)
+ {
+ printf("error.\n");
+ }
+ else if(ret==-2)
+ {
+ printf("hits group, but not compile.\n");
+ }
+ else if(ret==0)
+ {
+ printf("not hit.");
+ }
+ else
+ {
+ printf("hits ");
+ for(i=0; i<ret; i++)
+ {
+ printf("%d, ", result[i].config_id);
+ }
+ }
+ printf("\n");
+
+ free(hit_detail);
+ Maat_clean_status(&mid);
+ return 0;
+}
+enum tool_arg_type{
+ ARG_TABLE_INFO=0,
+ ARG_TABLE_NAME,
+ ARG_SCAN_FILE,
+ ARG_SCAN_STRING,
+ ARG_SCAN_DISTRICT,
+ ARG_SCAN_CHARSET,
+ ARG_INPUT_JSON,
+ ARG_DECRYPT_KEY,
+ ARG_ACCEPT_TAGS,
+ __ARG_MAX
+};
+
+int main(int argc, char ** argv)
+{
+ FILE* fp=NULL;
+ char* file_buff=NULL;
+ size_t file_size=0;
+ struct stat file_info;
+ char arg_value[__ARG_MAX][1024];
+ memset(arg_value, 0, sizeof(arg_value));
+ if(argc<2)
+ {
+ return 0;
+ }
+ int c=0;
+ while (1) {
+ int option_index = 0;
+ static struct option long_options[]={
+ {"table-info", required_argument, 0, 0},
+ {"table-name", required_argument, 0, 0},
+ {"scan-file", optional_argument, 0, 0},
+ {"scan-string", optional_argument, 0, 0},
+ {"scan-district", optional_argument, 0, 0},
+ {"scan-charset", optional_argument, 0, 0},
+ {"maat-json", required_argument, 0, 0},
+ {"decrypt-key", optional_argument, 0, 0},
+ {"accept-tags", optional_argument, 0, 0},
+ {0, 0, 0, 0}
+ };
+
+ c = getopt_long(argc, argv, "ab", long_options, &option_index);
+ if (c == -1)
+ break;
+ if(c!=0)
+ {
+ printf("Invalid parameter, long options only.\n");
+ }
+ else
+ {
+ strcpy(arg_value[option_index], optarg);
+ }
+ }
+
+ const char* log_file="./test.log";
+ int scan_detail=0, ret=0;
+ Maat_feather_t feather=NULL;
+ void *g_logger=NULL;
+
+ g_logger=MESA_create_runtime_log_handle(log_file, 0);
+
+ feather=Maat_feather(4, arg_value[ARG_TABLE_INFO], g_logger);
+ Maat_set_feather_opt(feather, MAAT_OPT_INSTANCE_NAME, "debugtool", strlen("debugtool")+1);
+ if(strlen(arg_value[ARG_DECRYPT_KEY])>0)
+ {
+ Maat_set_feather_opt(feather, MAAT_OPT_DECRYPT_KEY, arg_value[ARG_DECRYPT_KEY], strlen(arg_value[ARG_DECRYPT_KEY])+1);
+ }
+ if(strlen(arg_value[ARG_ACCEPT_TAGS])>0)
+ {
+ Maat_set_feather_opt(feather, MAAT_OPT_ACCEPT_TAGS, arg_value[ARG_ACCEPT_TAGS], strlen(arg_value[ARG_ACCEPT_TAGS])+1);
+ }
+ ret=Maat_set_feather_opt(feather, MAAT_OPT_JSON_FILE_PATH, arg_value[ARG_INPUT_JSON], strlen(arg_value[ARG_INPUT_JSON])+1);
+ if(ret!=0)
+ {
+ printf("Read %s failed, invalid maat json.\n", arg_value[ARG_INPUT_JSON]);
+ ret=-1;
+ goto clean_up;
+ }
+ Maat_set_feather_opt(feather, MAAT_OPT_SCAN_DETAIL, &scan_detail, sizeof(scan_detail));
+ Maat_initiate_feather(feather);
+
+ if(strlen(arg_value[ARG_SCAN_FILE])>0)
+ {
+
+ if(stat(arg_value[ARG_SCAN_FILE], &file_info)<0)
+ {
+ printf("Stat %s failed.\n", arg_value[ARG_SCAN_FILE]);
+ goto clean_up;
+ }
+ file_size=file_info.st_size;
+ fp=fopen(arg_value[ARG_SCAN_FILE], "r");
+ if(fp==NULL)
+ {
+ printf("Open %s failed.\n", arg_value[ARG_SCAN_FILE]);
+ goto clean_up;
+ }
+ file_buff=(char*)malloc(file_size);
+ fread(file_buff,1,file_size,fp);
+ fclose(fp);
+
+ debug_maat_str_scan(feather, arg_value[ARG_TABLE_NAME], arg_value[ARG_SCAN_DISTRICT], file_buff, file_size);
+ free(file_buff);
+ }
+clean_up:
+ Maat_burn_feather(feather);
+ MESA_destroy_runtime_log_handle(g_logger);
+ return ret;
+}
+
+