aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLuca Deri <deri@ntop.org>2019-10-08 11:36:11 +0200
committerLuca Deri <deri@ntop.org>2019-10-08 11:36:11 +0200
commit256858d2e5d9db3777ccb113ed75bcd836fc8d16 (patch)
treedd21dffc7510f2fe4989676732511bbb911230f2 /src
parent10873bfe3564b52561f692400ad51fc9923e0b14 (diff)
parente939f1c1d1bfa744d430e64305010bf918c5dfbe (diff)
Merge branch 'dev' of https://github.com/ntop/nDPI into dev
Diffstat (limited to 'src')
-rw-r--r--src/include/ndpi_api.h4
-rw-r--r--src/lib/ndpi_main.c46
2 files changed, 25 insertions, 25 deletions
diff --git a/src/include/ndpi_api.h b/src/include/ndpi_api.h
index 25318c9cd..e5c52610e 100644
--- a/src/include/ndpi_api.h
+++ b/src/include/ndpi_api.h
@@ -745,9 +745,9 @@ extern "C" {
int ndpi_match_string(void *_automa, char *string_to_match);
void ndpi_load_ip_category(struct ndpi_detection_module_struct *ndpi_struct,
- char *ip_address_and_mask, ndpi_protocol_category_t category);
+ const char *ip_address_and_mask, ndpi_protocol_category_t category);
int ndpi_load_hostname_category(struct ndpi_detection_module_struct *ndpi_struct,
- char *name, ndpi_protocol_category_t category);
+ const char *name_to_add, ndpi_protocol_category_t category);
int ndpi_enable_loaded_categories(struct ndpi_detection_module_struct *ndpi_struct);
int ndpi_fill_ip_protocol_category(struct ndpi_detection_module_struct *ndpi_struct,
u_int32_t saddr,
diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c
index 5606875f6..cc1d48f7b 100644
--- a/src/lib/ndpi_main.c
+++ b/src/lib/ndpi_main.c
@@ -2411,10 +2411,10 @@ void ndpi_exit_detection_module(struct ndpi_detection_module_struct *ndpi_str) {
free_hyperscan_memory(ndpi_str->custom_categories.hostnames);
#else
if(ndpi_str->custom_categories.hostnames.ac_automa != NULL)
- ac_automata_release((AC_AUTOMATA_t*)ndpi_str->custom_categories.hostnames.ac_automa, 0);
+ ac_automata_release((AC_AUTOMATA_t*)ndpi_str->custom_categories.hostnames.ac_automa, 1 /* free patterns strings memory */);
if(ndpi_str->custom_categories.hostnames_shadow.ac_automa != NULL)
- ac_automata_release((AC_AUTOMATA_t*)ndpi_str->custom_categories.hostnames_shadow.ac_automa, 0);
+ ac_automata_release((AC_AUTOMATA_t*)ndpi_str->custom_categories.hostnames_shadow.ac_automa, 1 /* free patterns strings memory */);
#endif
if(ndpi_str->custom_categories.ipAddresses != NULL)
@@ -4232,7 +4232,7 @@ void ndpi_process_extra_packet(struct ndpi_detection_module_struct *ndpi_str,
/* ********************************************************************************* */
void ndpi_load_ip_category(struct ndpi_detection_module_struct *ndpi_str,
- char *ip_address_and_mask, ndpi_protocol_category_t category) {
+ const char *ip_address_and_mask, ndpi_protocol_category_t category) {
patricia_node_t *node;
struct in_addr pin;
int bits = 32;
@@ -4262,16 +4262,14 @@ void ndpi_load_ip_category(struct ndpi_detection_module_struct *ndpi_str,
/* ********************************************************************************* */
-/*
- *
- * IMPORTANT
- *
- * The *name pointer MUST be kept allocated until the automa is finalized and it
- * cannot be recycled across multiple ndpi_load_hostname_category() calls
- *
- */
int ndpi_load_hostname_category(struct ndpi_detection_module_struct *ndpi_str,
- char *name, ndpi_protocol_category_t category) {
+ const char *name_to_add, ndpi_protocol_category_t category) {
+ char *name;
+
+ if(name_to_add == NULL)
+ return(-1);
+
+ name = ndpi_strdup(name_to_add);
if(name == NULL)
return(-1);
@@ -4285,30 +4283,32 @@ int ndpi_load_hostname_category(struct ndpi_detection_module_struct *ndpi_str,
struct hs_list *h = (struct hs_list*)ndpi_malloc(sizeof(struct hs_list));
if(h) {
- h->expression = ndpi_strdup(name), h->id = (unsigned int)category;
- if(h->expression == NULL) {
- ndpi_free(h);
- return(-2);
- }
-
+ h->expression = name, h->id = (unsigned int)category;
h->next = ndpi_str->custom_categories.to_load;
ndpi_str->custom_categories.to_load = h;
ndpi_str->custom_categories.num_to_load++;
- } else
- return(-1);
+ } else {
+ free(name);
+ return(-1);
+ }
}
#else
AC_PATTERN_t ac_pattern;
memset(&ac_pattern, 0, sizeof(ac_pattern));
- if(ndpi_str->custom_categories.hostnames_shadow.ac_automa == NULL)
+ if(ndpi_str->custom_categories.hostnames_shadow.ac_automa == NULL) {
+ free(name);
return(-1);
+ }
ac_pattern.astring = name, ac_pattern.length = strlen(ac_pattern.astring);
ac_pattern.rep.number = (int)category;
- ac_automata_add(ndpi_str->custom_categories.hostnames_shadow.ac_automa, &ac_pattern);
+ if(ac_automata_add(ndpi_str->custom_categories.hostnames_shadow.ac_automa, &ac_pattern) != ACERR_SUCCESS) {
+ free(name);
+ return(-1);
+ }
#endif
return(0);
@@ -4397,7 +4397,7 @@ int ndpi_enable_loaded_categories(struct ndpi_detection_module_struct *ndpi_str)
}
#else
/* Free */
- ac_automata_release((AC_AUTOMATA_t*)ndpi_str->custom_categories.hostnames.ac_automa, 0);
+ ac_automata_release((AC_AUTOMATA_t*)ndpi_str->custom_categories.hostnames.ac_automa, 1 /* free patterns strings memory */);
/* Finalize */
ac_automata_finalize((AC_AUTOMATA_t*)ndpi_str->custom_categories.hostnames_shadow.ac_automa);