prefs: fix importing some old protocol preferences

Some preference modules did not exist, so importing would not work.
While vuze-dht used to have a configurable protocol name, it no longer
supports that, so remove it from the list.

Add some sanity checks to prevent bug 14316 from going undetected again,
and to ensure that dead code is removed when prefs are removed.

Change-Id: I5df809af66a6c19f9eb9a6b75d5e60c96008cde4
Fixes: v2.3.0rc0-971-g268841f3e0 ("Combine Decode As and port preferences for tcp.port dissector table.")
Reviewed-on: https://code.wireshark.org/review/27227
Petri-Dish: Anders Broman <a.broman58@gmail.com>
Tested-by: Petri Dish Buildbot
Reviewed-by: Anders Broman <a.broman58@gmail.com>
This commit is contained in:
Peter Wu 2018-04-30 18:47:10 +02:00 committed by Anders Broman
parent 58da452d22
commit f7296644c5
1 changed files with 29 additions and 12 deletions

View File

@ -5048,7 +5048,7 @@ deprecated_port_pref(gchar *pref_name, const gchar *value)
struct port_pref_name
{
const char* pref_name;
const char* module_name;
const char* module_name; /* the protocol filter name */
const char* table_name;
guint base;
};
@ -5077,7 +5077,7 @@ deprecated_port_pref(gchar *pref_name, const gchar *value)
{"rsync.tcp_port", "RSYNC", "tcp.port", 10},
{"sametime.tcp_port", "SAMETIME", "tcp.port", 10},
{"sigcomp.tcp.port2", "SIGCOMP", "tcp.port", 10},
{"synphasor.tcp_port", "SYNCHROPHASOR", "tcp.port", 10},
{"synphasor.tcp_port", "synphasor", "tcp.port", 10},
{"tipc.alternate_port", "TIPC", "tcp.port", 10},
{"vnc.alternate_port", "VNC", "tcp.port", 10},
{"scop.port", "SCoP", "tcp.port", 10},
@ -5087,8 +5087,8 @@ deprecated_port_pref(gchar *pref_name, const gchar *value)
{"actrace.udp_port", "ACtrace", "udp.port", 10},
{"brp.port", "BRP", "udp.port", 10},
{"bvlc.additional_udp_port", "BVLC", "udp.port", 10},
{"capwap.udp.port.control", "CAPWAP-CONTROL", "udp.port", 10},
{"capwap.udp.port.data", "CAPWAP-CONTROL", "udp.port", 10},
{"capwap.udp.port.control", "capwap", "udp.port", 10},
{"capwap.udp.port.data", "capwap", "udp.port", 10},
{"coap.udp_port", "CoAP", "udp.port", 10},
{"enttec.udp_port", "ENTTEC", "udp.port", 10},
{"forces.udp_alternate_port", "ForCES", "udp.port", 10},
@ -5105,16 +5105,15 @@ deprecated_port_pref(gchar *pref_name, const gchar *value)
{"rdt.default_udp_port", "RDT", "udp.port", 10},
{"alc.default.udp_port", "ALC", "udp.port", 10},
{"sigcomp.udp.port2", "SIGCOMP", "udp.port", 10},
{"synphasor.udp_port", "SYNCHROPHASOR", "udp.port", 10},
{"synphasor.udp_port", "synphasor", "udp.port", 10},
{"tdmop.udpport", "TDMoP", "udp.port", 10},
{"uaudp.port1", "UAUDP", "udp.port", 10},
{"uaudp.port2", "UAUDP", "udp.port", 10},
{"uaudp.port3", "UAUDP", "udp.port", 10},
{"uaudp.port4", "UAUDP", "udp.port", 10},
{"uhd.dissector_port", "UHD", "udp.port", 10},
{"vrt.dissector_port", "VITA 49", "udp.port", 10},
{"vuze-dht.udp_port", "Vuze-DHT", "udp.port", 10},
{"wimaxasncp.udp.wimax_port", "WiMAX ASN CP", "udp.port", 10},
{"vrt.dissector_port", "vrt", "udp.port", 10},
{"wimaxasncp.udp.wimax_port", "wimaxasncp", "udp.port", 10},
};
struct port_pref_name port_range_prefs[] = {
@ -5183,10 +5182,28 @@ deprecated_port_pref(gchar *pref_name, const gchar *value)
module_t *module;
pref_t *pref;
for (i = 0; i < sizeof(port_prefs)/sizeof(struct port_pref_name); i++)
{
if (strcmp(pref_name, port_prefs[i].pref_name) == 0)
{
static gboolean sanity_checked;
if (!sanity_checked) {
sanity_checked = TRUE;
for (i = 0; i < G_N_ELEMENTS(port_prefs); i++) {
module = prefs_find_module(port_prefs[i].module_name);
if (!module) {
ws_g_warning("Deprecated ports pref check - module '%s' not found", port_prefs[i].module_name);
continue;
}
pref = prefs_find_preference(module, port_prefs[i].table_name);
if (!pref) {
ws_g_warning("Deprecated ports pref '%s.%s' not found", module->name, port_prefs[i].table_name);
continue;
}
if (pref->type != PREF_DECODE_AS_UINT && pref->type != PREF_DECODE_AS_RANGE) {
ws_g_warning("Deprecated ports pref '%s.%s' has wrong type: %#x (%s)", module->name, port_prefs[i].table_name, pref->type, prefs_pref_type_name(pref));
}
}
}
for (i = 0; i < G_N_ELEMENTS(port_prefs); i++) {
if (strcmp(pref_name, port_prefs[i].pref_name) == 0) {
/* XXX - give an error if it doesn't fit in a guint? */
uval = (guint)strtoul(value, &p, port_prefs[i].base);
if (p == value || *p != '\0')