aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--epan/dissectors/packet-smb.c69
-rw-r--r--epan/dissectors/packet-smb.h8
-rw-r--r--epan/dissectors/packet-smb2.c9
-rw-r--r--epan/dissectors/packet-smb2.h6
-rw-r--r--epan/libwireshark.def8
-rw-r--r--gtk/smb2_stat.c2
-rw-r--r--gtk/smb_stat.c6
-rw-r--r--tap-smbstat.c6
8 files changed, 63 insertions, 51 deletions
diff --git a/epan/dissectors/packet-smb.c b/epan/dissectors/packet-smb.c
index ff7c355ab4..393b1274eb 100644
--- a/epan/dissectors/packet-smb.c
+++ b/epan/dissectors/packet-smb.c
@@ -7843,7 +7843,7 @@ dissect_tree_connect_andx_response(tvbuff_t *tvb, packet_info *pinfo, proto_tree
#define NT_TRANS_QSD 6
#define NT_TRANS_GET_USER_QUOTA 7
#define NT_TRANS_SET_USER_QUOTA 8
-const value_string nt_cmd_vals[] = {
+static const value_string nt_cmd_vals[] = {
{NT_TRANS_CREATE, "NT CREATE"},
{NT_TRANS_IOCTL, "NT IOCTL"},
{NT_TRANS_SSD, "NT SET SECURITY DESC"},
@@ -7855,6 +7855,8 @@ const value_string nt_cmd_vals[] = {
{0, NULL}
};
+value_string_ext nt_cmd_vals_ext = VALUE_STRING_EXT_INIT(nt_cmd_vals);
+
static const value_string nt_ioctl_isfsctl_vals[] = {
{0, "Device IOCTL"},
{1, "FS control : FSCTL"},
@@ -8483,7 +8485,7 @@ dissect_nt_trans_data_request(tvbuff_t *tvb, packet_info *pinfo, int offset, pro
tvb_ensure_bytes_exist(tvb, offset, bc);
item = proto_tree_add_text(parent_tree, tvb, offset, bc,
"%s Data",
- val_to_str(ntd->subcmd, nt_cmd_vals, "Unknown NT transaction (%u)"));
+ val_to_str_ext(ntd->subcmd, &nt_cmd_vals_ext, "Unknown NT transaction (%u)"));
tree = proto_item_add_subtree(item, ett_smb_nt_trans_data);
}
@@ -8578,7 +8580,7 @@ dissect_nt_trans_param_request(tvbuff_t *tvb, packet_info *pinfo, int offset, pr
if(parent_tree){
item = proto_tree_add_text(parent_tree, tvb, offset, len,
"%s Parameters",
- val_to_str(ntd->subcmd, nt_cmd_vals, "Unknown NT transaction (%u)"));
+ val_to_str_ext(ntd->subcmd, &nt_cmd_vals_ext, "Unknown NT transaction (%u)"));
tree = proto_item_add_subtree(item, ett_smb_nt_trans_param);
}
@@ -8741,7 +8743,7 @@ dissect_nt_trans_setup_request(tvbuff_t *tvb, packet_info *pinfo, int offset, pr
tvb_ensure_bytes_exist(tvb, offset, len);
item = proto_tree_add_text(parent_tree, tvb, offset, len,
"%s Setup",
- val_to_str(ntd->subcmd, nt_cmd_vals, "Unknown NT transaction (%u)"));
+ val_to_str_ext(ntd->subcmd, &nt_cmd_vals_ext, "Unknown NT transaction (%u)"));
tree = proto_item_add_subtree(item, ett_smb_nt_trans_setup);
}
@@ -8925,7 +8927,7 @@ dissect_nt_transaction_request(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree
proto_tree_add_uint(tree, hf_smb_nt_trans_subcmd, tvb, offset, 2, subcmd);
if(check_col(pinfo->cinfo, COL_INFO)){
col_append_fstr(pinfo->cinfo, COL_INFO, ", %s",
- val_to_str(subcmd, nt_cmd_vals, "<unknown>"));
+ val_to_str_ext(subcmd, &nt_cmd_vals_ext, "<unknown>"));
}
ntd.subcmd = subcmd;
if (!si->unidir && sip) {
@@ -9028,7 +9030,7 @@ dissect_nt_trans_data_response(tvbuff_t *tvb, packet_info *pinfo,
if(nti != NULL){
item = proto_tree_add_text(parent_tree, tvb, offset, len,
"%s Data",
- val_to_str(nti->subcmd, nt_cmd_vals, "Unknown NT Transaction (%u)"));
+ val_to_str_ext(nti->subcmd, &nt_cmd_vals_ext, "Unknown NT Transaction (%u)"));
} else {
/*
* We never saw the request to which this is a
@@ -9120,7 +9122,7 @@ dissect_nt_trans_param_response(tvbuff_t *tvb, packet_info *pinfo,
if(nti != NULL){
item = proto_tree_add_text(parent_tree, tvb, offset, len,
"%s Parameters",
- val_to_str(nti->subcmd, nt_cmd_vals, "Unknown NT Transaction (%u)"));
+ val_to_str_ext(nti->subcmd, &nt_cmd_vals_ext, "Unknown NT Transaction (%u)"));
} else {
/*
* We never saw the request to which this is a
@@ -9332,7 +9334,7 @@ dissect_nt_trans_setup_response(tvbuff_t *tvb, packet_info *pinfo,
if(nti != NULL){
item = proto_tree_add_text(parent_tree, tvb, offset, len,
"%s Setup",
- val_to_str(nti->subcmd, nt_cmd_vals, "Unknown NT Transaction (%u)"));
+ val_to_str_ext(nti->subcmd, &nt_cmd_vals_ext, "Unknown NT Transaction (%u)"));
} else {
/*
* We never saw the request to which this is a
@@ -9401,7 +9403,7 @@ dissect_nt_transaction_response(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tre
proto_tree_add_uint(tree, hf_smb_nt_trans_subcmd, tvb, 0, 0, nti->subcmd);
if(check_col(pinfo->cinfo, COL_INFO)){
col_append_fstr(pinfo->cinfo, COL_INFO, ", %s",
- val_to_str(nti->subcmd, nt_cmd_vals, "<unknown (%u)>"));
+ val_to_str_ext(nti->subcmd, &nt_cmd_vals_ext, "<unknown (%u)>"));
}
} else {
proto_tree_add_text(tree, tvb, offset, 0,
@@ -10270,7 +10272,7 @@ dissect_nt_cancel_request(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tre
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX */
-const value_string trans2_cmd_vals[] = {
+static const value_string trans2_cmd_vals[] = {
{ 0x00, "OPEN2" },
{ 0x01, "FIND_FIRST2" },
{ 0x02, "FIND_NEXT2" },
@@ -10286,11 +10288,14 @@ const value_string trans2_cmd_vals[] = {
{ 0x0C, "FIND_NOTIFY_NEXT" },
{ 0x0D, "CREATE_DIRECTORY" },
{ 0x0E, "SESSION_SETUP" },
+ { 0x0F, "Unknown (0x0f)" }, /* dummy so val_to_str_ext can do indexed lookup */
{ 0x10, "GET_DFS_REFERRAL" },
{ 0x11, "REPORT_DFS_INCONSISTENCY" },
{ 0, NULL }
};
+value_string_ext trans2_cmd_vals_ext = VALUE_STRING_EXT_INIT(trans2_cmd_vals);
+
static const true_false_string tfs_tf_dtid = {
"Also DISCONNECT TID",
"Do NOT disconnect TID"
@@ -10706,8 +10711,8 @@ dissect_transaction2_request_parameters(tvbuff_t *tvb, packet_info *pinfo,
tvb_ensure_bytes_exist(tvb, offset, bc);
item = proto_tree_add_text(parent_tree, tvb, offset, bc,
"%s Parameters",
- val_to_str(subcmd, trans2_cmd_vals,
- "Unknown (0x%02x)"));
+ val_to_str_ext(subcmd, &trans2_cmd_vals_ext,
+ "Unknown (0x%02x)"));
tree = proto_item_add_subtree(item, ett_smb_transaction_params);
}
@@ -13042,8 +13047,8 @@ dissect_transaction2_request_data(tvbuff_t *tvb, packet_info *pinfo,
tvb_ensure_bytes_exist(tvb, offset, dc);
item = proto_tree_add_text(parent_tree, tvb, offset, dc,
"%s Data",
- val_to_str(subcmd, trans2_cmd_vals,
- "Unknown (0x%02x)"));
+ val_to_str_ext(subcmd, &trans2_cmd_vals_ext,
+ "Unknown (0x%02x)"));
tree = proto_item_add_subtree(item, ett_smb_transaction_data);
}
@@ -13389,8 +13394,8 @@ dissect_transaction_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
tvb, offset, 2, subcmd);
if (check_col(pinfo->cinfo, COL_INFO)) {
col_append_fstr(pinfo->cinfo, COL_INFO, ", %s",
- val_to_str(subcmd, trans2_cmd_vals,
- "Unknown (0x%02x)"));
+ val_to_str_ext(subcmd, &trans2_cmd_vals_ext,
+ "Unknown (0x%02x)"));
}
if (!si->unidir) {
if(!pinfo->fd->flags.visited && si->sip){
@@ -15233,8 +15238,8 @@ dissect_transaction2_response_data(tvbuff_t *tvb, packet_info *pinfo,
if (t2i != NULL && t2i->subcmd != -1) {
item = proto_tree_add_text(parent_tree, tvb, offset, dc,
"%s Data",
- val_to_str(t2i->subcmd, trans2_cmd_vals,
- "Unknown (0x%02x)"));
+ val_to_str_ext(t2i->subcmd, &trans2_cmd_vals_ext,
+ "Unknown (0x%02x)"));
tree = proto_item_add_subtree(item, ett_smb_transaction_data);
} else {
item = proto_tree_add_text(parent_tree, tvb, offset, dc,
@@ -15408,8 +15413,8 @@ dissect_transaction2_response_parameters(tvbuff_t *tvb, packet_info *pinfo, prot
if (t2i != NULL && t2i->subcmd != -1) {
item = proto_tree_add_text(parent_tree, tvb, offset, pc,
"%s Parameters",
- val_to_str(t2i->subcmd, trans2_cmd_vals,
- "Unknown (0x%02x)"));
+ val_to_str_ext(t2i->subcmd, &trans2_cmd_vals_ext,
+ "Unknown (0x%02x)"));
tree = proto_item_add_subtree(item, ett_smb_transaction_params);
} else {
item = proto_tree_add_text(parent_tree, tvb, offset, pc,
@@ -15722,9 +15727,9 @@ dissect_transaction_response(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *
if (t2i && check_col(pinfo->cinfo, COL_INFO)) {
col_append_fstr(pinfo->cinfo, COL_INFO, ", %s",
- val_to_str(t2i->subcmd,
- trans2_cmd_vals,
- "<unknown (0x%02x)>"));
+ val_to_str_ext(t2i->subcmd,
+ &trans2_cmd_vals_ext,
+ "<unknown (0x%02x)>"));
}
}
}
@@ -16385,8 +16390,10 @@ dissect_smb_command(tvbuff_t *tvb, packet_info *pinfo, int offset, proto_tree *s
* This means that this value_string array MUST always
* 1, contain all entries 0x00 to 0xff
* 2, all entries must be in order.
+ * Note: This value_string array can also be accessed directly via the use of value_string_ext
+ * ToDo?: use val_to_str_ext instead of decode_smb_name() ?
*/
-const value_string smb_cmd_vals[] = {
+static const value_string smb_cmd_vals[] = {
{ 0x00, "Create Directory" },
{ 0x01, "Delete Directory" },
{ 0x02, "Open" },
@@ -16646,6 +16653,8 @@ const value_string smb_cmd_vals[] = {
{ 0x00, NULL },
};
+value_string_ext smb_cmd_vals_ext = VALUE_STRING_EXT_INIT(smb_cmd_vals);
+
static const char *decode_smb_name(guint8 cmd)
{
return(smb_cmd_vals[cmd].strptr);
@@ -17490,16 +17499,16 @@ proto_register_smb(void)
{
static hf_register_info hf[] = {
{ &hf_smb_cmd,
- { "SMB Command", "smb.cmd", FT_UINT8, BASE_HEX,
- VALS(smb_cmd_vals), 0x0, NULL, HFILL }},
+ { "SMB Command", "smb.cmd", FT_UINT8, BASE_HEX|BASE_EXT_STRING,
+ &smb_cmd_vals, 0x0, NULL, HFILL }},
{ &hf_smb_trans2_subcmd,
- { "Subcommand", "smb.trans2.cmd", FT_UINT16, BASE_HEX,
- VALS(trans2_cmd_vals), 0, "Subcommand for TRANSACTION2", HFILL }},
+ { "Subcommand", "smb.trans2.cmd", FT_UINT16, BASE_HEX|BASE_EXT_STRING,
+ &trans2_cmd_vals_ext, 0, "Subcommand for TRANSACTION2", HFILL }},
{ &hf_smb_nt_trans_subcmd,
- { "Function", "smb.nt.function", FT_UINT16, BASE_DEC,
- VALS(nt_cmd_vals), 0, "Function for NT Transaction", HFILL }},
+ { "Function", "smb.nt.function", FT_UINT16, BASE_DEC|BASE_EXT_STRING,
+ &nt_cmd_vals_ext, 0, "Function for NT Transaction", HFILL }},
{ &hf_smb_word_count,
{ "Word Count (WCT)", "smb.wct", FT_UINT8, BASE_DEC,
diff --git a/epan/dissectors/packet-smb.h b/epan/dissectors/packet-smb.h
index 1b9e332d16..fdddacfd0e 100644
--- a/epan/dissectors/packet-smb.h
+++ b/epan/dissectors/packet-smb.h
@@ -29,12 +29,12 @@
WS_VAR_IMPORT gboolean sid_name_snooping;
-/* SMB command codes, from the SNIA CIFS spec. With MSVC and a
+/* SMB command codes, from the SNIA CIFS spec. With MSVC and a
* libwireshark.dll, we need a special declaration.
*/
-WS_VAR_IMPORT const value_string smb_cmd_vals[];
-WS_VAR_IMPORT const value_string trans2_cmd_vals[];
-WS_VAR_IMPORT const value_string nt_cmd_vals[];
+WS_VAR_IMPORT value_string_ext smb_cmd_vals_ext;
+WS_VAR_IMPORT value_string_ext trans2_cmd_vals_ext;
+WS_VAR_IMPORT value_string_ext nt_cmd_vals_ext;
#define SMB_COM_CREATE_DIRECTORY 0x00
diff --git a/epan/dissectors/packet-smb2.c b/epan/dissectors/packet-smb2.c
index 0bdf987dd6..629b90f04f 100644
--- a/epan/dissectors/packet-smb2.c
+++ b/epan/dissectors/packet-smb2.c
@@ -4646,7 +4646,7 @@ dissect_smb2_break_response(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
}
/* names here are just until we find better names for these functions */
-const value_string smb2_cmd_vals[] = {
+static const value_string smb2_cmd_vals[] = {
{ 0x00, "NegotiateProtocol" },
{ 0x01, "SessionSetup" },
{ 0x02, "SessionLogoff" },
@@ -4905,6 +4905,9 @@ const value_string smb2_cmd_vals[] = {
{ 0xFF, "unknown-0xFF" },
{ 0x00, NULL },
};
+
+value_string_ext smb2_cmd_vals_ext = VALUE_STRING_EXT_INIT(smb2_cmd_vals);
+
static const char *decode_smb2_name(guint16 cmd)
{
if (cmd > 0xFF) return "unknown";
@@ -5616,8 +5619,8 @@ proto_register_smb2(void)
{
static hf_register_info hf[] = {
{ &hf_smb2_cmd,
- { "Command", "smb2.cmd", FT_UINT16, BASE_DEC,
- VALS(smb2_cmd_vals), 0, "SMB2 Command Opcode", HFILL }},
+ { "Command", "smb2.cmd", FT_UINT16, BASE_DEC|BASE_EXT_STRING,
+ &smb2_cmd_vals_ext, 0, "SMB2 Command Opcode", HFILL }},
{ &hf_smb2_response_to,
{ "Response to", "smb2.response_to", FT_FRAMENUM, BASE_NONE,
NULL, 0, "This packet is a response to the packet in this frame", HFILL }},
diff --git a/epan/dissectors/packet-smb2.h b/epan/dissectors/packet-smb2.h
index cf6e5206b8..6648c6df25 100644
--- a/epan/dissectors/packet-smb2.h
+++ b/epan/dissectors/packet-smb2.h
@@ -25,15 +25,15 @@
#ifndef __PACKET_SMB2_H__
#define __PACKET_SMB2_H__
-/* SMB2 command codes. With MSVC and a
+/* SMB2 command codes. With MSVC and a
* libwireshark.dll, we need a special declaration.
*/
-WS_VAR_IMPORT const value_string smb2_cmd_vals[];
+WS_VAR_IMPORT value_string_ext smb2_cmd_vals_ext;
/* Structure to keep track of information specific to a single
* SMB2 transaction. Here we store things we need to remember between
* a specific request and a specific response.
- *
+ *
* There is no guarantee we will have this structure available for all
* SMB2 packets so a dissector must check this pointer for NULL
* before dereferencing it.
diff --git a/epan/libwireshark.def b/epan/libwireshark.def
index bcc35e8c5d..75839a465a 100644
--- a/epan/libwireshark.def
+++ b/epan/libwireshark.def
@@ -654,7 +654,7 @@ nstime_set_zero
nstime_sum
nstime_to_msec
nstime_to_sec
-nt_cmd_vals DATA
+nt_cmd_vals_ext DATA
num_tree_types DATA
oid_add
oid_add_from_encoded
@@ -940,8 +940,8 @@ show_fragment_seq_tree
show_fragment_tree
sid_name_snooping DATA
sid_name_table DATA
-smb2_cmd_vals DATA
-smb_cmd_vals DATA
+smb2_cmd_vals_ext DATA
+smb_cmd_vals_ext DATA
smb_fid_types DATA
sminmpec_values_ext DATA
srtcp_add_address
@@ -1024,7 +1024,7 @@ timestamp_get_seconds_type
timestamp_set_precision
timestamp_set_type
timestamp_set_seconds_type
-trans2_cmd_vals DATA
+trans2_cmd_vals_ext DATA
tree_is_expanded DATA
tvb_bytes_exist
tvb_bytes_to_str
diff --git a/gtk/smb2_stat.c b/gtk/smb2_stat.c
index 4dd41fcf15..45b508f874 100644
--- a/gtk/smb2_stat.c
+++ b/gtk/smb2_stat.c
@@ -172,7 +172,7 @@ gtk_smb2stat_init(const char *optarg, void *userdata _U_)
init_srt_table(&ss->smb2_srt_table, 256, vbox, "smb2.cmd");
for(i=0;i<256;i++){
- init_srt_table_row(&ss->smb2_srt_table, i, val_to_str(i, smb2_cmd_vals, "Unknown(0x%02x)"));
+ init_srt_table_row(&ss->smb2_srt_table, i, val_to_str_ext(i, &smb2_cmd_vals_ext, "Unknown(0x%02x)"));
}
diff --git a/gtk/smb_stat.c b/gtk/smb_stat.c
index 6d3a7a74a5..dfc21efba3 100644
--- a/gtk/smb_stat.c
+++ b/gtk/smb_stat.c
@@ -194,7 +194,7 @@ gtk_smbstat_init(const char *optarg, void *userdata _U_)
init_srt_table(&ss->smb_srt_table, 256, vbox, "smb.cmd");
for(i=0;i<256;i++){
- init_srt_table_row(&ss->smb_srt_table, i, val_to_str(i, smb_cmd_vals, "Unknown(0x%02x)"));
+ init_srt_table_row(&ss->smb_srt_table, i, val_to_str_ext(i, &smb_cmd_vals_ext, "Unknown(0x%02x)"));
}
@@ -202,7 +202,7 @@ gtk_smbstat_init(const char *optarg, void *userdata _U_)
gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
init_srt_table(&ss->trans2_srt_table, 256, vbox, "smb.trans2.cmd");
for(i=0;i<256;i++){
- init_srt_table_row(&ss->trans2_srt_table, i, val_to_str(i, trans2_cmd_vals, "Unknown(0x%02x)"));
+ init_srt_table_row(&ss->trans2_srt_table, i, val_to_str_ext(i, &trans2_cmd_vals_ext, "Unknown(0x%02x)"));
}
@@ -210,7 +210,7 @@ gtk_smbstat_init(const char *optarg, void *userdata _U_)
gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
init_srt_table(&ss->nt_trans_srt_table, 256, vbox, "smb.nt.function");
for(i=0;i<256;i++){
- init_srt_table_row(&ss->nt_trans_srt_table, i, val_to_str(i, nt_cmd_vals, "Unknown(0x%02x)"));
+ init_srt_table_row(&ss->nt_trans_srt_table, i, val_to_str_ext(i, &nt_cmd_vals_ext, "Unknown(0x%02x)"));
}
diff --git a/tap-smbstat.c b/tap-smbstat.c
index cab82f3892..a2d0d66cf1 100644
--- a/tap-smbstat.c
+++ b/tap-smbstat.c
@@ -133,7 +133,7 @@ smbstat_draw(void *pss)
}
printf("%-25s %6d %3d.%05d %3d.%05d %3" G_GINT64_MODIFIER "u.%05" G_GINT64_MODIFIER "u\n",
- val_to_str(i, smb_cmd_vals, "Unknown (0x%02x)"),
+ val_to_str_ext(i, &smb_cmd_vals_ext, "Unknown (0x%02x)"),
ss->proc[i].num,
(int)ss->proc[i].min.secs,ss->proc[i].min.nsecs/10000,
(int)ss->proc[i].max.secs,ss->proc[i].max.nsecs/10000,
@@ -159,7 +159,7 @@ smbstat_draw(void *pss)
}
printf("%-25s %6d %3d.%05d %3d.%05d %3" G_GINT64_MODIFIER "u.%05" G_GINT64_MODIFIER "u\n",
- val_to_str(i, trans2_cmd_vals, "Unknown (0x%02x)"),
+ val_to_str_ext(i, &trans2_cmd_vals_ext, "Unknown (0x%02x)"),
ss->trans2[i].num,
(int)ss->trans2[i].min.secs,ss->trans2[i].min.nsecs/10000,
(int)ss->trans2[i].max.secs,ss->trans2[i].max.nsecs/10000,
@@ -185,7 +185,7 @@ smbstat_draw(void *pss)
}
printf("%-25s %6d %3d.%05d %3d.%05d %3" G_GINT64_MODIFIER "u.%05" G_GINT64_MODIFIER "u\n",
- val_to_str(i, nt_cmd_vals, "Unknown (0x%02x)"),
+ val_to_str_ext(i, &nt_cmd_vals_ext, "Unknown (0x%02x)"),
ss->nt_trans[i].num,
(int)ss->nt_trans[i].min.secs,ss->nt_trans[i].min.nsecs/10000,
(int)ss->nt_trans[i].max.secs,ss->nt_trans[i].max.nsecs/10000,