aboutsummaryrefslogtreecommitdiff
path: root/src/lib/protocols/tls.c
diff options
context:
space:
mode:
authorLuca Deri <deri@ntop.org>2022-07-05 17:00:21 +0200
committerLuca Deri <deri@ntop.org>2022-07-05 17:00:21 +0200
commit52d987b603f49d996b4060f43265d1cf43c3c482 (patch)
tree4abbf53d86796fbfc92badb798bc51ef050951fb /src/lib/protocols/tls.c
parentf4a1739f9c950963f94915916d0a9f088a803abc (diff)
SMTP with STARTTLS is now identified as SMTPS
Diffstat (limited to 'src/lib/protocols/tls.c')
-rw-r--r--src/lib/protocols/tls.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/src/lib/protocols/tls.c b/src/lib/protocols/tls.c
index 69bec44f5..5cd74c0df 100644
--- a/src/lib/protocols/tls.c
+++ b/src/lib/protocols/tls.c
@@ -855,7 +855,10 @@ int processTLSBlock(struct ndpi_detection_module_struct *ndpi_struct,
case 0x02: /* Server Hello */
processClientServerHello(ndpi_struct, flow, 0);
flow->protos.tls_quic.hello_processed = 1;
- ndpi_int_tls_add_connection(ndpi_struct, flow, NDPI_PROTOCOL_TLS);
+
+ ndpi_int_tls_add_connection(ndpi_struct, flow,
+ /* Check if this is a SMTP connection with STARTTLS or TLS */
+ (flow->l4.tcp.smtp_command_bitmask & SMTP_BIT_STARTTLS) ? NDPI_PROTOCOL_MAIL_SMTPS : NDPI_PROTOCOL_TLS);
#ifdef DEBUG_TLS
printf("*** TLS [version: %02X][%s Hello]\n",
@@ -1243,7 +1246,8 @@ static void tlsCheckUncommonALPN(struct ndpi_detection_module_struct *ndpi_struc
static void ndpi_int_tls_add_connection(struct ndpi_detection_module_struct *ndpi_struct,
struct ndpi_flow_struct *flow, u_int32_t protocol) {
struct ndpi_packet_struct *packet = &ndpi_struct->packet;
-
+ u_int16_t upper_detected_protocol;
+
#if DEBUG_TLS
printf("[TLS] %s()\n", __FUNCTION__);
#endif
@@ -1258,12 +1262,17 @@ static void ndpi_int_tls_add_connection(struct ndpi_detection_module_struct *ndp
return;
}
- if(protocol != NDPI_PROTOCOL_TLS)
- ;
- else
+ if(protocol != NDPI_PROTOCOL_TLS) {
+ if(flow->l4.tcp.smtp_command_bitmask & SMTP_BIT_STARTTLS)
+ upper_detected_protocol = flow->detected_protocol_stack[0];
+ else
+ upper_detected_protocol = protocol;
+ } else {
protocol = ndpi_tls_refine_master_protocol(ndpi_struct, flow, protocol);
-
- ndpi_set_detected_protocol(ndpi_struct, flow, protocol, protocol, NDPI_CONFIDENCE_DPI);
+ upper_detected_protocol = protocol;
+ }
+
+ ndpi_set_detected_protocol(ndpi_struct, flow, upper_detected_protocol, protocol, NDPI_CONFIDENCE_DPI);
tlsInitExtraPacketProcessing(ndpi_struct, flow);
}