From d107130cd4793a942e1410007f31d319a0723575 Mon Sep 17 00:00:00 2001 From: Ronnie Sahlberg Date: Sat, 26 Nov 2005 03:06:21 +0000 Subject: [PATCH] many commands return a short 8 byte pdu when errors occur. make ethereal handle these better instead of showing them as unreassembled packet svn path=/trunk/; revision=16598 --- epan/dissectors/packet-smb2.c | 171 +++++++++++++++++++++------------- 1 file changed, 106 insertions(+), 65 deletions(-) diff --git a/epan/dissectors/packet-smb2.c b/epan/dissectors/packet-smb2.c index b2c4c44e5d..4d51ff633a 100644 --- a/epan/dissectors/packet-smb2.c +++ b/epan/dissectors/packet-smb2.c @@ -112,7 +112,7 @@ static int hf_smb2_file_position_info = -1; static int hf_smb2_file_info_0f = -1; static int hf_smb2_file_mode_info = -1; static int hf_smb2_file_alignment_info = -1; -static int hf_smb2_file_info_12 = -1; +static int hf_smb2_file_all_info = -1; static int hf_smb2_file_info_15 = -1; static int hf_smb2_file_info_16 = -1; static int hf_smb2_file_info_1c = -1; @@ -169,7 +169,7 @@ static gint ett_smb2_file_access_info = -1; static gint ett_smb2_file_position_info = -1; static gint ett_smb2_file_mode_info = -1; static gint ett_smb2_file_alignment_info = -1; -static gint ett_smb2_file_info_12 = -1; +static gint ett_smb2_file_all_info = -1; static gint ett_smb2_file_info_15 = -1; static gint ett_smb2_file_info_16 = -1; static gint ett_smb2_file_info_1c = -1; @@ -216,7 +216,7 @@ static const value_string smb2_class_vals[] = { #define SMB2_FILE_INFO_0f 0x0f #define SMB2_FILE_MODE_INFO 0x10 #define SMB2_FILE_ALIGNMENT_INFO 0x11 -#define SMB2_FILE_INFO_12 0x12 +#define SMB2_FILE_ALL_INFO 0x12 #define SMB2_FILE_INFO_15 0x15 #define SMB2_FILE_INFO_16 0x16 #define SMB2_FILE_INFO_1c 0x1c @@ -484,9 +484,15 @@ dissect_smb2_olb_buffer(packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *t return; } - if(parent_tree){ - sub_item = proto_tree_add_item(parent_tree, olb->hfindex, tvb, offset, len, TRUE); - sub_tree = proto_item_add_subtree(sub_item, ett_smb2_olb); + /* if we dont want/need a subtree */ + if(olb->hfindex==-1){ + sub_item=parent_tree; + sub_tree=parent_tree; + } else { + if(parent_tree){ + sub_item = proto_tree_add_item(parent_tree, olb->hfindex, tvb, offset, len, TRUE); + sub_tree = proto_item_add_subtree(sub_item, ett_smb2_olb); + } } switch(olb->offset_size){ @@ -517,7 +523,7 @@ dissect_smb2_olb_buffer(packet_info *pinfo, proto_tree *parent_tree, tvbuff_t *t return; } - sub_tvb=tvb_new_subset(tvb, off, len, len); + sub_tvb=tvb_new_subset(tvb, off, MIN((int)len, tvb_length_remaining(tvb, off)), len); dissector(sub_tvb, pinfo, sub_tree, si); @@ -615,7 +621,7 @@ dissect_smb2_fid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset * SMB_FILE_ALL_INFO in SMB */ static int -dissect_smb2_file_info_12(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *parent_tree, int offset, smb2_info_t *si _U_) +dissect_smb2_file_all_info(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *parent_tree, int offset, smb2_info_t *si _U_) { proto_item *item=NULL; proto_tree *tree=NULL; @@ -624,8 +630,8 @@ dissect_smb2_file_info_12(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *par guint16 bc; if(parent_tree){ - item = proto_tree_add_item(parent_tree, hf_smb2_file_info_12, tvb, offset, -1, TRUE); - tree = proto_item_add_subtree(item, ett_smb2_file_info_12); + item = proto_tree_add_item(parent_tree, hf_smb2_file_all_info, tvb, offset, -1, TRUE); + tree = proto_item_add_subtree(item, ett_smb2_file_all_info); } /* create time */ @@ -1311,7 +1317,7 @@ dissect_smb2_create_flags(proto_tree *parent_tree, tvbuff_t *tvb, int offset) } static int -dissect_smb2_buffercode(proto_tree *tree, tvbuff_t *tvb, int offset) +dissect_smb2_buffercode(proto_tree *tree, tvbuff_t *tvb, int offset, guint16 *length) { guint16 buffer_code; @@ -1320,6 +1326,10 @@ dissect_smb2_buffercode(proto_tree *tree, tvbuff_t *tvb, int offset) proto_tree_add_uint(tree, hf_smb2_buffer_code_len, tvb, offset, 2, buffer_code&0xfffe); proto_tree_add_item(tree, hf_smb2_buffer_code_flags_dyn, tvb, offset, 2, TRUE); offset += 2; + + if(length){ + *length=buffer_code&0xfffe; + } return offset; } @@ -1337,7 +1347,7 @@ dissect_smb2_session_setup_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree offset_length_buffer_t s_olb; /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, NULL); /* some unknown bytes */ proto_tree_add_item(tree, hf_smb2_unknown, tvb, offset, 2, TRUE); offset += 2; @@ -1363,7 +1373,7 @@ dissect_smb2_session_setup_response(tvbuff_t *tvb, packet_info *pinfo, proto_tre offset_length_buffer_t s_olb; /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, NULL); /* some unknown bytes */ proto_tree_add_item(tree, hf_smb2_unknown, tvb, offset, 2, TRUE); offset += 2; @@ -1386,7 +1396,7 @@ dissect_smb2_tree_connect_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree const char *buf; /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, NULL); /* some unknown bytes */ proto_tree_add_item(tree, hf_smb2_unknown, tvb, offset, 2, TRUE); @@ -1419,7 +1429,7 @@ static int dissect_smb2_tree_connect_response(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, smb2_info_t *si _U_) { /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, NULL); /* some unknown bytes */ proto_tree_add_item(tree, hf_smb2_unknown, tvb, offset, 2, TRUE); offset += 2; @@ -1466,7 +1476,7 @@ static int dissect_smb2_tree_disconnect_request(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, smb2_info_t *si _U_) { /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, NULL); /* some unknown bytes */ proto_tree_add_item(tree, hf_smb2_unknown, tvb, offset, 2, TRUE); @@ -1479,7 +1489,7 @@ static int dissect_smb2_tree_disconnect_response(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, smb2_info_t *si _U_) { /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, NULL); /* some unknown bytes */ proto_tree_add_item(tree, hf_smb2_unknown, tvb, offset, 2, TRUE); @@ -1492,7 +1502,7 @@ static int dissect_smb2_logoff_request(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, smb2_info_t *si _U_) { /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, NULL); /* some unknown bytes */ proto_tree_add_item(tree, hf_smb2_unknown, tvb, offset, 2, TRUE); @@ -1505,7 +1515,7 @@ static int dissect_smb2_logoff_response(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, smb2_info_t *si _U_) { /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, NULL); /* some unknown bytes */ proto_tree_add_item(tree, hf_smb2_unknown, tvb, offset, 2, TRUE); @@ -1518,7 +1528,7 @@ static int dissect_smb2_keepalive_request(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, smb2_info_t *si _U_) { /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, NULL); /* some unknown bytes */ proto_tree_add_item(tree, hf_smb2_unknown, tvb, offset, 2, TRUE); @@ -1531,7 +1541,7 @@ static int dissect_smb2_keepalive_response(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, smb2_info_t *si _U_) { /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, NULL); /* some unknown bytes */ proto_tree_add_item(tree, hf_smb2_unknown, tvb, offset, 2, TRUE); @@ -1544,7 +1554,7 @@ static int dissect_smb2_notify_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, smb2_info_t *si) { /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, NULL); /* some unknown bytes */ proto_tree_add_item(tree, hf_smb2_unknown, tvb, offset, 2, TRUE); offset += 2; @@ -1570,7 +1580,7 @@ static int dissect_smb2_notify_response(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, smb2_info_t *si) { /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, NULL); /* some unknown bytes */ proto_tree_add_item(tree, hf_smb2_unknown, tvb, offset, 2, TRUE); @@ -1607,7 +1617,7 @@ dissect_smb2_find_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, i const char *buf; /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, NULL); /* some unknown bytes */ proto_tree_add_item(tree, hf_smb2_unknown, tvb, offset, 2, TRUE); offset += 2; @@ -1643,7 +1653,7 @@ dissect_smb2_find_response(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tr guint32 len; /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, NULL); /* response buffer offset */ proto_tree_add_item(tree, hf_smb2_response_buffer_offset, tvb, offset, 2, TRUE); @@ -1664,7 +1674,7 @@ dissect_smb2_negotiate_protocol_response(tvbuff_t *tvb, packet_info *pinfo, prot offset_length_buffer_t s_olb; /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, NULL); /* some unknown bytes */ proto_tree_add_item(tree, hf_smb2_unknown, tvb, offset, 2, TRUE); offset += 2; @@ -1747,7 +1757,7 @@ static int dissect_smb2_getinfo_request(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, smb2_info_t *si) { /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, NULL); /* class */ if(si->saved){ @@ -1827,8 +1837,8 @@ dissect_smb2_infolevel(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, case SMB2_FILE_ALIGNMENT_INFO: dissect_smb2_file_alignment_info(tvb, pinfo, tree, offset, si); break; - case SMB2_FILE_INFO_12: - dissect_smb2_file_info_12(tvb, pinfo, tree, offset, si); + case SMB2_FILE_ALL_INFO: + dissect_smb2_file_all_info(tvb, pinfo, tree, offset, si); break; case SMB2_FILE_INFO_15: dissect_smb2_file_info_15(tvb, pinfo, tree, offset, si); @@ -1897,20 +1907,28 @@ dissect_smb2_infolevel(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, } } +static void +dissect_smb2_getinfo_response_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, smb2_info_t *si) +{ + /* data */ + if(si->saved){ + dissect_smb2_infolevel(tvb, pinfo, tree, 0, si, si->saved->class, si->saved->infolevel); + } else { + /* some unknown bytes */ + proto_tree_add_item(tree, hf_smb2_unknown, tvb, 0, tvb_length(tvb), FALSE); + } + + return; +} + static int dissect_smb2_getinfo_response(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, smb2_info_t *si) { guint8 class=0; guint8 infolevel=0; - guint32 response_size; - - /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); - - /* response buffer offset */ - proto_tree_add_item(tree, hf_smb2_response_buffer_offset, tvb, offset, 2, TRUE); - offset += 2; + guint16 len; + offset_length_buffer_t olb; /* class/infolevel */ if(si->saved){ @@ -1925,12 +1943,13 @@ dissect_smb2_getinfo_response(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre PROTO_ITEM_SET_GENERATED(item); } - /* response size */ - response_size=tvb_get_letohl(tvb,offset); - proto_tree_add_item(tree, hf_smb2_response_size, tvb, offset, 4, TRUE); - offset += 4; + /* buffer code */ + offset = dissect_smb2_buffercode(tree, tvb, offset, &len); - /* if we get BUFFET_TOO_SMALL there will not be any data there, only + /* response buffer offset and size */ + offset = dissect_smb2_olb_length_offset(tvb, offset, &olb, OLB_O_UINT16_S_UINT32, -1); + + /* if we get BUFFER_TOO_SMALL there will not be any data there, only * a guin32 specifying how big the buffer needs to be */ if(si->status==0xc0000023){ @@ -1940,9 +1959,9 @@ dissect_smb2_getinfo_response(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tre return offset; } - /* data */ - dissect_smb2_infolevel(tvb, pinfo, tree, offset, si, class, infolevel); - offset += response_size; + + /* response data*/ + dissect_smb2_olb_buffer(pinfo, tree, tvb, &olb, si, dissect_smb2_getinfo_response_data); return offset; } @@ -1951,7 +1970,7 @@ static int dissect_smb2_close_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, smb2_info_t *si) { /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, NULL); /* close flags */ proto_tree_add_item(tree, hf_smb2_close_flags, tvb, offset, 2, TRUE); @@ -1969,8 +1988,10 @@ dissect_smb2_close_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, static int dissect_smb2_close_response(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, smb2_info_t *si _U_) { + guint16 len; + /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, &len); /* close flags */ proto_tree_add_item(tree, hf_smb2_close_flags, tvb, offset, 2, TRUE); @@ -1980,6 +2001,12 @@ dissect_smb2_close_response(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *t proto_tree_add_item(tree, hf_smb2_unknown, tvb, offset, 4, TRUE); offset += 4; + /* If there was an error, the response will be just 8 bytes */ + if((len==8)&&(si->status)){ + return offset; + } + + /* create time */ offset = dissect_nt_64bit_time(tvb, tree, offset, hf_smb2_create_timestamp); @@ -2010,7 +2037,7 @@ static int dissect_smb2_flush_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, smb2_info_t *si) { /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, NULL); /* some unknown bytes */ proto_tree_add_item(tree, hf_smb2_unknown, tvb, offset, 6, TRUE); @@ -2026,7 +2053,7 @@ static int dissect_smb2_flush_response(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, smb2_info_t *si _U_) { /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, NULL); /* some unknown bytes */ proto_tree_add_item(tree, hf_smb2_unknown, tvb, offset, 2, TRUE); @@ -2040,7 +2067,7 @@ static int dissect_smb2_lock_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, smb2_info_t *si) { /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, NULL); /* some unknown bytes */ proto_tree_add_item(tree, hf_smb2_unknown, tvb, offset, 6, TRUE); @@ -2064,7 +2091,7 @@ static int dissect_smb2_lock_response(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, smb2_info_t *si _U_) { /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, NULL); /* some unknown bytes */ proto_tree_add_item(tree, hf_smb2_unknown, tvb, offset, 2, TRUE); @@ -2076,7 +2103,7 @@ static int dissect_smb2_cancel_request(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, smb2_info_t *si _U_) { /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, NULL); /* some unknown bytes */ proto_tree_add_item(tree, hf_smb2_unknown, tvb, offset, 2, TRUE); @@ -2113,7 +2140,7 @@ dissect_smb2_write_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint64 off; /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, NULL); /* data offset */ proto_tree_add_item(tree, hf_smb2_data_offset, tvb, offset, 2, TRUE); @@ -2159,7 +2186,7 @@ static int dissect_smb2_write_response(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, int offset, smb2_info_t *si _U_) { /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, NULL); /* some unknown bytes */ proto_tree_add_item(tree, hf_smb2_unknown, tvb, offset, 2, TRUE); offset += 2; @@ -2191,7 +2218,7 @@ dissect_smb2_transaction_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree * offset_length_buffer_t i_olb; /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, NULL); /* some unknown bytes */ proto_tree_add_item(tree, hf_smb2_unknown, tvb, offset, 6, TRUE); @@ -2245,14 +2272,21 @@ dissect_smb2_transaction_response(tvbuff_t *tvb, packet_info *pinfo, proto_tree { offset_length_buffer_t o_olb; offset_length_buffer_t i_olb; + guint16 len; /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, &len); /* some unknown bytes */ proto_tree_add_item(tree, hf_smb2_unknown, tvb, offset, 6, TRUE); offset += 6; + /* If there was an error, the response will be just 8 bytes */ + if((len==8)&&(si->status)){ + return offset; + } + + /* fid */ offset = dissect_smb2_fid(tvb, pinfo, tree, offset, si, FID_MODE_USE); @@ -2296,7 +2330,7 @@ dissect_smb2_read_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, i guint64 off; /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, NULL); /* some unknown bytes */ proto_tree_add_item(tree, hf_smb2_unknown, tvb, offset, 2, TRUE); offset += 2; @@ -2336,7 +2370,7 @@ dissect_smb2_read_response(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 length; /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, NULL); /* data offset */ proto_tree_add_item(tree, hf_smb2_data_offset, tvb, offset, 2, TRUE); @@ -2477,7 +2511,7 @@ dissect_smb2_create_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, const char *fname; /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, NULL); /* create flags */ offset = dissect_smb2_create_flags(tree, tvb, offset); @@ -2550,9 +2584,10 @@ static int dissect_smb2_create_response(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, smb2_info_t *si) { offset_length_buffer_t e_olb; + guint16 len; /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, &len); /* create flags */ offset = dissect_smb2_create_flags(tree, tvb, offset); @@ -2561,6 +2596,12 @@ dissect_smb2_create_response(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree proto_tree_add_item(tree, hf_smb2_create_action, tvb, offset, 4, TRUE); offset += 4; + /* If there was an error, the response will be just 8 bytes */ + if((len==8)&&(si->status)){ + return offset; + } + + /* create time */ offset = dissect_nt_64bit_time(tvb, tree, offset, hf_smb2_create_timestamp); @@ -2616,7 +2657,7 @@ dissect_smb2_setinfo_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree guint32 response_size; /* buffer code */ - offset = dissect_smb2_buffercode(tree, tvb, offset); + offset = dissect_smb2_buffercode(tree, tvb, offset, NULL); /* class/level only meaningful in requests */ if(!si->response){ @@ -3684,9 +3725,9 @@ proto_register_smb2(void) { "Last Change", "smb2.last_change.time", FT_ABSOLUTE_TIME, BASE_NONE, NULL, 0, "Time when this object was last changed", HFILL }}, - { &hf_smb2_file_info_12, - { "SMB2_FILE_INFO_12", "smb2.smb2_file_info_12", FT_NONE, BASE_NONE, - NULL, 0, "SMB2_FILE_INFO_12 structure", HFILL }}, + { &hf_smb2_file_all_info, + { "SMB2_FILE_ALL_INFO", "smb2.smb2_file_all_info", FT_NONE, BASE_NONE, + NULL, 0, "SMB2_FILE_ALL_INFO structure", HFILL }}, { &hf_smb2_file_info_15, { "SMB2_FILE_INFO_15", "smb2.smb2_file_info_15", FT_NONE, BASE_NONE, @@ -3928,7 +3969,7 @@ proto_register_smb2(void) &ett_smb2_file_info_0f, &ett_smb2_file_mode_info, &ett_smb2_file_alignment_info, - &ett_smb2_file_info_12, + &ett_smb2_file_all_info, &ett_smb2_file_info_15, &ett_smb2_file_info_16, &ett_smb2_file_info_1c,