diff options
author | Vitaly Lavrov <vel21ripn@gmail.com> | 2024-02-05 21:44:45 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-05 19:44:45 +0100 |
commit | 4543385d107fcc5a7e8632e35d9a60bcc40cb4f4 (patch) | |
tree | 1832253db2bbfaef1949a879f3fe8a781977166f /src/lib/ndpi_main.c | |
parent | a4da4467ace84aa7dba718a94b0714aeb101ed9a (diff) |
Normalization of host_server_name (#2299)
* Normalization of host_server_name
The ndpi_hostname_sni_set() function replaces all non-printable
characters with the "?" character and removing whitespace characters
at the end of the line.
* Added conditional hostname normalization.
Diffstat (limited to 'src/lib/ndpi_main.c')
-rw-r--r-- | src/lib/ndpi_main.c | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 53242d988..7b582b347 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -10580,16 +10580,38 @@ ndpi_risk_info* ndpi_risk2severity(ndpi_risk_enum risk) { /* ******************************************************************** */ char *ndpi_hostname_sni_set(struct ndpi_flow_struct *flow, - const u_int8_t *value, size_t value_len) { + const u_int8_t *value, size_t value_len, + int normalize) { char *dst; size_t len, i; len = ndpi_min(value_len, sizeof(flow->host_server_name) - 1); dst = flow->host_server_name; - for(i = 0; i < len; i++) - dst[i] = tolower(value[value_len - len + i]); - dst[i] = '\0'; + if(!normalize) { + memcpy(dst,&value[value_len - len],len); + dst[len] = '\0'; + } else { + for(i = 0; i < len; i++) { + char c = value[value_len - len + i]; + if(!c) break; + if(normalize & NDPI_HOSTNAME_NORM_LC) c = tolower(c); + if(normalize & NDPI_HOSTNAME_NORM_REPLACE_IC) { + if (c == '\t') c = ' '; + if (ndpi_isprint(c) == 0) + c = '?'; + } + dst[i] = c; + } + + dst[i] = '\0'; + if(normalize & NDPI_HOSTNAME_NORM_STRIP_EOLSP) { + /* Removing spaces at the end of a line */ + while(i > 0 && dst[i-1] == ' ') + dst[--i] = '\0'; + } + } + return dst; } |