aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2019-08-31 21:49:22 -0400
committerAnders Broman <a.broman58@gmail.com>2019-09-01 09:04:02 +0000
commita53ec79ebc1beb75caeb1b231a6ebd021a26c2f9 (patch)
treebf314dc32ce18e74e8eec8a06d0d4be4a4c94a63
parenta94a860c0644ec3b8a129fd243674a2e376ce1c8 (diff)
SMTP: Consider bytes seen as "data" until a command is seen
Create a state for the start of an SMTP conversation. If bytes seen don't match a command and conversation is still in the "start" state, treat bytes as message data, not a command. Bug: 16026 Change-Id: I229b316a77819b07bf8cf93bed72570a947c6cf3 Reviewed-on: https://code.wireshark.org/review/34412 Reviewed-by: Michael Mann <mmann78@netscape.net> Petri-Dish: Michael Mann <mmann78@netscape.net> Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman <a.broman58@gmail.com>
-rw-r--r--epan/dissectors/packet-smtp.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/epan/dissectors/packet-smtp.c b/epan/dissectors/packet-smtp.c
index 76423e4207..096b6780cf 100644
--- a/epan/dissectors/packet-smtp.c
+++ b/epan/dissectors/packet-smtp.c
@@ -133,6 +133,7 @@ struct smtp_proto_data {
* State information stored with a conversation.
*/
typedef enum {
+ SMTP_STATE_START, /* Start of SMTP conversion */
SMTP_STATE_READING_CMDS, /* reading commands */
SMTP_STATE_READING_DATA, /* reading message data */
SMTP_STATE_AWAITING_STARTTLS_RESPONSE /* sent STARTTLS, awaiting response */
@@ -429,7 +430,7 @@ dissect_smtp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_
* No - create one and attach it.
*/
session_state = (struct smtp_session_state *)wmem_alloc0(wmem_file_scope(), sizeof(struct smtp_session_state));
- session_state->smtp_state = SMTP_STATE_READING_CMDS;
+ session_state->smtp_state = SMTP_STATE_START;
session_state->auth_state = SMTP_AUTH_STATE_NONE;
session_state->msg_last = TRUE;
@@ -727,7 +728,7 @@ dissect_smtp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_
/*
* Assume it's message data.
*/
- spd_frame_data->pdu_type = session_state->data_seen ? SMTP_PDU_MESSAGE : SMTP_PDU_CMD;
+ spd_frame_data->pdu_type = (session_state->data_seen || (session_state->smtp_state == SMTP_STATE_START)) ? SMTP_PDU_MESSAGE : SMTP_PDU_CMD;
}
}
}