Ethereal-dev: [Ethereal-dev] packet-smb.c
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: "Pia Sahlberg" <piabar@xxxxxxxxxxx>
Date: Sat, 11 Aug 2001 00:28:17 +0000
Hi list, Third patch for packet-smb.c This patch require the previous two. This patch tvbuffifies the SMB QUERY INFORMATION (0x08) call. best regards ronnie sahlberg _________________________________________________________________ Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.aspdiff -u -r -x *.[^ch]|nmake|am ethereal-orig/packet-smb.c ethereal/packet-smb.c
--- ethereal-orig/packet-smb.c Sat Aug 11 09:27:18 2001 +++ ethereal/packet-smb.c Sat Aug 11 09:59:33 2001 @@ -53,11 +53,13 @@ #include "packet-smb-pipe.h" #include "packet-smb-common.h" +static int not_converted_yet = -1; + static int proto_smb = -1; static int hf_smb_cmd = -1; static int hf_word_count = -1; static int hf_byte_count = -1; -static int hf_dialect_buffer_format = -1; +static int hf_buffer_format = -1; static int hf_dialect_name = -1; static int hf_dialect_index = -1; static int hf_sm_mode = -1; @@ -103,11 +105,22 @@ static int hf_system_time_high = -1; static int hf_server_guid = -1; static int hf_security_blob = -1; +static int hf_file_name = -1; +static int hf_file_attribute_read_only = -1; +static int hf_file_attribute_hidden = -1; +static int hf_file_attribute_system = -1; +static int hf_file_attribute_volume = -1; +static int hf_file_attribute_directory = -1; +static int hf_file_attribute_archive = -1; +static int hf_last_write_date = -1; +static int hf_last_write_dos_date = -1; +static int hf_last_write_dos_time = -1; +static int hf_file_size = -1; /*xxxxx*/ static gint ett_smb = -1; -static gint ett_smb_fileattributes = -1; +static gint ett_smb_file_attributes = -1; static gint ett_smb_capabilities = -1; static gint ett_smb_aflags = -1; static gint ett_smb_dialects = -1; @@ -129,6 +142,47 @@ static gint ett_smb_time_date = -1; +static const value_string buffer_format_vals[] = { + {1, "Data Block"}, + {2, "Dialect"}, + {3, "Pathname"}, + {4, "ASCII"}, + {5, "Variable Block"}, + {0, NULL} +}; + + +#define FILE_ATTRIBUTE_READ_ONLY 0x0001 +#define FILE_ATTRIBUTE_HIDDEN 0x0002 +#define FILE_ATTRIBUTE_SYSTEM 0x0004 +#define FILE_ATTRIBUTE_VOLUME 0x0008 +#define FILE_ATTRIBUTE_DIRECTORY 0x0010 +#define FILE_ATTRIBUTE_ARCHIVE 0x0020 +static const true_false_string tfs_file_attribute_read_only = { + "This file is READ ONLY", + "This file is NOT read only", +}; +static const true_false_string tfs_file_attribute_hidden = { + "This is a HIDDEN file", + "This is NOT a hidden file" +}; +static const true_false_string tfs_file_attribute_system = { + "This is a SYSTEM file", + "This is NOT a system file" +}; +static const true_false_string tfs_file_attribute_volume = { + "This is a VOLUME", + "This is NOT a volume" +}; +static const true_false_string tfs_file_attribute_directory = { + "This is a DIRECTORY", + "This is NOT a directory" +}; +static const true_false_string tfs_file_attribute_archive = { + "This is an ARCHIVE file", + "This is NOT an archive file" +}; + #define SERVER_CAP_RAW_MODE 0x00000001 #define SERVER_CAP_MPX_MODE 0x00000002 #define SERVER_CAP_UNICODE 0x00000004 @@ -260,6 +314,38 @@ /*xxxxx*/ static int+dissect_file_attributes(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, int offset)
+{ + guint16 mask; + proto_item *item = NULL; + proto_tree *tree = NULL; + + mask = tvb_get_letohs(tvb, offset); + + if(parent_tree){+ item = proto_tree_add_text(parent_tree, tvb, offset, 4, "File Attributes: 0x%04x ", mask);
+ tree = proto_item_add_subtree(item, ett_smb_file_attributes); + } + + proto_tree_add_boolean(tree, hf_file_attribute_read_only, + tvb, offset, 2, mask); + proto_tree_add_boolean(tree, hf_file_attribute_hidden, + tvb, offset, 2, mask); + proto_tree_add_boolean(tree, hf_file_attribute_system, + tvb, offset, 2, mask); + proto_tree_add_boolean(tree, hf_file_attribute_volume, + tvb, offset, 2, mask); + proto_tree_add_boolean(tree, hf_file_attribute_directory, + tvb, offset, 2, mask); + proto_tree_add_boolean(tree, hf_file_attribute_archive, + tvb, offset, 2, mask); + + offset += 2; + + return offset; +} + +static intdissect_negprot_capabilities(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, int offset)
{ guint32 mask; @@ -269,7 +355,7 @@ mask = tvb_get_letohl(tvb, offset); if(parent_tree){- item = proto_tree_add_text(parent_tree, tvb, offset, 4, "Capabilities: 0x%04x ", mask); + item = proto_tree_add_text(parent_tree, tvb, offset, 4, "Capabilities: 0x%08x ", mask);
tree = proto_item_add_subtree(item, ett_smb_capabilities); } @@ -316,7 +402,56 @@ } static int-dissect_time_date(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, int offset, char *str, int hf_date, int hf_dos_date, int hf_dos_time) +dissect_smbu_time_date(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, int offset, char *str, int hf_date, int hf_dos_date, int hf_dos_time)
+{ + guint16 dos_time, dos_date; + proto_item *item = NULL; + proto_tree *tree = NULL; + time_t t; + static char td[4+2+2+2+1+10]; + static char tt[2+2+2+2+1+10]; + struct timeval tv; + struct tm *tm; + + dos_time = tvb_get_letohs(tvb, offset); + dos_date = tvb_get_letohs(tvb, offset+2); + + t = (dos_date<<16) + dos_time; + tv.tv_sec = t; + tv.tv_usec = 0; + tm = gmtime(&t); + + if(tm){ + sprintf(td, "%04d-%02d-%02d", + 1900+(tm->tm_year), 1+(tm->tm_mon), tm->tm_mday); + sprintf(tt, "%02d:%02d:%02d", + tm->tm_hour, tm->tm_min, tm->tm_sec); + } else { + sprintf(td, "Bad date format"); + tt[0]=0; + } + + + if(parent_tree){+ item = proto_tree_add_text(parent_tree, tvb, offset, 4, "%s : %s %s", str, td, tt);
+ tree = proto_item_add_subtree(item, ett_smb_time_date); + } + + if(tm){ + proto_tree_add_time(tree, hf_date, tvb, offset, 4, &tv); ++ proto_tree_add_uint_format(tree, hf_dos_time, tvb, offset, 2, dos_time, "SMBU Time: %s (0x%04x)", tt, dos_time);
++ proto_tree_add_uint_format(tree, hf_dos_date, tvb, offset+2, 2, dos_date, "SMBU Date: %s (0x%04x)", td, dos_date);
+ } + + offset += 4; + + return offset; +} + +static int+dissect_dos_time_date(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, int offset, char *str, int hf_date, int hf_dos_date, int hf_dos_time)
{ guint16 dos_time, dos_date; proto_item *item = NULL; @@ -337,7 +472,6 @@ tm.tm_year = ((dos_date>>9)&0x7f)+1980; t = mktime(&tm); - tv.tv_sec = t; tv.tv_usec = 0; @@ -459,7 +593,7 @@ } /* buffer format */- proto_tree_add_uint(dtr, hf_dialect_buffer_format, tvb, offset, 1, tvb_get_guint8(tvb, offset)); + proto_tree_add_uint(dtr, hf_buffer_format, tvb, offset, 1, tvb_get_guint8(tvb, offset));
offset += 1; bc -= 1; @@ -545,7 +679,7 @@ offset += 4; /* current time and date at server */- offset = dissect_time_date(tvb, pinfo, tree, offset, "Current Time and Date at server", hf_current_server_date, hf_current_server_dos_date, hf_current_server_dos_time); + offset = dissect_dos_time_date(tvb, pinfo, tree, offset, "Current Time and Date at server", hf_current_server_date, hf_current_server_dos_date, hf_current_server_dos_time);
/* time zone */ tz = tvb_get_letohs(tvb, offset); @@ -683,8 +817,58 @@ } -/*xxxxx*/ +static int+dissect_smb_query_information_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{ + int offset = 0; + + /* word count */+ proto_tree_add_uint(tree, hf_word_count, tvb, offset, 1, tvb_get_guint8(tvb, offset));
+ offset += 1; + + /* byte count */+ proto_tree_add_uint(tree, hf_byte_count, tvb, offset, 2, tvb_get_letohs(tvb, offset));
+ offset += 2; + /* buffer format */+ proto_tree_add_uint(tree, hf_buffer_format, tvb, offset, 1, tvb_get_guint8(tvb, offset));
+ offset += 1; + + /* file name */+ offset = dissect_ascii_or_unicode_string(tvb, pinfo, tree, offset, hf_file_name);
+ + return offset; +} + +static int+dissect_smb_query_information_response(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{ + int offset = 0; + + /* word count */+ proto_tree_add_uint(tree, hf_word_count, tvb, offset, 1, tvb_get_guint8(tvb, offset));
+ offset += 1; + + /* file attributes */ + offset = dissect_file_attributes(tvb, pinfo, tree, offset); + + /* last write time */+ offset = dissect_smbu_time_date(tvb, pinfo, tree, offset, "Last Write Time", hf_last_write_date, hf_last_write_dos_date, hf_last_write_dos_time);
+ + /* file size */+ proto_tree_add_uint(tree, hf_file_size, tvb, offset, 4, tvb_get_letohl(tvb, offset));
+ offset += 4; + + /* 10 reserved bytes */+ proto_tree_add_bytes(tree, hf_reserved, tvb, offset, 10, tvb_get_ptr(tvb, offset, 10));
+ offset += 10; + + /* byte count */+ proto_tree_add_uint(tree, hf_byte_count, tvb, offset, 2, tvb_get_letohs(tvb, offset));
+ offset += 2; + + return offset; +} typedef struct _smb_function { int (*request)(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree); @@ -700,7 +884,7 @@ /* 0x05 */ {NULL, NULL}, /* 0x06 */ {NULL, NULL}, /* 0x07 */ {NULL, NULL}, -/* 0x08 */ {NULL, NULL},+/* 0x08 */ {dissect_smb_query_information_request, dissect_smb_query_information_response},
/* 0x09 */ {NULL, NULL}, /* 0x0a */ {NULL, NULL}, /* 0x0b */ {NULL, NULL}, @@ -1358,6 +1542,7 @@ struct tm *_gtime; /* Add leading underscore ("_") to prevent symbol conflict with /usr/include/time.h on some NetBSD systems */ + static char * dissect_smbu_date(guint16 date, guint16 time) @@ -1377,7 +1562,6 @@ } - /* * Relies on time */ @@ -1727,7 +1911,7 @@ if (tree) {ti = proto_tree_add_text(tree, NullTVB, offset, 2, "Attributes: 0x%02x", Attributes);
- Attributes_tree = proto_item_add_subtree(ti, ett_smb_fileattributes); + Attributes_tree = proto_item_add_subtree(ti, ett_smb_file_attributes); proto_tree_add_text(Attributes_tree, NullTVB, offset, 2, "%s",decode_boolean_bitfield(Attributes, 0x01, 16, "Read-only file", "Not a read-only file"));
proto_tree_add_text(Attributes_tree, NullTVB, offset, 2, "%s", @@ -2592,7 +2776,7 @@ if (tree) {ti = proto_tree_add_text(tree, NullTVB, offset, 2, "Attributes: 0x%02x", Attributes);
- Attributes_tree = proto_item_add_subtree(ti, ett_smb_fileattributes); + Attributes_tree = proto_item_add_subtree(ti, ett_smb_file_attributes); proto_tree_add_text(Attributes_tree, NullTVB, offset, 2, "%s",decode_boolean_bitfield(Attributes, 0x01, 16, "Read-only file", "Not a read-only file"));
proto_tree_add_text(Attributes_tree, NullTVB, offset, 2, "%s", @@ -4387,7 +4571,7 @@ if (tree) {ti = proto_tree_add_text(tree, NullTVB, offset, 2, "FileAttributes: 0x%02x", FileAttributes);
- FileAttributes_tree = proto_item_add_subtree(ti, ett_smb_fileattributes); + FileAttributes_tree = proto_item_add_subtree(ti, ett_smb_file_attributes); proto_tree_add_text(FileAttributes_tree, NullTVB, offset, 2, "%s",decode_boolean_bitfield(FileAttributes, 0x01, 16, "Read only file", "Not a read only file"));
proto_tree_add_text(FileAttributes_tree, NullTVB, offset, 2, "%s", @@ -7290,7 +7474,7 @@ if (tree) {ti = proto_tree_add_text(tree, NullTVB, offset, 2, "Attributes: 0x%02x", Attributes);
- Attributes_tree = proto_item_add_subtree(ti, ett_smb_fileattributes);+ Attributes_tree = proto_item_add_subtree(ti, ett_smb_file_attributes);
proto_tree_add_text(Attributes_tree, NullTVB, offset, 2, "%s",decode_boolean_bitfield(Attributes, 0x01, 16, "Read-only file", "Not a read-only file"));
proto_tree_add_text(Attributes_tree, NullTVB, offset, 2, "%s", @@ -8246,233 +8430,6 @@ } void-dissect_get_file_attr_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *parent, proto_tree *tree, struct smb_info si, int max_data, int SMB_offset, int errcode)
- -{ - proto_tree *Attributes_tree; - proto_item *ti; - guint8 WordCount; - guint8 BufferFormat; - guint32 FileSize; - guint16 Reserved5; - guint16 Reserved4; - guint16 Reserved3; - guint16 Reserved2; - guint16 Reserved1; - guint16 LastWriteTime; - guint16 LastWriteDate; - guint16 ByteCount; - guint16 Attributes; - const char *FileName; - - if (si.request) { - /* Request(s) dissect code */ - - /* Build display for: Word Count (WCT) */ - - WordCount = GBYTE(pd, offset); - - if (tree) { -- proto_tree_add_text(tree, NullTVB, offset, 1, "Word Count (WCT): %u", WordCount);
- - } - - offset += 1; /* Skip Word Count (WCT) */ - - /* Build display for: Byte Count (BCC) */ - - ByteCount = GSHORT(pd, offset); - - if (tree) { -- proto_tree_add_text(tree, NullTVB, offset, 2, "Byte Count (BCC): %u", ByteCount);
- - } - - offset += 2; /* Skip Byte Count (BCC) */ - - /* Build display for: Buffer Format */ - - BufferFormat = GBYTE(pd, offset); - - if (tree) { -- proto_tree_add_text(tree, NullTVB, offset, 1, "Buffer Format: %u", BufferFormat);
- - } - - offset += 1; /* Skip Buffer Format */ - - /* Build display for: File Name */ - - FileName = pd + offset; - - if (tree) { -- proto_tree_add_text(tree, NullTVB, offset, strlen(FileName) + 1, "File Name: %s", FileName);
- - } - - offset += strlen(FileName) + 1; /* Skip File Name */ - - } else { - /* Response(s) dissect code */ - - /* Build display for: Word Count (WCT) */ - - WordCount = GBYTE(pd, offset); - - if (tree) { -- proto_tree_add_text(tree, NullTVB, offset, 1, "Word Count (WCT): %u", WordCount);
- - } - - offset += 1; /* Skip Word Count (WCT) */ - - if (WordCount > 0) { - - /* Build display for: Attributes */ - - Attributes = GSHORT(pd, offset); - - if (tree) { -- ti = proto_tree_add_text(tree, NullTVB, offset, 2, "Attributes: 0x%02x", Attributes);
- Attributes_tree = proto_item_add_subtree(ti, ett_smb_fileattributes); - proto_tree_add_text(Attributes_tree, NullTVB, offset, 2, "%s",- decode_boolean_bitfield(Attributes, 0x01, 16, "Read-only file", "Not a read-only file"));
- proto_tree_add_text(Attributes_tree, NullTVB, offset, 2, "%s",- decode_boolean_bitfield(Attributes, 0x02, 16, "Hidden file", "Not a hidden file"));
- proto_tree_add_text(Attributes_tree, NullTVB, offset, 2, "%s",- decode_boolean_bitfield(Attributes, 0x04, 16, "System file", "Not a system file"));
- proto_tree_add_text(Attributes_tree, NullTVB, offset, 2, "%s",- decode_boolean_bitfield(Attributes, 0x08, 16, " Volume", "Not a volume"));
- proto_tree_add_text(Attributes_tree, NullTVB, offset, 2, "%s",- decode_boolean_bitfield(Attributes, 0x10, 16, " Directory", "Not a directory"));
- proto_tree_add_text(Attributes_tree, NullTVB, offset, 2, "%s",- decode_boolean_bitfield(Attributes, 0x20, 16, " Archived", "Not archived"));
- - } - - offset += 2; /* Skip Attributes */ - - /* Build display for: Last Write Time */ - - LastWriteTime = GSHORT(pd, offset); - - if (tree) { - - } - - offset += 2; /* Skip Last Write Time */ - - /* Build display for: Last Write Date */ - - LastWriteDate = GSHORT(pd, offset); - - if (tree) { -- proto_tree_add_text(tree, NullTVB, offset, 2, "Last Write Date: %s", dissect_smbu_date(LastWriteDate, LastWriteTime));
-- proto_tree_add_text(tree, NullTVB, offset - 2, 2, "Last Write Time: %s", dissect_smbu_time(LastWriteDate, LastWriteTime));
- - } - - offset += 2; /* Skip Last Write Date */ - - /* Build display for: File Size */ - - FileSize = GWORD(pd, offset); - - if (tree) { - - proto_tree_add_text(tree, NullTVB, offset, 4, "File Size: %u", FileSize); - - } - - offset += 4; /* Skip File Size */ - - /* Build display for: Reserved 1 */ - - Reserved1 = GSHORT(pd, offset); - - if (tree) { -- proto_tree_add_text(tree, NullTVB, offset, 2, "Reserved 1: %u", Reserved1);
- - } - - offset += 2; /* Skip Reserved 1 */ - - /* Build display for: Reserved 2 */ - - Reserved2 = GSHORT(pd, offset); - - if (tree) { -- proto_tree_add_text(tree, NullTVB, offset, 2, "Reserved 2: %u", Reserved2);
- - } - - offset += 2; /* Skip Reserved 2 */ - - /* Build display for: Reserved 3 */ - - Reserved3 = GSHORT(pd, offset); - - if (tree) { -- proto_tree_add_text(tree, NullTVB, offset, 2, "Reserved 3: %u", Reserved3);
- - } - - offset += 2; /* Skip Reserved 3 */ - - /* Build display for: Reserved 4 */ - - Reserved4 = GSHORT(pd, offset); - - if (tree) { -- proto_tree_add_text(tree, NullTVB, offset, 2, "Reserved 4: %u", Reserved4);
- - } - - offset += 2; /* Skip Reserved 4 */ - - /* Build display for: Reserved 5 */ - - Reserved5 = GSHORT(pd, offset); - - if (tree) { -- proto_tree_add_text(tree, NullTVB, offset, 2, "Reserved 5: %u", Reserved5);
- - } - - offset += 2; /* Skip Reserved 5 */ - - } - - /* Build display for: Byte Count (BCC) */ - - ByteCount = GSHORT(pd, offset); - - if (tree) { -- proto_tree_add_text(tree, NullTVB, offset, 2, "Byte Count (BCC): %u", ByteCount);
- - } - - offset += 2; /* Skip Byte Count (BCC) */ - - } - -} - -voiddissect_read_file_smb(const u_char *pd, int offset, frame_data *fd, proto_tree *parent, proto_tree *tree, struct smb_info si, int max_data, int SMB_offset, int errcode)
{ @@ -10529,7 +10486,7 @@ dissect_flush_file_smb, /* SMBflush flush a file */ dissect_delete_file_smb, /* SMBunlink delete a file */ dissect_rename_file_smb, /* SMBmv rename a file */ - dissect_get_file_attr_smb,/* SMBgetatr get file attributes */ + dissect_unknown_smb, dissect_set_file_attr_smb,/* SMBsetatr set file attributes */ dissect_read_file_smb, /* SMBread read from a file */ dissect_write_file_smb, /* SMBwrite write to a file */ @@ -11270,6 +11227,9 @@ } (*new_dissector)(next_tvb, &pi, cmd_tree); } else { + /* just so its easy to find unconverted packets in a capture*/ + proto_tree_add_item_hidden(tree, not_converted_yet, NullTVB, 0, 0, TRUE); + /* call old dissector */ (dissect[cmd])(pd, offset, fd, tree, tree, si, max_data, SMB_offset, errcode); @@ -11289,6 +11249,10 @@ proto_register_smb(void) { static hf_register_info hf[] = { + { ¬_converted_yet, + { "", "smb.not_converted_yet", FT_NONE, BASE_NONE,+ NULL, 0, "dummy to indicate which packets are not tvbuffified yet", HFILL }},
+ { &hf_smb_cmd, { "SMB Command", "smb.cmd", FT_UINT8, BASE_HEX, NULL, 0x0, "SMB Command", HFILL }}, @@ -11301,9 +11265,9 @@ { "Byte Count", "smb.byte_count", FT_UINT16, BASE_DEC, NULL, 0, "SMB Byte Count", HFILL }}, - { &hf_dialect_buffer_format, - { "Buffer Format", "smb.dialect.buffer_format", FT_UINT8, BASE_HEX, - NULL, 0, "Buffer Format for this dialect", HFILL }}, + { &hf_buffer_format, + { "Buffer Format", "smb.buffer_format", FT_UINT8, BASE_HEX, + VALS(buffer_format_vals), 0, "Buffer Format", HFILL }}, { &hf_dialect_name, { "Name", "smb.dialect.name", FT_STRING, BASE_NONE, @@ -11485,11 +11449,56 @@ { "Security Blob", "smb.security.blob", FT_BYTES, BASE_HEX, NULL, 0, "Security blob", HFILL }}, + { &hf_file_name, + { "File Name", "smb.file_name", FT_STRING, BASE_NONE, + NULL, 0, "SMB File Name", HFILL }}, + + { &hf_file_attribute_read_only, + { "Read Only", "smb.file.attribute.read_only", FT_BOOLEAN, 16,+ TFS(&tfs_file_attribute_read_only), FILE_ATTRIBUTE_READ_ONLY, "READ ONLY file attribute", HFILL }},
+ + { &hf_file_attribute_hidden, + { "Hidden", "smb.file.attribute.hidden", FT_BOOLEAN, 16,+ TFS(&tfs_file_attribute_hidden), FILE_ATTRIBUTE_HIDDEN, "HIDDEN file attribute", HFILL }},
+ + { &hf_file_attribute_system, + { "System", "smb.file.attribute.system", FT_BOOLEAN, 16,+ TFS(&tfs_file_attribute_system), FILE_ATTRIBUTE_SYSTEM, "SYSTEM file attribute", HFILL }},
+ + { &hf_file_attribute_volume, + { "Volume", "smb.file.attribute.volume", FT_BOOLEAN, 16,+ TFS(&tfs_file_attribute_volume), FILE_ATTRIBUTE_VOLUME, "VOLUME file attribute", HFILL }},
+ + { &hf_file_attribute_directory, + { "Directory", "smb.file.attribute.directory", FT_BOOLEAN, 16,+ TFS(&tfs_file_attribute_directory), FILE_ATTRIBUTE_DIRECTORY, "DIRECTORY file attribute", HFILL }},
+ + { &hf_file_attribute_archive, + { "Archive", "smb.file.attribute.archive", FT_BOOLEAN, 16,+ TFS(&tfs_file_attribute_archive), FILE_ATTRIBUTE_ARCHIVE, "ARCHIVE file attribute", HFILL }},
+ + { &hf_last_write_date, + { "Last Write", "smb.last_write.date", FT_ABSOLUTE_TIME, BASE_NONE, + NULL, 0, "Last Write time", HFILL }}, + + { &hf_last_write_dos_date, + { "Last Write Date", "smb.last_write.dos.date", FT_UINT16, BASE_HEX, + NULL, 0, "Last Write date, SMBU format", HFILL }}, + + { &hf_last_write_dos_time, + { "Last Write Time", "smb.last_write.dos.time", FT_UINT16, BASE_HEX, + NULL, 0, "Last Write time, SMBU format", HFILL }}, + + { &hf_file_size, + { "File Size", "smb.file.size", FT_UINT32, BASE_DEC, + NULL, 0, "File Size", HFILL }}, + + /*xxxxx*/ }; static gint *ett[] = { &ett_smb, - &ett_smb_fileattributes, + &ett_smb_file_attributes, &ett_smb_capabilities, &ett_smb_aflags, &ett_smb_dialects, @@ -11523,3 +11532,4 @@ register_proto_smb_mailslot(); register_proto_smb_pipe(); } +
- Prev by Date: Re: [Ethereal-dev] Re: [Ethrereal-dev] packet-smb.c
- Next by Date: [Ethereal-dev] packet-smb.c patch 4
- Previous by thread: Re: [Ethereal-dev] packet-smb.c
- Next by thread: [Ethereal-dev] asn.1 compiler used???
- Index(es):