diff options
author | Jaap Keuter <jaap.keuter@xs4all.nl> | 2009-02-22 10:29:14 +0000 |
---|---|---|
committer | Jaap Keuter <jaap.keuter@xs4all.nl> | 2009-02-22 10:29:14 +0000 |
commit | 03bbd18a0bfb50b3d3c3c313fa112c03fd823e75 (patch) | |
tree | 36c10cf97b5acc3b51644a5bdb440489973db0f3 /plugins/lwres | |
parent | eb77f8a35e9793214ca7aae2f2c2629805a84be8 (diff) |
Incorporate plugin dissector into build in collection.
svn path=/trunk/; revision=27501
Diffstat (limited to 'plugins/lwres')
-rw-r--r-- | plugins/lwres/AUTHORS | 2 | ||||
-rw-r--r-- | plugins/lwres/Makefile.am | 127 | ||||
-rw-r--r-- | plugins/lwres/Makefile.common | 31 | ||||
-rw-r--r-- | plugins/lwres/Makefile.nmake | 106 | ||||
-rw-r--r-- | plugins/lwres/moduleinfo.h | 17 | ||||
-rw-r--r-- | plugins/lwres/moduleinfo.nmake | 28 | ||||
-rw-r--r-- | plugins/lwres/packet-lwres.c | 1510 | ||||
-rw-r--r-- | plugins/lwres/plugin.rc.in | 34 |
8 files changed, 0 insertions, 1855 deletions
diff --git a/plugins/lwres/AUTHORS b/plugins/lwres/AUTHORS deleted file mode 100644 index 1368ca6057..0000000000 --- a/plugins/lwres/AUTHORS +++ /dev/null @@ -1,2 +0,0 @@ -Author : -Oleg Terletsky <oleg.terletsky@comverse.com> diff --git a/plugins/lwres/Makefile.am b/plugins/lwres/Makefile.am deleted file mode 100644 index 0b830f057c..0000000000 --- a/plugins/lwres/Makefile.am +++ /dev/null @@ -1,127 +0,0 @@ -# Makefile.am -# Automake file for lwres plugin -# -# $Id$ -# -# Wireshark - Network traffic analyzer / light waight resolver (part of Bind9) -# By Steve Oleg Terletsky <oleg.terletsky@comverse.com> -# Copyright 2003 -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# - -INCLUDES = -I$(top_srcdir) -I$(includedir) - -include Makefile.common - -if HAVE_WARNINGS_AS_ERRORS -AM_CFLAGS = -Werror -endif - -plugindir = @plugindir@ - -plugin_LTLIBRARIES = lwres.la -lwres_la_SOURCES = \ - plugin.c \ - moduleinfo.h \ - $(DISSECTOR_SRC) \ - $(DISSECTOR_INCLUDES) -lwres_la_LDFLAGS = -module -avoid-version -lwres_la_LIBADD = @PLUGIN_LIBS@ - -# Libs must be cleared, or else libtool won't create a shared module. -# If your module needs to be linked against any particular libraries, -# add them here. -LIBS = - -# -# Build plugin.c, which contains the plugin version[] string, a -# function plugin_register() that calls the register routines for all -# protocols, and a function plugin_reg_handoff() that calls the handoff -# registration routines for all protocols. -# -# We do this by scanning sources. If that turns out to be too slow, -# maybe we could just require every .o file to have an register routine -# of a given name (packet-aarp.o -> proto_register_aarp, etc.). -# -# Formatting conventions: The name of the proto_register_* routines an -# proto_reg_handoff_* routines must start in column zero, or must be -# preceded only by "void " starting in column zero, and must not be -# inside #if. -# -# DISSECTOR_SRC is assumed to have all the files that need to be scanned. -# -# For some unknown reason, having a big "for" loop in the Makefile -# to scan all the files doesn't work with some "make"s; they seem to -# pass only the first few names in the list to the shell, for some -# reason. -# -# Therefore, we have a script to generate the plugin.c file. -# The shell script runs slowly, as multiple greps and seds are run -# for each input file; this is especially slow on Windows. Therefore, -# if Python is present (as indicated by PYTHON being defined), we run -# a faster Python script to do that work instead. -# -# The first argument is the directory in which the source files live. -# The second argument is "plugin", to indicate that we should build -# a plugin.c file for a plugin. -# All subsequent arguments are the files to scan. -# -plugin.c: $(DISSECTOR_SRC) $(top_srcdir)/tools/make-dissector-reg \ - $(top_srcdir)/tools/make-dissector-reg.py - @if test -n "$(PYTHON)"; then \ - echo Making plugin.c with python ; \ - $(PYTHON) $(top_srcdir)/tools/make-dissector-reg.py $(srcdir) \ - plugin $(DISSECTOR_SRC) ; \ - else \ - echo Making plugin.c with shell script ; \ - $(top_srcdir)/tools/make-dissector-reg $(srcdir) \ - $(plugin_src) plugin $(DISSECTOR_SRC) ; \ - fi - -# -# Currently plugin.c can be included in the distribution because -# we always build all protocol dissectors. We used to have to check -# whether or not to build the snmp dissector. If we again need to -# variably build something, making plugin.c non-portable, uncomment -# the dist-hook line below. -# -# Oh, yuk. We don't want to include "plugin.c" in the distribution, as -# its contents depend on the configuration, and therefore we want it -# to be built when the first "make" is done; however, Automake insists -# on putting *all* source into the distribution. -# -# We work around this by having a "dist-hook" rule that deletes -# "plugin.c", so that "dist" won't pick it up. -# -#dist-hook: -# @rm -f $(distdir)/plugin.c - -CLEANFILES = \ - lwres \ - *~ - -MAINTAINERCLEANFILES = \ - Makefile.in \ - plugin.c - -EXTRA_DIST = \ - Makefile.common \ - Makefile.nmake \ - moduleinfo.nmake \ - plugin.rc.in - -checkapi: - $(PERL) $(top_srcdir)/tools/checkAPIs.pl -g abort -g termoutput $(DISSECTOR_SRC) diff --git a/plugins/lwres/Makefile.common b/plugins/lwres/Makefile.common deleted file mode 100644 index a7364840bd..0000000000 --- a/plugins/lwres/Makefile.common +++ /dev/null @@ -1,31 +0,0 @@ -# Makefile.common for lwres plugin -# Contains the stuff from Makefile.am and Makefile.nmake that is -# a) common to both files and -# b) portable between both files -# -# $Id$ -# -# Wireshark - Network traffic analyzer -# By Gerald Combs <gerald@wireshark.org> -# Copyright 1998 Gerald Combs -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -# the name of the plugin -PLUGIN_NAME = lwres - -# the dissector sources (without any helpers) -DISSECTOR_SRC = \ - packet-lwres.c diff --git a/plugins/lwres/Makefile.nmake b/plugins/lwres/Makefile.nmake deleted file mode 100644 index acc863edc3..0000000000 --- a/plugins/lwres/Makefile.nmake +++ /dev/null @@ -1,106 +0,0 @@ -# Makefile.nmake -# nmake file for Wireshark plugin -# -# $Id$ -# - -include ..\..\config.nmake -include moduleinfo.nmake - -include Makefile.common - -CFLAGS=/WX /DHAVE_CONFIG_H /I../.. $(GLIB_CFLAGS) \ - /I$(PCAP_DIR)\include -D_U_="" $(LOCAL_CFLAGS) - -.c.obj:: - $(CC) $(CFLAGS) -Fd.\ -c $< - -LDFLAGS = $(PLUGIN_LDFLAGS) - -!IFDEF ENABLE_LIBWIRESHARK -LINK_PLUGIN_WITH=..\..\epan\libwireshark.lib -CFLAGS=/DHAVE_WIN32_LIBWIRESHARK_LIB /D_NEED_VAR_IMPORT_ $(CFLAGS) - -DISSECTOR_OBJECTS = $(DISSECTOR_SRC:.c=.obj) - -DISSECTOR_SUPPORT_OBJECTS = $(DISSECTOR_SUPPORT_SRC:.c=.obj) - -OBJECTS = $(DISSECTOR_OBJECTS) $(DISSECTOR_SUPPORT_OBJECTS) plugin.obj - -RESOURCE=$(PLUGIN_NAME).res - -all: $(PLUGIN_NAME).dll - -$(PLUGIN_NAME).rc : moduleinfo.nmake - sed -e s/@PLUGIN_NAME@/$(PLUGIN_NAME)/ \ - -e s/@RC_MODULE_VERSION@/$(RC_MODULE_VERSION)/ \ - -e s/@RC_VERSION@/$(RC_VERSION)/ \ - -e s/@MODULE_VERSION@/$(MODULE_VERSION)/ \ - -e s/@PACKAGE@/$(PACKAGE)/ \ - -e s/@VERSION@/$(VERSION)/ \ - -e s/@MSVC_VARIANT@/$(MSVC_VARIANT)/ \ - < plugin.rc.in > $@ - -$(PLUGIN_NAME).dll $(PLUGIN_NAME).exp $(PLUGIN_NAME).lib : $(OBJECTS) $(LINK_PLUGIN_WITH) $(RESOURCE) - link -dll /out:$(PLUGIN_NAME).dll $(LDFLAGS) $(OBJECTS) $(LINK_PLUGIN_WITH) \ - $(GLIB_LIBS) $(RESOURCE) -!IF $(MSC_VER_REQUIRED) >= 1400 - mt.exe -nologo -manifest "$(PLUGIN_NAME).dll.manifest" -outputresource:$(PLUGIN_NAME).dll;2 -!ENDIF - -# -# Build plugin.c, which contains the plugin version[] string, a -# function plugin_register() that calls the register routines for all -# protocols, and a function plugin_reg_handoff() that calls the handoff -# registration routines for all protocols. -# -# We do this by scanning sources. If that turns out to be too slow, -# maybe we could just require every .o file to have an register routine -# of a given name (packet-aarp.o -> proto_register_aarp, etc.). -# -# Formatting conventions: The name of the proto_register_* routines an -# proto_reg_handoff_* routines must start in column zero, or must be -# preceded only by "void " starting in column zero, and must not be -# inside #if. -# -# DISSECTOR_SRC is assumed to have all the files that need to be scanned. -# -# For some unknown reason, having a big "for" loop in the Makefile -# to scan all the files doesn't work with some "make"s; they seem to -# pass only the first few names in the list to the shell, for some -# reason. -# -# Therefore, we have a script to generate the plugin.c file. -# The shell script runs slowly, as multiple greps and seds are run -# for each input file; this is especially slow on Windows. Therefore, -# if Python is present (as indicated by PYTHON being defined), we run -# a faster Python script to do that work instead. -# -# The first argument is the directory in which the source files live. -# The second argument is "plugin", to indicate that we should build -# a plugin.c file for a plugin. -# All subsequent arguments are the files to scan. -# -!IFDEF PYTHON -plugin.c: $(DISSECTOR_SRC) moduleinfo.h ../../tools/make-dissector-reg.py - @echo Making plugin.c (using python) - @$(PYTHON) "../../tools/make-dissector-reg.py" . plugin $(DISSECTOR_SRC) -!ELSE -plugin.c: $(DISSECTOR_SRC) moduleinfo.h ../../tools/make-dissector-reg - @echo Making plugin.c (using sh) - @$(SH) ../../tools/make-dissector-reg . plugin $(DISSECTOR_SRC) -!ENDIF - -!ENDIF - -clean: - rm -f $(OBJECTS) $(RESOURCE) plugin.c *.pdb \ - $(PLUGIN_NAME).dll $(PLUGIN_NAME).dll.manifest $(PLUGIN_NAME).lib \ - $(PLUGIN_NAME).exp $(PLUGIN_NAME).rc - -distclean: clean - -maintainer-clean: distclean - -checkapi: - $(PERL) ../../tools/checkAPIs.pl -g abort -g termoutput $(DISSECTOR_SRC) diff --git a/plugins/lwres/moduleinfo.h b/plugins/lwres/moduleinfo.h deleted file mode 100644 index e7cfc200ea..0000000000 --- a/plugins/lwres/moduleinfo.h +++ /dev/null @@ -1,17 +0,0 @@ -/* Included *after* config.h, in order to re-define these macros */ - -#ifdef PACKAGE -#undef PACKAGE -#endif - -/* Name of package */ -#define PACKAGE "lwres" - - -#ifdef VERSION -#undef VERSION -#endif - -/* Version number of package */ -#define VERSION "0.0.1" - diff --git a/plugins/lwres/moduleinfo.nmake b/plugins/lwres/moduleinfo.nmake deleted file mode 100644 index d5b24f50e1..0000000000 --- a/plugins/lwres/moduleinfo.nmake +++ /dev/null @@ -1,28 +0,0 @@ -# -# $Id$ -# - -# The name -PACKAGE=lwres - -# The version -MODULE_VERSION_MAJOR=0 -MODULE_VERSION_MINOR=0 -MODULE_VERSION_MICRO=1 -MODULE_VERSION_EXTRA=0 - -# -# The RC_VERSION should be comma-separated, not dot-separated, -# as per Graham Bloice's message in -# -# http://www.ethereal.com/lists/ethereal-dev/200303/msg00283.html -# -# "The RC_VERSION variable in config.nmake should be comma separated. -# This allows the resources to be built correctly and the version -# number to be correctly displayed in the explorer properties dialog -# for the executables, and XP's tooltip, rather than 0.0.0.0." -# - -MODULE_VERSION=$(MODULE_VERSION_MAJOR).$(MODULE_VERSION_MINOR).$(MODULE_VERSION_MICRO).$(MODULE_VERSION_EXTRA) -RC_MODULE_VERSION=$(MODULE_VERSION_MAJOR),$(MODULE_VERSION_MINOR),$(MODULE_VERSION_MICRO),$(MODULE_VERSION_EXTRA) - diff --git a/plugins/lwres/packet-lwres.c b/plugins/lwres/packet-lwres.c deleted file mode 100644 index e4cd212f87..0000000000 --- a/plugins/lwres/packet-lwres.c +++ /dev/null @@ -1,1510 +0,0 @@ -/* packet-lwres.c - * Routines for light weight reslover (lwres, part of BIND9) packet disassembly - * - * $Id$ - * - * Copyright (c) 2003 by Oleg Terletsky <oleg.terletsky@comverse.com> - * - * Wireshark - Network traffic analyzer - * By Gerald Combs <gerald@wireshark.org> - * Copyright 1999 Gerald Combs - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <stdio.h> -#include <stdlib.h> -#include <ctype.h> -#include <time.h> -#include <string.h> - -#include <glib.h> -#include <epan/packet.h> -#include <epan/prefs.h> - -#define LWRES_LWPACKET_LENGTH (4 * 5 + 2 * 4) -#define LWRES_LWPACKETFLAG_RESPONSE 0x0001U /* if set, pkt is a response */ -#define LWRES_LWPACKETVERSION_0 0 - -#define LW_LENGTH_OFFSET 0 -#define LW_VERSION_OFFSET 4 -#define LW_PKTFLASG_OFFSET 6 -#define LW_SERIAL_OFFSET 8 -#define LW_OPCODE_OFFSET 12 -#define LW_RESULT_OFFSET 16 -#define LW_RECVLEN_OFFSET 20 -#define LW_AUTHTYPE_OFFSET 24 -#define LW_AUTHLEN_OFFSET 26 - - -#define LWRES_OPCODE_NOOP 0x00000000U -#define LWRES_OPCODE_GETADDRSBYNAME 0x00010001U -#define LWRES_OPCODE_GETNAMEBYADDR 0x00010002U -#define LWRES_OPCODE_GETRDATABYNAME 0x00010003U - -static const value_string opcode_values[] = { - { LWRES_OPCODE_NOOP, "Noop" }, - { LWRES_OPCODE_GETADDRSBYNAME, "getaddrbyname" }, - { LWRES_OPCODE_GETNAMEBYADDR, "getnamebyaddr" }, - { LWRES_OPCODE_GETRDATABYNAME, "getrdatabyname" }, - { 0, NULL }, -}; - - -#define LWRES_R_SUCCESS 0 -#define LWRES_R_NOMEMORY 1 -#define LWRES_R_TIMEOUT 2 -#define LWRES_R_NOTFOUND 3 -#define LWRES_R_UNEXPECTEDEND 4 /* unexpected end of input */ -#define LWRES_R_FAILURE 5 /* generic failure */ -#define LWRES_R_IOERROR 6 -#define LWRES_R_NOTIMPLEMENTED 7 -#define LWRES_R_UNEXPECTED 8 -#define LWRES_R_TRAILINGDATA 9 -#define LWRES_R_INCOMPLETE 10 -#define LWRES_R_RETRY 11 -#define LWRES_R_TYPENOTFOUND 12 -#define LWRES_R_TOOLARGE 13 - -#define T_A 1 -#define T_NS 2 -#define T_MX 15 -#define T_SRV 33 - - -static const value_string t_types[] = { - { T_A, "T_A" }, - { T_NS, "T_NS" }, - { T_MX, "T_MX" }, - { T_SRV, "T_SRV" }, - { 0, NULL }, -}; - - - - -static const value_string result_values[] = { - { LWRES_R_SUCCESS, "Success" }, - { LWRES_R_NOMEMORY, "No memory" }, - { LWRES_R_TIMEOUT, "Timeout" }, - { LWRES_R_NOTFOUND, "Not found" }, - { LWRES_R_UNEXPECTEDEND, "Unexpected end of input" }, - { LWRES_R_FAILURE, "Generic failure" }, - { LWRES_R_IOERROR, "I/O Error" }, - { LWRES_R_UNEXPECTED, "Unexpected" }, - { LWRES_R_TRAILINGDATA, "Trailing data" }, - { LWRES_R_INCOMPLETE, "Incomplete" }, - { LWRES_R_RETRY, "Retry" }, - { LWRES_R_TYPENOTFOUND, "Type not found" }, - { LWRES_R_TOOLARGE, "Too large" }, - { 0, NULL }, -}; - -static int hf_length = -1; -static int hf_version = -1; -static int hf_flags = -1; -static int hf_serial = -1; -static int hf_opcode = -1; -static int hf_result = -1; -static int hf_recvlen = -1; -static int hf_authtype = -1; -static int hf_authlen = -1; - -static int hf_rflags = -1; -static int hf_rdclass = -1; -static int hf_rdtype = -1; -static int hf_namelen = -1; -static int hf_req_name = -1; - -static int hf_ttl = -1; -static int hf_nrdatas = -1; -static int hf_nsigs = -1; -static int hf_realnamelen = -1; -static int hf_realname = -1; - - -static int hf_a_record = -1; -static int hf_a_rec_len = -1; -static int hf_srv_prio = -1; -static int hf_srv_weight = -1; -static int hf_srv_port = -1; - -static int hf_adn_flags = -1; -static int hf_adn_addrtype = -1; -static int hf_adn_namelen = -1; -static int hf_adn_name = -1; - -static int hf_adn_realname = -1; -static int hf_adn_aliasname = -1; - -static int hf_adn_naddrs = -1; -static int hf_adn_naliases = -1; -static int hf_adn_family = -1; -static int hf_adn_addr_len = -1; -static int hf_adn_addr_addr = -1; - - -static int ett_lwres = -1; -static int ett_rdata_req = -1; -static int ett_rdata_resp = -1; -static int ett_a_rec = -1; -static int ett_a_rec_addr = -1; -static int ett_srv_rec = -1; -static int ett_srv_rec_item = -1; -static int ett_adn_request = -1; -static int ett_adn_resp = -1; -static int ett_adn_alias = -1; -static int ett_adn_addr = -1; -static int ett_nba_request = -1; -static int ett_nba_resp = -1; -static int ett_noop = -1; - -static int ett_mx_rec = -1; -static int ett_mx_rec_item = -1; - -static int ett_ns_rec = -1; -static int ett_ns_rec_item = -1; - - - -#define LWRES_UDP_PORT 921 - -static guint global_lwres_port = LWRES_UDP_PORT; - -void proto_reg_handoff_lwres(void); - - -/* Define the lwres proto */ -static int proto_lwres = -1; - - -/* Define many many headers for mgcp */ - -static const value_string message_types_values[] = { - { 1, "REQUEST " }, - { 2, "RESPONSE" }, - { 0 , NULL }, -}; - - - -static int -lwres_get_dns_name(tvbuff_t *tvb, int offset, int dns_data_offset, - char *name, int maxname) -{ - int start_offset = offset; - char *np = name; - int len = -1; - int chars_processed = 0; - int data_size = tvb_reported_length_remaining(tvb, dns_data_offset); - int component_len; - int indir_offset; - - const int min_len = 1; /* Minimum length of encoded name (for root) */ - /* If we're about to return a value (probably negative) which is less - * than the minimum length, we're looking at bad data and we're liable - * to put the dissector into a loop. Instead we throw an exception */ - - maxname--; /* reserve space for the trailing '\0' */ - for (;;) { - component_len = tvb_get_guint8(tvb, offset); - offset++; - if (component_len == 0) - break; - chars_processed++; - switch (component_len & 0xc0) { - - case 0x00: - /* Label */ - if (np != name) { - /* Not the first component - put in a '.'. */ - if (maxname > 0) { - *np++ = '.'; - maxname--; - } - } - while (component_len > 0) { - if (maxname > 0) { - *np++ = tvb_get_guint8(tvb, offset); - maxname--; - } - component_len--; - offset++; - chars_processed++; - } - break; - - case 0x40: - /* Extended label (RFC 2673) */ - switch (component_len & 0x3f) { - - case 0x01: - /* Bitstring label */ - { - int bit_count; - int label_len; - int print_len; - - - bit_count = tvb_get_guint8(tvb, offset); - offset++; - label_len = (bit_count - 1) / 8 + 1; - - - if (maxname > 0) { - print_len = g_snprintf(np, maxname + 1, "\\[x"); - if (print_len != -1 && print_len < maxname + 1) { - /* Some versions of g_snprintf return -1 if they'd truncate - the output. */ - np += print_len; - maxname -= print_len; - } else { - /* Nothing printed, as there's no room. - Suppress all subsequent printing. */ - maxname = 0; - } - } - while(label_len--) { - if (maxname > 0) { - print_len = g_snprintf(np, maxname + 1, "%02x", - tvb_get_guint8(tvb, offset)); - if (print_len != -1 && print_len < maxname + 1) { - /* Some versions of g_snprintf return -1 if they'd truncate - the output. */ - np += print_len; - maxname -= print_len; - } else { - /* Nothing printed, as there's no room. - Suppress all subsequent printing. */ - maxname = 0; - } - } - offset++; - } - if (maxname > 0) { - print_len = g_snprintf(np, maxname + 1, "/%d]", bit_count); - if (print_len != -1 && print_len < maxname + 1) { - /* Some versions of g_snprintf return -1 if they'd truncate - the output. */ - np += print_len; - maxname -= print_len; - } else { - /* Nothing printed, as there's no room. - Suppress all subsequent printing. */ - maxname = 0; - } - } - } - break; - - default: - g_strlcpy(name, "<Unknown extended label>", maxname); - /* Parsing will propably fail from here on, since the */ - /* label length is unknown... */ - len = offset - start_offset; - if (len < min_len) - THROW(ReportedBoundsError); - return len; - } - break; - - case 0x80: - THROW(ReportedBoundsError); - - case 0xc0: - /* Pointer. */ - indir_offset = dns_data_offset + - (((component_len & ~0xc0) << 8) | tvb_get_guint8(tvb, offset)); - offset++; - chars_processed++; - - /* If "len" is negative, we are still working on the original name, - not something pointed to by a pointer, and so we should set "len" - to the length of the original name. */ - if (len < 0) - len = offset - start_offset; - - /* If we've looked at every character in the message, this pointer - will make us look at some character again, which means we're - looping. */ - if (chars_processed >= data_size) { - g_strlcpy(name, "<Name contains a pointer that loops>", maxname); - if (len < min_len) - THROW(ReportedBoundsError); - return len; - } - - offset = indir_offset; - break; /* now continue processing from there */ - } - } - - *np = '\0'; - /* If "len" is negative, we haven't seen a pointer, and thus haven't - set the length, so set it. */ - if (len < 0) - len = offset - start_offset; - /* Zero-length name means "root server" */ - if (*name == '\0') - g_strlcpy(name, "<Root>", maxname); - if (len < min_len) - THROW(ReportedBoundsError); - return len; -} - - -static void dissect_getnamebyaddr_request(tvbuff_t* tvb, proto_tree* lwres_tree) -{ - guint32 flags,family; - guint16 addrlen, slen; - const guint8* addr; - - proto_item* nba_request_item; - proto_tree* nba_request_tree; - - flags = tvb_get_ntohl(tvb, LWRES_LWPACKET_LENGTH); - family = tvb_get_ntohl(tvb, LWRES_LWPACKET_LENGTH + 4); - addrlen = tvb_get_ntohs(tvb, LWRES_LWPACKET_LENGTH + 8); - addr = tvb_get_ptr(tvb, LWRES_LWPACKET_LENGTH + 10, 4); - slen = strlen(ip_to_str(addr)); - - if(lwres_tree) - { - nba_request_item = proto_tree_add_text(lwres_tree,tvb,LWRES_LWPACKET_LENGTH,LWRES_LWPACKET_LENGTH+14,"getnamebyaddr parameters"); - nba_request_tree = proto_item_add_subtree(nba_request_item, ett_nba_request); - } - else return; - - proto_tree_add_uint(nba_request_tree, - hf_adn_flags, - tvb, - LWRES_LWPACKET_LENGTH, - 4, - flags); - - proto_tree_add_uint(nba_request_tree, - hf_adn_family, - tvb, - LWRES_LWPACKET_LENGTH + 4, - 4, - family); - - proto_tree_add_uint(nba_request_tree, - hf_adn_addr_len, - tvb, - LWRES_LWPACKET_LENGTH + 8, - 2, - addrlen); - - proto_tree_add_string(nba_request_tree, - hf_adn_addr_addr, - tvb, - LWRES_LWPACKET_LENGTH + 10, - slen, - ip_to_str(addr)); - -} - -static void dissect_getnamebyaddr_response(tvbuff_t* tvb, proto_tree* lwres_tree) -{ - guint32 flags,i, offset; - guint16 naliases,realnamelen,aliaslen; - char aliasname[120]; - char realname[120]; - - - proto_item* nba_resp_item; - proto_tree* nba_resp_tree; - - proto_item* alias_item; - proto_tree* alias_tree; - - if(lwres_tree) - { - nba_resp_item = proto_tree_add_text(lwres_tree, tvb, LWRES_LWPACKET_LENGTH, 10,"getnamebyaddr records"); - nba_resp_tree = proto_item_add_subtree(nba_resp_item, ett_nba_resp); - } - else return; - - flags = tvb_get_ntohl(tvb, LWRES_LWPACKET_LENGTH); - naliases = tvb_get_ntohs(tvb, LWRES_LWPACKET_LENGTH + 4); - realnamelen = tvb_get_ntohs(tvb,LWRES_LWPACKET_LENGTH + 4 + 2); - tvb_get_nstringz(tvb, LWRES_LWPACKET_LENGTH + 4 + 2 + 2, realnamelen, (guint8*)realname); - realname[realnamelen]='\0'; - - proto_tree_add_uint(nba_resp_tree, - hf_adn_flags, - tvb, - LWRES_LWPACKET_LENGTH, - 4, - flags); - proto_tree_add_uint(nba_resp_tree, - hf_adn_naliases, - tvb, - LWRES_LWPACKET_LENGTH + 4, - 2, - naliases); - - proto_tree_add_uint(nba_resp_tree, - hf_adn_namelen, - tvb, - LWRES_LWPACKET_LENGTH + 6, - 2, - realnamelen); - - proto_tree_add_string(nba_resp_tree, - hf_adn_realname, - tvb, - LWRES_LWPACKET_LENGTH + 8, - realnamelen, - realname); - - offset=LWRES_LWPACKET_LENGTH + 8 + realnamelen; - - if(naliases) - { - for(i=0; i<naliases; i++) - { - aliaslen = tvb_get_ntohs(tvb, offset); - tvb_get_nstringz(tvb, offset + 2, aliaslen, (guint8*)aliasname); - aliasname[aliaslen]='\0'; - - alias_item = proto_tree_add_text(nba_resp_tree, tvb, offset, 2 + aliaslen, "Alias %s",aliasname); - alias_tree = proto_item_add_subtree(alias_item, ett_adn_alias); - - proto_tree_add_uint(alias_tree, - hf_adn_namelen, - tvb, - offset, - 2, - aliaslen); - - proto_tree_add_string(alias_tree, - hf_adn_aliasname, - tvb, - offset + 2, - aliaslen, - aliasname); - - offset+=(2 + aliaslen + 1); - } - } -} - -static void dissect_getaddrsbyname_request(tvbuff_t* tvb, proto_tree* lwres_tree) -{ - guint32 flags,addrtype; - guint16 namelen; - guint8 name[120]; - - proto_item* adn_request_item; - proto_tree* adn_request_tree; - - flags = tvb_get_ntohl(tvb, LWRES_LWPACKET_LENGTH); - addrtype = tvb_get_ntohl(tvb, LWRES_LWPACKET_LENGTH + 4); - namelen = tvb_get_ntohs(tvb, LWRES_LWPACKET_LENGTH + 8); - tvb_get_nstringz(tvb, LWRES_LWPACKET_LENGTH+10, namelen, name); - name[namelen]='\0'; - - if(lwres_tree) - { - adn_request_item = proto_tree_add_text(lwres_tree,tvb, - LWRES_LWPACKET_LENGTH,10+namelen+1, - "getaddrbyname parameters"); - adn_request_tree = proto_item_add_subtree(adn_request_item, ett_adn_request); - } - else - return; - - - proto_tree_add_uint(adn_request_tree, - hf_adn_flags, - tvb, - LWRES_LWPACKET_LENGTH+0, - sizeof(guint32), - flags); - - proto_tree_add_uint(adn_request_tree, - hf_adn_addrtype, - tvb, - LWRES_LWPACKET_LENGTH+4, - sizeof(guint32), - addrtype); - - proto_tree_add_uint(adn_request_tree, - hf_adn_namelen, - tvb, - LWRES_LWPACKET_LENGTH+8, - sizeof(guint16), - namelen); - - proto_tree_add_string(adn_request_tree, - hf_adn_name, - tvb, - LWRES_LWPACKET_LENGTH+10, - namelen, - (gchar*)name); - -} - - -static void dissect_getaddrsbyname_response(tvbuff_t* tvb, proto_tree* lwres_tree) -{ - guint32 flags, family ,i, offset; - guint16 naliases, naddrs, realnamelen, length, aliaslen; - const gchar* addr; - guint slen; - char realname[120]; - char aliasname[120]; - - proto_item* adn_resp_item; - proto_tree* adn_resp_tree; - proto_item* alias_item; - proto_tree* alias_tree; - proto_item* addr_item; - proto_tree* addr_tree; - - - - if(lwres_tree) - { - adn_resp_item = proto_tree_add_text(lwres_tree, tvb, LWRES_LWPACKET_LENGTH, 10, "getaddrbyname records"); - adn_resp_tree = proto_item_add_subtree(adn_resp_item, ett_adn_resp); - } - else return; - - flags = tvb_get_ntohl(tvb, LWRES_LWPACKET_LENGTH); - naliases = tvb_get_ntohs(tvb, LWRES_LWPACKET_LENGTH + 4); - naddrs = tvb_get_ntohs(tvb, LWRES_LWPACKET_LENGTH + 6); - realnamelen = tvb_get_ntohs(tvb, LWRES_LWPACKET_LENGTH + 8); - tvb_get_nstringz(tvb, LWRES_LWPACKET_LENGTH + 10, realnamelen, (guint8*)realname); - realname[realnamelen]='\0'; - - - proto_tree_add_uint(adn_resp_tree, - hf_adn_flags, - tvb, - LWRES_LWPACKET_LENGTH, - 4, - flags); - - proto_tree_add_uint(adn_resp_tree, - hf_adn_naliases, - tvb, - LWRES_LWPACKET_LENGTH + 4, - 2, - naliases); - - proto_tree_add_uint(adn_resp_tree, - hf_adn_naddrs, - tvb, - LWRES_LWPACKET_LENGTH + 6, - 2, - naddrs); - - proto_tree_add_uint(adn_resp_tree, - hf_adn_namelen, - tvb, - LWRES_LWPACKET_LENGTH + 8, - 2, - realnamelen); - - proto_tree_add_string(adn_resp_tree, - hf_adn_realname, - tvb, - LWRES_LWPACKET_LENGTH + 10, - realnamelen, - realname); - - offset = LWRES_LWPACKET_LENGTH + 10 + realnamelen + 1; - - if(naliases) - { - for(i=0; i<naliases; i++) - { - aliaslen = tvb_get_ntohs(tvb, offset); - tvb_get_nstringz(tvb, offset + 2, aliaslen, (guint8*)aliasname); - aliasname[aliaslen]='\0'; - - alias_item = proto_tree_add_text(adn_resp_tree, tvb, offset, 2 + aliaslen, "Alias %s",aliasname); - alias_tree = proto_item_add_subtree(alias_item, ett_adn_alias); - - proto_tree_add_uint(alias_tree, - hf_adn_namelen, - tvb, - offset, - 2, - aliaslen); - - proto_tree_add_string(alias_tree, - hf_adn_aliasname, - tvb, - offset + 2, - aliaslen, - aliasname); - - offset+=(2 + aliaslen + 1); - } - } - - if(naddrs) - { - for(i=0; i < naddrs; i++) - { - family = tvb_get_ntohl(tvb, offset); - length = tvb_get_ntohs(tvb, offset + 4); - addr = (gchar*)tvb_get_ptr(tvb, offset + 6, 4); - slen = strlen((char*)ip_to_str((guint8*)addr)); - - addr_item = proto_tree_add_text(adn_resp_tree,tvb, offset, 4+2+4, "Address %s",ip_to_str((guint8*)addr)); - addr_tree = proto_item_add_subtree(addr_item, ett_adn_addr); - - proto_tree_add_uint(addr_tree, - hf_adn_family, - tvb, - offset, - 4, - family); - - proto_tree_add_uint(addr_tree, - hf_adn_addr_len, - tvb, - offset + 4, - 2, - length); - - proto_tree_add_string(addr_tree, - hf_adn_addr_addr, - tvb, - offset + 6, - slen, - ip_to_str((guint8*)addr)); - - offset+= 4 + 2 + 4; - } - } - - -} - -static void dissect_a_records(tvbuff_t* tvb, proto_tree* tree,guint32 nrec,int offset) -{ - guint32 i, curr; - const gchar* addr; - guint16 len; - proto_item* a_rec_item; - proto_tree* a_rec_tree; - proto_item* addr_item; - proto_tree* addr_tree; - - if(tree) - { - a_rec_item = proto_tree_add_text(tree,tvb,offset, - ((sizeof(guint32) + sizeof(guint16)) * nrec),"A records"); - - a_rec_tree = proto_item_add_subtree(a_rec_item, ett_a_rec); - } - else - return; - - for(i=0; i<nrec; i++) - { - - curr = offset + ((sizeof(guint32)+sizeof(guint16)) * i); - - len = tvb_get_ntohs(tvb,curr); - addr = (gchar*)tvb_get_ptr(tvb,curr+2,4); - - if(a_rec_tree) - { - addr_item = proto_tree_add_text(a_rec_tree,tvb, curr, 6,"IP Address"); - addr_tree = proto_item_add_subtree(addr_item, ett_a_rec_addr); - proto_item_set_text(addr_item,"Address %s",ip_to_str((guint8*)addr)); - } - else return; - - proto_tree_add_uint(addr_tree, - hf_a_rec_len, - tvb, - curr, - sizeof(guint16), - len); - - proto_tree_add_text(addr_tree, - tvb, - curr + 2, - 4, - "Addr: %s", - ip_to_str((guint8*)addr)); - - } - -} - -static void dissect_srv_records(tvbuff_t* tvb, proto_tree* tree,guint32 nrec,int offset) -{ - guint32 i, curr; - guint16 len, priority, weight, port, namelen, dlen; - const char *cmpname; - guint8 dname[120]; - - proto_item* srv_rec_item, *rec_item; - proto_item* srv_rec_tree, *rec_tree; - - if(tree) - { - srv_rec_item = proto_tree_add_text(tree, tvb, offset, offset, "SRV records"); - srv_rec_tree = proto_item_add_subtree(srv_rec_item, ett_srv_rec); - proto_item_set_text(srv_rec_item, "SRV records (%d)", nrec); - } - else return; - - curr = offset; - - for(i=0; i < nrec; i++) - { - len = tvb_get_ntohs(tvb, curr); - priority = tvb_get_ntohs(tvb, curr + 2); - weight = tvb_get_ntohs(tvb, curr + 4); - port = tvb_get_ntohs(tvb, curr + 6); - namelen = len - 8; - cmpname = (char*)tvb_get_ptr(tvb, curr + 8, namelen); - - dlen = lwres_get_dns_name(tvb, curr + 8, curr, (gchar*)dname, sizeof(dname)); - - if(srv_rec_tree) - { - rec_item = proto_tree_add_text(srv_rec_tree, tvb, curr, 6," "); - rec_tree = proto_item_add_subtree(rec_item, ett_srv_rec_item); - proto_item_set_text(rec_item, - "SRV record:pri=%d,w=%d,port=%d,dname=%s", - priority, - weight, - port, - dname); - } - else return; - - proto_tree_add_uint(rec_tree, - hf_srv_prio, - tvb, - curr + 2, - 2, - priority); - - proto_tree_add_uint(rec_tree, - hf_srv_weight, - tvb, - curr + 4, - 2, - weight); - - proto_tree_add_uint(rec_tree, - hf_srv_port, - tvb, - curr + 6, - 2, - port); - - - proto_tree_add_text(rec_tree, - tvb, - curr + 8, - dlen, - "DNAME: %s", dname); - - curr+=((sizeof(short)*4) + dlen); - - } - -} - -static void dissect_mx_records(tvbuff_t* tvb, proto_tree* tree, guint32 nrec, int offset) -{ - - guint32 i, curr; - guint16 len, priority, dlen, namelen; - const char* cname; - guint8 dname[120]; - - proto_item* mx_rec_item, *rec_item; - proto_tree* mx_rec_tree, *rec_tree; - - - if(tree) - { - mx_rec_item = proto_tree_add_text(tree, tvb, offset, offset, "MX records (%d)", nrec); - mx_rec_tree = proto_item_add_subtree(mx_rec_item, ett_mx_rec); - } - else - return; - - curr = offset; - for(i=0; i < nrec; i++) - { - len = tvb_get_ntohs(tvb, curr); - priority = tvb_get_ntohs(tvb, curr + 2); - namelen = len - 4; - cname = (char*)tvb_get_ptr(tvb, curr + 4, 4); - dlen = lwres_get_dns_name(tvb, curr + 4, curr, (gchar*)dname, sizeof(dname)); - if(mx_rec_tree) - { - rec_item = proto_tree_add_text(mx_rec_tree, tvb, curr,6,"MX record: pri=%d,dname=%s", - priority,dname); - rec_tree = proto_item_add_subtree(rec_item, ett_mx_rec_item); - } - else - return; - - - proto_tree_add_uint(rec_tree, - hf_srv_prio, - tvb, - curr + 2, - 2, - priority); - - proto_tree_add_text(rec_tree, - tvb, - curr + 4, - dlen, - "name: %s", dname); - - curr+=((sizeof(short)*2) + dlen); - - - } - -} - -static void dissect_ns_records(tvbuff_t* tvb, proto_tree* tree, guint32 nrec, int offset) -{ - guint32 i, curr; - guint16 len, dlen, namelen; - guint8 dname[120]; - - proto_item* ns_rec_item, *rec_item; - proto_tree* ns_rec_tree, *rec_tree; - - if(tree) - { - ns_rec_item = proto_tree_add_text(tree, tvb, offset, offset, "NS record (%d)", nrec); - ns_rec_tree = proto_item_add_subtree(ns_rec_item, ett_ns_rec); - } - else - return; - curr=offset; - - for(i=0;i<nrec;i++) - { - len = tvb_get_ntohs(tvb, curr); - namelen = len - 2; - dlen = lwres_get_dns_name(tvb, curr + 2, curr, (char*)dname, sizeof(dname)); - if(ns_rec_tree) - { - rec_item = proto_tree_add_text(ns_rec_tree, tvb, curr,4, "NS record: dname=%s",dname); - rec_tree = proto_item_add_subtree(rec_item, ett_ns_rec_item); - } - else - return; - - proto_tree_add_text(rec_tree, - tvb, - curr + 2, - dlen, - "Name: %s", dname); - curr+=(sizeof(short) + dlen); - - } - - -} - -static void dissect_rdata_request(tvbuff_t* tvb, proto_tree* lwres_tree) -{ - guint32 rflags; - guint16 rdclass, rdtype, namelen; - guint8 name[120]; - - proto_item* rdata_request_item; - proto_tree* rdata_request_tree; - - rflags = tvb_get_ntohl(tvb, LWRES_LWPACKET_LENGTH+0); - rdclass = tvb_get_ntohs(tvb, LWRES_LWPACKET_LENGTH+4); - rdtype = tvb_get_ntohs(tvb, LWRES_LWPACKET_LENGTH+6); - namelen = tvb_get_ntohs(tvb, LWRES_LWPACKET_LENGTH+8); - tvb_get_nstringz(tvb, LWRES_LWPACKET_LENGTH+10, namelen, name); - name[namelen]='\0'; - - if(lwres_tree) - { - rdata_request_item = - proto_tree_add_text(lwres_tree,tvb,LWRES_LWPACKET_LENGTH,10+namelen+1,"RDATA request parameters"); - rdata_request_tree = proto_item_add_subtree(rdata_request_item, ett_rdata_req); - } - else - return; - - proto_tree_add_uint(rdata_request_tree, - hf_rflags, - tvb, - LWRES_LWPACKET_LENGTH+0, - sizeof(guint32), - rflags); - - proto_tree_add_uint(rdata_request_tree, - hf_rdclass, - tvb, - LWRES_LWPACKET_LENGTH+4, - sizeof(guint16), - rdclass); - - proto_tree_add_uint(rdata_request_tree, - hf_rdtype, - tvb, - LWRES_LWPACKET_LENGTH+6, - sizeof(guint16), - rdtype); - - proto_tree_add_uint(rdata_request_tree, - hf_namelen, - tvb, - LWRES_LWPACKET_LENGTH+8, - sizeof(guint16), - namelen); - - proto_tree_add_string(rdata_request_tree, - hf_req_name, - tvb, - LWRES_LWPACKET_LENGTH+10, - namelen, - (char*)name); - -} - -static void dissect_rdata_response(tvbuff_t* tvb, proto_tree* lwres_tree) -{ - guint32 rflags, ttl, offset; - guint16 rdclass, rdtype, nrdatas, nsigs, realnamelen; - guint8 realname[120]; - - proto_item* rdata_resp_item; - proto_tree* rdata_resp_tree; - - rflags = tvb_get_ntohl(tvb, LWRES_LWPACKET_LENGTH+0); - rdclass = tvb_get_ntohs(tvb, LWRES_LWPACKET_LENGTH+4); - rdtype = tvb_get_ntohs(tvb, LWRES_LWPACKET_LENGTH+6); - ttl = tvb_get_ntohl(tvb, LWRES_LWPACKET_LENGTH+8); - nrdatas = tvb_get_ntohs(tvb, LWRES_LWPACKET_LENGTH+12); - nsigs = tvb_get_ntohs(tvb, LWRES_LWPACKET_LENGTH+14); - realnamelen = tvb_get_ntohs(tvb,LWRES_LWPACKET_LENGTH+16); - tvb_get_nstringz(tvb,LWRES_LWPACKET_LENGTH+18,realnamelen, realname); - realname[realnamelen]='\0'; - - offset = LWRES_LWPACKET_LENGTH + 18 + realnamelen + 1; - - if(lwres_tree) - { - rdata_resp_item = proto_tree_add_text(lwres_tree,tvb,LWRES_LWPACKET_LENGTH, 18+realnamelen+1,"RDATA response"); - rdata_resp_tree = proto_item_add_subtree(rdata_resp_item, ett_rdata_resp); - } - else - return; - - proto_tree_add_uint(rdata_resp_tree, - hf_rflags, - tvb, - LWRES_LWPACKET_LENGTH+0, - sizeof(guint32), - rflags); - - proto_tree_add_uint(rdata_resp_tree, - hf_rdclass, - tvb, - LWRES_LWPACKET_LENGTH+4, - sizeof(guint16), - rdclass); - - proto_tree_add_uint(rdata_resp_tree, - hf_rdtype, - tvb, - LWRES_LWPACKET_LENGTH+6, - sizeof(guint16), - rdtype); - - proto_tree_add_uint(rdata_resp_tree, - hf_ttl, - tvb, - LWRES_LWPACKET_LENGTH+8, - sizeof(guint32), - ttl); - - proto_tree_add_uint(rdata_resp_tree, - hf_nrdatas, - tvb, - LWRES_LWPACKET_LENGTH+12, - sizeof(guint16), - nrdatas); - - proto_tree_add_uint(rdata_resp_tree, - hf_nsigs, - tvb, - LWRES_LWPACKET_LENGTH+14, - sizeof(guint16), - nsigs); - - proto_tree_add_uint(rdata_resp_tree, - hf_realnamelen, - tvb, - LWRES_LWPACKET_LENGTH+16, - sizeof(guint16), - realnamelen); - - proto_tree_add_string(rdata_resp_tree, - hf_realname, - tvb, - LWRES_LWPACKET_LENGTH+18, - realnamelen, - (char*)realname); - - switch(rdtype) - { - case T_A: - dissect_a_records(tvb,rdata_resp_tree,nrdatas,offset); - break; - - case T_SRV: - dissect_srv_records(tvb,rdata_resp_tree,nrdatas, offset); - break; - - case T_MX: - dissect_mx_records(tvb,rdata_resp_tree,nrdatas, offset); - break; - - case T_NS: - dissect_ns_records(tvb,rdata_resp_tree,nrdatas, offset); - break; - } - -} - -static void dissect_noop(tvbuff_t* tvb, proto_tree* lwres_tree) -{ - guint16 datalen; - const char* data; - - proto_item* noop_item; - proto_tree* noop_tree; - - datalen = tvb_get_ntohs(tvb, LWRES_LWPACKET_LENGTH); - data = (char*)tvb_get_ptr(tvb, LWRES_LWPACKET_LENGTH, datalen); - - if(lwres_tree) - { - noop_item = proto_tree_add_text(lwres_tree, tvb, LWRES_LWPACKET_LENGTH, 10, "Noop record"); - noop_tree = proto_item_add_subtree(noop_item, ett_noop); - } - else - return; - - proto_tree_add_uint(noop_tree, - hf_length, - tvb, - LWRES_LWPACKET_LENGTH, - sizeof(guint16), - datalen); - -} - -static void dissect_getaddrsbyname(tvbuff_t* tvb, proto_tree* lwres_tree, int type) -{ - if(type == 1) - dissect_getaddrsbyname_request(tvb, lwres_tree); - else - dissect_getaddrsbyname_response(tvb, lwres_tree); -} - -static void dissect_getnamebyaddr(tvbuff_t* tvb, proto_tree* lwres_tree, int type) -{ - if(type == 1) - dissect_getnamebyaddr_request(tvb, lwres_tree); - else - dissect_getnamebyaddr_response(tvb, lwres_tree); -} - -static void dissect_getrdatabyname(tvbuff_t* tvb, proto_tree* lwres_tree, int type) -{ - if(type == 1) - dissect_rdata_request(tvb, lwres_tree); - else - dissect_rdata_response(tvb, lwres_tree); -} - -static void -dissect_lwres(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) -{ - guint16 version, flags, authtype, authlength ; - guint32 length, opcode, result, recvlength, serial; - guint32 message_type; - - proto_item* lwres_item; - proto_tree* lwres_tree; - - if (check_col(pinfo->cinfo, COL_PROTOCOL)) - col_set_str(pinfo->cinfo, COL_PROTOCOL, "lw_res"); - length = tvb_get_ntohl(tvb, LW_LENGTH_OFFSET); - version = tvb_get_ntohs(tvb, LW_VERSION_OFFSET); - flags = tvb_get_ntohs(tvb, LW_PKTFLASG_OFFSET); - serial = tvb_get_ntohl(tvb, LW_SERIAL_OFFSET); - opcode = tvb_get_ntohl(tvb,LW_OPCODE_OFFSET); - result = tvb_get_ntohl(tvb, LW_RESULT_OFFSET); - recvlength = tvb_get_ntohl(tvb, LW_RECVLEN_OFFSET); - authtype = tvb_get_ntohs(tvb, LW_AUTHTYPE_OFFSET); - authlength = tvb_get_ntohs(tvb, LW_AUTHLEN_OFFSET); - - message_type = (flags & LWRES_LWPACKETFLAG_RESPONSE) ? 2 : 1; - - if (check_col(pinfo->cinfo, COL_INFO)) { - col_clear(pinfo->cinfo, COL_INFO); - - if(flags & LWRES_LWPACKETFLAG_RESPONSE) - { - col_add_fstr(pinfo->cinfo, COL_INFO, - "%s, opcode=%s, serial=0x%x, result=%s", - val_to_str((guint32)message_type,message_types_values,"unknown"), - val_to_str(opcode, opcode_values, "unknown"), - serial, - val_to_str(result,result_values,"unknown")); - } - else - { - col_add_fstr(pinfo->cinfo, COL_INFO, - "%s, opcode=%s, serial=0x%x", - val_to_str((guint32)message_type,message_types_values,"unknown"), - val_to_str(opcode, opcode_values, "unknown"), - serial); - } - } - - if(tree) - { - lwres_item = proto_tree_add_item(tree,proto_lwres, tvb,0, -1, FALSE); - lwres_tree = proto_item_add_subtree(lwres_item, ett_lwres); - } - else return; - - - proto_tree_add_uint(lwres_tree, - hf_length, - tvb, - LW_LENGTH_OFFSET, - sizeof(guint32), - length); - - - proto_tree_add_uint(lwres_tree, - hf_version, - tvb, - LW_VERSION_OFFSET, - sizeof(guint16), - version); - - - - - proto_tree_add_uint(lwres_tree, - hf_flags, - tvb, - LW_PKTFLASG_OFFSET, - sizeof(guint16), - flags); - - proto_tree_add_uint(lwres_tree, - hf_serial, - tvb, - LW_SERIAL_OFFSET, - sizeof(guint32), - serial); - - proto_tree_add_uint(lwres_tree, - hf_opcode, - tvb, - LW_OPCODE_OFFSET, - sizeof(guint32), - opcode); - - proto_tree_add_uint(lwres_tree, - hf_result, - tvb, - LW_RESULT_OFFSET, - sizeof(guint32), - result); - - proto_tree_add_uint(lwres_tree, - hf_recvlen, - tvb, - LW_RECVLEN_OFFSET, - sizeof(guint32), - recvlength); - - proto_tree_add_uint(lwres_tree, - hf_authtype, - tvb, - LW_AUTHTYPE_OFFSET, - sizeof(guint16), - authtype); - - proto_tree_add_uint(lwres_tree, - hf_authlen, - tvb, - LW_AUTHLEN_OFFSET, - sizeof(guint16), - authlength); - - if(!result) - { - switch(opcode) - { - case LWRES_OPCODE_NOOP: - dissect_noop(tvb, lwres_tree); - break; - - case LWRES_OPCODE_GETADDRSBYNAME: - dissect_getaddrsbyname(tvb, lwres_tree, message_type); - break; - - case LWRES_OPCODE_GETNAMEBYADDR: - dissect_getnamebyaddr(tvb, lwres_tree, message_type); - break; - - case LWRES_OPCODE_GETRDATABYNAME: - dissect_getrdatabyname(tvb, lwres_tree, message_type); - break; - } - } - -} - - -void -proto_register_lwres(void) -{ - static hf_register_info hf[] = { - { &hf_length, - { "Length", "lwres.length", FT_UINT32, BASE_DEC, NULL, 0x0, - "lwres length", HFILL }}, - - { &hf_version, - { "Version", "lwres.version", FT_UINT16, BASE_DEC, NULL, 0x0, - "lwres version", HFILL }}, - - { &hf_flags, - { "Packet Flags", "lwres.flags", FT_UINT16, BASE_HEX, NULL, 0x0, - "lwres flags", HFILL }}, - - { &hf_serial, - { "Serial", "lwres.serial", FT_UINT32, BASE_HEX, NULL, 0x0, - "lwres serial", HFILL }}, - - { &hf_opcode, - { "Operation code", "lwres.opcode", FT_UINT32, BASE_DEC, VALS(opcode_values), 0x0, - "lwres opcode", HFILL }}, - - { &hf_result, - { "Result", "lwres.result", FT_UINT32, BASE_DEC, VALS(result_values), 0x0, - "lwres result", HFILL }}, - - { &hf_recvlen, - { "Received length", "lwres.recvlen", FT_UINT32, BASE_DEC, NULL, 0x0, - "lwres recvlen", HFILL }}, - - { &hf_authtype, - { "Auth. type", "lwres.authtype", FT_UINT16, BASE_DEC, NULL, 0x0, - "lwres authtype", HFILL }}, - - { &hf_authlen, - { "Auth. length", "lwres.authlen" , FT_UINT16, BASE_DEC, NULL, 0x0, - "lwres authlen", HFILL }}, - - { &hf_rflags, - { "Flags", "lwres.rflags", FT_UINT32, BASE_HEX, NULL, 0x0, - "lwres rflags", HFILL }}, - { &hf_rdclass, - { "Class", "lwres.class", FT_UINT16, BASE_DEC, NULL, 0x0, - "lwres class", HFILL }}, - - { &hf_rdtype, - { "Type", "lwres.type", FT_UINT16, BASE_DEC, VALS(t_types), 0x0, - "lwres type" , HFILL }}, - - { &hf_namelen, - { "Name length", "lwres.namelen", FT_UINT16, BASE_DEC, NULL, 0x0, - "lwres namelen", HFILL }}, - - { &hf_req_name, - { "Domain name" , "lwres.reqdname" , FT_STRING, BASE_DEC, NULL, 0x0, - "lwres reqdname", HFILL }}, - - { &hf_ttl, - { "Time To Live", "lwres.ttl", FT_UINT32, BASE_DEC, NULL, 0x0, - "lwres ttl", HFILL }}, - - { &hf_nrdatas, - { "Number of rdata records", "lwres.nrdatas", FT_UINT16, BASE_DEC, NULL, 0x0, - "lwres nrdatas" , HFILL }}, - - { &hf_nsigs, - { "Number of signature records", "lwres.nsigs", FT_UINT16, BASE_DEC, NULL, 0x0, - "lwres nsigs" , HFILL }}, - - { &hf_realnamelen, - { "Real name length", "lwres.realnamelen", FT_UINT16, BASE_DEC, NULL, 0x0, - "lwres realnamelen", HFILL }}, - - { &hf_realname, - { "Real doname name", "lwres.realname", FT_STRING, BASE_DEC, NULL, 0x0, - "lwres realname", HFILL }}, - - { &hf_a_record, - { "IPv4 Address", "lwres.arecord", FT_UINT32, BASE_DEC, NULL, 0x0, - "lwres arecord", HFILL }}, - - { &hf_a_rec_len, - { "Length", "lwres.areclen", FT_UINT16, BASE_DEC, NULL, 0x0, - "lwres areclen", HFILL }}, - - { &hf_srv_prio, - { "Priority", "lwres.srv.priority", FT_UINT16, BASE_DEC, NULL, 0x0, - "lwres srv prio", HFILL }}, - - { &hf_srv_weight, - { "Weight", "lwres.srv.weight", FT_UINT16, BASE_DEC, NULL, 0x0, - "lwres srv weight", HFILL }}, - - { &hf_srv_port, - { "Port" , "lwres.srv.port", FT_UINT16, BASE_DEC, NULL, 0x0, - "lwres srv port", HFILL }}, - - { &hf_adn_flags, - { "Flags", "lwres.adn.flags", FT_UINT32, BASE_HEX, NULL, 0x0, - "lwres adn flags", HFILL }}, - - { &hf_adn_addrtype, - { "Address type", "lwres.adn.addrtype", FT_UINT32, BASE_DEC, NULL, 0x0, - "lwres adn addrtype", HFILL }}, - - { &hf_adn_namelen, - { "Name length", "lwres.adn.namelen", FT_UINT16, BASE_DEC, NULL, 0x0, - "lwres adn namelen", HFILL }}, - - { &hf_adn_name, - { "Name", "lwres.adn.name", FT_STRING, BASE_DEC, NULL, 0x0, - "lwres adn name", HFILL }}, - - { &hf_adn_naliases, - { "Number of aliases", "lwres.adn.naliases", FT_UINT16, BASE_DEC, NULL, 0x0, - "lwres adn naliases", HFILL }}, - - { &hf_adn_naddrs, - { "Number of addresses", "lwres.adn.naddrs", FT_UINT16, BASE_DEC, NULL, 0x0, - "lwres adn naddrs", HFILL }}, - - { &hf_adn_realname, - { "Real name", "lwres.adn.realname", FT_STRING, BASE_DEC, NULL, 0x0, - "lwres adn realname", HFILL }}, - - { &hf_adn_aliasname, - { "Alias name", "lwres.adn.aliasname", FT_STRING, BASE_DEC, NULL, 0x0, - "lwres adn aliasname", HFILL }}, - - { &hf_adn_family, - { "Address family", "lwres.adn.addr.family", FT_UINT32, BASE_DEC, NULL, 0x0, - "lwres adn addr family", HFILL }}, - - { &hf_adn_addr_len, - { "Address length", "lwres.adn.addr.length", FT_UINT16, BASE_DEC, NULL, 0x0, - "lwres adn addr length", HFILL }}, - - { &hf_adn_addr_addr, - { "IP Address", "lwres.adn.addr.addr", FT_STRING, BASE_DEC, NULL, 0x0, - "lwres adn addr addr", HFILL }}, - - /* Add more fields here */ - }; - - static gint *ett[] = { - &ett_lwres, - &ett_rdata_req, - &ett_rdata_resp, - &ett_a_rec, - &ett_a_rec_addr, - &ett_srv_rec, - &ett_srv_rec_item, - &ett_adn_request, - &ett_adn_resp, - &ett_adn_alias, - &ett_adn_addr, - &ett_nba_request, - &ett_nba_resp, - &ett_mx_rec, - &ett_mx_rec_item, - &ett_ns_rec, - &ett_ns_rec_item, - &ett_noop, - }; - - - module_t *lwres_module; - - proto_lwres = proto_register_protocol("Light Weight DNS RESolver (BIND9)", - "LWRES", "lwres"); - - proto_register_field_array(proto_lwres, hf, array_length(hf)); - proto_register_subtree_array(ett, array_length(ett)); - - lwres_module = prefs_register_protocol(proto_lwres, proto_reg_handoff_lwres); - - prefs_register_uint_preference(lwres_module, "udp.lwres_port", - "lwres listener UDP Port", - "Set the UDP port for lwres daemon" - "(if other than the default of 921)", - 10, &global_lwres_port); - -} - -/* The registration hand-off routine */ -void -proto_reg_handoff_lwres(void) -{ - static gboolean lwres_prefs_initialized = FALSE; - static dissector_handle_t lwres_handle; - static guint lwres_port; - - if(!lwres_prefs_initialized) { - lwres_handle = create_dissector_handle(dissect_lwres, proto_lwres); - lwres_prefs_initialized = TRUE; - } - else { - dissector_delete("udp.port", lwres_port, lwres_handle); - } - - dissector_add("udp.port", global_lwres_port, lwres_handle); - lwres_port = global_lwres_port; - -} diff --git a/plugins/lwres/plugin.rc.in b/plugins/lwres/plugin.rc.in deleted file mode 100644 index 568dc07b49..0000000000 --- a/plugins/lwres/plugin.rc.in +++ /dev/null @@ -1,34 +0,0 @@ -#include "winver.h" - -VS_VERSION_INFO VERSIONINFO - FILEVERSION @RC_MODULE_VERSION@ - PRODUCTVERSION @RC_VERSION@ - FILEFLAGSMASK 0x0L -#ifdef _DEBUG - FILEFLAGS VS_FF_DEBUG -#else - FILEFLAGS 0 -#endif - FILEOS VOS_NT_WINDOWS32 - FILETYPE VFT_DLL -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "CompanyName", "The Wireshark developer community, http://www.wireshark.org/\0" - VALUE "FileDescription", "@PACKAGE@ dissector\0" - VALUE "FileVersion", "@MODULE_VERSION@\0" - VALUE "InternalName", "@PACKAGE@ @MODULE_VERSION@\0" - VALUE "LegalCopyright", "Copyright © 1998 Gerald Combs <gerald@wireshark.org>, Gilbert Ramirez <gram@alumni.rice.edu> and others\0" - VALUE "OriginalFilename", "@PLUGIN_NAME@.dll\0" - VALUE "ProductName", "Wireshark\0" - VALUE "ProductVersion", "@VERSION@\0" - VALUE "Comments", "Build with @MSVC_VARIANT@\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END |