--- wireshark-1.0.2.orig/debian/license-text-about-dialog +++ wireshark-1.0.2/debian/license-text-about-dialog @@ -0,0 +1,14 @@ +Wireshark is distributed under the GNU GPL. There are no restrictions +on its use. There are significant restrictions on its distribution. + +Parts of Wireshark can be built and distributed as libraries. These +parts are still covered by the GPL, and NOT by the Lesser General Public +License or any other license. + +If you create a combined work using all or part of Wireshark, then your +combined work must be released under a license compatible with the GPL. + +...and don't get us started on trademarks. + +The full text of the GNU GPL may be viewed in /usr/share/common-licenses/GPL. + --- wireshark-1.0.2.orig/debian/headers-check.c +++ wireshark-1.0.2/debian/headers-check.c @@ -0,0 +1,4 @@ +#include +#include +#include + --- wireshark-1.0.2.orig/debian/tshark.manpages +++ wireshark-1.0.2/debian/tshark.manpages @@ -0,0 +1 @@ +tshark.1 --- wireshark-1.0.2.orig/debian/dirs +++ wireshark-1.0.2/debian/dirs @@ -0,0 +1 @@ +usr/bin --- wireshark-1.0.2.orig/debian/README.Debian +++ wireshark-1.0.2/debian/README.Debian @@ -0,0 +1,24 @@ +Warning! + +Using the != operator on combined expressions like: eth.addr, ip.addr, tcp.port, +udp.port and alike will probably not work as expected! + +Often people use a filter string to display something like ip.addr == 1.2.3.4 +which will display all packets containing the IP address 1.2.3.4. + +Then they use ip.addr != 1.2.3.4 to see all packets not containing the +IP address 1.2.3.4 in it. Unfortunately, this does not do the expected. +Instead, that expression will even be true for packets where either source +or destination IP address equals 1.2.3.4. The reason for this, is that the +expression ip.addr != 1.2.3.4 must be read as "the packet contains a field +named ip.addr with a value different from 1.2.3.4". As an IP datagram +contains both a source and a destination address, the expression will evaluate +to true whenever at least one of the two addresses differs from 1.2.3.4. +If you want to filter out all packets containing IP datagrams to or from +IP address 1.2.3.4, then the correct filter is !(ip.addr == 1.2.3.4) as it +reads "show me all the packets for which it is not true that a field named +ip.addr exists with a value of 1.2.3.4", or in other words, "filter out all +packets for which there are no occurrences of a field named ip.addr with the +value 1.2.3.4". + + -- Joost Yervante Damad Sat, 26 Apr 2008 10:17:17 +0200 --- wireshark-1.0.2.orig/debian/rules +++ wireshark-1.0.2/debian/rules @@ -0,0 +1,145 @@ +#!/usr/bin/make -f +# MAde with the aid of dh_make, by Craig Small +# Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess. +# Some lines taken from debmake, by Cristoph Lameter. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +include /usr/share/dpatch/dpatch.make +DB2MAN=/usr/share/xml/docbook/stylesheet/nwalsh/manpages/docbook.xsl + + +DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) + +PYTHON_VERSION=python2.4 + +CFLAGS=-g -O2 + +# Enable IEEE-conformant floating point math on alphas (not the default) +ifeq (alpha-linux,$(DEB_HOST_GNU_TYPE)) + CFLAGS += -mieee +endif + +idl2deb.1: idl2deb.dbk + xsltproc --nonet --novalid $(DB2MAN) $< + +asn2deb.1: asn2deb.dbk + xsltproc --nonet --novalid $(DB2MAN) $< + + +#TODO: --enable-setuid-install +CONFIGURE_FLAGS=--prefix=/usr --sysconfdir=/usr/share --datadir=/usr/share --disable-static --disable-ssl --without-ucdsnmp --enable-gtk2 --libdir=/usr/lib/wireshark --enable-warnings-as-errors=no --with-plugins=/usr/lib/wireshark/plugins --with-lua=/usr/ + +configure: configure-stamp +configure-stamp: patch + dh_testdir + + cp /usr/share/misc/config.guess /usr/share/misc/config.sub . + libtoolize --force --copy + -mkdir aclocal-missing + ./autogen.sh + CFLAGS="$(CFLAGS)" ./configure $(CONFIGURE_FLAGS) + + touch configure-stamp + +build: build-stamp idl2deb.1 asn2deb.1 +build-stamp: configure-stamp + $(MAKE) + + touch build-stamp + +patch: patch-stamp +patch-stamp: + dpatch apply-all + + +clean: unpatch-stamp + dh_testdir + dh_testroot + rm -f build-stamp configure-stamp + + [ ! -f Makefile ] || $(MAKE) distclean + rm -f rdps wireshark.1 tshark.1 idl2deb.1 wireshark-filter.4 asn2deb.1 dumpcap.1 rawshark.1 + rm -f conftest conftest.c + rm -f config.guess config.sub config.log + rm -f config.h.in config.h configure + + dh_clean + +unpatch: unpatch-stamp +unpatch-stamp: + dpatch deapply-all + rm -rf patch-stamp debian/patched + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the files into debian/tmp + $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp + rm -rf $(CURDIR)/debian/tmp/usr/share/wireshark/COPYING + cp debian/license-text-about-dialog $(CURDIR)/debian/tmp/usr/share/wireshark/ABOUT.GPL + mkdir -p $(CURDIR)/debian/tmp/usr/share/applications/ + cp wireshark.desktop $(CURDIR)/debian/tmp/usr/share/applications/ + cp tools/idl2wrs.sh $(CURDIR)/debian/tmp/usr/bin/ + cp debian/wireshark-root.desktop $(CURDIR)/debian/tmp/usr/share/applications/ + mkdir -p $(CURDIR)/debian/tmp/usr/share/pixmaps/ + cp image/hi48-app-wireshark.png $(CURDIR)/debian/tmp/usr/share/pixmaps/ + cp image/wsicon32.xpm $(CURDIR)/debian/tmp/usr/share/pixmaps/ + mkdir -p $(CURDIR)/debian/tmp/usr/lib/$(PYTHON_VERSION)/site-packages/ + install -m 755 $(CURDIR)/idl2deb $(CURDIR)/debian/tmp/usr/bin/ + install -m 755 $(CURDIR)/asn2deb $(CURDIR)/debian/tmp/usr/bin/ + mkdir -p $(CURDIR)/debian/tmp/etc/wireshark/ + mv $(CURDIR)/debian/tmp/usr/share/wireshark/init.lua \ + $(CURDIR)/debian/tmp/etc/wireshark/ + ln -s /etc/wireshark/init.lua \ + $(CURDIR)/debian/tmp/usr/share/wireshark/init.lua + cp $(CURDIR)/tools/wireshark_be.py $(CURDIR)/tools/wireshark_gen.py \ + $(CURDIR)/debian/tmp/usr/lib/$(PYTHON_VERSION)/site-packages/ + mkdir -p $(CURDIR)/debian/tmp/usr/include/wireshark/ + for F in `cat debian/wireshark-dev.header-files`; do \ + cp --parents $$F $(CURDIR)/debian/tmp/usr/include/wireshark; \ + done + # .a is no longer built; why was is used ? + #cp $(CURDIR)/wiretap/libwiretap.a $(CURDIR)/debian/tmp/usr/lib/ + -rm -rf $(CURDIR)/debian/tmp/usr/man + dh_installman + + dh_movefiles + dh_pysupport + dh_python + dh_installdocs + -rm debian/menu # from upstream debian/ package + dh_installmenu + dh_installchangelogs NEWS + +# Build architecture-independent files here. +binary-indep: install +# We have nothing to do by default. + +check: install + # check all necessary headers are included + gcc -c debian/headers-check.c `pkg-config --cflags glib-2.0` -Idebian/wireshark-dev/usr/include/ -Idebian/wireshark-dev/usr/include/wireshark/ -o /dev/null + +# Build architecture-dependent files here. +binary-arch: install check + dh_strip + dh_compress + dh_fixperms + #dh_fixperms -Xdumpcap + + dh_installdeb + LD_LIBRARY_PATH=/usr/lib/wireshark/ dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +source diff: + @echo >&2 'source and diff are obsolete - use dpkg-source -b'; false + +binary: binary-indep binary-arch +.PHONY: build clean install check binary-indep binary-arch binary --- wireshark-1.0.2.orig/debian/compat +++ wireshark-1.0.2/debian/compat @@ -0,0 +1 @@ +6 --- wireshark-1.0.2.orig/debian/wireshark-dev.docs +++ wireshark-1.0.2/debian/wireshark-dev.docs @@ -0,0 +1,5 @@ +doc/README.design +doc/README.developer +doc/README.idl2wrs +doc/README.plugins +doc/README.xml-output --- wireshark-1.0.2.orig/debian/postinst +++ wireshark-1.0.2/debian/postinst @@ -0,0 +1,6 @@ +#! /bin/sh -e + +if test -e /usr/etc/manuf ; then rm /usr/etc/manuf ; fi + +#DEBHELPER# + --- wireshark-1.0.2.orig/debian/wireshark-root.desktop +++ wireshark-1.0.2/debian/wireshark-root.desktop @@ -0,0 +1,83 @@ +[Desktop Entry] +# $Id: wireshark.desktop 11808 2004-08-22 09:22:15Z jmayer $ +# The format of this file is specified at +# http://freedesktop.org/Standards/desktop-entry-spec/ +# The entries are in the order they are listed in version 0.9.4 +Type=Application +Version=1.0 +Name=Wireshark (as root) +GenericName=Network Analyzer +GenericName[af]=Netwerk Analiseerder +GenericName[az]=Şəbəkə Analiz Proqramı +GenericName[bg]=Анализатор на мрежови трафик +GenericName[bs]=Mrežni analizer +GenericName[ca]=Analitzador de xarxa +GenericName[cs]=Analyzátor sítě +GenericName[da]=Netværksanalyse +GenericName[de]=Programm für die Netzwerk-Analyse +GenericName[el]=Αναλυτής Δικτύων +GenericName[en_GB]=Network Analyser +GenericName[eo]=Retanalizilo +GenericName[es]=Analizador de redes +GenericName[et]=Võrguliikluse analüsaator +GenericName[eu]=Sare ikerketaria +GenericName[fa]=تحلیل‌گر شبکه +GenericName[fi]=Verkkoanalysaattori +GenericName[fr]=Analyseur réseau +GenericName[he]=מאבחן רשת +GenericName[hr]=Program za analiziranje mreža +GenericName[hu]=hálózatanalizáló +GenericName[id]=Analisis jaringan +GenericName[is]=Netskoðunartól +GenericName[it]=Analizzatore di rete +GenericName[ja]=ネットワークアナライザ +GenericName[ko]=네트웍 분석기 +GenericName[lo]=ເຄື່ອງມືວິເຄາະເຄືອຂ່າຍ +GenericName[lt]=Tinklo analizatorius +GenericName[lv]=Tīkla Analizators +GenericName[mk]=Анализатор на мрежи +GenericName[mn]=Сүлжээ-шинжлэлийн програм +GenericName[mt]=Analizzatur tan-network +GenericName[nb]=Nettverksanalyse +GenericName[nl]=netwerkanalyseprogramma +GenericName[nn]=Nettverksanalyse +GenericName[nso]=Moahlaahli wa Kgokagano +GenericName[pl]=Analizator sieci +GenericName[pt]=Analisador de Redes +GenericName[pt_BR]=Analisador de rede +GenericName[ro]=Analizor de reţea +GenericName[ru]=Анализатор сетевого трафика +GenericName[se]=Fierbmeanalysa +GenericName[sk]=Analyzátor siete +GenericName[sl]=Analizator omrežij +GenericName[sr]=Analizatror mreže +GenericName[ss]=Sihlatiyi seluchungechunge +GenericName[sv]=Nätverksanalyserare +GenericName[ta]=Å¨Ä ¬öÅ¡Ç÷ +GenericName[th]=เครื่องมือวิเคราะห์เครือข่าย +GenericName[tr]=Ağ Analiz Programı +GenericName[uk]=Аналізатор мережі +GenericName[ven]=Musengulusi wa Vhukwamani +GenericName[vi]=Trình phân tích mạng +GenericName[xh]=Umcukucezi Womsebenzi womnatha +GenericName[zh_CN]=网络分析程序 +GenericName[zh_TW]=網路分析程式 +GenericName[zu]=Umhloli Woxhumano olusakazekile +Comment=Network traffic analyzer +Comment[fr]=Analyseur de trafic réseau +Comment[fi]=Verkkoliikenne analysaattori +Comment[sv]=Nätverkstrafikanalysator +Icon=hi48-app-wireshark.png +TryExec=su-to-root +Exec=su-to-root -X -c /usr/bin/wireshark +Path= +Terminal=false +MimeType= +Categories=GNOME;Network; +# Found in Suse 9.1: +X-KDE-SubstituteUID=true +# Deprecated: +# TerminalOptions= +# BinaryPattern=wireshark +# MapNotify=true +# Protocols= --- wireshark-1.0.2.orig/debian/changelog +++ wireshark-1.0.2/debian/changelog @@ -0,0 +1,1610 @@ +wireshark (1.0.2-3+lenny1) testing-security; urgency=low + + * security fixes: + - Wireshark could crash while uncompressing zlib-compressed + packet data (CVE-2008-3933) + - The NCP dissector was susceptible to a number of problems, + including buffer overflows and an infinite loop + (CVE-2008-3146, CVE-2008-3932) + - Wireshark could crash while reading a Tektronix .rf5 file + (CVE-2008-3934) + + -- Joost Yervante Damad Mon, 15 Sep 2008 20:12:46 +0200 + +wireshark (1.0.2-3) unstable; urgency=low + + * remove build-dependency on libsmi-dev; libsmi + seems to be in bad shape in Debian; don't want + to be dependant on it this close to the release + + -- Joost Yervante Damad Tue, 22 Jul 2008 19:15:23 +0200 + +wireshark (1.0.2-2) unstable; urgency=low + + * switch to libcap2 (Closes: #489310) + * include rawshark in common (Closes: #490436) + * include dumpcap manpage (Closes: #490434) + * build-depend on libsmi-dev (Closes: #490429) + * switch to standards-version 3.8.0.1 + + -- Joost Yervante Damad Sun, 20 Jul 2008 18:34:25 +0200 + +wireshark (1.0.2-1) unstable; urgency=high + + * New upstream release 1.0.2 + - release notes: + http://www.wireshark.org/docs/relnotes/wireshark-1.0.2.html + - security fixes: + - Wireshark could crash while reassembling packets + (CVE-2008-3145) + + -- Joost Yervante Damad Fri, 11 Jul 2008 13:48:49 +0200 + +wireshark (1.0.1-1) unstable; urgency=high + + [ Frederic Peters ] + * debian/patches/20_set_foreground.dpatch: set black text for packet detail + rows that are set to a light gray background. (closes: #478769) + * debian/control: updated Conflicts and Replaces to 1.0.0-3, so upgrades + from more versions are possible. + + [ Joost Yervante Damad ] + * New upstream release 1.0.1 + - release notes: + http://www.wireshark.org/docs/relnotes/wireshark-1.0.1.html + - security fixes: + - The PANA and KISMET dissectors could force Wireshark to quit + unexpectedly + - The RTMPT dissector could crash + - The RMI dissector could disclose system memory + - The syslog dissector could crash + - (enable setuid dumpcap install -> disabled again for now, + needs discussion first) + - del 20_set_foreground.dpatch; incorporated upstream + + -- Joost Yervante Damad Tue, 01 Jul 2008 21:08:31 +0200 + +wireshark (1.0.0-3) unstable; urgency=low + + * remove transitional "ethereal" packages + (Closes: #477529, #477532, #477534, #477541) + * create README.Debian with note about the sometimes surprising + display filter syntax (Closes: #456506, #456507) + * tethereal is completely gone now (Closes: #410058) + * be more liberal with respect to umask when creating files + (Closes: 191088): 19_umask.dpatch + + -- Joost Yervante Damad Sat, 26 Apr 2008 10:20:02 +0200 + +wireshark (1.0.0-2) unstable; urgency=low + + [Joost Yervante Damad] + * avoid /usr/share/wireshark/wireshark (Closes: #476574) + * disable patch 07 and 14, I think patch 07 caused the + build failure which introduced patch 14 + * this version works with "ForwardX11Trusted no" (Closes: #298740) + * disable patch 10 (obsolete) + * submission (tcp/587) is recognized as SMTP now (Closes: #456513) + * save as works for filtered output (Closes: #456502) + * preferences settings get active immediately now (Closes: #259319) + + [Frederic Peters] + * debian/control: updated Depends from automake1.8 to automake1.9 + (closes: #474341) + + -- Joost Yervante Damad Tue, 22 Apr 2008 19:59:24 +0200 + +wireshark (1.0.0-1) unstable; urgency=low + + * Several security issues were solved in 0.99.7 already: + (closes: #452381) + * allow remote attackers to cause a denial of service (crash) via (1) a + crafted MP3 file or (2) unspecified vectors to the NCP dissector + (CVE-2007-6111) + * Buffer overflow in the PPP dissector Wireshark (formerly Ethereal) + 0.99.6 allows remote attackers to cause a denial of service (crash) + and possibly execute arbitrary code via unknown vectors. + (CVE-2007-6112) + * Wireshark (formerly Ethereal) 0.10.12 to 0.99.6 allows remote + attackers to cause a denial of service (long loop) via a malformed DNP + packet (CVE-2007-6113) + * Multiple buffer overflows in Wireshark (formerly Ethereal) 0.99.0 + through 0.99.6 allow remote attackers to cause a denial of service + (crash) and possibly execute arbitrary code via (1) the SSL dissector + or (2) the iSeries (OS/400) Communication trace file parser + (CVE-2007-6114) + * Buffer overflow in the ANSI MAP dissector for Wireshark (formerly + Ethereal) 0.99.5 to 0.99.6, when running on unspecified platforms, + allows remote attackers to cause a denial of service and possibly + execute arbitrary code via unknown vectors. (CVE-2007-6115) + * The Firebird/Interbase dissector in Wireshark (formerly Ethereal) + 0.99.6 allows remote attackers to cause a denial of service (infinite + loop or crash) via unknown vectors. (CVE-2007-6116) + * Unspecified vulnerability in the HTTP dissector for Wireshark + (formerly Ethereal) 0.10.14 to 0.99.6 has unknown impact and remote + attack vectors related to chunked messages. (CVE-2007-6117) + * The MEGACO dissector in Wireshark (formerly Ethereal) 0.9.14 to 0.99.6 + allows remote attackers to cause a denial of service (long loop and + resource consumption) via unknown vectors. (CVE-2007-6118) + * The DCP ETSI dissector in Wireshark (formerly Ethereal) 0.99.6 allows + remote attackers to cause a denial of service (long loop and resource + consumption) via unknown vectors. (CVE-2007-6119) + * The Bluetooth SDP dissector Wireshark (formerly Ethereal) 0.99.2 to + 0.99.6 allows remote attackers to cause a denial of service (infinite + loop) via unknown vectors. (CVE-2007-6120) + * Wireshark (formerly Ethereal) 0.8.16 to 0.99.6 allows remote attackers + to cause a denial of service (crash) via a malformed RPC Portmap + packet. (CVE-2007-6121) + * current wireshark has SSL support (closes: #172939) + * and H323 support (closes: #117201) + * resizing columns bugfix was applied last year (closes: #369044) + * new upstream release 1.0.0 + http://www.wireshark.org/docs/relnotes/wireshark-1.0.0.html + * remove debian/ directory from upstream + * update 14_disable-cmip.dpatch. + * if wireshark has no priv, it now prints: + dumpcap: There are no interfaces on which a capture can be done + (closes: #468400) + * wireshark uses su-to-root now (closes: #472478) + * vulnerabilities fixed: + * The X.509sat and other dissector could crash (CVE-2008-1561) + * The LDAP dissector could crash on Windows and other platforms. + (CVE-2008-1562) + * The SCCP dissector could crash while using the "decode as" + feature (CVE-2008-1563) + + -- Joost Yervante Damad Tue, 01 Apr 2008 19:48:19 +0200 + +wireshark (0.99.8-1) unstable; urgency=medium + + * New upstream release. + * release notes: + http://www.wireshark.org/docs/relnotes/wireshark-0.99.8.html + * Fixes strptime() problem; debian/patches/18_strptime_proto.dpatch + no longer needed; (closes: #452772) + * Fixed security issues: + * The SCTP dissector could crash. (CVE-2008-1070) + * The SNMP dissector could crash. (CVE-2008-1071) + * (closes: #469488) + * updated debian/patches/05_plugin-libdir.dpatch, as upstream + incorporated part of the patch + * updated debian/patches/08_wireshark-desktop-menu.dpatch + * updated debian/patches/14_disable-cmip.dpatch + * use su-to-root isof gksu (closes: #454051) + * make init.lua a conffile (closes: #458689) + * use $(CURDIR) isof `pwd` in debian/rules + * lintian fixes: + * I: wireshark binary: desktop-entry-contains-encoding-key + /usr/share/applications/wireshark-root.desktop + * W: wireshark binary: su-wrapper-not-su-to-root + /usr/share/applications/wireshark-root.desktop gksu + * bump standards version to 3.7.2.2 (3.7.3.0 still needs more checking) + * update debhelper compat to 5 + * bump standards version to 3.7.3.0 + * update debhelper compat to 6 + * remove debian/ dir from upstream tar file + + -- Joost Yervante Damad Wed, 12 Mar 2008 20:47:56 +0100 + +wireshark (0.99.7-1.1) unstable; urgency=low + + * Non-maintainer upload. + * debian/patches/18_strptime_proto.dpatch: Define __USE_XOPEN when + using the strptime function. (closes: #452772) + + -- dann frazier Mon, 10 Mar 2008 14:16:45 -0600 + +wireshark (0.99.7-1) unstable; urgency=high + + * New upstream release. + * fixes several security issues: + * The IPv6 dissector could loop excessively. (CVE-2007-6439) + * The USB dissector could loop excessively or crash. (CVE-2007-6439) + * The SMB dissector could crash. (CVE-2007-6438) + * The RPL dissector could go into an infinite loop. (CVE-2007-6450) + * The WiMAX dissector could crash due to unaligned access on some + platforms. (CVE-2007-6441) + * The CIP dissector could attempt to allocate a huge amount of memory + and crash. (CVE-2007-6451) + * debian/patches/04_drop-capabilities.dpatch: disable "drop capabilities" + patch as Wireshark now has a dumpcap binary that drop capabilities and + capture network. This fixes issues of dropping too many capabilities. + (closes: #453292) + * debian/control, debian/rules: enabled LUA support. (closes: #412097) + * debian/patches/17_clique_rm_support.dpatch: add support for the CliqueRM + protocol. (closes: #454739) + * debian/patches/05_plugin-libdir.dpatch: updated to fix plugin installation. + (closes: #454758) + + -- Frederic Peters Fri, 21 Dec 2007 17:56:59 +0100 + +wireshark (0.99.7~pre1-2) unstable; urgency=low + + * debian/rules: adds LD_LIBRARY_PATH when calling dpkg-shlibdeps and adds + a wireshark-common shlibs file. (closes: #453801) + + -- Frederic Peters Wed, 05 Dec 2007 16:27:59 +0100 + +wireshark (0.99.7~pre1-1) unstable; urgency=high + + * New upstream pre-version; packaged since it fixes security issues: + * Could crash when reading an MP3 file. + * Could loop excessively while reading a malformed DNP packet. + * The SSL dissector could overflow a buffer. + * The ANSI MAP dissector could be susceptible to a buffer overflow on some + platforms. + * The Firebird/Interbase dissector could go into an infinite loop or + crash. + * The NCP dissector could cause a crash. + * The HTTP dissector could crash on some systems while decoding chunked + messages. + * The MEGACO dissector could enter a large loop and consume system + resources. + * The DCP ETSI dissector could enter a large loop and consume system + resources. + * The iSeries (OS/400) Communication trace file parser could overflow a + buffer. + * The PPP dissector could overflow a buffer. + * The Bluetooth SDP dissector could go into an infinite loop. + * A malformed RPC Portmap packet could cause a crash. + * debian/patches/03_preferences.dpatch: modified to directly change + epan/prefs.c instead of going through configure.in modification. + * debian/patches/04_drop-capabilities.dpatch: configure check for libcap has + been integrated upstream, removed from patch, but added required explicit + -lcap linkage. + * debian/patches/05_plugin-libdir.dpatch, debian/rules: reduced patch; using + a configure flag instead of overriding plugindir. + * debian/patches/08_wireshark-desktop-menu.dpatch: updated. + * debian/patches/14_disable-cmip.dpatch: updated. + + -- Frederic Peters Thu, 22 Nov 2007 19:49:41 +0100 + +wireshark (0.99.6rel-5) unstable; urgency=low + + * debian/patches/16_licence_about_location.dpatch: removed GPL copy from + file used to fill the About dialog and created a new file with reference + to copy in /usr/share/common-licences/ + + -- Frederic Peters Sat, 29 Sep 2007 15:56:38 +0200 + +wireshark (0.99.6rel-4) unstable; urgency=low + + * debian/patches/14_disable-cmip.dpatch: removed automake generated part as + it can cause problems on a second build. (closes: #442760) + * debian/control: upgraded build-depends from libportaudio-dev to + portaudio19-dev (closes: #431222) + * debian/patches/08_wireshark-desktop-menu.dpatch: updated to add Encoding + entry, as required by desktop file spec + * debian/patches/08_wireshark-desktop-menu.dpatch: updated Categories entry + to remove Application. + * debian/wireshark-root.desktop: updated Categories to remove Application. + * debian/wireshark.menu: renamed Apps to Applications and Net to Network, + and added a subsubmenu, "Monitoring", to comply with new menu policy. + + -- Frederic Peters Fri, 28 Sep 2007 21:02:41 +0200 + +wireshark (0.99.6rel-3) unstable; urgency=low + + * debian/rules: added check for wireshark-dev headers (closes: #436247) + + -- Frederic Peters Fri, 24 Aug 2007 14:19:01 +0000 + +wireshark (0.99.6rel-2) unstable; urgency=low + + * debian/rules: added -02 -g CFLAGS (closes: #439298) + + -- Frederic Peters Fri, 24 Aug 2007 07:48:08 +0000 + +wireshark (0.99.6rel-1) unstable; urgency=low + + * New upstream release. + * named 0.99.6rel to be greater than 0.99.6pre + * added epan/ subdirectories to dev header files (closes: #436247) + * I still need someone to provide me with test code so an extension can + actually be built and tested at build time. + * debian/rules: added --enable-warnings-as-errors=no to configure flags + * debian/patches/15_sensitive_open.dpatch: new patch to allow keyboard + selection of capture file in open dialog (closes: #439198) + + -- Frederic Peters Thu, 23 Aug 2007 09:13:00 +0000 + +wireshark (0.99.6pre1-1) unstable; urgency=high + + * New upstream pre-release, with security fixes: + * could crash when dissecting an HTTP chunked response + * could crash while reading iSeries capture files + * could exhaust system memory while reading a malformed DCP ETSI packet + * could loop excessively while reading a malformed SSL packet + * DHCP/BOOTP dissector was susceptible to an off-by-one error + * could loop excessively while reading a malformed MMS packet + * debian/control: added libkrb5-dev to build-deps so Kerberos support is + built. + * debian/control: replaced {Source-Version} with appropriate {binary:Version} + * debian/wireshark-dev.header-files: use wildcards to get all headers + (closes: #423000) + * debian/patches/14_disable-cmip.dpatch: disable CMIP dissector which + doesn't build at the moment. + * debian/rules: don't ignore all errors on make distclean + + -- Frederic Peters Mon, 25 Jun 2007 13:33:43 +0200 + +wireshark (0.99.5-1) unstable; urgency=low + + * New upstream release. + * debian/patches/09_idl2wrs.dpatch: updated to patch idl2wrs.sh.in. + + -- Frederic Peters Sun, 01 Apr 2007 08:58:40 +0000 + +wireshark (0.99.4-5) unstable; urgency=high + + * debian/patches/00list: really include backported security fixes, stupid me. + + -- Frederic Peters Mon, 26 Feb 2007 09:30:29 +0000 + +wireshark (0.99.4-4) unstable; urgency=high + + * Backported security fixes from 0.99.5pre1 + * The TCP dissector could hang or crash while reassembling HTTP packets. + * The HTTP dissector could crash. + * On some systems, the IEEE 802.11 dissector could crash. + * On some systems, the LLT dissector could crash. + + -- Frederic Peters Fri, 19 Jan 2007 21:49:04 +0100 + +wireshark (0.99.4-3) unstable; urgency=low + + * debian/control: added build dependency on libportaudio-dev so sniffed voip + G.711 calls are listenable. (closes: #398673) + * debian/patches/08_wireshark-desktop-menu.dpatch: removed extraneous .rej + file from patch. + + -- Frederic Peters Sun, 19 Nov 2006 16:39:26 +0000 + +wireshark (0.99.4-2) unstable; urgency=low + + * debian/wireshark-dev.files: added more headers, so that dissectors for + DCE/RPC interfaces can be build externally. (closes: #397292) + + -- Frederic Peters Mon, 6 Nov 2006 12:48:20 +0100 + +wireshark (0.99.4-1) unstable; urgency=high + + * Backported security patches from yet unreleased 0.99.4 (closes: #396258) + * http://www.wireshark.org/security/wnpa-sec-2006-03.html has details + * HTTP dissector could crash (CVE-2006-5468) + * LDAP dissector (and others) could crash (CVE-2006-5740) + * XOT dissector could attempt to allocate a large amount of memory and + crash (CVE-2006-4805) + * WBXML dissector could crash (CVE-2006-5469) + * MIME Multipart dissectar was susceptible to an off-by-one error + (CVE-2006-4574) + * Parsing a WEP key could cause a crash + * debian/control: disabled libcap-dev for kfreebsd and hurd + (closes: #375022) + + -- Frederic Peters Wed, 1 Nov 2006 10:05:05 +0100 + +wireshark (0.99.3a-2) unstable; urgency=low + + * debian/ethereal-common.NEWS: added a note about ethereal -> wireshark name + change. + + -- Frederic Peters Thu, 12 Oct 2006 15:42:48 +0200 + +wireshark (0.99.3a-1) unstable; urgency=low + + * New upstream release. + * debian/patches/11_iscsi_dissector.dpatch, 12_ipsec_dissector.dpatch, + 13_q2931_security_fix.dpatch: security patches that were backported. + * debian/patches/11_typo_packet-dap: fixed a typo s/diwsect/dissect/ + + -- Frederic Peters Mon, 18 Sep 2006 18:56:12 +0200 + +wireshark (0.99.2-6) unstable; urgency=low + + * Acknowledge NMU, thank Steinar. + * debian/wireshark-dev.postinst: removed rests of old Python module + compilation, it is not needed by new policy. (closes: #385357) + + -- Frederic Peters Wed, 6 Sep 2006 23:34:36 +0200 + +wireshark (0.99.2-5.1) unstable; urgency=medium + + * Non-maintainer upload. + * Backport security fixes from 0.99.3a (via Subversion); fixes + CVE-2006-4331, CVE-2006-4333 (CVE-2006-4330 was fixed in last upload, + and CVE-2006-4332 is not relevant for Debian). (Closes: #384529) + + -- Steinar H. Gunderson Tue, 5 Sep 2006 02:15:53 +0200 + +wireshark (0.99.2-5) unstable; urgency=low + + * debian/patches/11_iscsi_dissector.dpatch: new patch, fixing bug reported + against iSCSI dissector, taken from upstream (r18832) (closes: #381860) + + -- Frederic Peters Mon, 7 Aug 2006 16:59:50 +0200 + +wireshark (0.99.2-4) unstable; urgency=low + + * debian/control: set ethereal-dev section to devel, it was lost in copy + pasting. + * debian/control, debian/rules, debian/pyversions: updated to new Python + policy. (closes: #380986) + + -- Frederic Peters Tue, 1 Aug 2006 13:05:21 +0200 + +wireshark (0.99.2-3) unstable; urgency=low + + * debian/control: added dummy transitional packages to provide an upgrade + path from ethereal. (closes: #380647) + + -- Frederic Peters Mon, 31 Jul 2006 18:21:27 +0200 + +wireshark (0.99.2-2) unstable; urgency=low + + * debian/rules: set --datadir so that DATAFILE_DIR is correct (it was + wrongly set to "${prefix}/share/wireshark" and not expanded. + * AUTHORS-SHORT is now displayed correclty in about dialog + * colofilters is now found and used properly + + -- Frederic Peters Wed, 26 Jul 2006 13:27:54 +0200 + +wireshark (0.99.2-1) unstable; urgency=high + + * New upstream release. (closes: #378745) + * The project changed name, ethereal is now wireshark. (closes: #351941) + See http://www.wireshark.org/news/20060607.html + * tethereal has been renamed to tshark + * idl2eth has been renamed to idl2wrs + * Urgency high since it fixes security issues + * http://www.wireshark.org/security/wnpa-sec-2006-01.html has details + * crash in GSM BSSMAP dissector (CVE-2006-3627) + * format string overflow in ANSI MAP dissector (CVE-2006-3628) + * format string overflow in Checkpoint FW-1 dissector (CVE-2006-3628) + * format string overflow in MQ dissector (CVE-2006-3628) + * format string overflow in XML dissector (CVE-2006-3628) + * large memory allocation in MOUNT dissector (CVE-2006-3629) + * off-by-one errors in NCP NMAS and NDPS dissectors (CVE-2006-3630) + * format string overflow in NTP dissector (CVE-2006-3628) + * infinite loop in SSH dissector (CVE-2006-3631) + * buffer overflow in NFS dissector (CVE-2006-3632) + * debian/wireshark-dev.header-files: includes missing files + (closes: #376522, #368860) + * debian/copyright: list source files that are under a license different + than Wireshark. + + -- Frederic Peters Mon, 24 Jul 2006 19:29:26 +0200 + +ethereal (0.99.0-1) unstable; urgency=high + + * New upstream release (urgency high since it fixes security issues; + see http://www.ethereal.com/appnotes/enpa-sa-00023.html advisory) + * crash in H.248 dissector (CVE-2006-1937) + * infinite loop in UMA dissector (CVE-2006-1933) + * crash in X.509if dissector (CVE-2006-1937) + * crash in SRVLOC dissector (CVE-2006-1937) + * crash in H.245 dissector (CVE-2006-1937) + * off-by-one error in OID printing routine (CVE-2006-1932) + * buffer overflow in COPS dissector (CVE-2006-1935) + * buffer overflow in ALCAP dissector (CVE-2006-1934) + * crash in statistics counter (CVE-2006-1937) + * crash with malformed capture (CVE-2006-1938) + * crash with invalid display filter (CVE-2006-1939) + * crash in general packet dissector (CVE-2006-1937) + * crash in AIM dissector (CVE-2006-1937) + * crash in RPC dissector (CVE-2006-1939) + * crash in DCERPC dissector (CVE-2006-1939) + * crash in ASN.1 dissector (CVE-2006-1939) + * crash in SMB PIPE dissector (CVE-2006-1938) + * excessive loop in BER dissector (CVE-2006-1933) + * abort in SNDCP dissector (CVE-2006-1940) + * buffer overrun in Network Instruments file code (CVE-2006-1934) + * buffer overrun in NetXray/Windows Sniffer file code (CVE-2006-1934) + * crash in GSM SMS dissector (CVE-2006-1939) + * buffer overrun in ALCAP dissector (CVE-2006-1934) + * buffer overrun in telnet dissector (CVE-2006-1936) + * crash in ASN.1 based dissectors (CVE-2006-1939) + * crash in DCERPC NT dissector (CVE-2006-1939) + * crash in PER dissector (CVE-2006-1939) + * debian/patches/04_drop-capabilities.dpatch: updated. + * debian/control: added build-depends on libgnutls-dev since libgnutls can + now be used for SSL support. + + -- Frederic Peters Mon, 1 May 2006 14:50:42 +0200 + +ethereal (0.10.14-2) unstable; urgency=low + + * debian/watch: added watch file. + + -- Frederic Peters Mon, 6 Mar 2006 00:03:13 +0100 + +ethereal (0.10.14-1) unstable; urgency=low + + * New upstream release. + * Acknowledge NMU, thanks for the support while I was away. + * debian/patches/11-security-CVE-2005-3651.dpatch: removed since included + upstream. + * debian/patches/07_gcc4.dpatch: removed part about packet-cms since it now + causes the build to fail. + + -- Frederic Peters Thu, 23 Feb 2006 11:04:11 +0100 + +ethereal (0.10.13-1.3) unstable; urgency=low + + * Non-maintainer upload. + * Build-conflict with libsnmp-dev, not just libsnmp5-dev, to prevent + accidental linkage with openssl. Closes: #353613. + + -- Steve Langasek Sun, 19 Feb 2006 18:03:20 -0800 + +ethereal (0.10.13-1.2) unstable; urgency=high + + * Non-maintainer upload. + * High-urgency upload for RC bugfix. + * Add missing epan/gnuc_format_check.h, epan/ipv6-utils.h headers to + ethereal-dev. Closes: #344011. + * Build-depend on automake1.9 instead of automake; the latter points to + the ancient automake1.4 package, which was not what's used upstream. + + -- Steve Langasek Fri, 17 Feb 2006 17:47:37 -0800 + +ethereal (0.10.13-1.1) unstable; urgency=high + + * Non-maintainer upload. + * Fix buffer overflow in OSPF dissector (CVE-2005-3651) + + -- Moritz Muehlenhoff Sun, 25 Dec 2005 11:15:28 +0100 + +ethereal (0.10.13-1) unstable; urgency=high + + * New upstream release (urgency high since it fixes security issues; + see http://www.ethereal.com/appnotes/enpa-sa-00021.html advisory) + * memory exhaustion by ISAKMP, FC-FCS, RSVP, ISIS LSP dissectors + (CAN-2005-3241) + * crash in IrDA dissector and SMB transaction payload reassembly + (CAN-2005-3242) + * buffer overflow in AgentX and SLIMP3 dissectors (CAN-2005-3243) + * infinite loop in BER dissector (CAN-2005-3244) + * memory exhaustion by ONC RPC dissector with option "Dissect unknown RPC + program numbers" (CAN-2005-3245) + * NULL pointer in sFlow, RTnet, SCSI dissectors (CAN-2005-3246) + * infinite loop and crash in SigComp UDVM (CAN-2005-3247) + * division by zero in X11 dissector (CAN-2005-3248) + * invalid pointer freed in WSP dissecto (CAN-2005-3249) + * buffer overflow in SRVLOC dissector (CAN-2005-3184) + * debian/patches/04_drop-capabilities.dpatch: updated + * debian/patches/08_ethereal-desktop-menu.dpatch: updated + * debian/patches/09_idl2eth.dpatch: updated + + -- Frederic Peters Thu, 8 Dec 2005 14:18:07 +0100 + +ethereal (0.10.12-6) unstable; urgency=low + + * Rebuilt with gtk/atk from unstable. (closes: #329889) + + -- Frederic Peters Sat, 24 Sep 2005 11:11:40 +0200 + +ethereal (0.10.12-5) unstable; urgency=low + + * debian/ethereal-dev.header-files: added missing epan/range.h + (closes: #306426) + + -- Frederic Peters Fri, 23 Sep 2005 18:28:04 +0200 + +ethereal (0.10.12-4) unstable; urgency=low + + * debian/control: upgraded automake dependency of ethereal-dev to 1.8. + * debian/patches/11_diameter_vendors.dpatch: removed, wrong. + * debian/ethereal-common.files: add capinfos. + * debian/ethereal-common.manpages: add capinfos man page. + * debian/changelog: fixed 0.6.3-2 header line since lintian now complains + about the old way of closing bugs from changelogs. + + -- Frederic Peters Fri, 12 Aug 2005 00:43:39 +0200 + +ethereal (0.10.12-3) unstable; urgency=low + + * debian/patches/04_drop-capabilities.dpatch: don't exit on failure, simply + skip the capabilities part; use g_warning to output messages. + (closes: #321204) + + -- Frederic Peters Thu, 4 Aug 2005 09:41:24 +0200 + +ethereal (0.10.12-2) unstable; urgency=low + + * debian/patches/04_drop-capabilities.dpatch: preserves CAP_DAC_READ_SEARCH + which seems necessary for sudo usage (closes: #320453) + + -- Frederic Peters Sun, 31 Jul 2005 12:56:50 +0200 + +ethereal (0.10.12-1) unstable; urgency=high + + * New upstream release; urgency high since it fixes security issues in many + dissectors; see http://www.ethereal.com/appnotes/enpa-sa-00020.html + + -- Frederic Peters Wed, 27 Jul 2005 09:57:17 +0200 + +ethereal (0.10.11-5) unstable; urgency=low + + * debian/patches/11_diameter_vendors.dpatch: correctly add diameter vendors + (patch by Joost Yervante Damad) (closes: #316082) + + -- Frederic Peters Mon, 18 Jul 2005 20:18:43 +0200 + +ethereal (0.10.11-4) unstable; urgency=low + + * debian/: now using dpatch, started from Ubuntu patch, merged with current + package patches. + + -- Frederic Peters Sun, 17 Jul 2005 18:58:05 +0200 + +ethereal (0.10.11-3) unstable; urgency=low + + * Modified capabilities patch so it doesn't try to keep CAP_NET_RAW if it + doesn't have it. (closes: #318689) + + -- Frederic Peters Sun, 17 Jul 2005 10:29:31 +0200 + +ethereal (0.10.11-2) unstable; urgency=low + + * Use capabilities to mitigate security risk, patch from J.H.M. Dassen (Ray) + (closes: #315670) + * debian/control: build-depends on libcap-dev + * epan/dissectors/packet-cmip.c: fixed dissect_cmip_InvokeIDType declaration + mismatch. + + -- Frederic Peters Sat, 16 Jul 2005 10:58:03 +0200 + +ethereal (0.10.11-1) unstable; urgency=high + + * New upstream release; urgency high since it fixes security issues in the + following dissectors: + * format string vulnerabilities: ANSI A, DHCP + * segmentation faults: GSM MAP, AIM, TZSP, Bittorrent, SMB, GSM, SMB + NETLOGON + * buffer overflows: DISTCC, FCELS, SIP, ISIS, CMIP, CMP, CMS, CRMF, ESS, + OCSP, PKIX1Explitit, PKIX Qualified, X.509, NCP, ISUP, TCAP, + Presentation + * null pointer exception: KINK, WSP, SMB Mailslot, H.245, MGCP, RPC + * infinite loops: LMP, EIGRP, MEGACO, L2TP + * uncaught assertions: Telnet, 802.3, BER, IAX2, RADIUS, SMB PIPE, MRDISC + * memory exhaustion: DICOM + * unclassified: Fibre Channel, LDAP, NTLMSSP + + -- Frederic Peters Thu, 5 May 2005 08:43:00 +0200 + +ethereal (0.10.10-2) unstable; urgency=high + + * Several security fixes from upstream subversion tree for the following + dissectors: + * DLSw (infinite loop) + * ICEP (double free) + * NDPS (memory exhaustion) + * Q931 (buffer overflow) + * RSVP (infinite loop) (CAN-2005-1281) + * SRVLOC (infinite loop) + + -- Frederic Peters Mon, 25 Apr 2005 15:30:55 +0200 + +ethereal (0.10.10-1) unstable; urgency=high + + * New upstream release; urgency high since it fixes security issues. + * Fixes buffer overflow in Etheric dissector. (CAN-2005-0704) + * Fixes crash in GPRS-LLC dissector. (CAN-2005-0705) + * Fixes buffer overflow in 3G-A11 dissector. (CAN-2005-0699) + (was already fixed in Debian package) + * debian/ethereal-dev.header-files: some files moved to epan/ + + -- Frederic Peters Mon, 14 Mar 2005 10:16:03 +0100 + +ethereal (0.10.9-2) unstable; urgency=high + + * Backported packet-3g-a11.c from upstream subversion trunk. + (fixes buffer overflows in 3G-A11 dissector) + (CAN-2005-0699 (under review)) (closes: #298771) + + -- Frederic Peters Thu, 10 Mar 2005 10:25:08 +0100 + +ethereal (0.10.9-1) unstable; urgency=high + + * New upstream release; urgency high since it fixes security issues. + * Fixes infinite loop in COPS dissector. (CAN-2005-0006) + * Fixes assertion in DLSw dissector. (CAN-2005-0007) + * Fixes memory corruption in DNP dissector. (CAN-2005-0008) + * Fixes assertion in Gnutella dissector. (CAN-2005-0009) + * Fixes memory corruption in MMSE dissector. (CAN-2005-0010) + * Fixes buffer overflow in X11 dissector. (CAN-2005-0084) + * asn2deb and idl2deb manpages relicensed by W. Borgert from GFDL to GPL + + -- Frederic Peters Thu, 20 Jan 2005 23:03:19 +0100 + +ethereal (0.10.8-4) unstable; urgency=low + + * Updated libtool version in wiretap/ directory. (closes: #289962) + + -- Frederic Peters Wed, 12 Jan 2005 10:14:41 +0100 + +ethereal (0.10.8-3) unstable; urgency=low + + * Fixed dissect_cmip_InvokeIDType declaration (FTBFS with gcc-4.0) + (closes: #288990) + * epan/dissectors/packet-giop.c: fixed segfault with some GIOP packets + (closes: #288746) + + -- Frederic Peters Fri, 7 Jan 2005 14:43:03 +0100 + +ethereal (0.10.8-2) unstable; urgency=low + + * Restored lost patch to idl2eth; sorry. (closes: #288740) + * ethereal_gen.py: fixed some includes. + * epan/prefs.c: Use sensible-brower as default browser. + * debian/control: build-depends on libpcap0.8-dev. + * debian/control: lower-case first letter of descriptions. + + -- Frederic Peters Wed, 5 Jan 2005 14:34:57 +0100 + +ethereal (0.10.8-1) unstable; urgency=high + + * New upstream release. + * Now parses Auth option in DHCPv6 (closes: #283534) + * Urgency high since it fixes security issues with DICOM, RTP, HTTP + and SMB + (CAN-2004-1139, CAN-2004-1140, CAN-2004-1141 and CAN-2004-1142) + + -- Frederic Peters Wed, 15 Dec 2004 22:13:41 +0100 + +ethereal (0.10.7-3) unstable; urgency=low + + * epan/prefs.c: changed default font to "monospace 10" (closes: #232408) + + -- Frederic Peters Fri, 19 Nov 2004 18:31:22 +0100 + +ethereal (0.10.7-2) unstable; urgency=low + + * plugins/opsi/packet-opsi.c: backported resource exhaustion fix + (closes: #280556) + + -- Frederic Peters Thu, 18 Nov 2004 21:50:28 +0100 + +ethereal (0.10.7-1) unstable; urgency=low + + * New upstream release. (closes: #277923) + + -- Frederic Peters Mon, 1 Nov 2004 14:11:35 +0100 + +ethereal (0.10.6-4) unstable; urgency=low + + * Build in clean chroot; stupid me. (closes: #276560) + * debian/rules: remove config.log on clean. + + -- Frederic Peters Fri, 15 Oct 2004 00:12:58 +0200 + +ethereal (0.10.6-3) unstable; urgency=medium + + * Upgrades libtool (closes: #276515) + + -- Frederic Peters Thu, 14 Oct 2004 18:40:03 +0200 + +ethereal (0.10.6-2) unstable; urgency=medium + + * debian/ethereal-dev.header-files: added missing header files + (closes: #270581) + + -- Frederic Peters Wed, 8 Sep 2004 10:34:12 +0200 + +ethereal (0.10.6-1) unstable; urgency=high + + * New upstream realease. + * Gtk-Critical messages are fixed (closes: #260341, #263118) + * debian/rules: run libtoolize to fix sonames; fix a FTBFS bug + (closes: #265379) + + -- Frederic Peters Sun, 15 Aug 2004 11:58:03 +0200 + +ethereal (0.10.5-4) unstable; urgency=low + + * link libethereal.so to libadns and libm (closes: #262015) + (since this is a private shared library I don't think it was required) + + -- Frederic Peters Thu, 29 Jul 2004 15:41:02 +0200 + +ethereal (0.10.5-3) unstable; urgency=low + + * debian/ethereal-dev.header-files: install packet-rpc.h, crc16.h and crc32.h + (closes: #259375) + + -- Frederic Peters Wed, 14 Jul 2004 12:50:34 +0200 + +ethereal (0.10.5-2) unstable; urgency=low + + * Compile and install plugins (closes: #259199) + + -- Frederic Peters Tue, 13 Jul 2004 13:40:41 +0000 + +ethereal (0.10.5-1) unstable; urgency=low + + * New upstream release with security fixes. + + + + Fixed the crash in protocol hierarchy (closes: #244743) + + Ethereal can be configured not to bug you about unsaved captures + (closes: #235721) + * Updated omniorb URL (closes: #257512) + + -- Frederic Peters Tue, 13 Jul 2004 10:16:55 +0200 + +ethereal (0.10.4-3) unstable; urgency=low + + * debian/rules: install libethereal in /usr/lib/ethereal, not /usr/lib/ + * debian/ethereal-dev.header-files: added packet-ber.h + * idl2deb: ETH_VER_IMPORT and non-versioned autotools (closes: #255570) + * debian/control: updated depends to libpcap0.7-dev, no more libpcap-dev + + -- Frederic Peters Tue, 22 Jun 2004 09:02:39 +0200 + +ethereal (0.10.4-2) unstable; urgency=low + + * Rebuilt against GTK+ 2.4; now in unstable. + + -- Frederic Peters Tue, 25 May 2004 22:28:37 +0200 + +ethereal (0.10.4-1) unstable; urgency=high + + * New upstream release with security fixes. + + * (sorry about the delay; I was away and forgot about this release) + + -- Frederic Peters Sun, 16 May 2004 00:02:53 +0200 + +ethereal (0.10.3-3) unstable; urgency=low + + * debian/control: removed dependency on gksu; moved to recommends + * debian/EtherealAsRoot.desktop: added TryExec=gksu so that the menu is + only shown when gksu is installed + * debian/ethereal.menu: removed entry for "ethereal as root" since + """running ethereal itself requires some wits, and user possesing + such skills would be able to launch it from xterm.""" + * "Our Priorities are Our Users (...)", but ignore them if they ask + about gksu support; it's against the holy Debian Policy Manual and + a """300kB dependency *is* a big dependency""". + * This closes the bug and everybody is happy (closes: #240682) + + -- Frederic Peters Sat, 10 Apr 2004 21:16:30 +0200 + +ethereal (0.10.3-2) unstable; urgency=high + + * Acknowledge NMU. (sorry) (urgency high, security fixes) + * debian/control: added Build-Conflicts on libsnmp-dev + + -- Frederic Peters Sun, 28 Mar 2004 23:14:51 +0200 + +ethereal (0.10.3-1.0.1) unstable; urgency=low + + * Recompile-only NMU. + * i386 package was uploaded with dependencies on GNOME libs from + experimental; rebuild using only dependencies from unstable. + + -- Steve Langasek Sat, 27 Mar 2004 21:27:01 -0600 + +ethereal (0.10.3-1) unstable; urgency=high + + * New upstream release with security fixes. (hence urgency high) + http://www.ethereal.com/appnotes/enpa-sa-00013.html + * debian/rules: remove upstream debian/menu on build + * debian/control: added dependency on gksu + * debian/menu: added an entry to start ethereal with gksu + (closes: #71994) + * added another .desktop entry to start ethereal with gksu from Gnome menu + * Upstream changes; libethereal and libwiretap handled differently; they may + end up in new packages (but go in ethereal-common for now) + + -- Frederic Peters Sat, 27 Mar 2004 14:09:49 +0100 + +ethereal (0.10.2-2) unstable; urgency=low + + * New files in ethereal-dev (closes: #236702) + + -- Frederic Peters Sun, 7 Mar 2004 21:43:17 +0100 + +ethereal (0.10.2-1) unstable; urgency=low + + * New upstream release. + * debian/control: added libpcre3-dev to Build-Depends + + -- Frederic Peters Fri, 5 Mar 2004 15:56:50 +0100 + +ethereal (0.10.1-1) unstable; urgency=low + + * New upstream release. + * Include W. Bogert asn2deb (closes: #233603) + + -- Frederic Peters Thu, 19 Feb 2004 18:02:08 +0100 + +ethereal (0.10.0-6) unstable; urgency=low + + * debian/ethereal-common.manpages: added ethereal-filter.4 + (closes: #230256) + * debian/control: updated build-depends on docbook-xsl since docbook.xsl + moved. + + -- Frederic Peters Thu, 29 Jan 2004 18:11:43 +0100 + +ethereal (0.10.0-5) unstable; urgency=low + + * debian/rules: quotes around CFLAGS. (closes: #228492) + + -- Frederic Peters Mon, 19 Jan 2004 12:14:02 +0100 + +ethereal (0.10.0-4) unstable; urgency=low + + * Backported hexdump summary fix from CVS (closes: #226248) + http://www.ethereal.com/lists/ethereal-cvs/200312/msg00257.html + + -- Frederic Peters Mon, 5 Jan 2004 15:27:06 +0100 + +ethereal (0.10.0-3) unstable; urgency=low + + * ethereal_gen.py: patched to handle ushort/ulong union discriminators. + + -- Frederic Peters Thu, 18 Dec 2003 23:27:51 +0100 + +ethereal (0.10.0-2) unstable; urgency=low + + * debian/ethereal-dev.header-files: added missing header files. + (closes: #224246) + + -- Frederic Peters Wed, 17 Dec 2003 13:24:21 +0100 + +ethereal (0.10.0-1) unstable; urgency=low + + * New upstream release. (closes: #223857) + * correct fonts with GTK2. (closes: #197571) + * Includes missing help/ directory from CVS. + * Acknowledge NMU, thanks Ray. + * Security issues. (closes: #219590) + * idl2deb permissions. (closes: #211506) + * New idl2deb version, thanks. (closes: #213962) + * debian/ethereal-dev.header-files: include some missing header files + (closes the remaining of #211506) + * debian/control: versioned build-depends on debhelper. + + -- Frederic Peters Sat, 13 Dec 2003 17:11:09 +0100 + +ethereal (0.9.16-0.1) unstable; urgency=high + + * NMU. + * New upstream release (addresses #219590 for sid). + Fixes potential security issues with several dissectors: + * GTP (http://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2003-0925) + * ISAKMP and MEGACO + (http://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2003-0926) + * SOCKS (http://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2003-0927) + The upstream security advisory is enpa-sa-00011, available at + http://www.ethereal.com/appnotes/enpa-sa-00011.html + * [debian/rules] + * Don't remove doc/ethereal.pod and doc/tethereal.pod so the package + builds with pbuilder. + * Install idl2deb with execute permissions. + + -- J.H.M. Dassen (Ray) Mon, 10 Nov 2003 12:11:55 +0100 + +ethereal (0.9.15-1) unstable; urgency=low + + * New upstream release. (closes: #210272) + + -- Frederic Peters Wed, 10 Sep 2003 16:13:17 +0200 + +ethereal (0.9.14-5) unstable; urgency=low + + * debian/control: versioned build-depends on docbook-xsl (closes: #208734) + * debian/rules: compiles with -mieee on alpha + + -- Frederic Peters Sun, 7 Sep 2003 09:57:25 +0200 + +ethereal (0.9.14-4) unstable; urgency=low + + * debian/rules: install .desktop and images for menu. + (closes: #207271) + * debian/control: updated policy to 3.6.1.0 (no changes needed) + + -- Frederic Peters Sat, 30 Aug 2003 23:27:00 +0200 + +ethereal (0.9.14-3) unstable; urgency=low + + * Add manpage for idl2deb + * Include missing header files. (closes: #197181) + - from same bug: remove dependency of ethereal-dev against ethereal-common + - from same bug: added dependency to libglib2.0-dev + + -- Frederic Peters Tue, 19 Aug 2003 11:55:27 +0200 + +ethereal (0.9.14-2) unstable; urgency=low + + * Built for Python 2.3 since omniidl4 has been updated quickly. + + -- Frederic Peters Thu, 14 Aug 2003 10:19:18 +0200 + +ethereal (0.9.14-1) unstable; urgency=low + + * The "I'm so happy to be alive I'll fix plenty of bugs" release + * New upstream release. (closes: #204345) + * Include W. Bogert idl2deb script + * debian/control: depends on current versions of omniidl or omniidl4 since + they only exist for Python 2.2 and I don't want ethereal-dev to break when + they will switch to Python 2.3. I'll then release a new version. + * Several UI issues resolved upstream (closes: #199763) + * ethereal can now decode Jabber protocol (closes: #133099) + * debian/control: build-depends on libadns1-dev so that it now use the GNU + ADNS library for name resolution (closes: #197505) + + -- Frederic Peters Wed, 13 Aug 2003 00:06:27 +0200 + +ethereal (0.9.13-1) unstable; urgency=low + + * New upstream release. Fixing several security issues. + (closes: #197107) + + -- Frederic Peters Thu, 12 Jun 2003 10:00:57 +0200 + +ethereal (0.9.12-3) unstable; urgency=low + + * Rebuilt with new libpcap. (closes: #196831) + * Built with GTK+ 2.2 (instead of GTK+ 1.2). (closes: #193450) + + -- Frederic Peters Wed, 11 Jun 2003 17:45:07 +0200 + +ethereal (0.9.12-2) unstable; urgency=low + + * Forgot to update version-depends and it didn't use ${source-version}. + Fixed. (closes: #192213) + + -- Frederic Peters Wed, 7 May 2003 01:16:45 +0200 + +ethereal (0.9.12-1) unstable; urgency=high + + * New upstream release. Fixing several security issues. + (closes: #192107) + + -- Frederic Peters Tue, 6 May 2003 22:03:10 +0200 + +ethereal (0.9.9-2) unstable; urgency=low + + * Updated config.guess and config.sub to work on mips and mipsel + architectures (manually then through the patch provided by + Martin Godisch). (closes: #178701) + * Update to packet-socks.c + * debian/control: ethereal-dev now depends upon omniidl | omniidl4 + (closes: #182620) + * idl2eth no longer needs PYTHONPATH to be set explicitely. + (closes: #182621) + * debian/ethereal-dev.header-files: included config.h and reassemble.h since + they seem necessary. (closes: #183625) + * Thanks to W. Borgert for bug reporting. + + -- Frederic Peters Fri, 7 Mar 2003 22:52:27 +0000 + +ethereal (0.9.9-1) unstable; urgency=low + + * New upstream release. + * debian/control: Tightened ethereal-common dependencies. + (closes: #172861, #176236, #178027) + + -- Frederic Peters Fri, 24 Jan 2003 14:38:53 +0100 + +ethereal (0.9.8-3) unstable; urgency=low + + * debian/control: added versioned dependency between (t)ethereal and + ethereal-common to get the plug-ins. (closes: #172861) + + -- Frederic Peters Fri, 13 Dec 2002 10:39:27 +0100 + +ethereal (0.9.8-2) unstable; urgency=low + + * Updated config.sub and config.guess with the ones from autotools-dev + (closes: #172407) + + -- Frederic Peters Tue, 10 Dec 2002 09:52:45 +0100 + +ethereal (0.9.8-1) unstable; urgency=low + + * New upstream release. + * This added (some) support for counting IPv6 packets during capture. + (closes: #164472) + * 0.9.7 fixed the LMP dissector. (closes: #163513) + + -- Frederic Peters Mon, 9 Dec 2002 10:00:51 +0100 + +ethereal (0.9.7-2) unstable; urgency=low + + * debian/control: added libgtk2.0-dev to build depends. + * debian/control: removed libsnmp-dev from build depends (ethereal is + compiled without SNMP support since it would link against libssl) + (the build-dep caused failure to build on architectures where perl 5.8 + wasn't ready (dependency on libsnmp-perl)) + * debian/control: added python, automake and autoconf to build depends. + * debian/rules: creating aclocal-missing directory on build. + (those bugs closes: #163443) (patch by LaMont Jones) + * debian/rules: install Python files to 2.2 directory, not 2.1 + * debian/ethereal-dev.postinst: fixed Python version (closes: #163153) + + -- Frederic Peters Mon, 7 Oct 2002 15:06:06 +0200 + +ethereal (0.9.7-1) unstable; urgency=low + + * New upstream release. (closes: #162972) + * debian/copyright: include upstream author name. (closes: #151015) + + -- Frederic Peters Tue, 1 Oct 2002 16:20:45 +0200 + +ethereal (0.9.6-2) unstable; urgency=low + + * debian/control: changed Python dep to >= 2.2 and << 2.3 since 2.2 is now + the default version in sid. + + -- Frederic Peters Sat, 14 Sep 2002 23:29:23 +0200 + +ethereal (0.9.6-1) unstable; urgency=low + + * New upstream release. + * Fixes security issue in the ISIS protocol dissector (susceptible to + buffer overflow). + (see http://www.ethereal.com/appnotes/enpa-sa-00006.html) + * Add missing header files (packet-tcp.h and packet-tpkt.h) to ethereal-dev + (closes: #158808) + * Add default PYTHONPATH to idl2eth (closes: #158909) + + -- Frederic Peters Mon, 2 Sep 2002 10:13:06 +0200 + +ethereal (0.9.5-3) unstable; urgency=low + + * Rebuilt with new libpcap0.7. (closes: #156206) + + -- Frederic Peters Sat, 10 Aug 2002 19:25:29 +0200 + +ethereal (0.9.5-2) unstable; urgency=low + + * Do not run libtoolize since it creates a bogus libtool file. + + -- Frederic Peters Mon, 8 Jul 2002 16:07:00 +0200 + +ethereal (0.9.5-1) unstable; urgency=low + + * New upstream release. + * Fixes several security issues. + (http://www.ethereal.com/appnotes/enpa-sa-00005.html) + + -- Frederic Peters Sat, 29 Jun 2002 19:13:30 +0200 + +ethereal (0.9.4-1) unstable; urgency=medium + + * New upstream release. + * Fixes four security issues. (closes: #147595) + (http://www.ethereal.com/appnotes/enpa-sa-00004.html) + + -- Frederic Peters Mon, 20 May 2002 01:10:21 +0200 + +ethereal (0.9.3-1) unstable; urgency=medium + + * New upstream release + * Fixes ASN.1 zero-length g_malloc that could lead to security problems. + (see http://www.ethereal.com/appnotes/enpa-sa-00003.html) + + -- Frederic Peters Sun, 31 Mar 2002 21:45:11 +0200 + +ethereal (0.9.2-3) unstable; urgency=low + + * debian/rules: fixed typo that could have caused snmp not to be built. + (closes: #140147) This would happen if 1) built from the CVS tree and 2) + built on a system without libsnmp-dev ("impossible" since we build-depend + on it). Anyway it is fixed for correctness. + + -- Frederic Peters Wed, 27 Mar 2002 14:00:31 +0100 + +ethereal (0.9.2-2) unstable; urgency=low + + * Added libwiretap.a to ethereal-dev (closes: #137971) + + -- Frederic Peters Tue, 12 Mar 2002 11:59:04 +0100 + +ethereal (0.9.2-1) unstable; urgency=low + + * New upstream release. + + -- Frederic Peters Tue, 5 Mar 2002 10:30:24 +0100 + +ethereal (0.9.1-8) unstable; urgency=low + + * debian/control: changed ethereal-dev section to devel. + + -- Frederic Peters Mon, 25 Feb 2002 14:50:49 +0100 + +ethereal (0.9.1-7) unstable; urgency=low + + * debian/control: changed ethereal-dev Depends line to use omniidl-python + and no omniorb. + + -- Frederic Peters Mon, 25 Feb 2002 13:47:42 +0100 + +ethereal (0.9.1-6) unstable; urgency=low + + * debian/control: fix Depends line for ethereal-dev (added libpcap-dev) + * idl2eth: added PYTHONPATH so that it runs. + + -- Frederic Peters Mon, 18 Feb 2002 11:48:01 +0100 + +ethereal (0.9.1-5) unstable; urgency=low + + * debian/rules: added --disable-ssl so that ethereal is not built with + ssl support and may be uploaded to main. (closes: #134273) + + -- Frederic Peters Mon, 18 Feb 2002 09:33:30 +0100 + +ethereal (0.9.1-4) unstable; urgency=low + + * debian/rules: added forgotten header files to ethereal-dev. + (really closes: #105916) + + -- Frederic Peters Fri, 15 Feb 2002 10:12:15 +0100 + +ethereal (0.9.1-3) unstable; urgency=low + + * debian/rules: after the quick and dirty repackaging of 0.9.1-1 this one + should be much better: 4 packages: ethereal-common, ethereal, tethereal + and etherel-dev (last three depending on ethereal-common). + This should address Christian Kurz remarks. + (closes: #133798, #133796, #133806) + This should also please W. Borgert. (closes: #105916) + + -- Frederic Peters Wed, 13 Feb 2002 20:36:12 +0100 + +ethereal (0.9.1-2) unstable; urgency=low + + * debian/control: fixed typo in tethereal description (closes: #133019) + + -- Frederic Peters Fri, 8 Feb 2002 23:55:49 +0100 + +ethereal (0.9.1-1) unstable; urgency=low + + * New upstream release. + * Fixed protocol hierarchy display (closes: #131676) + * It is possible to see TOS fields instead of DS fields in IP header. + (option in preferences dialog) (closes: #121046) + * debian/rules: totally revamped build process: create an additional + tethereal package that doesn't depend on GTK+ (closes: #103488) + It is not yet perfect but I'm working on it... + + -- Frederic Peters Mon, 28 Jan 2002 18:25:25 +0100 + +ethereal (0.9.0-1) unstable; urgency=low + + * New upstream release. + * Upstream fixed SNMP bugs (closes: #114361, #119580) + * Upstream fixed Sender->Receiver bug (closes: #112327) + * debian/copyright: fixed 'license' spelling. + * debian/rules: fixed 'clean' target to remove temporary files. + * debian/rules: moved $sysconfdir to /usr/share/ethereal since $sysconfdir + is not used here to store config files. (closes: #127638) + + -- Frederic Peters Thu, 3 Jan 2002 19:43:18 +0100 + +ethereal (0.8.20-1) unstable; urgency=low + + * New upstream release. + + -- Frederic Peters Fri, 19 Oct 2001 10:49:35 +0200 + +ethereal (0.8.19-2) unstable; urgency=low + + * debian/rules: added call to libtoolize so that it compiles on hppa. + (closes: #108662) + + -- Frederic Peters Mon, 17 Sep 2001 14:23:34 +0200 + +ethereal (0.8.19-1) unstable; urgency=low + + * New upstream release. + * debian/control: improved description of package. (closes: #104744) + + -- Frederic Peters Sat, 14 Jul 2001 11:57:12 +0200 + +ethereal (0.8.17-1) unstable; urgency=low + + * New upstream release. + + -- Frederic Peters Fri, 13 Apr 2001 13:33:35 +0200 + +ethereal (0.8.16-1) unstable; urgency=low + + * New upstream release. + + -- Frederic Peters Thu, 8 Mar 2001 09:07:34 +0100 + +ethereal (0.8.15-2) unstable; urgency=low + + * Rebuilt against libsnmp4.2 (closes: #83720) + * It is possible to not go in promiscuous mode (-p) (actually it was for + some time...) (closes: #34376) + + -- Frederic Peters Sat, 27 Jan 2001 13:39:05 +0100 + +ethereal (0.8.15-1) unstable; urgency=low + + * New upstream release. + + -- Frederic Peters Sat, 13 Jan 2001 19:36:26 +0100 + +ethereal (0.8.14-2) unstable; urgency=low + + * Fix for the socks dissector. (closes: #81164) + (patch by Jeff Foster ) + + -- Frederic Peters Thu, 11 Jan 2001 00:27:02 +0100 + +ethereal (0.8.14-1) unstable; urgency=low + + * New upstream release. + * Officially fixes the buffer overflow exploit mentioned below (as well + as other possible ones) + + -- Frederic Peters Tue, 21 Nov 2000 22:48:16 +0100 + +ethereal (0.8.13-3) unstable; urgency=low + + * Fixed possible buffer overflow exploit in packet-afs.c (I could not + reproduce it so I don't know if my fix really works, please test it) + (exploit is on http://www.hacksware.com) + + -- Frederic Peters Tue, 21 Nov 2000 22:47:59 +0100 + +ethereal (0.8.13-2) unstable; urgency=low + + * Rebuilt against XFree86 4.0 libs (now that I'm allowed to...) + * Rebuilt against zlibg1 1.1.13-1 that has a correct shlibs file + (closes: #76533, #76552) + + -- Frederic Peters Fri, 10 Nov 2000 17:39:40 +0100 + +ethereal (0.8.13-1) unstable; urgency=low + + * New upstream release. + + -- Frederic Peters Sun, 29 Oct 2000 23:58:38 +0100 + +ethereal (0.8.12-1) unstable; urgency=low + + * New upstream release. + * Patch for SRVLOC frames has been applied upstrem. + + -- Frederic Peters Mon, 18 Sep 2000 10:22:27 +0200 + +ethereal (0.8.11-1) unstable; urgency=low + + * New upstream release. + * Applied patch to fix hang on some SRVLOC frames (closes: #68024) + + -- Frederic Peters Thu, 10 Aug 2000 21:06:52 +0200 + +ethereal (0.8.10-1) unstable; urgency=low + + * New upstream release. + * Added debhelper to Build-depends (closes: #66391) + + -- Frederic Peters Tue, 11 Jul 2000 22:36:45 +0200 + +ethereal (0.8.9-2) unstable; urgency=low + + * Updated Build-depends to match libsnmp (closes: #66018) (it's the same + entry as for 0.8.7-2; I need some sleep) + + -- Frederic Peters Thu, 22 Jun 2000 23:59:29 +0200 + +ethereal (0.8.9-1) unstable; urgency=low + + * New upstream release. + + -- Frederic Peters Tue, 20 Jun 2000 14:17:00 +0200 + +ethereal (0.8.8-1) unstable; urgency=low + + * New upstream release. + + -- Frederic Peters Wed, 10 May 2000 17:20:36 +0200 + +ethereal (0.8.7-2) unstable; urgency=low + + * Updated Build-depends to match libsnmp (closes: #63753) + + -- Frederic Peters Mon, 8 May 2000 19:02:29 +0200 + +ethereal (0.8.7-1) unstable; urgency=low + + * New upstream release. + + -- Frederic Peters Mon, 17 Apr 2000 18:41:21 +0200 + +ethereal (0.8.6-1) unstable; urgency=low + + * New upstream release. + * Linked against libsnmp4.1 (closes: #62324) + + -- Frederic Peters Fri, 14 Apr 2000 19:45:53 +0200 + +ethereal (0.8.4-1) unstable; urgency=low + + * New upstream release. + * Applied fix for correct decapsulation of PPP frames (closes: #59663) + (patch provided by Thomas Quinot ) + + -- Frederic Peters Sun, 5 Mar 2000 20:04:11 +0100 + +ethereal (0.8.3-1) unstable; urgency=low + + * New upstream release. + * Checked PPTP problems (fix was introduced in 0.8.2) (closes: #55347) + + -- Frederic Peters Sat, 5 Feb 2000 23:51:26 +0100 + +ethereal (0.8.2-2) unstable; urgency=low + + * debian/control: fixed Build-Depends line (closes: #56707) + + -- Frederic Peters Mon, 31 Jan 2000 19:29:21 +0100 + +ethereal (0.8.2-1) unstable; urgency=low + + * New upstream release. + + -- Frederic Peters Sat, 29 Jan 2000 01:53:50 +0100 + +ethereal (0.8.1-2) unstable; urgency=low + + * debian/control: added Build-Depends + * debian/control: modified description to match the README file + * debian/rules: added --disable-static to ./configure + * compiled with SNMP support (through libsnmp) + + -- Frederic Peters Thu, 20 Jan 2000 18:30:40 +0100 + +ethereal (0.8.1-1) unstable; urgency=low + + * New upstream release. + * Fixed duplicate manpage installation. (closes: #55438) + + -- Frederic Peters Wed, 19 Jan 2000 09:29:56 +0100 + +ethereal (0.8.0-1) unstable; urgency=low + + * New upstream release. + + -- Frederic Peters Sat, 1 Jan 2000 23:50:44 +0100 + +ethereal (0.7.9-1) unstable; urgency=low + + * New upstream release. + + -- Frederic Peters Sat, 25 Dec 1999 00:55:00 +0100 + +ethereal (0.7.7-1) unstable; urgency=low + + * New upstream release. + + -- Frederic Peters Fri, 29 Oct 1999 14:09:01 +0200 + +ethereal (0.7.3-2) unstable; urgency=low + + * Fixed debian/rules to work with the new debhelper that create FHS compliant + packages. (Fixes: #44613) + + -- Frederic Peters Thu, 9 Sep 1999 18:29:12 +0200 + +ethereal (0.7.3-1) unstable; urgency=low + + * New upstream release. + + -- Frederic Peters Sun, 5 Sep 1999 20:06:10 +0200 + +ethereal (0.7.2-1) unstable; urgency=low + + * New upstream release. + + -- Frederic Peters Sat, 14 Aug 1999 18:32:28 +0200 + +ethereal (0.7.1-1) unstable; urgency=low + + * New upstream release. + + -- Frederic Peters Sat, 7 Aug 1999 16:29:03 +0200 + +ethereal (0.6.3-2) unstable; urgency=low + + * Renamed NEWS to changelog since this is the upstream ChangeLog + (fixes bug #41908) + + -- Frederic Peters Tue, 27 Jul 1999 20:19:28 +0200 + +ethereal (0.6.3-1) unstable; urgency=low + + * New upstream release. + * Moved directories to comply with FHS (and Standards 3.0.0) + + -- Frederic Peters Sat, 24 Jul 1999 00:36:46 +0200 + +ethereal (0.6.2-1) unstable; urgency=low + + * New upstream release. + + -- Frederic Peters Tue, 25 May 1999 16:47:08 +0200 + +ethereal (0.6.1-1) unstable; urgency=low + + * New upstream release. + + -- Frederic Peters Sun, 2 May 1999 23:30:38 +0200 + +ethereal (0.5.1-3) unstable; urgency=low + + * Fixed package building (Bug#35657 (report and patch from bartw@xs4all.nl) + + -- Frederic Peters Sat, 10 Apr 1999 19:20:29 +0200 + +ethereal (0.5.1-2) unstable; urgency=low + + * Compiled against libgtk1.2 + * Moved /usr/etc/manuf to /etc/manuf (it's now lintian clean) + + -- Frederic Peters Mon, 8 Mar 1999 22:33:04 +0100 + +ethereal (0.5.1-1) unstable; urgency=low + + * New upstream release. + + -- Frederic Peters Sat, 9 Jan 1999 16:51:28 +0100 + +ethereal (0.5.0-2) unstable; urgency=low + + * Fixed package building (Bug#30110) + + -- Frederic Peters Thu, 3 Dec 1998 13:15:53 +0100 + +ethereal (0.5.0-1) unstable; urgency=low + + * New upstream release. + + -- Frederic Peters Tue, 24 Nov 1998 16:04:15 +0100 + +ethereal (0.4.0-1) unstable; urgency=low + + * New upstream release. + + -- Frederic Peters Sat, 17 Oct 1998 17:20:01 +0200 + +ethereal (0.3.17-1) unstable; urgency=low + + * New upstream release. + + -- Frederic Peters Tue, 29 Sep 1998 20:01:11 +0200 + +ethereal (0.3.16-2) unstable; urgency=low + + * New versions aren't just for Alpha people :) (fixes #26914) + + -- Frederic Peters Fri, 25 Sep 1998 17:03:39 +0200 + +ethereal (0.3.16-1) unstable; urgency=low + + * New upstream version + + -- Frederic Peters Sat, 19 Sep 1998 10:55:48 +0200 + +ethereal (0.3.15-1.1) unstable; urgency=low + + * non-maintainer upload for Alpha + * GTK cflags ans library flags were not passed to the compiler. + + -- Paul Slootman Mon, 21 Sep 1998 22:49:32 +0200 + +ethereal (0.3.15-1) unstable; urgency=low + + * Initial Release. + + -- Frederic Peters Sun, 13 Sep 1998 23:05:47 +0200 + --- wireshark-1.0.2.orig/debian/watch +++ wireshark-1.0.2/debian/watch @@ -0,0 +1,2 @@ +version=3 +http://www.wireshark.org/download/src/all-versions/wireshark-(.*)\.tar\.gz --- wireshark-1.0.2.orig/debian/wireshark-dev.prerm +++ wireshark-1.0.2/debian/wireshark-dev.prerm @@ -0,0 +1,15 @@ +#! /bin/bash -e +# +# Debian prerm script for Python x.y hierarchical modules +# Written by Gregor Hoffleit +# Extended by Matthias Klose +# + +PACKAGE=`basename $0 | sed -e 's/\.[^.]*$//'` + +dpkg --listfiles $PACKAGE | + awk '$0~/\.py$/ {print $0"c\n" $0"o"}' | + xargs rm -f >&2 + +#DEBHELPER# + --- wireshark-1.0.2.orig/debian/wireshark-common.manpages +++ wireshark-1.0.2/debian/wireshark-common.manpages @@ -0,0 +1,7 @@ +editcap.1 +mergecap.1 +text2pcap.1 +wireshark-filter.4 +capinfos.1 +dumpcap.1 +rawshark.1 --- wireshark-1.0.2.orig/debian/wireshark-dev.manpages +++ wireshark-1.0.2/debian/wireshark-dev.manpages @@ -0,0 +1,3 @@ +idl2wrs.1 +idl2deb.1 +asn2deb.1 --- wireshark-1.0.2.orig/debian/wireshark.menu +++ wireshark-1.0.2/debian/wireshark.menu @@ -0,0 +1,5 @@ +?package(wireshark):needs="X11" section="Applications/Network/Monitoring" \ + title="Wireshark" \ + command="/usr/bin/wireshark" \ + icon="/usr/share/pixmaps/wsicon32.xpm" + --- wireshark-1.0.2.orig/debian/pyversions +++ wireshark-1.0.2/debian/pyversions @@ -0,0 +1 @@ +2.3- --- wireshark-1.0.2.orig/debian/copyright +++ wireshark-1.0.2/debian/copyright @@ -0,0 +1,428 @@ +This package was debianized by Frederic Peters on +Sun, 13 Sep 1998 23:05:47 +0200 + +It was downloaded from http://www.wireshark.org/download/src/all-versions/ + +The Wireshark web site URL is http://www.wireshark.org/ + +Upstream Authors: + Gerald Combs and contributors + +Except where otherwise noted in the source code, Wireshark is covered under +the GNU General Public License (v2 or later). + +Wireshark is copyright (c) 1998-2006 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. + +On Debian systems the GNU GPL may be viewed in /usr/share/common-licenses/GPL. + +Wireshark and the "fin" logo are trademarks of Gerald Combs. + +Source files included in Wireshark and with other licenses are listed below: + + +Public Domain +------------- + +g711.c: + * This source code is a product of Sun Microsystems, Inc. and is provided + * for unrestricted use. Users may copy or modify this source code without + * charge. + * + * SUN SOURCE CODE IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING + * THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR + * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. + * + * Sun source code is provided with no support and without any obligation on + * the part of Sun Microsystems, Inc. to assist in its use, correction, + * modification or enhancement. + * + * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE + * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS SOFTWARE + * OR ANY PART THEREOF. + * + * In no event will Sun Microsystems, Inc. be liable for any lost revenue + * or profits or other special, indirect and consequential damages, even if + * Sun has been advised of the possibility of such damages. + * + * Sun Microsystems, Inc. + * 2550 Garcia Avenue + * Mountain View, California 94043 + + +LGPL +---- + +mkstemp.c: LGPL, from GNU C Library +mkstemp.h: idem +strcasecmp.c: idem +strncasecmp.c: idem +strptime.c: idem +ps.c: idem + * Copyright (C) 1991, 1992, 1996, 1998 Free Software Foundation, Inc. + * This file is part of the GNU C Library. + * + * The GNU C Library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * The GNU C Library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with the GNU C Library; see the file COPYING.LIB. If not, + * write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + + +epan/g_ascii_strtoull.c: LGPL, from GLIB +epan/g_ascii_strtoull.h: idem +gtk/ethclist.c: idem +gtk/ethclist.h: idem + * GLIB - Library of useful routines for C programming + * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald + * Copyright (C) 1997-1998 Jay Painter + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301, USA. + + +epan/dfilter/grammar.c: LGPL, Copyright 1991-1995 by D. Richard Hipp +tools/lemon/lempar.c: idem + * Copyright 1991-1995 by D. Richard Hipp. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301, USA. + + +MIT +--- + +epan/xmlstub.h: + * This is part of tree.h from the libxml2 distribution. It is used + * for structure reference when dynamically linking to libxml. + * + * The GPL agreement for this file and for libxml2 can be found at + * http://www.xmlsoft.org + +Note that libxml2 is MIT-licensed, not GPL. + + +BSD & BSD-like +-------------- + +epan/crypt-md5.c: +epan/crypt-md5.h: + * Copyright (C) 1999, 2000, 2002 Aladdin Enterprises. All rights reserved. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + * L. Peter Deutsch + * ghost@aladdin.com + + +epan/except.c: +epan/except.h: + * Portable Exception Handling for ANSI C. + * Copyright (C) 1999 Kaz Kylheku + * + * Free Software License: + * + * All rights are reserved by the author, with the following exceptions: + * Permission is granted to freely reproduce and distribute this software, + * possibly in exchange for a fee, provided that this copyright notice appears + * intact. Permission is also granted to adapt this software to produce + * derivative works, as long as the modified versions carry this copyright + * notice and additional notices stating that the work has been modified. + * This source code may be translated into executable form and incorporated + * into proprietary software; there is no requirement for such software to + * contain a copyright notice related to this source. + + +epan/in_cksum.c: +epan/inet_aton.c: + * Copyright (c) 1988, 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + + +epan/inet_ntop.c: +epan/inet_pton.c: + * Copyright (c) 1996-1999 by Internet Software Consortium. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS + * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE + * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + + +epan/dissectors/packet-enc.c: +epan/dissectors/packet-etherip.c: +epan/dissectors/packet-ipsec-udp.c: + * Copyright (c) 2003 Markus Friedl. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +epan/dissectors/packet-pflog.c: +epan/dissectors/packet-pflog.h: + * Copyright 2001 Mike Frantzen + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + + +epan/dissectors/packet-vj.c: + * This file created by Irfan Khan + * Copyright (c) 2001 by QUALCOMM, Incorporated. + * All Rights reserved. + * + * Routines to compress and uncompress TCP packets (for transmission + * over low speed serial lines). + * + * Copyright (c) 1989 Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that the above copyright notice and this paragraph are + * duplicated in all such forms and that any documentation, + * advertising materials, and other materials related to such + * distribution and use acknowledge that the software was developed + * by the University of California, Berkeley. The name of the + * University may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + +wiretap/erf.c: +wiretap/erf.h: + * Copyright (c) 2003 Endace Technology Ltd, Hamilton, New Zealand. + * All rights reserved. + * + * This software and documentation has been developed by Endace Technology Ltd. + * along with the DAG PCI network capture cards. For further information please + * visit http://www.endace.com/. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. The name of Endace Technology Ltd may not be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY ENDACE TECHNOLOGY LTD ``AS IS'' AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ENDACE TECHNOLOGY LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + + +wiretap/i4b_trace.h: + * Copyright (c) 1997, 1999 Hellmuth Michaelis. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + + +Files missing license notices +----------------------------- + +tap-funnel.c: + Wireshark terms, according to author on wireshark-dev@, message-id: + + +editcap.c: +merge.c: +mergecap.c: + Wireshark terms, according to wireshark-dev@, message-id: + + +epan/epan.c: +epan/exceptions.h: +epan/dfilter/gencode.h: +epan/dfilter/glib-util.c: +epan/dfilter/glib-util.h: + Contributed by Gilbert Ramirez, he has been contacted, his other files are + under Wireshark terms, (message-id: <44C1EFA2.3050907@alum.mit.edu>) + +epan/dissectors/packet-bootparams.h: +epan/dissectors/packet-mount.h: +epan/dissectors/packet-nfs.h: +epan/dissectors/packet-x11-keysym.h: + Corresponding .c files have GPL notices, authors have been contacted for + clarification. + +epan/dissectors/packet-nlm.h: no license info + Wireshark terms, according to wireshark-dev@, message-id: + + +gtk/win32-file-dlg.h: + Contributed by Gerald Combs, Wireshark author, no answer yet but there is no + reason why it would not have standard Wireshark terms. Message-id: + <44C1EFA2.3050907@alum.mit.edu> + +epan/in_cksum.h: + BSD, like in_cksum.c, according to wireshark-dev@, message-id: + <44C1EFA2.3050907@alum.mit.edu> + +epan/dissectors/packet-diameter-defs.h: + GNU GPL notice added in current Subversion repository, will be in file for + 0.99.3. + +snprintf.h: + no longer used, according to wireshark-dev@, but it was under GPL like .c + message-id: --- wireshark-1.0.2.orig/debian/pycompat +++ wireshark-1.0.2/debian/pycompat @@ -0,0 +1 @@ +2 --- wireshark-1.0.2.orig/debian/wireshark-common.shlibs +++ wireshark-1.0.2/debian/wireshark-common.shlibs @@ -0,0 +1,2 @@ +libwireshark 0 wireshark-common +libwiretap 0 wireshark-common --- wireshark-1.0.2.orig/debian/tshark.files +++ wireshark-1.0.2/debian/tshark.files @@ -0,0 +1,2 @@ +/usr/bin/tshark + --- wireshark-1.0.2.orig/debian/wireshark.manpages +++ wireshark-1.0.2/debian/wireshark.manpages @@ -0,0 +1 @@ +wireshark.1 --- wireshark-1.0.2.orig/debian/ethereal-common.NEWS +++ wireshark-1.0.2/debian/ethereal-common.NEWS @@ -0,0 +1,13 @@ +wireshark (0.99.2-1) unstable; urgency=low + + Same developers, same code, different name. The Ethereal network protocol + analyzer has changed its name to Wireshark. + + Name changes: + - ethereal -> wireshark + - tethereal -> tshark + - idl2eth -> idl2wrs + + See http://www.wireshark.org/news/20060607.html for more information. + + -- Frederic Peters Thu, 12 Oct 2006 15:35:25 +0200 --- wireshark-1.0.2.orig/debian/wireshark-common.files +++ wireshark-1.0.2/debian/wireshark-common.files @@ -0,0 +1,13 @@ +/usr/bin/dumpcap +/usr/bin/rawshark +/usr/bin/capinfos +/usr/bin/editcap +/usr/bin/mergecap +/usr/bin/text2pcap +/usr/lib/wireshark/libwireshark.so.0 +/usr/lib/wireshark/libwireshark.so.0.0.1 +/usr/lib/wireshark/libwiretap.so.0 +/usr/lib/wireshark/libwiretap.so.0.0.1 +/usr/lib/wireshark/plugins/* +/usr/share/wireshark/* +/etc/wireshark/init.lua --- wireshark-1.0.2.orig/debian/wireshark-dev.files +++ wireshark-1.0.2/debian/wireshark-dev.files @@ -0,0 +1,10 @@ +/usr/bin/idl2wrs +/usr/bin/idl2deb +/usr/bin/asn2deb +/usr/lib/wireshark/libwireshark.so +/usr/lib/wireshark/libwireshark.la +/usr/lib/wireshark/libwiretap.so +/usr/lib/wireshark/libwiretap.la +/usr/lib/python2.3/* +/usr/include/wireshark/* + --- wireshark-1.0.2.orig/debian/control +++ wireshark-1.0.2/debian/control @@ -0,0 +1,69 @@ +Source: wireshark +Section: net +Priority: optional +Maintainer: Frederic Peters +Uploaders: Joost Yervante Damad +Standards-Version: 3.8.0.1 +Build-Depends: libgtk2.0-dev (>=2.4.0-0), libpcap0.8-dev, flex, libz-dev, dpatch, debhelper (>= 6), libtool, python, automake1.9, autoconf, autotools-dev, libadns1-dev, xsltproc, docbook-xsl (>= 1.64.1.0-0), libpcre3-dev, libcap2-dev [!kfreebsd-i386 !kfreebsd-amd64 !hurd-i386], bison, libgnutls-dev, python-support (>= 0.3), portaudio19-dev, libkrb5-dev, liblua5.1-0-dev +Build-Conflicts: libsnmp4.2-dev, libsnmp-dev +XS-Python-Version: all + +Package: wireshark-common +Architecture: any +Depends: ${shlibs:Depends} +Recommends: wireshark (>= ${binary:Version}) | tshark (>= ${binary:Version}) +Replaces: ethereal-common (<< 1.0.0-3) +Conflicts: ethereal-common (<< 1.0.0-3) +Description: network traffic analyser (common files) + Wireshark is a network traffic analyzer, or "sniffer", for Unix and + Unix-like operating systems. A sniffer is a tool used to capture + packets off the wire. Wireshark decodes numerous protocols (too many + to list). + . + This package provides files common to both wireshark (the GTK+ version) + and tshark (the console version). + +Package: wireshark +Architecture: any +Depends: ${shlibs:Depends}, wireshark-common (= ${binary:Version}) +Recommends: gksu +Replaces: ethereal (<< 1.0.0-3) +Conflicts: ethereal (<< 1.0.0-3) +Description: network traffic analyzer + Wireshark is a network traffic analyzer, or "sniffer", for Unix and + Unix-like operating systems. A sniffer is a tool used to capture + packets off the wire. Wireshark decodes numerous protocols (too many + to list). + . + This package provides wireshark (the GTK+ version) + +Package: tshark +Architecture: any +Depends: ${shlibs:Depends}, wireshark-common (= ${binary:Version}) +Replaces: tethereal (<< 1.0.0-3) +Conflicts: tethereal (<< 1.0.0-3) +Description: network traffic analyzer (console) + Wireshark is a network traffic analyzer, or "sniffer", for Unix and + Unix-like operating systems. A sniffer is a tool used to capture + packets off the wire. Wireshark decodes numerous protocols (too many + to list). + . + This package provides the console version of wireshark, named + "tshark". + +Package: wireshark-dev +Architecture: any +Section: devel +Depends: ${shlibs:Depends}, omniidl (>> 1:3.0.4.1-10) | omniidl4 (>= 4.0.1-2) , libpcap0.8-dev, libtool, libglib2.0-dev, ${python:Depends}, snacc, autotools-dev, debhelper, cdbs, automake1.9, autoconf +Replaces: ethereal-dev (<< 1.0.0-3) +Conflicts: ethereal-dev (<< 1.0.0-3) +XB-Python-Version: ${python:Versions} +Description: network traffic analyser (development tools) + Wireshark is a network traffic analyzer, or "sniffer", for Unix and + Unix-like operating systems. A sniffer is a tool used to capture + packets off the wire. Wireshark decodes numerous protocols (too many + to list). + . + This package provides idl2wrs and other necessary files to develop + new packet dissectors. + --- wireshark-1.0.2.orig/debian/wireshark-dev.header-files +++ wireshark-1.0.2/debian/wireshark-dev.header-files @@ -0,0 +1,9 @@ +color.h +config.h +register.h +epan/*.h +epan/crypt/*.h +epan/dfilter/*.h +epan/dissectors/*.h +epan/ftypes/*.h +wiretap/*.h --- wireshark-1.0.2.orig/debian/wireshark.files +++ wireshark-1.0.2/debian/wireshark.files @@ -0,0 +1,3 @@ +/usr/bin/wireshark +/usr/share/applications/ +/usr/share/pixmaps/ --- wireshark-1.0.2.orig/debian/patches/00list +++ wireshark-1.0.2/debian/patches/00list @@ -0,0 +1,14 @@ +01_idl2deb +02_asn2deb +03_preferences +#04_drop-capabilities +06_giop-buffer +08_wireshark-desktop-menu +09_idl2wrs +15_sensitive_open +16_licence_about_location +17_clique_rm_support +19_umask +20_CVE-2008-3933 +21_CVE-2008-3934 +22_CVE-2008-3146_3932 --- wireshark-1.0.2.orig/debian/patches/04_drop-capabilities.dpatch +++ wireshark-1.0.2/debian/patches/04_drop-capabilities.dpatch @@ -0,0 +1,125 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 04_drop-capabilities.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Drop all capabilities but CAP_NET_RAW + +@DPATCH@ +diff -urNad wireshark-0.99.7~pre1~/configure.in wireshark-0.99.7~pre1/configure.in +--- wireshark-0.99.7~pre1~/configure.in 2007-11-22 17:57:27.000000000 +0100 ++++ wireshark-0.99.7~pre1/configure.in 2007-11-22 19:49:04.123227069 +0100 +@@ -1092,6 +1092,7 @@ + AC_WIRESHARK_LIBCAP_CHECK + fi + AC_SUBST(LIBCAP_LIBS) ++LIBS="$LIBS $LIBCAP_LIBS" + + dnl Checks for header files. + AC_HEADER_STDC +diff -urNad wireshark-0.99.7~pre1~/gtk/main.c wireshark-0.99.7~pre1/gtk/main.c +--- wireshark-0.99.7~pre1~/gtk/main.c 2007-11-22 17:57:26.000000000 +0100 ++++ wireshark-0.99.7~pre1/gtk/main.c 2007-11-22 19:47:17.867228596 +0100 +@@ -1827,6 +1827,9 @@ + { + gchar *capture_msg; + ++#ifdef HAVE_LIBCAP ++ dropexcesscapabilities(); ++#endif + + gtk_statusbar_pop(GTK_STATUSBAR(packets_bar), packets_ctx); + +diff -urNad wireshark-0.99.7~pre1~/tshark.c wireshark-0.99.7~pre1/tshark.c +--- wireshark-0.99.7~pre1~/tshark.c 2007-11-22 17:57:25.000000000 +0100 ++++ wireshark-0.99.7~pre1/tshark.c 2007-11-22 19:47:17.871228775 +0100 +@@ -792,6 +792,10 @@ + capture_opts_init(&capture_opts, NULL /* cfile */); + #endif + ++#ifdef HAVE_LIBCAP ++ dropexcesscapabilities(); ++#endif ++ + timestamp_set_type(TS_RELATIVE); + timestamp_set_precision(TS_PREC_AUTO); + +diff -urNad wireshark-0.99.7~pre1~/util.c wireshark-0.99.7~pre1/util.c +--- wireshark-0.99.7~pre1~/util.c 2007-11-22 17:57:26.000000000 +0100 ++++ wireshark-0.99.7~pre1/util.c 2007-11-22 19:47:17.871228775 +0100 +@@ -41,6 +41,10 @@ + #include + #include + ++#ifdef HAVE_LIBCAP ++#include ++#endif ++ + #include "util.h" + + /* +@@ -317,3 +321,46 @@ + } + return ""; + } ++ ++ ++#ifdef HAVE_LIBCAP ++void dropexcesscapabilities(void) ++{ ++ cap_t cap_d; ++ cap_value_t cap_values[] = { ++ /* capabilities we need to keep */ ++ CAP_NET_RAW, ++ CAP_DAC_READ_SEARCH ++ }; ++ cap_flag_value_t current_cap; ++ ++ cap_d = cap_get_proc(); ++ if (!cap_d) { ++ g_warning("Could not get capabilities\n"); ++ return; ++ } ++ ++ cap_get_flag(cap_d, CAP_NET_RAW, CAP_EFFECTIVE, ¤t_cap); ++ cap_free(&cap_d); ++ if (current_cap == CAP_CLEAR) { ++ return; ++ } ++ ++ cap_d = cap_init(); ++ if (!cap_d) { ++ g_warning("Could not alloc cap struct\n"); ++ return; ++ } ++ ++ cap_clear(cap_d); ++ cap_set_flag(cap_d, CAP_PERMITTED, 2, cap_values, CAP_SET); ++ cap_set_flag(cap_d, CAP_EFFECTIVE, 2, cap_values, CAP_SET); ++ ++ if (cap_set_proc(cap_d) != 0) { ++ g_warning("Could not set capabilities: %s\n", strerror(errno)); ++ cap_free(&cap_d); ++ return; ++ } ++ cap_free(&cap_d); ++} ++#endif /* HAVE_LIBCAP */ +diff -urNad wireshark-0.99.7~pre1~/util.h wireshark-0.99.7~pre1/util.h +--- wireshark-0.99.7~pre1~/util.h 2007-11-22 17:57:25.000000000 +0100 ++++ wireshark-0.99.7~pre1/util.h 2007-11-22 19:47:17.871228775 +0100 +@@ -53,6 +53,15 @@ + const char *get_conn_cfilter(void); + + ++#ifdef HAVE_LIBCAP ++/* ++ * Limit the potential impact of undiscovered security vulnerabilities by ++ * dropping all capabilities except the sniffer capability we need to do our ++ * job. ++ */ ++void dropexcesscapabilities(void); ++#endif /* HAVE_LIBCAP */ ++ + #ifdef __cplusplus + } + #endif /* __cplusplus */ --- wireshark-1.0.2.orig/debian/patches/09_idl2wrs.dpatch +++ wireshark-1.0.2/debian/patches/09_idl2wrs.dpatch @@ -0,0 +1,51 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 09_idl2wrs.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: No description. + +@DPATCH@ +diff -urNad wireshark-0.99.5~/tools/idl2wrs.sh.in wireshark-0.99.5/tools/idl2wrs.sh.in +--- wireshark-0.99.5~/tools/idl2wrs.sh.in 2007-02-01 22:53:43.000000000 +0000 ++++ wireshark-0.99.5/tools/idl2wrs.sh.in 2007-04-01 08:56:28.000000000 +0000 +@@ -48,40 +48,6 @@ + exit 1; + fi + +-# +-# Run wireshark backend, looking for wireshark_be.py and wireshark_gen.py +-# in pythons's "site-packages" directory. If cannot find that, then +-# try looking in current directory. If still cannot, then exit with +-# error. +- +-if [ -f $PYTHONPATH/site-packages/wireshark_be.py ] && [ -f $PYTHONPATH/site-packages/wireshark_gen.py ]; then +- exec omniidl -p $PYTHONPATH/site-packages -b wireshark_be $@ +- /* not reached */ +-fi +- +-# Try current directory. +- +-if [ -f ./wireshark_be.py ] && [ -f ./wireshark_gen.py ]; then +- exec omniidl -p ./ -b wireshark_be $@ +- /* not reached */ +-fi +- +-# Could not find both wireshark_be.py AND wireshark_gen.py +-# So let's just try to run it without -p, hoping that the installation +-# set up a valid path. + + exec omniidl -b wireshark_be $@ + +-old code: not reached +- +-echo "idl2wrs Error: Could not find both wireshark_be.py AND wireshark_gen.py." +-echo "Please ensure you have the PYTHONPATH variable set, or that wireshark_be.py " +-echo "and wireshark_gen.py exist in the current directory. " +-echo +-echo "On this system, PYTHONPATH is : $PYTHONPATH" +-echo +- +-exit 2 +- +- +- --- wireshark-1.0.2.orig/debian/patches/15_sensitive_open.dpatch +++ wireshark-1.0.2/debian/patches/15_sensitive_open.dpatch @@ -0,0 +1,24 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 15_sensitive_open.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: don't make the open button unsensitive with the new GtkFileChooser +## DP: dialog since filename can also be changed from the location bar +## DP: closes: #439198 + +@DPATCH@ +diff -urNad wireshark-0.99.6~/gtk/capture_file_dlg.c wireshark-0.99.6/gtk/capture_file_dlg.c +--- wireshark-0.99.6~/gtk/capture_file_dlg.c 2007-07-05 19:22:28.000000000 +0000 ++++ wireshark-0.99.6/gtk/capture_file_dlg.c 2007-08-23 10:09:17.000000000 +0000 +@@ -339,7 +339,11 @@ + + /* make the open/save/... dialog button sensitive */ + #if (GTK_MAJOR_VERSION == 2 && GTK_MINOR_VERSION >= 4) || GTK_MAJOR_VERSION > 2 ++ /* don't make the open button unsensitive with the new GtkFileChooser ++ * dialog since filename can also be changed from the location bar */ ++ /* + gtk_dialog_set_response_sensitive(file_sel, GTK_RESPONSE_ACCEPT, have_preview); ++ */ + #else + gtk_widget_set_sensitive(GTK_FILE_SELECTION(file_sel)->ok_button, have_preview); + #endif --- wireshark-1.0.2.orig/debian/patches/20_CVE-2008-3933.dpatch +++ wireshark-1.0.2/debian/patches/20_CVE-2008-3933.dpatch @@ -0,0 +1,28 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 20_CVE-2008-3933.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: No description. + +@DPATCH@ +diff -urNad lenny~/epan/tvbuff.c lenny/epan/tvbuff.c +--- lenny~/epan/tvbuff.c 2008-07-10 19:39:27.000000000 +0200 ++++ lenny/epan/tvbuff.c 2008-09-15 21:27:59.000000000 +0200 +@@ -2876,7 +2876,7 @@ + if (flags & (1 << 3)) { + /* A null terminated filename */ + +- while (*c != '\0') { ++ while ((c - compr) < comprlen && *c != '\0') { + c++; + } + +@@ -2886,7 +2886,7 @@ + if (flags & (1 << 4)) { + /* A null terminated comment */ + +- while (*c != '\0') { ++ while ((c - compr) < comprlen && *c != '\0') { + c++; + } + --- wireshark-1.0.2.orig/debian/patches/02_asn2deb.dpatch +++ wireshark-1.0.2/debian/patches/02_asn2deb.dpatch @@ -0,0 +1,392 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 02_asn2deb.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: asn2deb - create Debian packages from ASN.1 files + +@DPATCH@ +diff -urNad --exclude=CVS --exclude=.svn ./asn2deb /tmp/dpep-work.5BSR7A/wireshark-0.10.11/asn2deb +--- ./asn2deb 1970-01-01 01:00:00.000000000 +0100 ++++ /tmp/dpep-work.5BSR7A/wireshark-0.10.11/asn2deb 2005-07-17 19:37:02.000000000 +0200 +@@ -0,0 +1,219 @@ ++#!/usr/bin/env python ++ ++# asn2deb - quick hack by W. Borgert to create ++# Debian GNU/Linux packages from ASN.1 files for Wireshark. ++# Copyright 2004, W. Borgert ++ ++# ASN.1 module for Wireshark, use of snacc type table: ++# Copyright 2003, Matthijs Melchior ++# ++# Wireshark - Network traffic analyzer ++# By Gerald Combs ++# 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. ++ ++import getopt, os, string, sys, time ++ ++scriptinfo = """asn2deb version 2004-02-17 ++Copyright 2004, W. Borgert ++Free software, released under the terms of the GPL.""" ++ ++options = {'asn': None, ++ 'dbopts': "", ++ 'email': "invalid@invalid.invalid", ++ 'help': 0, ++ 'name': "No Name", ++ 'preserve': 0, ++ 'version': 0} ++ ++def bootstrap(): ++ """Generate Makefile.in and configure script.""" ++ os.system("aclocal-1.7") ++ os.system("autoconf") ++ os.system("automake-1.7 --add-missing --copy --foreign") ++ ++def create_file(filename, content, mode = None): ++ """Create a file with given content.""" ++ global options ++ if options['preserve'] and os.path.isfile(filename): ++ return ++ f = open(filename, 'w') ++ f.write(content) ++ f.close() ++ if mode: ++ os.chmod(filename, mode) ++ ++def create_files(version, deb, email, asn, name, iso, rfc): ++ """Create all files for the .deb build process.""" ++ base = asn.lower()[:-5] ++ create_file("Makefile.am", """# ++ ++BUILT_SOURCES = %s.tt ++asn1ttdir = $(datadir)/wireshark/asn1 ++asn1tt_DATA = %s.tt ++ ++%s.tt: """ % ((base,) * 3) + asn + """ ++ snacc -u /usr/include/snacc/asn1/asn-useful.asn1 -T $@ $< ++""") ++ ++ create_file("configure.ac", """AC_INIT(%s, 1.0) ++AM_INIT_AUTOMAKE ++AM_MAINTAINER_MODE ++AC_PROG_INSTALL ++SNACC=\"`type -p snacc`\" ++AC_SUBST(SNACC) ++dnl WIRESHARK_VERSION=\"%s\" ++dnl plugindir=\"$prefix/share/wireshark/asn.1\" ++dnl AC_SUBST(plugindir) ++AC_OUTPUT([Makefile]) ++""" % (base, version)) ++ ++ if not os.path.isdir("debian"): ++ os.mkdir("debian") ++ ++ create_file("debian/rules", """#!/usr/bin/make -f ++ ++include /usr/share/cdbs/1/rules/debhelper.mk ++include /usr/share/cdbs/1/class/autotools.mk ++ ++PREFIX=`pwd`/debian/wireshark-asn1-%s ++ ++binary-post-install/wireshark-asn1-%s:: ++ rm -f $(PREFIX)/usr/lib/wireshark/plugins/%s/*.a ++""" % (base, base, version), 0755) ++ ++ create_file("debian/control", """Source: wireshark-asn1-%s ++Section: net ++Priority: optional ++Maintainer: %s <%s> ++Standards-Version: 3.6.1.0 ++Build-Depends: snacc, autotools-dev, debhelper, cdbs ++ ++Package: wireshark-asn1-%s ++Architecture: all ++Depends: wireshark (= %s) ++Description: ASN.1/BER dissector for %s ++ This package provides a type table for decoding BER (Basic Encoding ++ Rules) data over TCP or UDP, described by an ASN.1 (Abstract Syntax ++ Notation 1) file '%s.asn1'. ++""" % (base, name, email, base, deb, base, base)) ++ ++ create_file("debian/changelog", ++ """wireshark-asn1-%s (0.0.1-1) unstable; urgency=low ++ ++ * Automatically created package. ++ ++ -- %s <%s> %s ++""" % (base, name, email, rfc + "\n (" + iso + ")")) ++ ++ create_file("debian/copyright", ++ """This package has been created automatically be asn2deb on ++%s for Debian GNU/Linux. ++ ++Wireshark: http://www.wireshark.com/ ++ ++Copyright: ++ ++GPL, as evidenced by existence of GPL license file \"COPYING\". ++(the GNU GPL may be viewed on Debian systems in ++/usr/share/common-licenses/GPL) ++""" % (iso)) ++ ++def get_wrs_version(): ++ """Detect version of wireshark-dev package.""" ++ deb = os.popen( ++ "dpkg-query -W --showformat='${Version}' wireshark-dev").read() ++ debv = string.find(deb, "-") ++ if debv == -1: debv = len(deb) ++ version = deb[string.find(deb, ":")+1:debv] ++ return version, deb ++ ++def get_time(): ++ """Detect current time and return ISO and RFC time string.""" ++ currenttime = time.gmtime() ++ return time.strftime("%Y-%m-%d %H:%M:%S +0000", currenttime), \ ++ time.strftime("%a, %d %b %Y %H:%M:%S +0000", currenttime) ++ ++def main(): ++ global options ++ process_opts(sys.argv) ++ iso, rfc = get_time() ++ version, deb = get_wrs_version() ++ create_files(version, deb, ++ options['email'], options['asn'], options['name'], ++ iso, rfc) ++ bootstrap() ++ os.system("dpkg-buildpackage " + options['dbopts']) ++ ++def process_opts(argv): ++ """Process command line options.""" ++ global options ++ try: ++ opts, args = getopt.getopt(argv[1:], "a:d:e:hn:pv", ++ ["asn=", ++ "dbopts=", ++ "email=", ++ "help", ++ "name=", ++ "preserve", ++ "version"]) ++ except getopt.GetoptError: ++ usage(argv[0]) ++ sys.exit(1) ++ for o, a in opts: ++ if o in ("-a", "--asn"): ++ options['asn'] = a ++ if o in ("-d", "--dbopts"): ++ options['dbopts'] = a ++ if o in ("-e", "--email"): ++ options['email'] = a ++ if o in ("-h", "--help"): ++ options['help'] = 1 ++ if o in ("-n", "--name"): ++ options['name'] = a ++ if o in ("-p", "--preserve"): ++ options['preserve'] = 1 ++ if o in ("-v", "--version"): ++ options['version'] = 1 ++ if options['help']: ++ usage(argv[0]) ++ sys.exit(0) ++ if options['version']: ++ print scriptinfo ++ sys.exit(0) ++ if not options['asn']: ++ print "mandatory ASN.1 file parameter missing" ++ sys.exit(1) ++ if not os.access(options['asn'], os.R_OK): ++ print "ASN.1 file not accessible" ++ sys.exit(1) ++ ++def usage(name): ++ """Print usage help.""" ++ print "Usage: " + name + " \n" + \ ++ "Parameters are\n" + \ ++ " --asn -a asn1file, ASN.1 file to use (mandatory)\n" + \ ++ " --dbopts -d opts, options for dpkg-buildpackage\n" + \ ++ " --email -e address, use e-mail address\n" + \ ++ " --help -h, print help and exit\n" + \ ++ " --name -n name, use user name\n" + \ ++ " --preserve -p, do not overwrite files\n" + \ ++ " --version -v, print version and exit\n" + \ ++ "Example:\n" + \ ++ name + " -e me@foo.net -a bar.asn1 -n \"My Name\" " + \ ++ "-d \"-rfakeroot -uc -us\"" ++if __name__ == '__main__': ++ main() +diff -urNad --exclude=CVS --exclude=.svn ./asn2deb.dbk /tmp/dpep-work.5BSR7A/wireshark-0.10.11/asn2deb.dbk +--- ./asn2deb.dbk 1970-01-01 01:00:00.000000000 +0100 ++++ /tmp/dpep-work.5BSR7A/wireshark-0.10.11/asn2deb.dbk 2005-07-17 19:37:02.000000000 +0200 +@@ -0,0 +1,158 @@ ++ ++asn2deb"> ++ debacle@debian.org"> ++ ++ Debian GNU/Linux"> ++]> ++ ++ ++ ++
++ &email; ++
++ ++ W. ++ Borgert ++ ++ ++ 2003 ++ 2005 ++ &author; ++ ++ 2004-02-18 ++ ++ ASN.1 ++ BER ++ Wireshark ++ ++ ++ ++ 1 ++ 2004-02-18 ++ debacle ++ First version. ++ ++ ++
++ ++ asn2deb ++ ++ 1 ++ ++ ++ asn2deb ++ ++ create a Debian package for BER monitoring from ASN.1 ++ ++ ++ ++ &command; ++ -a ASN.1 file ++ --asn=ASN.1 file ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Description ++ ++ This manual page documents briefly the ++ asn2deb command. ++ ++ &command; takes an ASN.1 file as input and creates a Debian ++ package from it. The package contains a loadable type table file ++ for the wireshark network analyser. The type table is generated by ++ the ASN.1 compiler snacc. ++ ++ ++ Options ++ ++ ++ ++ ++ ++ ++ ASN.1 file to use (mandatory). ++ ++ ++ ++ ++ ++ ++ options for dpkg-buildpackage. ++ ++ ++ ++ ++ ++ ++ use e-mail address. ++ ++ ++ ++ ++ ++ ++ ++ print help and exit. ++ ++ ++ ++ ++ ++ ++ use user name. ++ ++ ++ ++ ++ ++ ++ do not overwrite files. ++ ++ ++ ++ ++ ++ ++ print version and exit. ++ ++ ++ ++ ++ Example: ++ ++ /usr/bin/asn2deb -e me@foo.net -a bar.asn1 \ ++-n "My Name" -d "-rfakeroot -uc -us" ++ ++ ++ ++ See Also ++ ++ A lot of tools are used, which you have to ++ apt-get install: wireshark-dev, python, ++ cdbs, autotools-dev, debhelper, dpkg-dev, snacc. ++ ++ ++ ++ Copying ++ ++ This manual page was written by &author; &email; for ++ &debian; (but may be used by others). Permission is granted to ++ copy, distribute and/or modify this document under the terms of ++ the GNU General Public License, Version 2 or any later ++ version published by the Free Software Foundation. ++ ++
--- wireshark-1.0.2.orig/debian/patches/01_idl2deb.dpatch +++ wireshark-1.0.2/debian/patches/01_idl2deb.dpatch @@ -0,0 +1,424 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 01_idl2deb.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: idl2deb - create Debian packages from idl2wrs modules + +@DPATCH@ +diff -urNad --exclude=CVS --exclude=.svn ./idl2deb /tmp/dpep-work.K2bQz4/wireshark-0.10.11/idl2deb +--- ./idl2deb 1970-01-01 01:00:00.000000000 +0100 ++++ /tmp/dpep-work.K2bQz4/wireshark-0.10.11/idl2deb 2005-07-17 19:35:08.000000000 +0200 +@@ -0,0 +1,252 @@ ++#!/usr/bin/env python ++ ++# idl2deb - quick hack by W. Borgert to create ++# Debian GNU/Linux packages from idl2wrs modules for Wireshark. ++# Copyright 2003, W. Borgert ++ ++# Makefile.am and configure.ac code by: ++# Copyright 2001, Ericsson Inc. ++# Frank Singleton ++# ++# Wireshark - Network traffic analyzer ++# By Gerald Combs ++# 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. ++ ++import getopt, os, string, sys, time ++ ++scriptinfo = """idl2deb version 2003-10-03 ++Copyright 2003, W. Borgert ++Free software, released under the terms of the GPL.""" ++ ++options = {'dbopts': "", ++ 'email': "invalid@invalid.invalid", ++ 'help': 0, ++ 'idl': None, ++ 'name': "No Name", ++ 'preserve': 0, ++ 'version': 0} ++ ++def bootstrap(): ++ """Generate Makefile.in and configure script.""" ++ os.system("aclocal") ++ os.system("autoconf") ++ os.system("libtoolize --automake --copy --force") ++ os.system("automake --add-missing --copy --foreign") ++ ++def create_file(filename, content, mode = None): ++ """Create a file with given content.""" ++ global options ++ if options['preserve'] and os.path.isfile(filename): ++ return ++ f = open(filename, 'w') ++ f.write(content) ++ f.close() ++ if mode: ++ os.chmod(filename, mode) ++ ++def create_files(version, deb, email, idl, name, iso, rfc): ++ """Create all files for the .deb build process.""" ++ base = idl.lower()[:-4] ++ create_file("Makefile.am", """# ++ ++plugindir = @plugindir@ ++ ++plugin_LTLIBRARIES = %s.la ++%s_la_SOURCES = packet-%s.c ++%s_la_LDFLAGS = -module -avoid-version ++ ++GLIB_CFLAGS = `pkg-config --cflags glib-2.0` ++GLIB_LIBS = `pkg-config --libs glib-2.0` ++BUILT_SOURCES = packet-%s.c ++INCLUDES = -DHAVE_CONFIG -DHAVE_SYS_TYPES_H -DHAVE_SYS_TIME_H \\ ++ -DHAVE_STDARG_H -D_U_=\"__attribute__((unused))\" \\ ++ -I/usr/include/wireshark -DWS_VAR_IMPORT=extern $(GLIB_CFLAGS) ++LDADD = $(GLIB_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 = ++ ++%s_la_DEPENDENCIES = packet-%s-static.o ++ ++packet-%s-static.o: packet-%s.c ++ $(LTCOMPILE) -c -o packet-%s-static.o \\ ++ -D__WIRESHARK_STATIC__ packet-%s.c ++ ++packet-%s.c: """ % ((base,) * 12) + idl + """ ++ $(IDL2WRS) $< > $@ ++""") ++ ++ create_file("configure.ac", """AC_INIT(%s, 1.0) ++AC_PROG_LIBTOOL ++AM_INIT_AUTOMAKE ++AM_MAINTAINER_MODE ++AC_PROG_CC ++AC_STDC_HEADERS ++AC_PROG_INSTALL ++AC_SUBST(CFLAGS) ++AC_SUBST(CPPFLAGS) ++AC_SUBST(LDFLAGS) ++PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.2.2) ++AC_SUBST(GLIB_CFLAGS) ++AC_SUBST(GLIB_LIBS) ++IDL2WRS=\"`type -p idl2wrs`\" ++AC_SUBST(IDL2WRS) ++WIRESHARK_VERSION=\"%s\" ++plugindir=\"$libdir/wireshark/plugins/$WIRESHARK_VERSION\" ++AC_SUBST(plugindir) ++AC_OUTPUT([Makefile]) ++""" % (base, version)) ++ ++ if not os.path.isdir("debian"): ++ os.mkdir("debian") ++ ++ create_file("debian/rules", """#!/usr/bin/make -f ++ ++include /usr/share/cdbs/1/rules/debhelper.mk ++include /usr/share/cdbs/1/class/autotools.mk ++ ++PREFIX=`pwd`/debian/wireshark-giop-%s ++ ++binary-post-install/wireshark-giop-%s:: ++ rm -f $(PREFIX)/usr/lib/wireshark/plugins/%s/*.a ++""" % (base, base, version), 0755) ++ ++ create_file("debian/control", """Source: wireshark-giop-%s ++Section: net ++Priority: optional ++Maintainer: %s <%s> ++Standards-Version: 3.6.1.0 ++Build-Depends: wireshark-dev, autotools-dev, debhelper, cdbs ++ ++Package: wireshark-giop-%s ++Architecture: any ++Depends: wireshark (= %s), ${shlibs:Depends} ++Description: GIOP dissector for CORBA interface %s ++ This package provides a dissector for GIOP (General Inter-ORB ++ Protocol) for the Wireshark protocol analyser. It decodes the CORBA ++ (Common Object Request Broker Architecture) interfaces described ++ in the IDL (Interface Definition Language) file '%s.idl'. ++""" % (base, name, email, base, deb, base, base)) ++ ++ create_file("debian/changelog", ++ """wireshark-giop-%s (0.0.1-1) unstable; urgency=low ++ ++ * Automatically created package. ++ ++ -- %s <%s> %s ++""" % (base, name, email, rfc + "\n (" + iso + ")")) ++ ++ create_file("debian/copyright", ++ """This package has been created automatically by idl2deb on ++%s for Debian GNU/Linux. ++ ++Wireshark: http://www.wireshark.org/ ++ ++Copyright: ++ ++GPL, as evidenced by existence of GPL license file \"COPYING\". ++(the GNU GPL may be viewed on Debian systems in ++/usr/share/common-licenses/GPL) ++""" % (iso)) ++ ++def get_wrs_version(): ++ """Detect version of wireshark-dev package.""" ++ deb = os.popen( ++ "dpkg-query -W --showformat='${Version}' wireshark-dev").read() ++ debv = string.find(deb, "-") ++ if debv == -1: debv = len(deb) ++ version = deb[string.find(deb, ":")+1:debv] ++ return version, deb ++ ++def get_time(): ++ """Detect current time and return ISO and RFC time string.""" ++ currenttime = time.gmtime() ++ return time.strftime("%Y-%m-%d %H:%M:%S +0000", currenttime), \ ++ time.strftime("%a, %d %b %Y %H:%M:%S +0000", currenttime) ++ ++def main(): ++ global options ++ process_opts(sys.argv) ++ iso, rfc = get_time() ++ version, deb = get_wrs_version() ++ create_files(version, deb, ++ options['email'], options['idl'], options['name'], ++ iso, rfc) ++ bootstrap() ++ os.system("dpkg-buildpackage " + options['dbopts']) ++ ++def process_opts(argv): ++ """Process command line options.""" ++ global options ++ try: ++ opts, args = getopt.getopt(argv[1:], "d:e:hi:n:pv", ++ ["dbopts=", ++ "email=", ++ "help", ++ "idl=", ++ "name=", ++ "preserve", ++ "version"]) ++ except getopt.GetoptError: ++ usage(argv[0]) ++ sys.exit(1) ++ for o, a in opts: ++ if o in ("-d", "--dbopts"): ++ options['dbopts'] = a ++ if o in ("-e", "--email"): ++ options['email'] = a ++ if o in ("-h", "--help"): ++ options['help'] = 1 ++ if o in ("-i", "--idl"): ++ options['idl'] = a ++ if o in ("-n", "--name"): ++ options['name'] = a ++ if o in ("-p", "--preserve"): ++ options['preserve'] = 1 ++ if o in ("-v", "--version"): ++ options['version'] = 1 ++ if options['help']: ++ usage(argv[0]) ++ sys.exit(0) ++ if options['version']: ++ print scriptinfo ++ sys.exit(0) ++ if not options['idl']: ++ print "mandatory IDL file parameter missing" ++ sys.exit(1) ++ if not os.access(options['idl'], os.R_OK): ++ print "IDL file not accessible" ++ sys.exit(1) ++ ++def usage(name): ++ """Print usage help.""" ++ print "Usage: " + name + " \n" + \ ++ "Parameters are\n" + \ ++ " --dbopts -d opts, options for dpkg-buildpackage\n" + \ ++ " --email -e address, use e-mail address\n" + \ ++ " --idl -i idlfile, IDL file to use (mandatory)\n" + \ ++ " --help -h, print help and exit\n" + \ ++ " --name -n name, use user name\n" + \ ++ " --preserve -p, do not overwrite files\n" + \ ++ " --version -v, print version and exit\n" + \ ++ "Example:\n" + \ ++ name + " -e me@foo.net -i bar.idl -n \"My Name\" " + \ ++ "-d \"-rfakeroot -uc -us\"" ++if __name__ == '__main__': ++ main() +diff -urNad --exclude=CVS --exclude=.svn ./idl2deb.dbk /tmp/dpep-work.K2bQz4/wireshark-0.10.11/idl2deb.dbk +--- ./idl2deb.dbk 1970-01-01 01:00:00.000000000 +0100 ++++ /tmp/dpep-work.K2bQz4/wireshark-0.10.11/idl2deb.dbk 2005-07-17 19:35:08.000000000 +0200 +@@ -0,0 +1,157 @@ ++ ++idl2deb"> ++ debacle@debian.org"> ++ ++ Debian GNU/Linux"> ++]> ++ ++ ++ ++
++ &email; ++
++ ++ W. ++ Borgert ++ ++ ++ 2003 ++ 2005 ++ &author; ++ ++ 2003-08-17 ++ ++ CORBA ++ IDL ++ Wireshark ++ ++ ++ ++ 2003-08-17 ++ 2003-08-17 ++ debacle ++ First version. ++ ++ ++
++ ++ idl2deb ++ ++ 1 ++ ++ ++ idl2deb ++ ++ create a Debian package for CORBA monitoring from IDL ++ ++ ++ ++ &command; ++ ++ ++ ++ ++ -i idlfile ++ --idl=idlfile ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ Description ++ ++ This manual page documents briefly the ++ idl2deb command. ++ ++ &command; takes an CORBA IDL file as input and creates a ++ Debian package from it. The package contains a loadable module ++ for the wireshark network analyser. ++ ++ ++ Options ++ ++ ++ ++ ++ ++ ++ options for dpkg-buildpackage. ++ ++ ++ ++ ++ ++ ++ use e-mail address. ++ ++ ++ ++ ++ ++ ++ IDL file to use (mandatory). ++ ++ ++ ++ ++ ++ ++ ++ print help and exit. ++ ++ ++ ++ ++ ++ ++ use user name. ++ ++ ++ ++ ++ ++ ++ do not overwrite files. ++ ++ ++ ++ ++ ++ ++ print version and exit. ++ ++ ++ ++ ++ Example: ++ ++ /usr/bin/idl2deb -e me@foo.net -i bar.idl \ ++-n "My Name" -d "-rfakeroot -uc -us" ++ ++ ++ ++ See Also ++ ++ A lot of tools are used, which you have to ++ apt-get install: wireshark-dev, python, ++ cdbs, autotools-dev, debhelper, dpkg-dev. ++ ++ ++ ++ Copying ++ ++ This manual page was written by &author; &email; for ++ &debian; (but may be used by others). Permission is granted to ++ copy, distribute and/or modify this document under the terms of ++ the GNU General Public License, Version 2 or any later ++ version published by the Free Software Foundation. ++ ++
--- wireshark-1.0.2.orig/debian/patches/17_clique_rm_support.dpatch +++ wireshark-1.0.2/debian/patches/17_clique_rm_support.dpatch @@ -0,0 +1,1185 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 17_clique_rm_support.patch.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: No description. + +@DPATCH@ +diff -urNad wireshark-0.99.7~/configure.in wireshark-0.99.7/configure.in +--- wireshark-0.99.7~/configure.in 2007-12-21 13:51:15.267121914 +0100 ++++ wireshark-0.99.7/configure.in 2007-12-21 13:51:16.079128594 +0100 +@@ -1624,6 +1624,7 @@ + plugins/pcli/Makefile + plugins/profinet/Makefile + plugins/rlm/Makefile ++ plugins/clique-rm/Makefile + plugins/rtnet/Makefile + plugins/rudp/Makefile + plugins/sbus/Makefile +diff -urNad wireshark-0.99.7~/plugins/Makefile.am wireshark-0.99.7/plugins/Makefile.am +--- wireshark-0.99.7~/plugins/Makefile.am 2007-12-18 02:14:52.000000000 +0100 ++++ wireshark-0.99.7/plugins/Makefile.am 2007-12-21 13:51:16.079128594 +0100 +@@ -40,6 +40,7 @@ + pcli \ + profinet \ + rlm \ ++ clique-rm \ + rtnet \ + rudp \ + sbus \ +diff -urNad wireshark-0.99.7~/plugins/clique-rm/AUTHORS wireshark-0.99.7/plugins/clique-rm/AUTHORS +--- wireshark-0.99.7~/plugins/clique-rm/AUTHORS 1970-01-01 01:00:00.000000000 +0100 ++++ wireshark-0.99.7/plugins/clique-rm/AUTHORS 2007-12-21 13:51:16.079128594 +0100 +@@ -0,0 +1,2 @@ ++Author: ++Sjoerd Simons +diff -urNad wireshark-0.99.7~/plugins/clique-rm/COPYING wireshark-0.99.7/plugins/clique-rm/COPYING +--- wireshark-0.99.7~/plugins/clique-rm/COPYING 1970-01-01 01:00:00.000000000 +0100 ++++ wireshark-0.99.7/plugins/clique-rm/COPYING 2007-12-21 13:51:16.079128594 +0100 +@@ -0,0 +1,340 @@ ++ GNU GENERAL PUBLIC LICENSE ++ Version 2, June 1991 ++ ++ Copyright (C) 1989, 1991 Free Software Foundation, Inc. ++ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ Everyone is permitted to copy and distribute verbatim copies ++ of this license document, but changing it is not allowed. ++ ++ Preamble ++ ++ The licenses for most software are designed to take away your ++freedom to share and change it. By contrast, the GNU General Public ++License is intended to guarantee your freedom to share and change free ++software--to make sure the software is free for all its users. This ++General Public License applies to most of the Free Software ++Foundation's software and to any other program whose authors commit to ++using it. (Some other Free Software Foundation software is covered by ++the GNU Library General Public License instead.) You can apply it to ++your programs, too. ++ ++ When we speak of free software, we are referring to freedom, not ++price. Our General Public Licenses are designed to make sure that you ++have the freedom to distribute copies of free software (and charge for ++this service if you wish), that you receive source code or can get it ++if you want it, that you can change the software or use pieces of it ++in new free programs; and that you know you can do these things. ++ ++ To protect your rights, we need to make restrictions that forbid ++anyone to deny you these rights or to ask you to surrender the rights. ++These restrictions translate to certain responsibilities for you if you ++distribute copies of the software, or if you modify it. ++ ++ For example, if you distribute copies of such a program, whether ++gratis or for a fee, you must give the recipients all the rights that ++you have. You must make sure that they, too, receive or can get the ++source code. And you must show them these terms so they know their ++rights. ++ ++ We protect your rights with two steps: (1) copyright the software, and ++(2) offer you this license which gives you legal permission to copy, ++distribute and/or modify the software. ++ ++ Also, for each author's protection and ours, we want to make certain ++that everyone understands that there is no warranty for this free ++software. If the software is modified by someone else and passed on, we ++want its recipients to know that what they have is not the original, so ++that any problems introduced by others will not reflect on the original ++authors' reputations. ++ ++ Finally, any free program is threatened constantly by software ++patents. We wish to avoid the danger that redistributors of a free ++program will individually obtain patent licenses, in effect making the ++program proprietary. To prevent this, we have made it clear that any ++patent must be licensed for everyone's free use or not licensed at all. ++ ++ The precise terms and conditions for copying, distribution and ++modification follow. ++ ++ GNU GENERAL PUBLIC LICENSE ++ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION ++ ++ 0. This License applies to any program or other work which contains ++a notice placed by the copyright holder saying it may be distributed ++under the terms of this General Public License. The "Program", below, ++refers to any such program or work, and a "work based on the Program" ++means either the Program or any derivative work under copyright law: ++that is to say, a work containing the Program or a portion of it, ++either verbatim or with modifications and/or translated into another ++language. (Hereinafter, translation is included without limitation in ++the term "modification".) Each licensee is addressed as "you". ++ ++Activities other than copying, distribution and modification are not ++covered by this License; they are outside its scope. The act of ++running the Program is not restricted, and the output from the Program ++is covered only if its contents constitute a work based on the ++Program (independent of having been made by running the Program). ++Whether that is true depends on what the Program does. ++ ++ 1. You may copy and distribute verbatim copies of the Program's ++source code as you receive it, in any medium, provided that you ++conspicuously and appropriately publish on each copy an appropriate ++copyright notice and disclaimer of warranty; keep intact all the ++notices that refer to this License and to the absence of any warranty; ++and give any other recipients of the Program a copy of this License ++along with the Program. ++ ++You may charge a fee for the physical act of transferring a copy, and ++you may at your option offer warranty protection in exchange for a fee. ++ ++ 2. You may modify your copy or copies of the Program or any portion ++of it, thus forming a work based on the Program, and copy and ++distribute such modifications or work under the terms of Section 1 ++above, provided that you also meet all of these conditions: ++ ++ a) You must cause the modified files to carry prominent notices ++ stating that you changed the files and the date of any change. ++ ++ b) You must cause any work that you distribute or publish, that in ++ whole or in part contains or is derived from the Program or any ++ part thereof, to be licensed as a whole at no charge to all third ++ parties under the terms of this License. ++ ++ c) If the modified program normally reads commands interactively ++ when run, you must cause it, when started running for such ++ interactive use in the most ordinary way, to print or display an ++ announcement including an appropriate copyright notice and a ++ notice that there is no warranty (or else, saying that you provide ++ a warranty) and that users may redistribute the program under ++ these conditions, and telling the user how to view a copy of this ++ License. (Exception: if the Program itself is interactive but ++ does not normally print such an announcement, your work based on ++ the Program is not required to print an announcement.) ++ ++These requirements apply to the modified work as a whole. If ++identifiable sections of that work are not derived from the Program, ++and can be reasonably considered independent and separate works in ++themselves, then this License, and its terms, do not apply to those ++sections when you distribute them as separate works. But when you ++distribute the same sections as part of a whole which is a work based ++on the Program, the distribution of the whole must be on the terms of ++this License, whose permissions for other licensees extend to the ++entire whole, and thus to each and every part regardless of who wrote it. ++ ++Thus, it is not the intent of this section to claim rights or contest ++your rights to work written entirely by you; rather, the intent is to ++exercise the right to control the distribution of derivative or ++collective works based on the Program. ++ ++In addition, mere aggregation of another work not based on the Program ++with the Program (or with a work based on the Program) on a volume of ++a storage or distribution medium does not bring the other work under ++the scope of this License. ++ ++ 3. You may copy and distribute the Program (or a work based on it, ++under Section 2) in object code or executable form under the terms of ++Sections 1 and 2 above provided that you also do one of the following: ++ ++ a) Accompany it with the complete corresponding machine-readable ++ source code, which must be distributed under the terms of Sections ++ 1 and 2 above on a medium customarily used for software interchange; or, ++ ++ b) Accompany it with a written offer, valid for at least three ++ years, to give any third party, for a charge no more than your ++ cost of physically performing source distribution, a complete ++ machine-readable copy of the corresponding source code, to be ++ distributed under the terms of Sections 1 and 2 above on a medium ++ customarily used for software interchange; or, ++ ++ c) Accompany it with the information you received as to the offer ++ to distribute corresponding source code. (This alternative is ++ allowed only for noncommercial distribution and only if you ++ received the program in object code or executable form with such ++ an offer, in accord with Subsection b above.) ++ ++The source code for a work means the preferred form of the work for ++making modifications to it. For an executable work, complete source ++code means all the source code for all modules it contains, plus any ++associated interface definition files, plus the scripts used to ++control compilation and installation of the executable. However, as a ++special exception, the source code distributed need not include ++anything that is normally distributed (in either source or binary ++form) with the major components (compiler, kernel, and so on) of the ++operating system on which the executable runs, unless that component ++itself accompanies the executable. ++ ++If distribution of executable or object code is made by offering ++access to copy from a designated place, then offering equivalent ++access to copy the source code from the same place counts as ++distribution of the source code, even though third parties are not ++compelled to copy the source along with the object code. ++ ++ 4. You may not copy, modify, sublicense, or distribute the Program ++except as expressly provided under this License. Any attempt ++otherwise to copy, modify, sublicense or distribute the Program is ++void, and will automatically terminate your rights under this License. ++However, parties who have received copies, or rights, from you under ++this License will not have their licenses terminated so long as such ++parties remain in full compliance. ++ ++ 5. You are not required to accept this License, since you have not ++signed it. However, nothing else grants you permission to modify or ++distribute the Program or its derivative works. These actions are ++prohibited by law if you do not accept this License. Therefore, by ++modifying or distributing the Program (or any work based on the ++Program), you indicate your acceptance of this License to do so, and ++all its terms and conditions for copying, distributing or modifying ++the Program or works based on it. ++ ++ 6. Each time you redistribute the Program (or any work based on the ++Program), the recipient automatically receives a license from the ++original licensor to copy, distribute or modify the Program subject to ++these terms and conditions. You may not impose any further ++restrictions on the recipients' exercise of the rights granted herein. ++You are not responsible for enforcing compliance by third parties to ++this License. ++ ++ 7. If, as a consequence of a court judgment or allegation of patent ++infringement or for any other reason (not limited to patent issues), ++conditions are imposed on you (whether by court order, agreement or ++otherwise) that contradict the conditions of this License, they do not ++excuse you from the conditions of this License. If you cannot ++distribute so as to satisfy simultaneously your obligations under this ++License and any other pertinent obligations, then as a consequence you ++may not distribute the Program at all. For example, if a patent ++license would not permit royalty-free redistribution of the Program by ++all those who receive copies directly or indirectly through you, then ++the only way you could satisfy both it and this License would be to ++refrain entirely from distribution of the Program. ++ ++If any portion of this section is held invalid or unenforceable under ++any particular circumstance, the balance of the section is intended to ++apply and the section as a whole is intended to apply in other ++circumstances. ++ ++It is not the purpose of this section to induce you to infringe any ++patents or other property right claims or to contest validity of any ++such claims; this section has the sole purpose of protecting the ++integrity of the free software distribution system, which is ++implemented by public license practices. Many people have made ++generous contributions to the wide range of software distributed ++through that system in reliance on consistent application of that ++system; it is up to the author/donor to decide if he or she is willing ++to distribute software through any other system and a licensee cannot ++impose that choice. ++ ++This section is intended to make thoroughly clear what is believed to ++be a consequence of the rest of this License. ++ ++ 8. If the distribution and/or use of the Program is restricted in ++certain countries either by patents or by copyrighted interfaces, the ++original copyright holder who places the Program under this License ++may add an explicit geographical distribution limitation excluding ++those countries, so that distribution is permitted only in or among ++countries not thus excluded. In such case, this License incorporates ++the limitation as if written in the body of this License. ++ ++ 9. The Free Software Foundation may publish revised and/or new versions ++of the General Public License from time to time. Such new versions will ++be similar in spirit to the present version, but may differ in detail to ++address new problems or concerns. ++ ++Each version is given a distinguishing version number. If the Program ++specifies a version number of this License which applies to it and "any ++later version", you have the option of following the terms and conditions ++either of that version or of any later version published by the Free ++Software Foundation. If the Program does not specify a version number of ++this License, you may choose any version ever published by the Free Software ++Foundation. ++ ++ 10. If you wish to incorporate parts of the Program into other free ++programs whose distribution conditions are different, write to the author ++to ask for permission. For software which is copyrighted by the Free ++Software Foundation, write to the Free Software Foundation; we sometimes ++make exceptions for this. Our decision will be guided by the two goals ++of preserving the free status of all derivatives of our free software and ++of promoting the sharing and reuse of software generally. ++ ++ NO WARRANTY ++ ++ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY ++FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN ++OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES ++PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED ++OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF ++MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS ++TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE ++PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, ++REPAIR OR CORRECTION. ++ ++ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING ++WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR ++REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, ++INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING ++OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED ++TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY ++YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER ++PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE ++POSSIBILITY OF SUCH DAMAGES. ++ ++ END OF TERMS AND CONDITIONS ++ ++ How to Apply These Terms to Your New Programs ++ ++ If you develop a new program, and you want it to be of the greatest ++possible use to the public, the best way to achieve this is to make it ++free software which everyone can redistribute and change under these terms. ++ ++ To do so, attach the following notices to the program. It is safest ++to attach them to the start of each source file to most effectively ++convey the exclusion of warranty; and each file should have at least ++the "copyright" line and a pointer to where the full notice is found. ++ ++ ++ Copyright (C) ++ ++ 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 ++ ++ ++Also add information on how to contact you by electronic and paper mail. ++ ++If the program is interactive, make it output a short notice like this ++when it starts in an interactive mode: ++ ++ Gnomovision version 69, Copyright (C) year name of author ++ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. ++ This is free software, and you are welcome to redistribute it ++ under certain conditions; type `show c' for details. ++ ++The hypothetical commands `show w' and `show c' should show the appropriate ++parts of the General Public License. Of course, the commands you use may ++be called something other than `show w' and `show c'; they could even be ++mouse-clicks or menu items--whatever suits your program. ++ ++You should also get your employer (if you work as a programmer) or your ++school, if any, to sign a "copyright disclaimer" for the program, if ++necessary. Here is a sample; alter the names: ++ ++ Yoyodyne, Inc., hereby disclaims all copyright interest in the program ++ `Gnomovision' (which makes passes at compilers) written by James Hacker. ++ ++ , 1 April 1989 ++ Ty Coon, President of Vice ++ ++This General Public License does not permit incorporating your program into ++proprietary programs. If your program is a subroutine library, you may ++consider it more useful to permit linking proprietary applications with the ++library. If this is what you want to do, use the GNU Library General ++Public License instead of this License. +diff -urNad wireshark-0.99.7~/plugins/clique-rm/Makefile.am wireshark-0.99.7/plugins/clique-rm/Makefile.am +--- wireshark-0.99.7~/plugins/clique-rm/Makefile.am 1970-01-01 01:00:00.000000000 +0100 ++++ wireshark-0.99.7/plugins/clique-rm/Makefile.am 2007-12-21 13:51:16.079128594 +0100 +@@ -0,0 +1,124 @@ ++# Makefile.am ++# Automake file for Cisco SS7 Redundant Link Management plugin ++# Copyright 2004, Duncan Sargeant ++# ++# $Id: Makefile.am 21961 2007-05-27 18:35:55Z guy $ ++# ++# Wireshark - Network traffic analyzer ++# By Gerald Combs ++# 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. ++# ++ ++INCLUDES = -I$(top_srcdir) -I$(includedir) ++ ++include Makefile.common ++ ++if HAVE_WARNINGS_AS_ERRORS ++AM_CFLAGS = -Werror ++endif ++ ++plugindir = @plugindir@ ++ ++plugin_LTLIBRARIES = clique-rm.la ++clique_rm_la_SOURCES = \ ++ plugin.c \ ++ moduleinfo.h \ ++ $(DISSECTOR_SRC) \ ++ $(DISSECTOR_INCLUDES) ++clique_rm_la_LDFLAGS = -module -avoid-version ++clique_rm_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 = \ ++ *~ ++ ++MAINTAINERCLEANFILES = \ ++ Makefile.in \ ++ plugin.c ++ ++EXTRA_DIST = \ ++ Makefile.common \ ++ Makefile.nmake \ ++ moduleinfo.nmake \ ++ plugin.rc.in +diff -urNad wireshark-0.99.7~/plugins/clique-rm/Makefile.common wireshark-0.99.7/plugins/clique-rm/Makefile.common +--- wireshark-0.99.7~/plugins/clique-rm/Makefile.common 1970-01-01 01:00:00.000000000 +0100 ++++ wireshark-0.99.7/plugins/clique-rm/Makefile.common 2007-12-21 13:51:16.079128594 +0100 +@@ -0,0 +1,31 @@ ++# Makefile.common for Cisco SS7 Redundant Link Management plugin ++# Contains the stuff from Makefile.am and Makefile.nmake that is ++# a) common to both files and ++# b) portable between both files ++# ++# $Id: Makefile.common 18197 2006-05-21 05:12:17Z sahlberg $ ++# ++# Wireshark - Network traffic analyzer ++# By Gerald Combs ++# 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 = clique-rm ++ ++# the dissector sources (without any helpers) ++DISSECTOR_SRC = \ ++ packet-clique-rm.c +diff -urNad wireshark-0.99.7~/plugins/clique-rm/Makefile.nmake wireshark-0.99.7/plugins/clique-rm/Makefile.nmake +--- wireshark-0.99.7~/plugins/clique-rm/Makefile.nmake 1970-01-01 01:00:00.000000000 +0100 ++++ wireshark-0.99.7/plugins/clique-rm/Makefile.nmake 2007-12-21 13:51:16.079128594 +0100 +@@ -0,0 +1,99 @@ ++# Makefile.nmake ++# nmake file for Wireshark plugin ++# ++# $Id: Makefile.nmake 22696 2007-08-27 22:56:27Z wmeier $ ++# ++ ++include ..\..\config.nmake ++include moduleinfo.nmake ++ ++include Makefile.common ++ ++CFLAGS=/WX /DHAVE_CONFIG_H /I../.. /I../../wiretap $(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) ++ ++# ++# 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) ../../tools/make-dissector-reg.py ../../tools/make-dissector-reg ++!IFDEF PYTHON ++ @echo Making plugin.c (using python) ++ @$(PYTHON) "../../tools/make-dissector-reg.py" . plugin $(DISSECTOR_SRC) ++!ELSE ++ @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 +diff -urNad wireshark-0.99.7~/plugins/clique-rm/moduleinfo.h wireshark-0.99.7/plugins/clique-rm/moduleinfo.h +--- wireshark-0.99.7~/plugins/clique-rm/moduleinfo.h 1970-01-01 01:00:00.000000000 +0100 ++++ wireshark-0.99.7/plugins/clique-rm/moduleinfo.h 2007-12-21 13:51:16.083125699 +0100 +@@ -0,0 +1,16 @@ ++/* Included *after* config.h, in order to re-define these macros */ ++ ++#ifdef PACKAGE ++#undef PACKAGE ++#endif ++ ++/* Name of package */ ++#define PACKAGE "clique-rm" ++ ++ ++#ifdef VERSION ++#undef VERSION ++#endif ++ ++/* Version number of package */ ++#define VERSION "0.0.1" +diff -urNad wireshark-0.99.7~/plugins/clique-rm/moduleinfo.nmake wireshark-0.99.7/plugins/clique-rm/moduleinfo.nmake +--- wireshark-0.99.7~/plugins/clique-rm/moduleinfo.nmake 1970-01-01 01:00:00.000000000 +0100 ++++ wireshark-0.99.7/plugins/clique-rm/moduleinfo.nmake 2007-12-21 13:51:16.083125699 +0100 +@@ -0,0 +1,28 @@ ++# ++# $Id: moduleinfo.nmake 20170 2006-12-19 22:27:31Z jake $ ++# ++ ++# The name ++PACKAGE=clique-rm ++ ++# 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 -urNad wireshark-0.99.7~/plugins/clique-rm/packet-clique-rm.c wireshark-0.99.7/plugins/clique-rm/packet-clique-rm.c +--- wireshark-0.99.7~/plugins/clique-rm/packet-clique-rm.c 1970-01-01 01:00:00.000000000 +0100 ++++ wireshark-0.99.7/plugins/clique-rm/packet-clique-rm.c 2007-12-21 13:51:16.083125699 +0100 +@@ -0,0 +1,446 @@ ++/* packet-clique_rm.c ++ * ++ * $Id$ ++ * ++ * Routines for clique reliable multicast dissector ++ * Copyright 2007, Collabora Ltd. ++ * @author: Sjoerd Simons ++ * Based on code from Wireshark - Network traffic analyzer ++ * By Gerald Combs ++ * 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. ++ */ ++ ++#ifdef HAVE_CONFIG_H ++# include "config.h" ++#endif ++ ++#include ++#include ++#include ++ ++#include ++#include ++ ++/* Initialize the protocol and registered fields */ ++static int proto_clique_rm = -1; ++ ++static int hf_clique_rm_version = -1; ++static int hf_clique_rm_type = -1; ++static int hf_clique_rm_sender = -1; ++static int hf_clique_rm_packet_id = -1; ++static int hf_clique_rm_data_flags = -1; ++static int hf_clique_rm_data_size = -1; ++static int hf_clique_rm_data_stream_id = -1; ++static int hf_clique_rm_data_data = -1; ++static int hf_clique_rm_whois_request_id = -1; ++static int hf_clique_rm_whois_reply_name = -1; ++static int hf_clique_rm_repair_request_sender_id = -1; ++static int hf_clique_rm_repair_request_packet_id = -1; ++ ++/* Initialize the subtree pointers */ ++static gint ett_clique_rm = -1; ++static gint ett_clique_rm_data = -1; ++static gint ett_clique_rm_depends = -1; ++static gint ett_clique_rm_failures = -1; ++static gint ett_clique_rm_attempt_join = -1; ++static gint ett_clique_rm_join = -1; ++ ++/* Packet types */ ++typedef enum { ++ /* Unreliable packets */ ++ PACKET_TYPE_WHOIS_REQUEST = 0, ++ PACKET_TYPE_WHOIS_REPLY, ++ PACKET_TYPE_REPAIR_REQUEST, ++ PACKET_TYPE_SESSION, ++ /* Reliable packets */ ++ FIRST_RELIABLE_PACKET = 0xf, ++ PACKET_TYPE_DATA = FIRST_RELIABLE_PACKET, ++ /* No data just acknowledgement */ ++ PACKET_TYPE_NO_DATA, ++ /* Some nodes failed */ ++ PACKET_TYPE_FAILURE, ++ /* Start a joining attempt */ ++ PACKET_TYPE_ATTEMPT_JOIN, ++ /* The real join */ ++ PACKET_TYPE_JOIN, ++ /* Leaving now, bye */ ++ PACKET_TYPE_BYE, ++ PACKET_TYPE_INVALID ++} GibberRMulticastPacketType; ++ ++#define IS_RELIABLE(type) (type >= FIRST_RELIABLE_PACKET) ++ ++static gchar * ++type_to_str (guint8 type) ++{ ++ switch (type) ++ { ++ case PACKET_TYPE_WHOIS_REQUEST: ++ return "Whois request"; ++ case PACKET_TYPE_WHOIS_REPLY: ++ return "Whois reply"; ++ case PACKET_TYPE_REPAIR_REQUEST: ++ return "Repair request"; ++ case PACKET_TYPE_SESSION: ++ return "Session"; ++ case PACKET_TYPE_DATA: ++ return "Data"; ++ /* No data just acknowledgement */ ++ case PACKET_TYPE_NO_DATA: ++ return "No data"; ++ /* Some nodes failed */ ++ case PACKET_TYPE_FAILURE: ++ return "Failure"; ++ /* Start a joining attempt */ ++ case PACKET_TYPE_ATTEMPT_JOIN: ++ return "Attempt join"; ++ /* The real join */ ++ case PACKET_TYPE_JOIN: ++ return "Join"; ++ /* Leaving now, bye */ ++ case PACKET_TYPE_BYE: ++ return "Bye"; ++ } ++ return "Unknown"; ++} ++ ++static gsize ++dissect_sender_array (proto_tree *clique_rm_tree, gchar *header, ++ tvbuff_t *tvb, gsize offset) ++{ ++ guint8 count; ++ gsize len; ++ proto_item *ti; ++ proto_tree *tree; ++ ++ ++ count = tvb_get_guint8(tvb, offset); ++ len = 1 + 4 * count; ++ ti = proto_tree_add_text (clique_rm_tree, tvb, offset, len , ++ "%s (%d)", header, count); ++ tree = proto_item_add_subtree (ti, ett_clique_rm_failures); ++ offset++; ++ ++ for (; count > 0 ; count--) ++ { ++ guint32 sender; ++ sender = tvb_get_ntohl (tvb, offset); ++ proto_tree_add_text (tree, tvb, offset, 4, "Sender: %x", sender); ++ offset += 4; ++ } ++ return len; ++} ++ ++static void ++dissect_data_packet (proto_tree *clique_rm_tree, tvbuff_t *tvb, gsize offset) ++{ ++ proto_item *ti; ++ proto_tree *tree; ++ ++ ti = proto_tree_add_text (clique_rm_tree, tvb, offset, -1, "Data"); ++ tree = proto_item_add_subtree (ti, ett_clique_rm_data); ++ ++ proto_tree_add_item(tree, hf_clique_rm_data_flags, tvb, offset, 1, FALSE); ++ offset += 1; ++ ++ proto_tree_add_item(tree, hf_clique_rm_data_stream_id, tvb, offset, 2, ++ FALSE); ++ offset += 2; ++ ++ proto_tree_add_item(tree, hf_clique_rm_data_size, tvb, offset, 4, FALSE); ++ offset += 4; ++ ++ ++ proto_tree_add_item(tree, hf_clique_rm_data_data, tvb, offset, ++ tvb_length_remaining(tvb, offset), FALSE); ++} ++ ++static gsize ++dissect_depends (proto_tree *clique_rm_tree, tvbuff_t *tvb, gsize offset) ++{ ++ proto_item *ti; ++ proto_tree *tree; ++ guint8 count; ++ gsize len; ++ ++ count = tvb_get_guint8 (tvb, offset); ++ len = 1 + count * 8; ++ ++ ti = proto_tree_add_text (clique_rm_tree, tvb, offset, 1 + count * 8, ++ "Depends (%d)", count); ++ offset += 1; ++ ++ tree = proto_item_add_subtree (ti, ett_clique_rm_depends); ++ for ( ; count > 0 ; count--) ++ { ++ guint32 d; ++ guint32 d_id; ++ ++ d = tvb_get_ntohl (tvb, offset); ++ d_id = tvb_get_ntohl (tvb, offset + 4); ++ proto_tree_add_text (tree, tvb, offset, 8, ++ "Sender: %x Packet id: %x", d, d_id); ++ offset += 8; ++ } ++ ++ return len; ++} ++ ++/* Code to actually dissect the packets */ ++static void ++dissect_reliable_packet (proto_tree *clique_rm_tree, guint8 type, ++ tvbuff_t *tvb, gsize offset) ++{ ++ proto_tree_add_item(clique_rm_tree, hf_clique_rm_packet_id, tvb, offset, 4, ++ FALSE); ++ offset += 4; ++ ++ offset += dissect_depends (clique_rm_tree, tvb, offset); ++ ++ switch (type) ++ { ++ case PACKET_TYPE_DATA: ++ dissect_data_packet (clique_rm_tree, tvb, offset); ++ break; ++ case PACKET_TYPE_NO_DATA: ++ break; ++ case PACKET_TYPE_FAILURE: ++ dissect_sender_array (clique_rm_tree, "Failures", tvb, offset); ++ break; ++ case PACKET_TYPE_ATTEMPT_JOIN: ++ dissect_sender_array (clique_rm_tree, "New attempt join senders", tvb, ++ offset); ++ break; ++ case PACKET_TYPE_JOIN: ++ dissect_sender_array (clique_rm_tree, "Join failures", tvb, offset); ++ break; ++ case PACKET_TYPE_BYE: ++ break; ++ default: ++ break; ++ } ++} ++ ++static void ++dissect_unreliable_packet (proto_tree *clique_rm_tree, guint8 type, ++ tvbuff_t *tvb, gsize offset) ++{ ++ guint8 len; ++ ++ switch (type) ++ { ++ case PACKET_TYPE_WHOIS_REQUEST: ++ proto_tree_add_item(clique_rm_tree, ++ hf_clique_rm_whois_request_id, tvb, offset, 4, FALSE); ++ break; ++ case PACKET_TYPE_WHOIS_REPLY: ++ len = tvb_get_guint8 (tvb, offset); ++ proto_tree_add_text (clique_rm_tree, tvb, offset, 1, ++ "Whois reply name length: %d", len); ++ offset += 1; ++ ++ proto_tree_add_item(clique_rm_tree, ++ hf_clique_rm_whois_reply_name, tvb, offset, len, FALSE); ++ break; ++ case PACKET_TYPE_REPAIR_REQUEST: ++ proto_tree_add_item(clique_rm_tree, ++ hf_clique_rm_repair_request_sender_id, tvb, offset, 4, FALSE); ++ offset += 4; ++ ++ proto_tree_add_item(clique_rm_tree, ++ hf_clique_rm_repair_request_packet_id, tvb, offset, 4, FALSE); ++ break; ++ case PACKET_TYPE_SESSION: ++ dissect_depends (clique_rm_tree, tvb, offset); ++ break; ++ default: ++ break; ++ } ++} ++ ++ ++static gboolean ++dissect_clique_rm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) ++{ ++ guint8 version = 0; ++ guint8 type = 0; ++ gsize offset = 0; ++ ++ if (tvb_length (tvb) < 12) ++ return FALSE; ++ ++ if (tvb_strneql (tvb, offset, "Clique", 6)) ++ return FALSE; ++ offset += 6; ++ ++ version = tvb_get_guint8 (tvb, offset); ++ if (version != 1) ++ return FALSE; ++ offset++; ++ ++ type = tvb_get_guint8 (tvb, offset); ++ offset++; ++ ++ if (check_col(pinfo->cinfo, COL_PROTOCOL)) ++ col_set_str(pinfo->cinfo, COL_PROTOCOL, "Clique-rm"); ++ ++ if (check_col(pinfo->cinfo, COL_INFO)) ++ col_add_fstr(pinfo->cinfo, COL_INFO, "%s", ++ type_to_str (type)); ++ ++ if (tree) { ++ proto_item *ti = NULL; ++ proto_tree *clique_rm_tree = NULL; ++ ++ /* rewind back to just behind the prefix */ ++ offset = 6; ++ ++ ti = proto_tree_add_item(tree, proto_clique_rm, tvb, 0, -1, FALSE); ++ clique_rm_tree = proto_item_add_subtree(ti, ett_clique_rm); ++ ++ proto_tree_add_item(clique_rm_tree, hf_clique_rm_version, tvb, offset, 1, ++ FALSE); ++ offset++; ++ ++ ti = proto_tree_add_item(clique_rm_tree, hf_clique_rm_type, tvb, offset, 1, ++ FALSE); ++ proto_item_append_text(ti, ", %s", type_to_str (type)); ++ offset++; ++ ++ if (check_col(pinfo->cinfo, COL_INFO)) ++ col_append_fstr(pinfo->cinfo, COL_INFO, ", sender: 0x%x", ++ tvb_get_ntohl (tvb, offset)); ++ ++ proto_tree_add_item(clique_rm_tree, hf_clique_rm_sender, tvb, offset, ++ 4, FALSE); ++ offset += 4; ++ ++ if (IS_RELIABLE(type)) { ++ if (check_col(pinfo->cinfo, COL_INFO)) ++ col_append_fstr(pinfo->cinfo, COL_INFO, ", id: 0x%x", ++ tvb_get_ntohl (tvb, offset)); ++ ++ dissect_reliable_packet(clique_rm_tree, type, tvb, offset); ++ } else { ++ dissect_unreliable_packet(clique_rm_tree, type, tvb, offset); ++ } ++ } ++ ++ return TRUE; ++} ++ ++ ++/* Register the protocol with Wireshark */ ++ ++/* this format is require because a script is used to build the C function ++ that calls all the protocol registration. ++*/ ++ ++void ++proto_reg_handoff_clique_rm(void) ++{ ++ heur_dissector_add("udp", dissect_clique_rm, proto_clique_rm); ++} ++ ++void ++proto_register_clique_rm(void) ++{ ++ ++/* Setup list of header fields See Section 1.6.1 for details*/ ++ static hf_register_info hf[] = { ++ { &hf_clique_rm_version, ++ { "Version", "clique_rm.version", ++ FT_UINT8, BASE_DEC, NULL, 0x0, ++ "", HFILL } ++ }, ++ { &hf_clique_rm_type, ++ { "Type", "clique_rm.type", ++ FT_UINT8, BASE_HEX, NULL, 0x0, ++ "", HFILL } ++ }, ++ { &hf_clique_rm_sender, ++ { "Sender", "clique_rm.sender", ++ FT_UINT32, BASE_HEX, NULL, 0x0, ++ "", HFILL } ++ }, ++ { &hf_clique_rm_packet_id, ++ { "Packet id", "clique_rm.packet_id", ++ FT_UINT32, BASE_HEX, NULL, 0x0, ++ "", HFILL } ++ }, ++ { &hf_clique_rm_data_flags, ++ { "Data flags", "clique_rm.data.flags", ++ FT_UINT8, BASE_HEX, NULL, 0x0, ++ "", HFILL } ++ }, ++ { &hf_clique_rm_data_size, ++ { "Data total size", "clique_rm.data.size", ++ FT_UINT32, BASE_DEC, NULL, 0x0, ++ "", HFILL } ++ }, ++ { &hf_clique_rm_data_stream_id, ++ { "Data stream id", "clique_rm.data.stream_id", ++ FT_UINT16, BASE_HEX, NULL, 0x0, ++ "", HFILL } ++ }, ++ { &hf_clique_rm_data_data, ++ { "Raw data", "clique_rm.data.data", ++ FT_STRINGZ, BASE_HEX, NULL, 0x0, ++ "", HFILL } ++ }, ++ { &hf_clique_rm_whois_request_id, ++ { "Whois request id", "clique_rm.whois_request.id", ++ FT_UINT32, BASE_HEX, NULL, 0x0, ++ "", HFILL } ++ }, ++ { &hf_clique_rm_whois_reply_name, ++ { "Whois reply name", "clique_rm.whois_reply.name", ++ FT_STRINGZ, BASE_DEC, NULL, 0x0, ++ "", HFILL } ++ }, ++ { &hf_clique_rm_repair_request_sender_id, ++ { "Repair request for sender", ++ "clique_rm.repair_request.sender_id", ++ FT_UINT32, BASE_HEX, NULL, 0x0, ++ "", HFILL } ++ }, ++ { &hf_clique_rm_repair_request_packet_id, ++ { "Repair request for packet", ++ "clique_rm.repair_request.packet_id", ++ FT_UINT32, BASE_HEX, NULL, 0x0, ++ "", HFILL } ++ }, ++ }; ++ ++/* Setup protocol subtree array */ ++ static gint *ett[] = { ++ &ett_clique_rm, ++ &ett_clique_rm_depends, ++ &ett_clique_rm_data, ++ &ett_clique_rm_failures, ++ &ett_clique_rm_attempt_join, ++ &ett_clique_rm_join, ++ }; ++ ++/* Register the protocol name and description */ ++ proto_clique_rm = proto_register_protocol( ++ "Clique Reliable Multicast Protocol", "Clique-rm", "clique-rm"); ++ ++/* Required function calls to register the header fields and subtrees used */ ++ proto_register_field_array(proto_clique_rm, hf, array_length(hf)); ++ proto_register_subtree_array(ett, array_length(ett)); ++} +diff -urNad wireshark-0.99.7~/plugins/clique-rm/plugin.rc.in wireshark-0.99.7/plugins/clique-rm/plugin.rc.in +--- wireshark-0.99.7~/plugins/clique-rm/plugin.rc.in 1970-01-01 01:00:00.000000000 +0100 ++++ wireshark-0.99.7/plugins/clique-rm/plugin.rc.in 2007-12-21 13:51:16.083125699 +0100 +@@ -0,0 +1,34 @@ ++#include "winver.h" ++ ++VS_VERSION_INFO VERSIONINFO ++ FILEVERSION @RC_MODULE_VERSION@ ++ PRODUCTVERSION @RC_VERSION@,0 ++ FILEFLAGSMASK 0x0L ++#ifdef _DEBUG ++ FILEFLAGS VS_FF_PRERELEASE+VS_FF_DEBUG ++#else ++ FILEFLAGS VS_FF_PRERELEASE ++#endif ++ FILEOS VOS_NT_WINDOWS32 ++ FILETYPE VFT_DLL ++BEGIN ++ BLOCK "StringFileInfo" ++ BEGIN ++ BLOCK "040904b0" ++ BEGIN ++ VALUE "CompanyName", "Collabora Ltd.\0" ++ VALUE "FileDescription", "@PACKAGE@ dissector\0" ++ VALUE "FileVersion", "@MODULE_VERSION@\0" ++ VALUE "InternalName", "@PACKAGE@ @MODULE_VERSION@\0" ++ VALUE "LegalCopyright", " Copyright 2007 Collabora Ltd. Copyright 1998 Gerald Combs , Gilbert Ramirez 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 --- wireshark-1.0.2.orig/debian/patches/16_licence_about_location.dpatch +++ wireshark-1.0.2/debian/patches/16_licence_about_location.dpatch @@ -0,0 +1,19 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 16_licence_about_location.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: No description. + +@DPATCH@ +diff -urNad wireshark-0.99.6rel~/gtk/about_dlg.c wireshark-0.99.6rel/gtk/about_dlg.c +--- wireshark-0.99.6rel~/gtk/about_dlg.c 2007-07-05 21:22:28.000000000 +0200 ++++ wireshark-0.99.6rel/gtk/about_dlg.c 2007-09-29 15:53:16.822998083 +0200 +@@ -411,7 +411,7 @@ + GtkWidget *page; + char *absolute_path; + +- absolute_path = get_datafile_path("COPYING"); ++ absolute_path = get_datafile_path("ABOUT.GPL"); + page = text_page_new(absolute_path); + + return page; --- wireshark-1.0.2.orig/debian/patches/22_CVE-2008-3146_3932.dpatch +++ wireshark-1.0.2/debian/patches/22_CVE-2008-3146_3932.dpatch @@ -0,0 +1,7433 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 22_CVE-2008-3146_3932.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: No description. + +@DPATCH@ +diff -urNad lenny~/epan/dissectors/packet-ncp2222.inc lenny/epan/dissectors/packet-ncp2222.inc +--- lenny~/epan/dissectors/packet-ncp2222.inc 2008-07-10 19:39:26.000000000 +0200 ++++ lenny/epan/dissectors/packet-ncp2222.inc 2008-09-16 19:43:37.000000000 +0200 +@@ -19,7 +19,7 @@ + * Portions Copyright (c) Gilbert Ramirez 2000-2002 + * Portions Copyright (c) Novell, Inc. 2000-2003 + * +- * $Id: packet-ncp2222.inc 24522 2008-03-01 13:58:15Z stig $ ++ * $Id$ + * + * Wireshark - Network traffic analyzer + * By Gerald Combs +@@ -43,13 +43,13 @@ + #define NCP_PACKET_INIT_COUNT 200 + #define PROTO_LENGTH_UNTIL_END -1 + +-gboolean nds_defragment = TRUE; +-gboolean nds_echo_eid = TRUE; +-gboolean ncp_echo_err = TRUE; +-gboolean ncp_echo_conn = FALSE; ++gboolean nds_defragment = TRUE; ++gboolean nds_echo_eid = TRUE; ++gboolean ncp_echo_err = TRUE; ++gboolean ncp_echo_conn = FALSE; + gboolean ncp_echo_server = TRUE; +-gboolean ncp_echo_file = FALSE; +-gboolean ncp_newstyle = TRUE; ++gboolean ncp_echo_file = FALSE; ++gboolean ncp_newstyle = TRUE; + + extern dissector_handle_t nds_data_handle; + typedef struct { +@@ -60,6 +60,7 @@ + guint32 nds_length; + guint32 nds_frag; + gboolean nds_fragmented; ++ guint8 sequence; + } frag_info; + + frag_info frags[100]; +@@ -79,204 +80,204 @@ + "segments" + }; + +-#define NDS_TAG_NO_SUCH_ENTRY 0x00000000 +-#define NDS_TAG_LOCAL_ENTRY 0x00000001 +-#define NDS_TAG_REMOTE_ENTRY 0x00000002 +-#define NDS_TAG_ALIAS_ENTRY 0x00000003 +-#define NDS_TAG_REFERRAL_INFORMATION 0x00000004 +-#define NDS_TAG_ENTRY_AND_REFERRALS 0x00000006 ++#define NDS_TAG_NO_SUCH_ENTRY 0x00000000 ++#define NDS_TAG_LOCAL_ENTRY 0x00000001 ++#define NDS_TAG_REMOTE_ENTRY 0x00000002 ++#define NDS_TAG_ALIAS_ENTRY 0x00000003 ++#define NDS_TAG_REFERRAL_INFORMATION 0x00000004 ++#define NDS_TAG_ENTRY_AND_REFERRALS 0x00000006 + + /* Search objects */ +-#define NDS_SEARCH_ENTRY 0 +-#define NDS_SEARCH_SUBORDINATES 1 +-#define NDS_SEARCH_SUBTREE 2 +-#define NDS_SEARCH_PARTITION 3 ++#define NDS_SEARCH_ENTRY 0 ++#define NDS_SEARCH_SUBORDINATES 1 ++#define NDS_SEARCH_SUBTREE 2 ++#define NDS_SEARCH_PARTITION 3 + +-/* Search Referal Types */ +-#define NDS_ALIAS_REFERRAL 0 +-#define NDS_PARTITION_REFERRAL 1 ++/* Search Referral Types */ ++#define NDS_ALIAS_REFERRAL 0 ++#define NDS_PARTITION_REFERRAL 1 + + /* Search Filter Types */ +-#define NDS_SEARCH_ITEM 0 +-#define NDS_SEARCH_OR 1 +-#define NDS_SEARCH_AND 2 +-#define NDS_SEARCH_NOT 3 ++#define NDS_SEARCH_ITEM 0 ++#define NDS_SEARCH_OR 1 ++#define NDS_SEARCH_AND 2 ++#define NDS_SEARCH_NOT 3 + + /* Search Operators */ +-#define NDS_SEARCH_EQUAL 7 +-#define NDS_SEARCH_GREATER_OR_EQUAL 8 +-#define NDS_SEARCH_LESS_OR_EQUAL 9 +-#define NDS_SEARCH_APPROX 10 +-#define NDS_SEARCH_PRESENT 15 +-#define NDS_SEARCH_RDN 16 +-#define NDS_SEARCH_BASE_CLASS 17 +-#define NDS_SEARCH_MODIFICATION_GE 18 /* Deprecated, use DS_SEARCH_ENTRY_MTS_GE */ +-#define NDS_SEARCH_VALUE_TIME_GE 19 /* Deprecated, use DS_SEARCH_VALUE_MTS_GE */ +-#define NDS_SEARCH_REFERENCES 20 +-#define NDS_SEARCH_DN_IN_VALUE 21 +-#define NDS_SEARCH_SCHEMA_IN_VALUE 22 +-#define NDS_SEARCH_ENTRY_FLAGS 23 +-#define NDS_SEARCH_ENTRY_HAS_FLAG 24 +-#define NDS_SEARCH_VALUE_FLAGS 25 +-#define NDS_SEARCH_VALUE_HAS_FLAG 26 +-#define NDS_SEARCH_ATTR_FLAGS 27 +-#define NDS_SEARCH_ATTR_HAS_FLAG 28 +-#define NDS_SEARCH_EID 29 ++#define NDS_SEARCH_EQUAL 7 ++#define NDS_SEARCH_GREATER_OR_EQUAL 8 ++#define NDS_SEARCH_LESS_OR_EQUAL 9 ++#define NDS_SEARCH_APPROX 10 ++#define NDS_SEARCH_PRESENT 15 ++#define NDS_SEARCH_RDN 16 ++#define NDS_SEARCH_BASE_CLASS 17 ++#define NDS_SEARCH_MODIFICATION_GE 18 /* Deprecated, use DS_SEARCH_ENTRY_MTS_GE */ ++#define NDS_SEARCH_VALUE_TIME_GE 19 /* Deprecated, use DS_SEARCH_VALUE_MTS_GE */ ++#define NDS_SEARCH_REFERENCES 20 ++#define NDS_SEARCH_DN_IN_VALUE 21 ++#define NDS_SEARCH_SCHEMA_IN_VALUE 22 ++#define NDS_SEARCH_ENTRY_FLAGS 23 ++#define NDS_SEARCH_ENTRY_HAS_FLAG 24 ++#define NDS_SEARCH_VALUE_FLAGS 25 ++#define NDS_SEARCH_VALUE_HAS_FLAG 26 ++#define NDS_SEARCH_ATTR_FLAGS 27 ++#define NDS_SEARCH_ATTR_HAS_FLAG 28 ++#define NDS_SEARCH_EID 29 + +-#define NDS_SEARCH_ENTRY_MTS_GE 18 +-#define NDS_SEARCH_ENTRY_MTS_G 30 +-#define NDS_SEARCH_ENTRY_MTS_LE 31 +-#define NDS_SEARCH_ENTRY_MTS_L 32 +-#define NDS_SEARCH_ENTRY_MTS_EQ 33 +-#define NDS_SEARCH_ENTRY_MTS_EQ_APPROX 34 +-#define NDS_SEARCH_VALUE_MTS_GE 19 +-#define NDS_SEARCH_VALUE_MTS_G 35 +-#define NDS_SEARCH_VALUE_MTS_LE 36 +-#define NDS_SEARCH_VALUE_MTS_L 37 +-#define NDS_SEARCH_VALUE_MTS_EQ 38 +-#define NDS_SEARCH_VALUE_MTS_EQ_APPROX 39 ++#define NDS_SEARCH_ENTRY_MTS_GE 18 ++#define NDS_SEARCH_ENTRY_MTS_G 30 ++#define NDS_SEARCH_ENTRY_MTS_LE 31 ++#define NDS_SEARCH_ENTRY_MTS_L 32 ++#define NDS_SEARCH_ENTRY_MTS_EQ 33 ++#define NDS_SEARCH_ENTRY_MTS_EQ_APPROX 34 ++#define NDS_SEARCH_VALUE_MTS_GE 19 ++#define NDS_SEARCH_VALUE_MTS_G 35 ++#define NDS_SEARCH_VALUE_MTS_LE 36 ++#define NDS_SEARCH_VALUE_MTS_L 37 ++#define NDS_SEARCH_VALUE_MTS_EQ 38 ++#define NDS_SEARCH_VALUE_MTS_EQ_APPROX 39 + +-#define NDS_SEARCH_ENTRY_CTS_GE 40 +-#define NDS_SEARCH_ENTRY_CTS_G 41 +-#define NDS_SEARCH_ENTRY_CTS_LE 42 +-#define NDS_SEARCH_ENTRY_CTS_L 43 +-#define NDS_SEARCH_ENTRY_CTS_EQ 44 +-#define NDS_SEARCH_ENTRY_CTS_EQ_APPROX 45 +-#define NDS_SEARCH_VALUE_CTS_GE 46 +-#define NDS_SEARCH_VALUE_CTS_G 47 +-#define NDS_SEARCH_VALUE_CTS_LE 48 +-#define NDS_SEARCH_VALUE_CTS_L 49 +-#define NDS_SEARCH_VALUE_CTS_EQ 50 +-#define NDS_SEARCH_VALUE_CTS_EQ_APPROX 51 +-#define NDS_SEARCH_EXTENSIBLE 52 +-#define NDS_SEARCH_ENTRY_SUBCOUNT_GE 53 +-#define NDS_SEARCH_ENTRY_SUBCOUNT_G 54 +-#define NDS_SEARCH_ENTRY_SUBCOUNT_LE 55 +-#define NDS_SEARCH_ENTRY_SUBCOUNT_L 56 +-#define NDS_SEARCH_ENTRY_SUBCOUNT_EQ 57 ++#define NDS_SEARCH_ENTRY_CTS_GE 40 ++#define NDS_SEARCH_ENTRY_CTS_G 41 ++#define NDS_SEARCH_ENTRY_CTS_LE 42 ++#define NDS_SEARCH_ENTRY_CTS_L 43 ++#define NDS_SEARCH_ENTRY_CTS_EQ 44 ++#define NDS_SEARCH_ENTRY_CTS_EQ_APPROX 45 ++#define NDS_SEARCH_VALUE_CTS_GE 46 ++#define NDS_SEARCH_VALUE_CTS_G 47 ++#define NDS_SEARCH_VALUE_CTS_LE 48 ++#define NDS_SEARCH_VALUE_CTS_L 49 ++#define NDS_SEARCH_VALUE_CTS_EQ 50 ++#define NDS_SEARCH_VALUE_CTS_EQ_APPROX 51 ++#define NDS_SEARCH_EXTENSIBLE 52 ++#define NDS_SEARCH_ENTRY_SUBCOUNT_GE 53 ++#define NDS_SEARCH_ENTRY_SUBCOUNT_G 54 ++#define NDS_SEARCH_ENTRY_SUBCOUNT_LE 55 ++#define NDS_SEARCH_ENTRY_SUBCOUNT_L 56 ++#define NDS_SEARCH_ENTRY_SUBCOUNT_EQ 57 + +-#define DCS_OPS 0x10000000L +-#define DCS_MOD_GE_WITH_ATTR DCS_OPS + NDS_SEARCH_MODIFICATION_GE +-#define DCS_VALUE_GE_WITH_ATTR DCS_OPS + NDS_SEARCH_VALUE_TIME_GE +-#define DCS_MASK ~DCS_OPS ++#define DCS_OPS 0x10000000L ++#define DCS_MOD_GE_WITH_ATTR DCS_OPS + NDS_SEARCH_MODIFICATION_GE ++#define DCS_VALUE_GE_WITH_ATTR DCS_OPS + NDS_SEARCH_VALUE_TIME_GE ++#define DCS_MASK ~DCS_OPS + + /* Iterator verbs */ +-#define IT_CLEAR 1 +-#define IT_COPY 2 +-#define IT_COUNT 3 +-#define IT_CREATE 4 +-#define IT_CURRENT 5 +-#define IT_DESTROY 6 +-#define IT_DONE 7 +-#define IT_FIRST 8 +-#define IT_GETPOSITION 9 +-#define IT_LAST 10 +-#define IT_NEXT 11 +-#define IT_PREV 12 +-#define IT_POSITION 13 +-#define IT_POSITION_IT 14 +-#define IT_SETINDEX 15 +-#define IT_SETFILTER 16 +-#define IT_SKIP 17 +-#define IT_TYPEDOWN 18 +-#define IT_ATFIRST 19 +-#define IT_ATEOF 20 +-#define IT_GETINDEX 21 +-#define IT_ISPOSITIONABLE 22 +-#define IT_ATBOF 23 +-#define IT_ATLAST 24 ++#define IT_CLEAR 1 ++#define IT_COPY 2 ++#define IT_COUNT 3 ++#define IT_CREATE 4 ++#define IT_CURRENT 5 ++#define IT_DESTROY 6 ++#define IT_DONE 7 ++#define IT_FIRST 8 ++#define IT_GETPOSITION 9 ++#define IT_LAST 10 ++#define IT_NEXT 11 ++#define IT_PREV 12 ++#define IT_POSITION 13 ++#define IT_POSITION_IT 14 ++#define IT_SETINDEX 15 ++#define IT_SETFILTER 16 ++#define IT_SKIP 17 ++#define IT_TYPEDOWN 18 ++#define IT_ATFIRST 19 ++#define IT_ATEOF 20 ++#define IT_GETINDEX 21 ++#define IT_ISPOSITIONABLE 22 ++#define IT_ATBOF 23 ++#define IT_ATLAST 24 + + /* Iteration information flags */ +-#define DSI_OUTPUT_FIELDS 0x00000001L +-#define DSI_ENTRY_ID 0x00000002L +-#define DSI_ENTRY_FLAGS 0x00000004L +-#define DSI_SUBORDINATE_COUNT 0x00000008L +-#define DSI_MODIFICATION_TIME 0x00000010L +-#define DSI_MODIFICATION_TIMESTAMP 0x00000020L +-#define DSI_CREATION_TIMESTAMP 0x00000040L +-#define DSI_PARTITION_ROOT_ID 0x00000080L +-#define DSI_PARENT_ID 0x00000100L +-#define DSI_REVISION_COUNT 0x00000200L +-#define DSI_REPLICA_TYPE 0x00000400L +-#define DSI_BASE_CLASS 0x00000800L +-#define DSI_ENTRY_RDN 0x00001000L +-#define DSI_ENTRY_DN 0x00002000L +-#define DSI_PARTITION_ROOT_DN 0x00004000L +-#define DSI_PARENT_DN 0x00008000L +-#define DSI_PURGE_TIME 0x00010000L +-#define DSI_DEREFERENCED_BASE_CLASS 0x00020000L +-#define DSI_REPLICA_NUMBER 0x00040000L +-#define DSI_REPLICA_STATE 0x00080000L +-#define DSI_FEDERATION_BOUNDARY 0x00100000L +-#define DSI_SCHEMA_BOUNDARY 0x00200000L +-#define DSI_FEDERATION_BOUNDARY_ID 0x00400000L +-#define DSI_SCHEMA_BOUNDARY_ID 0x00800000L +-#define DSI_CUR_SUBCOUNT 0x01000000L +-#define DSI_LOCAL_ENTRY_FLAGS 0x02000000L ++#define DSI_OUTPUT_FIELDS 0x00000001L ++#define DSI_ENTRY_ID 0x00000002L ++#define DSI_ENTRY_FLAGS 0x00000004L ++#define DSI_SUBORDINATE_COUNT 0x00000008L ++#define DSI_MODIFICATION_TIME 0x00000010L ++#define DSI_MODIFICATION_TIMESTAMP 0x00000020L ++#define DSI_CREATION_TIMESTAMP 0x00000040L ++#define DSI_PARTITION_ROOT_ID 0x00000080L ++#define DSI_PARENT_ID 0x00000100L ++#define DSI_REVISION_COUNT 0x00000200L ++#define DSI_REPLICA_TYPE 0x00000400L ++#define DSI_BASE_CLASS 0x00000800L ++#define DSI_ENTRY_RDN 0x00001000L ++#define DSI_ENTRY_DN 0x00002000L ++#define DSI_PARTITION_ROOT_DN 0x00004000L ++#define DSI_PARENT_DN 0x00008000L ++#define DSI_PURGE_TIME 0x00010000L ++#define DSI_DEREFERENCED_BASE_CLASS 0x00020000L ++#define DSI_REPLICA_NUMBER 0x00040000L ++#define DSI_REPLICA_STATE 0x00080000L ++#define DSI_FEDERATION_BOUNDARY 0x00100000L ++#define DSI_SCHEMA_BOUNDARY 0x00200000L ++#define DSI_FEDERATION_BOUNDARY_ID 0x00400000L ++#define DSI_SCHEMA_BOUNDARY_ID 0x00800000L ++#define DSI_CUR_SUBCOUNT 0x01000000L ++#define DSI_LOCAL_ENTRY_FLAGS 0x02000000L + + static const value_string zensearchenum[] = { +- { 0, "[Root]" }, +- { 1, "Object Container" }, +- { 2, "Associated Container" }, +- { 3, "Selected Container" }, +- {0, NULL } ++ { 0, "[Root]" }, ++ { 1, "Object Container" }, ++ { 2, "Associated Container" }, ++ { 3, "Selected Container" }, ++ {0, NULL } + }; + + static const value_string itersearchenum[] = { +- { NDS_SEARCH_ITEM, "Search Item" }, +- { NDS_SEARCH_OR, "OR" }, +- { NDS_SEARCH_AND, "AND" }, +- { NDS_SEARCH_NOT, "NOT" }, +- { NDS_SEARCH_EQUAL, "Equals" }, +- { NDS_SEARCH_GREATER_OR_EQUAL, "Greater or Equals" }, +- { NDS_SEARCH_LESS_OR_EQUAL, "Less or Equals" }, +- { NDS_SEARCH_APPROX, "Approximately" }, +- { NDS_SEARCH_PRESENT, "Present" }, +- { NDS_SEARCH_RDN, "Relative Distinguished Name" }, +- { NDS_SEARCH_BASE_CLASS, "Base Class" }, +- { NDS_SEARCH_MODIFICATION_GE, "Modification Greater or Equal" }, +- { NDS_SEARCH_VALUE_TIME_GE, "Time Value Greater or Equal" }, +- { NDS_SEARCH_REFERENCES, "References" }, +- { NDS_SEARCH_DN_IN_VALUE, "Designated Name in Value" }, +- { NDS_SEARCH_SCHEMA_IN_VALUE, "Schema in Value" }, +- { NDS_SEARCH_ENTRY_FLAGS, "Entry Flags" }, +- { NDS_SEARCH_ENTRY_HAS_FLAG, "Entry has Flags" }, +- { NDS_SEARCH_VALUE_FLAGS, "Value Flags" }, +- { NDS_SEARCH_VALUE_HAS_FLAG, "Value has Flags" }, +- { NDS_SEARCH_ATTR_FLAGS, "Attribute Flags" }, +- { NDS_SEARCH_ATTR_HAS_FLAG, "Attribute has Flags" }, +- { NDS_SEARCH_EID, "Entry ID" }, +- { NDS_SEARCH_ENTRY_MTS_GE, "Entry Modification Timestamp Greater or Equal" }, +- { NDS_SEARCH_ENTRY_MTS_G, "Entry Modification Timestamp Greater" }, +- { NDS_SEARCH_ENTRY_MTS_LE, "Entry Modification Timestamp Less or Equals" }, +- { NDS_SEARCH_ENTRY_MTS_L, "Entry Modification Timestamp Less" }, +- { NDS_SEARCH_ENTRY_MTS_EQ, "Entry Modification Timestamp Equals" }, +- { NDS_SEARCH_ENTRY_MTS_EQ_APPROX, "Entry Modification Timestamp Equals Approximately" }, +- { NDS_SEARCH_VALUE_MTS_GE, "Value Modification Timestamp Greater or Equal" }, +- { NDS_SEARCH_VALUE_MTS_G, "Value Modification Timestamp Greater" }, +- { NDS_SEARCH_VALUE_MTS_LE, "Value Modification Timestamp Less or Equals" }, +- { NDS_SEARCH_VALUE_MTS_L, "Value Modification Timestamp Less" }, +- { NDS_SEARCH_VALUE_MTS_EQ, "Value Modification Timestamp Equals" }, +- { NDS_SEARCH_VALUE_MTS_EQ_APPROX, "Value Modification Timestamp Equals Approximately" }, +- { NDS_SEARCH_ENTRY_CTS_GE, "Entry Creation Timestamp Greater or Equals" }, +- { NDS_SEARCH_ENTRY_CTS_G, "Entry Creation Timestamp Greater" }, +- { NDS_SEARCH_ENTRY_CTS_LE, "Entry Creation Timestamp Less or Equals" }, +- { NDS_SEARCH_ENTRY_CTS_L, "Entry Creation Timestamp Less" }, +- { NDS_SEARCH_ENTRY_CTS_EQ, "Entry Creation Timestamp Equals" }, +- { NDS_SEARCH_ENTRY_CTS_EQ_APPROX, "Entry Creation Timestamp Equals Approximately" }, +- { NDS_SEARCH_VALUE_CTS_GE, "Value Creation Timestamp Greater or Equals" }, +- { NDS_SEARCH_VALUE_CTS_G, "Value Creation Timestamp Greater" }, +- { NDS_SEARCH_VALUE_CTS_LE, "Value Creation Timestamp Less or Equals" }, +- { NDS_SEARCH_VALUE_CTS_L, "Value Creation Timestamp Less" }, +- { NDS_SEARCH_VALUE_CTS_EQ, "Value Creation Timestamp Equals" }, +- { NDS_SEARCH_VALUE_CTS_EQ_APPROX, "Value Creation Timestamp Equals Approximately" }, +- { NDS_SEARCH_EXTENSIBLE, "Extensible" }, +- { NDS_SEARCH_ENTRY_SUBCOUNT_GE, "Entry SubCount Greater or Equals" }, +- { NDS_SEARCH_ENTRY_SUBCOUNT_G, "Entry SubCount Greater" }, +- { NDS_SEARCH_ENTRY_SUBCOUNT_LE, "Entry SubCount Less or Equals" }, +- { NDS_SEARCH_ENTRY_SUBCOUNT_L, "Entry SubCount Less" }, +- { NDS_SEARCH_ENTRY_SUBCOUNT_EQ, "Entry SubCount Equals" }, +- {0, NULL } ++ { NDS_SEARCH_ITEM, "Search Item" }, ++ { NDS_SEARCH_OR, "OR" }, ++ { NDS_SEARCH_AND, "AND" }, ++ { NDS_SEARCH_NOT, "NOT" }, ++ { NDS_SEARCH_EQUAL, "Equals" }, ++ { NDS_SEARCH_GREATER_OR_EQUAL, "Greater or Equals" }, ++ { NDS_SEARCH_LESS_OR_EQUAL, "Less or Equals" }, ++ { NDS_SEARCH_APPROX, "Approximately" }, ++ { NDS_SEARCH_PRESENT, "Present" }, ++ { NDS_SEARCH_RDN, "Relative Distinguished Name" }, ++ { NDS_SEARCH_BASE_CLASS, "Base Class" }, ++ { NDS_SEARCH_MODIFICATION_GE, "Modification Greater or Equal" }, ++ { NDS_SEARCH_VALUE_TIME_GE, "Time Value Greater or Equal" }, ++ { NDS_SEARCH_REFERENCES, "References" }, ++ { NDS_SEARCH_DN_IN_VALUE, "Designated Name in Value" }, ++ { NDS_SEARCH_SCHEMA_IN_VALUE, "Schema in Value" }, ++ { NDS_SEARCH_ENTRY_FLAGS, "Entry Flags" }, ++ { NDS_SEARCH_ENTRY_HAS_FLAG, "Entry has Flags" }, ++ { NDS_SEARCH_VALUE_FLAGS, "Value Flags" }, ++ { NDS_SEARCH_VALUE_HAS_FLAG, "Value has Flags" }, ++ { NDS_SEARCH_ATTR_FLAGS, "Attribute Flags" }, ++ { NDS_SEARCH_ATTR_HAS_FLAG, "Attribute has Flags" }, ++ { NDS_SEARCH_EID, "Entry ID" }, ++ { NDS_SEARCH_ENTRY_MTS_GE, "Entry Modification Timestamp Greater or Equal" }, ++ { NDS_SEARCH_ENTRY_MTS_G, "Entry Modification Timestamp Greater" }, ++ { NDS_SEARCH_ENTRY_MTS_LE, "Entry Modification Timestamp Less or Equals" }, ++ { NDS_SEARCH_ENTRY_MTS_L, "Entry Modification Timestamp Less" }, ++ { NDS_SEARCH_ENTRY_MTS_EQ, "Entry Modification Timestamp Equals" }, ++ { NDS_SEARCH_ENTRY_MTS_EQ_APPROX, "Entry Modification Timestamp Equals Approximately" }, ++ { NDS_SEARCH_VALUE_MTS_GE, "Value Modification Timestamp Greater or Equal" }, ++ { NDS_SEARCH_VALUE_MTS_G, "Value Modification Timestamp Greater" }, ++ { NDS_SEARCH_VALUE_MTS_LE, "Value Modification Timestamp Less or Equals" }, ++ { NDS_SEARCH_VALUE_MTS_L, "Value Modification Timestamp Less" }, ++ { NDS_SEARCH_VALUE_MTS_EQ, "Value Modification Timestamp Equals" }, ++ { NDS_SEARCH_VALUE_MTS_EQ_APPROX, "Value Modification Timestamp Equals Approximately" }, ++ { NDS_SEARCH_ENTRY_CTS_GE, "Entry Creation Timestamp Greater or Equals" }, ++ { NDS_SEARCH_ENTRY_CTS_G, "Entry Creation Timestamp Greater" }, ++ { NDS_SEARCH_ENTRY_CTS_LE, "Entry Creation Timestamp Less or Equals" }, ++ { NDS_SEARCH_ENTRY_CTS_L, "Entry Creation Timestamp Less" }, ++ { NDS_SEARCH_ENTRY_CTS_EQ, "Entry Creation Timestamp Equals" }, ++ { NDS_SEARCH_ENTRY_CTS_EQ_APPROX, "Entry Creation Timestamp Equals Approximately" }, ++ { NDS_SEARCH_VALUE_CTS_GE, "Value Creation Timestamp Greater or Equals" }, ++ { NDS_SEARCH_VALUE_CTS_G, "Value Creation Timestamp Greater" }, ++ { NDS_SEARCH_VALUE_CTS_LE, "Value Creation Timestamp Less or Equals" }, ++ { NDS_SEARCH_VALUE_CTS_L, "Value Creation Timestamp Less" }, ++ { NDS_SEARCH_VALUE_CTS_EQ, "Value Creation Timestamp Equals" }, ++ { NDS_SEARCH_VALUE_CTS_EQ_APPROX, "Value Creation Timestamp Equals Approximately" }, ++ { NDS_SEARCH_EXTENSIBLE, "Extensible" }, ++ { NDS_SEARCH_ENTRY_SUBCOUNT_GE, "Entry SubCount Greater or Equals" }, ++ { NDS_SEARCH_ENTRY_SUBCOUNT_G, "Entry SubCount Greater" }, ++ { NDS_SEARCH_ENTRY_SUBCOUNT_LE, "Entry SubCount Less or Equals" }, ++ { NDS_SEARCH_ENTRY_SUBCOUNT_L, "Entry SubCount Less" }, ++ { NDS_SEARCH_ENTRY_SUBCOUNT_EQ, "Entry SubCount Equals" }, ++ {0, NULL } + }; + + static const value_string iterator_subverbs[] = { +@@ -309,23 +310,23 @@ + + + static const value_string nds_tuned_tags[] = { +- { 0, "RDN Hint" }, +- { 1, "RDN History" }, +- {0, NULL } ++ { 0, "RDN Hint" }, ++ { 1, "RDN History" }, ++ {0, NULL } + }; + + static const value_string nds_scope_vals[] = { +- { 0, "Search Scope: 0x0000 - Examine base object only" }, +- { 1, "Search Scope: 0x0001 - Search the immediate subordinates of the base object" }, +- { 2, "Search Scope: 0x0002 - Search the base object and all of its subordinates" }, +- { 3, "Search Scope: 0x0003 - Search the base objects and all objects in its partition (NDS version 8 or higher)" }, +- {0, NULL } ++ { 0, "Search Scope: 0x0000 - Examine base object only" }, ++ { 1, "Search Scope: 0x0001 - Search the immediate subordinates of the base object" }, ++ { 2, "Search Scope: 0x0002 - Search the base object and all of its subordinates" }, ++ { 3, "Search Scope: 0x0003 - Search the base objects and all objects in its partition (NDS version 8 or higher)" }, ++ {0, NULL } + }; + + static const value_string nds_tuned_item_tags[] = { +- { 0, "Single Item" }, +- { 1, "Multiple Items" }, +- {0, NULL } ++ { 0, "Single Item" }, ++ { 1, "Multiple Items" }, ++ {0, NULL } + }; + + static const value_string nds_tags[] = { +@@ -372,689 +373,689 @@ + }; + + static const value_string ncp_rights_vals[] = { +- { 0x00, "No Rights"}, +- { 0x01, "Read"}, +- { 0x02, "Write"}, +- { 0x03, "Read, Write"}, +- { 0x04, "Deny Read"}, +- { 0x05, "Read, Deny Read"}, +- { 0x06, "Write, Deny Read"}, +- { 0x07, "Read, Write, Deny Read"}, +- { 0x08, "Deny Write"}, +- { 0x09, "Read, Deny Write"}, +- { 0x0a, "Write, Deny Write"}, +- { 0x0b, "Read, Write, Deny Write"}, +- { 0x0c, "Deny Read, Deny Write"}, +- { 0x0d, "Read, Deny Read, Deny Write"}, +- { 0x0e, "Write, Deny Read, Deny Write"}, +- { 0x0f, "Read, Write, Deny Read, Deny Write"}, +- { 0x10, "Compatibility"}, +- { 0x11, "Read, Compatibility"}, +- { 0x12, "Write, Compatibility"}, +- { 0x13, "Read, Write, Compatibility"}, +- { 0x14, "Deny Read, Compatibility"}, +- { 0x15, "Read, Deny Read, Compatibility"}, +- { 0x16, "Write, Deny Read, Compatibility"}, +- { 0x17, "Read, Write, Deny Read, Compatibility"}, +- { 0x18, "Deny Write, Compatibility"}, +- { 0x19, "Read, Deny Write, Compatibility"}, +- { 0x1a, "Write, Deny Write, Compatibility"}, +- { 0x1b, "Read, Write, Deny Write, Compatibility"}, +- { 0x1c, "Deny Read, Deny Write, Compatibility"}, +- { 0x1d, "Read, Deny Read, Deny Write, Compatibility"}, +- { 0x1e, "Write, Deny Read, Deny Write, Compatibility"}, +- { 0x1f, "Read, Write, Deny Read, Deny Write, Compatibility"}, +- { 0x40, "File Write Through"}, +- { 0x41, "Read, File Write Through"}, +- { 0x42, "Write, File Write Through"}, +- { 0x43, "Read, Write, File Write Through"}, +- { 0x44, "Deny Read, File Write Through"}, +- { 0x45, "Read, Deny Read, File Write Through"}, +- { 0x46, "Write, Deny Read, File Write Through"}, +- { 0x47, "Read, Write, Deny Read, File Write Through"}, +- { 0x48, "Deny Write, File Write Through"}, +- { 0x49, "Read, Deny Write, File Write Through"}, +- { 0x4a, "Write, Deny Write, File Write Through"}, +- { 0x4b, "Read, Write, Deny Write, File Write Through"}, +- { 0x4c, "Deny Read, Deny Write, File Write Through"}, +- { 0x4d, "Read, Deny Read, Deny Write, File Write Through"}, +- { 0x4e, "Write, Deny Read, Deny Write, File Write Through"}, +- { 0x4f, "Read, Write, Deny Read, Deny Write, File Write Through"}, +- { 0x50, "Compatibility, File Write Through"}, +- { 0x51, "Read, Compatibility, File Write Through"}, +- { 0x52, "Write, Compatibility, File Write Through"}, +- { 0x53, "Read, Write, Compatibility, File Write Through"}, +- { 0x54, "Deny Read, Compatibility, File Write Through"}, +- { 0x55, "Read, Deny Read, Compatibility, File Write Through"}, +- { 0x56, "Write, Deny Read, Compatibility, File Write Through"}, +- { 0x57, "Read, Write, Deny Read, Compatibility, File Write Through"}, +- { 0x58, "Deny Write, Compatibility, File Write Through"}, +- { 0x59, "Read, Deny Write, Compatibility, File Write Through"}, +- { 0x5a, "Write, Deny Write, Compatibility, File Write Through"}, +- { 0x5b, "Read, Write, Deny Write, Compatibility, File Write Through"}, +- { 0x5c, "Deny Read, Deny Write, Compatibility, File Write Through"}, +- { 0x5d, "Read, Deny Read, Deny Write, Compatibility, File Write Through"}, +- { 0x5e, "Write, Deny Read, Deny Write, Compatibility, File Write Through"}, +- { 0x5f, "Read, Write, Deny Read, Deny Write, Compatibility, File Write Through"}, +- { 0, NULL } ++ { 0x00, "No Rights"}, ++ { 0x01, "Read"}, ++ { 0x02, "Write"}, ++ { 0x03, "Read, Write"}, ++ { 0x04, "Deny Read"}, ++ { 0x05, "Read, Deny Read"}, ++ { 0x06, "Write, Deny Read"}, ++ { 0x07, "Read, Write, Deny Read"}, ++ { 0x08, "Deny Write"}, ++ { 0x09, "Read, Deny Write"}, ++ { 0x0a, "Write, Deny Write"}, ++ { 0x0b, "Read, Write, Deny Write"}, ++ { 0x0c, "Deny Read, Deny Write"}, ++ { 0x0d, "Read, Deny Read, Deny Write"}, ++ { 0x0e, "Write, Deny Read, Deny Write"}, ++ { 0x0f, "Read, Write, Deny Read, Deny Write"}, ++ { 0x10, "Compatibility"}, ++ { 0x11, "Read, Compatibility"}, ++ { 0x12, "Write, Compatibility"}, ++ { 0x13, "Read, Write, Compatibility"}, ++ { 0x14, "Deny Read, Compatibility"}, ++ { 0x15, "Read, Deny Read, Compatibility"}, ++ { 0x16, "Write, Deny Read, Compatibility"}, ++ { 0x17, "Read, Write, Deny Read, Compatibility"}, ++ { 0x18, "Deny Write, Compatibility"}, ++ { 0x19, "Read, Deny Write, Compatibility"}, ++ { 0x1a, "Write, Deny Write, Compatibility"}, ++ { 0x1b, "Read, Write, Deny Write, Compatibility"}, ++ { 0x1c, "Deny Read, Deny Write, Compatibility"}, ++ { 0x1d, "Read, Deny Read, Deny Write, Compatibility"}, ++ { 0x1e, "Write, Deny Read, Deny Write, Compatibility"}, ++ { 0x1f, "Read, Write, Deny Read, Deny Write, Compatibility"}, ++ { 0x40, "File Write Through"}, ++ { 0x41, "Read, File Write Through"}, ++ { 0x42, "Write, File Write Through"}, ++ { 0x43, "Read, Write, File Write Through"}, ++ { 0x44, "Deny Read, File Write Through"}, ++ { 0x45, "Read, Deny Read, File Write Through"}, ++ { 0x46, "Write, Deny Read, File Write Through"}, ++ { 0x47, "Read, Write, Deny Read, File Write Through"}, ++ { 0x48, "Deny Write, File Write Through"}, ++ { 0x49, "Read, Deny Write, File Write Through"}, ++ { 0x4a, "Write, Deny Write, File Write Through"}, ++ { 0x4b, "Read, Write, Deny Write, File Write Through"}, ++ { 0x4c, "Deny Read, Deny Write, File Write Through"}, ++ { 0x4d, "Read, Deny Read, Deny Write, File Write Through"}, ++ { 0x4e, "Write, Deny Read, Deny Write, File Write Through"}, ++ { 0x4f, "Read, Write, Deny Read, Deny Write, File Write Through"}, ++ { 0x50, "Compatibility, File Write Through"}, ++ { 0x51, "Read, Compatibility, File Write Through"}, ++ { 0x52, "Write, Compatibility, File Write Through"}, ++ { 0x53, "Read, Write, Compatibility, File Write Through"}, ++ { 0x54, "Deny Read, Compatibility, File Write Through"}, ++ { 0x55, "Read, Deny Read, Compatibility, File Write Through"}, ++ { 0x56, "Write, Deny Read, Compatibility, File Write Through"}, ++ { 0x57, "Read, Write, Deny Read, Compatibility, File Write Through"}, ++ { 0x58, "Deny Write, Compatibility, File Write Through"}, ++ { 0x59, "Read, Deny Write, Compatibility, File Write Through"}, ++ { 0x5a, "Write, Deny Write, Compatibility, File Write Through"}, ++ { 0x5b, "Read, Write, Deny Write, Compatibility, File Write Through"}, ++ { 0x5c, "Deny Read, Deny Write, Compatibility, File Write Through"}, ++ { 0x5d, "Read, Deny Read, Deny Write, Compatibility, File Write Through"}, ++ { 0x5e, "Write, Deny Read, Deny Write, Compatibility, File Write Through"}, ++ { 0x5f, "Read, Write, Deny Read, Deny Write, Compatibility, File Write Through"}, ++ { 0, NULL } + }; + + static const value_string open_create_mode_vals[] = { +- { 0x01, "Open"}, +- { 0x02, "Replace"}, +- { 0x03, "Open, Replace"}, +- { 0x08, "Create"}, +- { 0x09, "Open, Create"}, +- { 0x0a, "Replace, Create"}, +- { 0x0b, "Open, Replace, Create"}, +- { 0x20, "64-bit"}, +- { 0x21, "Open, 64-bit"}, +- { 0x22, "Replace, 64-bit"}, +- { 0x23, "Open, Replace, 64-bit"}, +- { 0x28, "Create, 64-bit"}, +- { 0x29, "Open, Create, 64-bit"}, +- { 0x2a, "Replace, Create, 64-bit"}, +- { 0x2b, "Open, Replace, Create, 64-bit"}, +- { 0x40, "Read Only"}, +- { 0x41, "Open, Read Only"}, +- { 0x42, "Replace, Read Only"}, +- { 0x43, "Open, Replace, Read Only"}, +- { 0x48, "Create, Read Only"}, +- { 0x49, "Open, Create, Read Only"}, +- { 0x4a, "Replace, Create, Read Only"}, +- { 0x4b, "Open, Replace, Create, Read Only"}, +- { 0x60, "64-bit, Read Only"}, +- { 0x61, "Open, 64-bit, Read Only"}, +- { 0x62, "Replace, 64-bit, Read Only"}, +- { 0x63, "Open, Replace, 64-bit, Read Only"}, +- { 0x68, "Create, 64-bit, Read Only"}, +- { 0x69, "Open, Create, 64-bit, Read Only"}, +- { 0x6a, "Replace, Create, 64-bit, Read Only"}, +- { 0x6b, "Open, Replace, Create, 64-bit, Read Only"}, +- { 0x80, "Op-Lock"}, +- { 0x81, "Open, Op-Lock"}, +- { 0x82, "Replace, Op-Lock"}, +- { 0x83, "Open, Replace, Op-Lock"}, +- { 0x88, "Create, Op-Lock"}, +- { 0x89, "Open, Create, Op-Lock"}, +- { 0x8a, "Replace, Create, Op-Lock"}, +- { 0x8b, "Open, Replace, Create, Op-Lock"}, +- { 0xa0, "64-bit, Op-Lock"}, +- { 0xa1, "Open, 64-bit, Op-Lock"}, +- { 0xa2, "Replace, 64-bit, Op-Lock"}, +- { 0xa3, "Open, Replace, 64-bit, Op-Lock"}, +- { 0xa8, "Create, 64-bit, Op-Lock"}, +- { 0xa9, "Open, Create, 64-bit, Op-Lock"}, +- { 0xaa, "Replace, Create, 64-bit, Op-Lock"}, +- { 0xab, "Open, Replace, Create, 64-bit, Op-Lock"}, +- { 0xc0, "Read Only, Op-Lock"}, +- { 0xc1, "Open, Read Only, Op-Lock"}, +- { 0xc2, "Replace, Read Only, Op-Lock"}, +- { 0xc3, "Open, Replace, Read Only, Op-Lock"}, +- { 0xc8, "Create, Read Only, Op-Lock"}, +- { 0xc9, "Open, Create, Read Only, Op-Lock"}, +- { 0xca, "Replace, Create, Read Only, Op-Lock"}, +- { 0xcb, "Open, Replace, Create, Read Only, Op-Lock"}, +- { 0xe0, "64-bit, Read Only, Op-Lock"}, +- { 0xe1, "Open, 64-bit, Read Only, Op-Lock"}, +- { 0xe2, "Replace, 64-bit, Read Only, Op-Lock"}, +- { 0xe3, "Open, Replace, 64-bit, Read Only, Op-Lock"}, +- { 0xe8, "Create, 64-bit, Read Only, Op-Lock"}, +- { 0xe9, "Open, Create, 64-bit, Read Only, Op-Lock"}, +- { 0xea, "Replace, Create, 64-bit, Read Only, Op-Lock"}, +- { 0xeb, "Open, Replace, Create, 64-bit, Read Only, Op-Lock"}, +- { 0, NULL } ++ { 0x01, "Open"}, ++ { 0x02, "Replace"}, ++ { 0x03, "Open, Replace"}, ++ { 0x08, "Create"}, ++ { 0x09, "Open, Create"}, ++ { 0x0a, "Replace, Create"}, ++ { 0x0b, "Open, Replace, Create"}, ++ { 0x20, "64-bit"}, ++ { 0x21, "Open, 64-bit"}, ++ { 0x22, "Replace, 64-bit"}, ++ { 0x23, "Open, Replace, 64-bit"}, ++ { 0x28, "Create, 64-bit"}, ++ { 0x29, "Open, Create, 64-bit"}, ++ { 0x2a, "Replace, Create, 64-bit"}, ++ { 0x2b, "Open, Replace, Create, 64-bit"}, ++ { 0x40, "Read Only"}, ++ { 0x41, "Open, Read Only"}, ++ { 0x42, "Replace, Read Only"}, ++ { 0x43, "Open, Replace, Read Only"}, ++ { 0x48, "Create, Read Only"}, ++ { 0x49, "Open, Create, Read Only"}, ++ { 0x4a, "Replace, Create, Read Only"}, ++ { 0x4b, "Open, Replace, Create, Read Only"}, ++ { 0x60, "64-bit, Read Only"}, ++ { 0x61, "Open, 64-bit, Read Only"}, ++ { 0x62, "Replace, 64-bit, Read Only"}, ++ { 0x63, "Open, Replace, 64-bit, Read Only"}, ++ { 0x68, "Create, 64-bit, Read Only"}, ++ { 0x69, "Open, Create, 64-bit, Read Only"}, ++ { 0x6a, "Replace, Create, 64-bit, Read Only"}, ++ { 0x6b, "Open, Replace, Create, 64-bit, Read Only"}, ++ { 0x80, "Op-Lock"}, ++ { 0x81, "Open, Op-Lock"}, ++ { 0x82, "Replace, Op-Lock"}, ++ { 0x83, "Open, Replace, Op-Lock"}, ++ { 0x88, "Create, Op-Lock"}, ++ { 0x89, "Open, Create, Op-Lock"}, ++ { 0x8a, "Replace, Create, Op-Lock"}, ++ { 0x8b, "Open, Replace, Create, Op-Lock"}, ++ { 0xa0, "64-bit, Op-Lock"}, ++ { 0xa1, "Open, 64-bit, Op-Lock"}, ++ { 0xa2, "Replace, 64-bit, Op-Lock"}, ++ { 0xa3, "Open, Replace, 64-bit, Op-Lock"}, ++ { 0xa8, "Create, 64-bit, Op-Lock"}, ++ { 0xa9, "Open, Create, 64-bit, Op-Lock"}, ++ { 0xaa, "Replace, Create, 64-bit, Op-Lock"}, ++ { 0xab, "Open, Replace, Create, 64-bit, Op-Lock"}, ++ { 0xc0, "Read Only, Op-Lock"}, ++ { 0xc1, "Open, Read Only, Op-Lock"}, ++ { 0xc2, "Replace, Read Only, Op-Lock"}, ++ { 0xc3, "Open, Replace, Read Only, Op-Lock"}, ++ { 0xc8, "Create, Read Only, Op-Lock"}, ++ { 0xc9, "Open, Create, Read Only, Op-Lock"}, ++ { 0xca, "Replace, Create, Read Only, Op-Lock"}, ++ { 0xcb, "Open, Replace, Create, Read Only, Op-Lock"}, ++ { 0xe0, "64-bit, Read Only, Op-Lock"}, ++ { 0xe1, "Open, 64-bit, Read Only, Op-Lock"}, ++ { 0xe2, "Replace, 64-bit, Read Only, Op-Lock"}, ++ { 0xe3, "Open, Replace, 64-bit, Read Only, Op-Lock"}, ++ { 0xe8, "Create, 64-bit, Read Only, Op-Lock"}, ++ { 0xe9, "Open, Create, 64-bit, Read Only, Op-Lock"}, ++ { 0xea, "Replace, Create, 64-bit, Read Only, Op-Lock"}, ++ { 0xeb, "Open, Replace, Create, 64-bit, Read Only, Op-Lock"}, ++ { 0, NULL } + }; + + static const value_string open_create_action_vals[] = { +- { 0x01, "Opened"}, +- { 0x02, "Created"}, +- { 0x03, "Opened, Created"}, +- { 0x04, "Replaced"}, +- { 0x05, "Opened, Replaced"}, +- { 0x06, "Created, Replaced"}, +- { 0x07, "Opened, Created, Replaced"}, +- { 0x08, "Compressed"}, +- { 0x09, "Opened, Compressed"}, +- { 0x0a, "Created, Compressed"}, +- { 0x0b, "Opened, Created, Compressed"}, +- { 0x0c, "Replaced, Compressed"}, +- { 0x0d, "Opened, Replaced, Compressed"}, +- { 0x0e, "Created, Replaced, Compressed"}, +- { 0x0f, "Opened, Created, Replaced, Compressed"}, +- { 0x80, "Read Only"}, +- { 0x81, "Opened, Read Only"}, +- { 0x82, "Created, Read Only"}, +- { 0x83, "Opened, Created, Read Only"}, +- { 0x84, "Replaced, Read Only"}, +- { 0x85, "Opened, Replaced, Read Only"}, +- { 0x86, "Created, Replaced, Read Only"}, +- { 0x87, "Opened, Created, Replaced, Read Only"}, +- { 0x88, "Compressed, Read Only"}, +- { 0x89, "Opened, Compressed, Read Only"}, +- { 0x8a, "Created, Compressed, Read Only"}, +- { 0x8b, "Opened, Created, Compressed, Read Only"}, +- { 0x8c, "Replaced, Compressed, Read Only"}, +- { 0x8d, "Opened, Replaced, Compressed, Read Only"}, +- { 0x8e, "Created, Replaced, Compressed, Read Only"}, +- { 0x8f, "Opened, Created, Replaced, Compressed, Read Only"}, +- { 0, NULL } ++ { 0x01, "Opened"}, ++ { 0x02, "Created"}, ++ { 0x03, "Opened, Created"}, ++ { 0x04, "Replaced"}, ++ { 0x05, "Opened, Replaced"}, ++ { 0x06, "Created, Replaced"}, ++ { 0x07, "Opened, Created, Replaced"}, ++ { 0x08, "Compressed"}, ++ { 0x09, "Opened, Compressed"}, ++ { 0x0a, "Created, Compressed"}, ++ { 0x0b, "Opened, Created, Compressed"}, ++ { 0x0c, "Replaced, Compressed"}, ++ { 0x0d, "Opened, Replaced, Compressed"}, ++ { 0x0e, "Created, Replaced, Compressed"}, ++ { 0x0f, "Opened, Created, Replaced, Compressed"}, ++ { 0x80, "Read Only"}, ++ { 0x81, "Opened, Read Only"}, ++ { 0x82, "Created, Read Only"}, ++ { 0x83, "Opened, Created, Read Only"}, ++ { 0x84, "Replaced, Read Only"}, ++ { 0x85, "Opened, Replaced, Read Only"}, ++ { 0x86, "Created, Replaced, Read Only"}, ++ { 0x87, "Opened, Created, Replaced, Read Only"}, ++ { 0x88, "Compressed, Read Only"}, ++ { 0x89, "Opened, Compressed, Read Only"}, ++ { 0x8a, "Created, Compressed, Read Only"}, ++ { 0x8b, "Opened, Created, Compressed, Read Only"}, ++ { 0x8c, "Replaced, Compressed, Read Only"}, ++ { 0x8d, "Opened, Replaced, Compressed, Read Only"}, ++ { 0x8e, "Created, Replaced, Compressed, Read Only"}, ++ { 0x8f, "Opened, Created, Replaced, Compressed, Read Only"}, ++ { 0, NULL } + }; + + static const value_string access_rights_vals[] = { +- { 0x0000, "No Rights"}, ++ { 0x0000, "No Rights"}, + { 0x0001, "Read"}, +- { 0x0002, "Write"}, +- { 0x0003, "Read, Write"}, +- { 0x0004, "Open"}, ++ { 0x0002, "Write"}, ++ { 0x0003, "Read, Write"}, ++ { 0x0004, "Open"}, + { 0x0005, "Read, Open"}, +- { 0x0006, "Write, Open"}, +- { 0x0007, "Read, Write, Open"}, +- { 0x0008, "Create"}, ++ { 0x0006, "Write, Open"}, ++ { 0x0007, "Read, Write, Open"}, ++ { 0x0008, "Create"}, + { 0x0009, "Read, Create"}, +- { 0x000a, "Write, Create"}, +- { 0x000b, "Read, Write, Create"}, +- { 0x000c, "Open, Create"}, ++ { 0x000a, "Write, Create"}, ++ { 0x000b, "Read, Write, Create"}, ++ { 0x000c, "Open, Create"}, + { 0x000d, "Read, Open, Create"}, +- { 0x000e, "Write, Open, Create"}, +- { 0x000f, "Read, Write, Open, Create"}, +- { 0x0010, "Delete"}, ++ { 0x000e, "Write, Open, Create"}, ++ { 0x000f, "Read, Write, Open, Create"}, ++ { 0x0010, "Delete"}, + { 0x0011, "Read, Delete"}, +- { 0x0012, "Write, Delete"}, +- { 0x0013, "Read, Write, Delete"}, +- { 0x0014, "Open, Delete"}, ++ { 0x0012, "Write, Delete"}, ++ { 0x0013, "Read, Write, Delete"}, ++ { 0x0014, "Open, Delete"}, + { 0x0015, "Read, Open, Delete"}, +- { 0x0016, "Write, Open, Delete"}, +- { 0x0017, "Read, Write, Open, Delete"}, +- { 0x0018, "Create, Delete"}, ++ { 0x0016, "Write, Open, Delete"}, ++ { 0x0017, "Read, Write, Open, Delete"}, ++ { 0x0018, "Create, Delete"}, + { 0x0019, "Read, Create, Delete"}, +- { 0x001a, "Write, Create, Delete"}, +- { 0x001b, "Read, Write, Create, Delete"}, +- { 0x001c, "Open, Create, Delete"}, ++ { 0x001a, "Write, Create, Delete"}, ++ { 0x001b, "Read, Write, Create, Delete"}, ++ { 0x001c, "Open, Create, Delete"}, + { 0x001d, "Read, Open, Create, Delete"}, +- { 0x001e, "Write, Open, Create, Delete"}, +- { 0x001f, "Read, Write, Open, Create, Delete"}, +- { 0x0020, "Parental"}, ++ { 0x001e, "Write, Open, Create, Delete"}, ++ { 0x001f, "Read, Write, Open, Create, Delete"}, ++ { 0x0020, "Parental"}, + { 0x0021, "Read, Parental"}, +- { 0x0022, "Write, Parental"}, +- { 0x0023, "Read, Write, Parental"}, +- { 0x0024, "Open, Parental"}, ++ { 0x0022, "Write, Parental"}, ++ { 0x0023, "Read, Write, Parental"}, ++ { 0x0024, "Open, Parental"}, + { 0x0025, "Read, Open, Parental"}, +- { 0x0026, "Write, Open, Parental"}, +- { 0x0027, "Read, Write, Open, Parental"}, +- { 0x0028, "Create, Parental"}, ++ { 0x0026, "Write, Open, Parental"}, ++ { 0x0027, "Read, Write, Open, Parental"}, ++ { 0x0028, "Create, Parental"}, + { 0x0029, "Read, Create, Parental"}, +- { 0x002a, "Write, Create, Parental"}, +- { 0x002b, "Read, Write, Create, Parental"}, +- { 0x002c, "Open, Create, Parental"}, ++ { 0x002a, "Write, Create, Parental"}, ++ { 0x002b, "Read, Write, Create, Parental"}, ++ { 0x002c, "Open, Create, Parental"}, + { 0x002d, "Read, Open, Create, Parental"}, +- { 0x002e, "Write, Open, Create, Parental"}, +- { 0x002f, "Read, Write, Open, Create, Parental"}, +- { 0x0030, "Delete, Parental"}, ++ { 0x002e, "Write, Open, Create, Parental"}, ++ { 0x002f, "Read, Write, Open, Create, Parental"}, ++ { 0x0030, "Delete, Parental"}, + { 0x0031, "Read, Delete, Parental"}, +- { 0x0032, "Write, Delete, Parental"}, +- { 0x0033, "Read, Write, Delete, Parental"}, +- { 0x0034, "Open, Delete, Parental"}, ++ { 0x0032, "Write, Delete, Parental"}, ++ { 0x0033, "Read, Write, Delete, Parental"}, ++ { 0x0034, "Open, Delete, Parental"}, + { 0x0035, "Read, Open, Delete, Parental"}, +- { 0x0036, "Write, Open, Delete, Parental"}, +- { 0x0037, "Read, Write, Open, Delete, Parental"}, +- { 0x0038, "Create, Delete, Parental"}, ++ { 0x0036, "Write, Open, Delete, Parental"}, ++ { 0x0037, "Read, Write, Open, Delete, Parental"}, ++ { 0x0038, "Create, Delete, Parental"}, + { 0x0039, "Read, Create, Delete, Parental"}, +- { 0x003a, "Write, Create, Delete, Parental"}, +- { 0x003b, "Read, Write, Create, Delete, Parental"}, +- { 0x003c, "Open, Create, Delete, Parental"}, ++ { 0x003a, "Write, Create, Delete, Parental"}, ++ { 0x003b, "Read, Write, Create, Delete, Parental"}, ++ { 0x003c, "Open, Create, Delete, Parental"}, + { 0x003d, "Read, Open, Create, Delete, Parental"}, +- { 0x003e, "Write, Open, Create, Delete, Parental"}, +- { 0x003f, "Read, Write, Open, Create, Delete, Parental"}, +- { 0x0040, "Search"}, ++ { 0x003e, "Write, Open, Create, Delete, Parental"}, ++ { 0x003f, "Read, Write, Open, Create, Delete, Parental"}, ++ { 0x0040, "Search"}, + { 0x0041, "Read, Search"}, +- { 0x0042, "Write, Search"}, +- { 0x0043, "Read, Write, Search"}, +- { 0x0044, "Open, Search"}, ++ { 0x0042, "Write, Search"}, ++ { 0x0043, "Read, Write, Search"}, ++ { 0x0044, "Open, Search"}, + { 0x0045, "Read, Open, Search"}, +- { 0x0046, "Write, Open, Search"}, +- { 0x0047, "Read, Write, Open, Search"}, +- { 0x0048, "Create, Search"}, ++ { 0x0046, "Write, Open, Search"}, ++ { 0x0047, "Read, Write, Open, Search"}, ++ { 0x0048, "Create, Search"}, + { 0x0049, "Read, Create, Search"}, +- { 0x004a, "Write, Create, Search"}, +- { 0x004b, "Read, Write, Create, Search"}, +- { 0x004c, "Open, Create, Search"}, ++ { 0x004a, "Write, Create, Search"}, ++ { 0x004b, "Read, Write, Create, Search"}, ++ { 0x004c, "Open, Create, Search"}, + { 0x004d, "Read, Open, Create, Search"}, +- { 0x004e, "Write, Open, Create, Search"}, +- { 0x004f, "Read, Write, Open, Create, Search"}, +- { 0x0050, "Delete, Search"}, ++ { 0x004e, "Write, Open, Create, Search"}, ++ { 0x004f, "Read, Write, Open, Create, Search"}, ++ { 0x0050, "Delete, Search"}, + { 0x0051, "Read, Delete, Search"}, +- { 0x0052, "Write, Delete, Search"}, +- { 0x0053, "Read, Write, Delete, Search"}, +- { 0x0054, "Open, Delete, Search"}, ++ { 0x0052, "Write, Delete, Search"}, ++ { 0x0053, "Read, Write, Delete, Search"}, ++ { 0x0054, "Open, Delete, Search"}, + { 0x0055, "Read, Open, Delete, Search"}, +- { 0x0056, "Write, Open, Delete, Search"}, +- { 0x0057, "Read, Write, Open, Delete, Search"}, +- { 0x0058, "Create, Delete, Search"}, ++ { 0x0056, "Write, Open, Delete, Search"}, ++ { 0x0057, "Read, Write, Open, Delete, Search"}, ++ { 0x0058, "Create, Delete, Search"}, + { 0x0059, "Read, Create, Delete, Search"}, +- { 0x005a, "Write, Create, Delete, Search"}, +- { 0x005b, "Read, Write, Create, Delete, Search"}, +- { 0x005c, "Open, Create, Delete, Search"}, ++ { 0x005a, "Write, Create, Delete, Search"}, ++ { 0x005b, "Read, Write, Create, Delete, Search"}, ++ { 0x005c, "Open, Create, Delete, Search"}, + { 0x005d, "Read, Open, Create, Delete, Search"}, +- { 0x005e, "Write, Open, Create, Delete, Search"}, +- { 0x005f, "Read, Write, Open, Create, Delete, Search"}, +- { 0x0060, "Parental, Search"}, ++ { 0x005e, "Write, Open, Create, Delete, Search"}, ++ { 0x005f, "Read, Write, Open, Create, Delete, Search"}, ++ { 0x0060, "Parental, Search"}, + { 0x0061, "Read, Parental, Search"}, +- { 0x0062, "Write, Parental, Search"}, +- { 0x0063, "Read, Write, Parental, Search"}, +- { 0x0064, "Open, Parental, Search"}, ++ { 0x0062, "Write, Parental, Search"}, ++ { 0x0063, "Read, Write, Parental, Search"}, ++ { 0x0064, "Open, Parental, Search"}, + { 0x0065, "Read, Open, Parental, Search"}, +- { 0x0066, "Write, Open, Parental, Search"}, +- { 0x0067, "Read, Write, Open, Parental, Search"}, +- { 0x0068, "Create, Parental, Search"}, ++ { 0x0066, "Write, Open, Parental, Search"}, ++ { 0x0067, "Read, Write, Open, Parental, Search"}, ++ { 0x0068, "Create, Parental, Search"}, + { 0x0069, "Read, Create, Parental, Search"}, +- { 0x006a, "Write, Create, Parental, Search"}, +- { 0x006b, "Read, Write, Create, Parental, Search"}, +- { 0x006c, "Open, Create, Parental, Search"}, ++ { 0x006a, "Write, Create, Parental, Search"}, ++ { 0x006b, "Read, Write, Create, Parental, Search"}, ++ { 0x006c, "Open, Create, Parental, Search"}, + { 0x006d, "Read, Open, Create, Parental, Search"}, +- { 0x006e, "Write, Open, Create, Parental, Search"}, +- { 0x006f, "Read, Write, Open, Create, Parental, Search"}, +- { 0x0070, "Delete, Parental, Search"}, ++ { 0x006e, "Write, Open, Create, Parental, Search"}, ++ { 0x006f, "Read, Write, Open, Create, Parental, Search"}, ++ { 0x0070, "Delete, Parental, Search"}, + { 0x0071, "Read, Delete, Parental, Search"}, +- { 0x0072, "Write, Delete, Parental, Search"}, +- { 0x0073, "Read, Write, Delete, Parental, Search"}, +- { 0x0074, "Open, Delete, Parental, Search"}, ++ { 0x0072, "Write, Delete, Parental, Search"}, ++ { 0x0073, "Read, Write, Delete, Parental, Search"}, ++ { 0x0074, "Open, Delete, Parental, Search"}, + { 0x0075, "Read, Open, Delete, Parental, Search"}, +- { 0x0076, "Write, Open, Delete, Parental, Search"}, +- { 0x0077, "Read, Write, Open, Delete, Parental, Search"}, +- { 0x0078, "Create, Delete, Parental, Search"}, ++ { 0x0076, "Write, Open, Delete, Parental, Search"}, ++ { 0x0077, "Read, Write, Open, Delete, Parental, Search"}, ++ { 0x0078, "Create, Delete, Parental, Search"}, + { 0x0079, "Read, Create, Delete, Parental, Search"}, +- { 0x007a, "Write, Create, Delete, Parental, Search"}, +- { 0x007b, "Read, Write, Create, Delete, Parental, Search"}, +- { 0x007c, "Open, Create, Delete, Parental, Search"}, ++ { 0x007a, "Write, Create, Delete, Parental, Search"}, ++ { 0x007b, "Read, Write, Create, Delete, Parental, Search"}, ++ { 0x007c, "Open, Create, Delete, Parental, Search"}, + { 0x007d, "Read, Open, Create, Delete, Parental, Search"}, +- { 0x007e, "Write, Open, Create, Delete, Parental, Search"}, +- { 0x007f, "Read, Write, Open, Create, Delete, Parental, Search"}, +- { 0x0080, "Modify"}, ++ { 0x007e, "Write, Open, Create, Delete, Parental, Search"}, ++ { 0x007f, "Read, Write, Open, Create, Delete, Parental, Search"}, ++ { 0x0080, "Modify"}, + { 0x0081, "Read, Modify"}, +- { 0x0082, "Write, Modify"}, +- { 0x0083, "Read, Write, Modify"}, +- { 0x0084, "Open, Modify"}, ++ { 0x0082, "Write, Modify"}, ++ { 0x0083, "Read, Write, Modify"}, ++ { 0x0084, "Open, Modify"}, + { 0x0085, "Read, Open, Modify"}, +- { 0x0086, "Write, Open, Modify"}, +- { 0x0087, "Read, Write, Open, Modify"}, +- { 0x0088, "Create, Modify"}, ++ { 0x0086, "Write, Open, Modify"}, ++ { 0x0087, "Read, Write, Open, Modify"}, ++ { 0x0088, "Create, Modify"}, + { 0x0089, "Read, Create, Modify"}, +- { 0x008a, "Write, Create, Modify"}, +- { 0x008b, "Read, Write, Create, Modify"}, +- { 0x008c, "Open, Create, Modify"}, ++ { 0x008a, "Write, Create, Modify"}, ++ { 0x008b, "Read, Write, Create, Modify"}, ++ { 0x008c, "Open, Create, Modify"}, + { 0x008d, "Read, Open, Create, Modify"}, +- { 0x008e, "Write, Open, Create, Modify"}, +- { 0x008f, "Read, Write, Open, Create, Modify"}, +- { 0x0090, "Delete, Modify"}, ++ { 0x008e, "Write, Open, Create, Modify"}, ++ { 0x008f, "Read, Write, Open, Create, Modify"}, ++ { 0x0090, "Delete, Modify"}, + { 0x0091, "Read, Delete, Modify"}, +- { 0x0092, "Write, Delete, Modify"}, +- { 0x0093, "Read, Write, Delete, Modify"}, +- { 0x0094, "Open, Delete, Modify"}, ++ { 0x0092, "Write, Delete, Modify"}, ++ { 0x0093, "Read, Write, Delete, Modify"}, ++ { 0x0094, "Open, Delete, Modify"}, + { 0x0095, "Read, Open, Delete, Modify"}, +- { 0x0096, "Write, Open, Delete, Modify"}, +- { 0x0097, "Read, Write, Open, Delete, Modify"}, +- { 0x0098, "Create, Delete, Modify"}, ++ { 0x0096, "Write, Open, Delete, Modify"}, ++ { 0x0097, "Read, Write, Open, Delete, Modify"}, ++ { 0x0098, "Create, Delete, Modify"}, + { 0x0099, "Read, Create, Delete, Modify"}, +- { 0x009a, "Write, Create, Delete, Modify"}, +- { 0x009b, "Read, Write, Create, Delete, Modify"}, +- { 0x009c, "Open, Create, Delete, Modify"}, ++ { 0x009a, "Write, Create, Delete, Modify"}, ++ { 0x009b, "Read, Write, Create, Delete, Modify"}, ++ { 0x009c, "Open, Create, Delete, Modify"}, + { 0x009d, "Read, Open, Create, Delete, Modify"}, +- { 0x009e, "Write, Open, Create, Delete, Modify"}, +- { 0x009f, "Read, Write, Open, Create, Delete, Modify"}, +- { 0x00a0, "Parental, Modify"}, ++ { 0x009e, "Write, Open, Create, Delete, Modify"}, ++ { 0x009f, "Read, Write, Open, Create, Delete, Modify"}, ++ { 0x00a0, "Parental, Modify"}, + { 0x00a1, "Read, Parental, Modify"}, +- { 0x00a2, "Write, Parental, Modify"}, +- { 0x00a3, "Read, Write, Parental, Modify"}, +- { 0x00a4, "Open, Parental, Modify"}, ++ { 0x00a2, "Write, Parental, Modify"}, ++ { 0x00a3, "Read, Write, Parental, Modify"}, ++ { 0x00a4, "Open, Parental, Modify"}, + { 0x00a5, "Read, Open, Parental, Modify"}, +- { 0x00a6, "Write, Open, Parental, Modify"}, +- { 0x00a7, "Read, Write, Open, Parental, Modify"}, +- { 0x00a8, "Create, Parental, Modify"}, ++ { 0x00a6, "Write, Open, Parental, Modify"}, ++ { 0x00a7, "Read, Write, Open, Parental, Modify"}, ++ { 0x00a8, "Create, Parental, Modify"}, + { 0x00a9, "Read, Create, Parental, Modify"}, +- { 0x00aa, "Write, Create, Parental, Modify"}, +- { 0x00ab, "Read, Write, Create, Parental, Modify"}, +- { 0x00ac, "Open, Create, Parental, Modify"}, ++ { 0x00aa, "Write, Create, Parental, Modify"}, ++ { 0x00ab, "Read, Write, Create, Parental, Modify"}, ++ { 0x00ac, "Open, Create, Parental, Modify"}, + { 0x00ad, "Read, Open, Create, Parental, Modify"}, +- { 0x00ae, "Write, Open, Create, Parental, Modify"}, +- { 0x00af, "Read, Write, Open, Create, Parental, Modify"}, +- { 0x00b0, "Delete, Parental, Modify"}, ++ { 0x00ae, "Write, Open, Create, Parental, Modify"}, ++ { 0x00af, "Read, Write, Open, Create, Parental, Modify"}, ++ { 0x00b0, "Delete, Parental, Modify"}, + { 0x00b1, "Read, Delete, Parental, Modify"}, +- { 0x00b2, "Write, Delete, Parental, Modify"}, +- { 0x00b3, "Read, Write, Delete, Parental, Modify"}, +- { 0x00b4, "Open, Delete, Parental, Modify"}, ++ { 0x00b2, "Write, Delete, Parental, Modify"}, ++ { 0x00b3, "Read, Write, Delete, Parental, Modify"}, ++ { 0x00b4, "Open, Delete, Parental, Modify"}, + { 0x00b5, "Read, Open, Delete, Parental, Modify"}, +- { 0x00b6, "Write, Open, Delete, Parental, Modify"}, +- { 0x00b7, "Read, Write, Open, Delete, Parental, Modify"}, +- { 0x00b8, "Create, Delete, Parental, Modify"}, ++ { 0x00b6, "Write, Open, Delete, Parental, Modify"}, ++ { 0x00b7, "Read, Write, Open, Delete, Parental, Modify"}, ++ { 0x00b8, "Create, Delete, Parental, Modify"}, + { 0x00b9, "Read, Create, Delete, Parental, Modify"}, +- { 0x00ba, "Write, Create, Delete, Parental, Modify"}, +- { 0x00bb, "Read, Write, Create, Delete, Parental, Modify"}, +- { 0x00bc, "Open, Create, Delete, Parental, Modify"}, ++ { 0x00ba, "Write, Create, Delete, Parental, Modify"}, ++ { 0x00bb, "Read, Write, Create, Delete, Parental, Modify"}, ++ { 0x00bc, "Open, Create, Delete, Parental, Modify"}, + { 0x00bd, "Read, Open, Create, Delete, Parental, Modify"}, +- { 0x00be, "Write, Open, Create, Delete, Parental, Modify"}, +- { 0x00bf, "Read, Write, Open, Create, Delete, Parental, Modify"}, +- { 0x00c0, "Search, Modify"}, ++ { 0x00be, "Write, Open, Create, Delete, Parental, Modify"}, ++ { 0x00bf, "Read, Write, Open, Create, Delete, Parental, Modify"}, ++ { 0x00c0, "Search, Modify"}, + { 0x00c1, "Read, Search, Modify"}, +- { 0x00c2, "Write, Search, Modify"}, +- { 0x00c3, "Read, Write, Search, Modify"}, +- { 0x00c4, "Open, Search, Modify"}, ++ { 0x00c2, "Write, Search, Modify"}, ++ { 0x00c3, "Read, Write, Search, Modify"}, ++ { 0x00c4, "Open, Search, Modify"}, + { 0x00c5, "Read, Open, Search, Modify"}, +- { 0x00c6, "Write, Open, Search, Modify"}, +- { 0x00c7, "Read, Write, Open, Search, Modify"}, +- { 0x00c8, "Create, Search, Modify"}, ++ { 0x00c6, "Write, Open, Search, Modify"}, ++ { 0x00c7, "Read, Write, Open, Search, Modify"}, ++ { 0x00c8, "Create, Search, Modify"}, + { 0x00c9, "Read, Create, Search, Modify"}, +- { 0x00ca, "Write, Create, Search, Modify"}, +- { 0x00cb, "Read, Write, Create, Search, Modify"}, +- { 0x00cc, "Open, Create, Search, Modify"}, ++ { 0x00ca, "Write, Create, Search, Modify"}, ++ { 0x00cb, "Read, Write, Create, Search, Modify"}, ++ { 0x00cc, "Open, Create, Search, Modify"}, + { 0x00cd, "Read, Open, Create, Search, Modify"}, +- { 0x00ce, "Write, Open, Create, Search, Modify"}, +- { 0x00cf, "Read, Write, Open, Create, Search, Modify"}, +- { 0x00d0, "Delete, Search, Modify"}, ++ { 0x00ce, "Write, Open, Create, Search, Modify"}, ++ { 0x00cf, "Read, Write, Open, Create, Search, Modify"}, ++ { 0x00d0, "Delete, Search, Modify"}, + { 0x00d1, "Read, Delete, Search, Modify"}, +- { 0x00d2, "Write, Delete, Search, Modify"}, +- { 0x00d3, "Read, Write, Delete, Search, Modify"}, +- { 0x00d4, "Open, Delete, Search, Modify"}, ++ { 0x00d2, "Write, Delete, Search, Modify"}, ++ { 0x00d3, "Read, Write, Delete, Search, Modify"}, ++ { 0x00d4, "Open, Delete, Search, Modify"}, + { 0x00d5, "Read, Open, Delete, Search, Modify"}, +- { 0x00d6, "Write, Open, Delete, Search, Modify"}, +- { 0x00d7, "Read, Write, Open, Delete, Search, Modify"}, +- { 0x00d8, "Create, Delete, Search, Modify"}, ++ { 0x00d6, "Write, Open, Delete, Search, Modify"}, ++ { 0x00d7, "Read, Write, Open, Delete, Search, Modify"}, ++ { 0x00d8, "Create, Delete, Search, Modify"}, + { 0x00d9, "Read, Create, Delete, Search, Modify"}, +- { 0x00da, "Write, Create, Delete, Search, Modify"}, +- { 0x00db, "Read, Write, Create, Delete, Search, Modify"}, +- { 0x00dc, "Open, Create, Delete, Search, Modify"}, ++ { 0x00da, "Write, Create, Delete, Search, Modify"}, ++ { 0x00db, "Read, Write, Create, Delete, Search, Modify"}, ++ { 0x00dc, "Open, Create, Delete, Search, Modify"}, + { 0x00dd, "Read, Open, Create, Delete, Search, Modify"}, +- { 0x00de, "Write, Open, Create, Delete, Search, Modify"}, +- { 0x00df, "Read, Write, Open, Create, Delete, Search, Modify"}, +- { 0x00e0, "Parental, Search, Modify"}, ++ { 0x00de, "Write, Open, Create, Delete, Search, Modify"}, ++ { 0x00df, "Read, Write, Open, Create, Delete, Search, Modify"}, ++ { 0x00e0, "Parental, Search, Modify"}, + { 0x00e1, "Read, Parental, Search, Modify"}, +- { 0x00e2, "Write, Parental, Search, Modify"}, +- { 0x00e3, "Read, Write, Parental, Search, Modify"}, +- { 0x00e4, "Open, Parental, Search, Modify"}, ++ { 0x00e2, "Write, Parental, Search, Modify"}, ++ { 0x00e3, "Read, Write, Parental, Search, Modify"}, ++ { 0x00e4, "Open, Parental, Search, Modify"}, + { 0x00e5, "Read, Open, Parental, Search, Modify"}, +- { 0x00e6, "Write, Open, Parental, Search, Modify"}, +- { 0x00e7, "Read, Write, Open, Parental, Search, Modify"}, +- { 0x00e8, "Create, Parental, Search, Modify"}, ++ { 0x00e6, "Write, Open, Parental, Search, Modify"}, ++ { 0x00e7, "Read, Write, Open, Parental, Search, Modify"}, ++ { 0x00e8, "Create, Parental, Search, Modify"}, + { 0x00e9, "Read, Create, Parental, Search, Modify"}, +- { 0x00ea, "Write, Create, Parental, Search, Modify"}, +- { 0x00eb, "Read, Write, Create, Parental, Search, Modify"}, +- { 0x00ec, "Open, Create, Parental, Search, Modify"}, ++ { 0x00ea, "Write, Create, Parental, Search, Modify"}, ++ { 0x00eb, "Read, Write, Create, Parental, Search, Modify"}, ++ { 0x00ec, "Open, Create, Parental, Search, Modify"}, + { 0x00ed, "Read, Open, Create, Parental, Search, Modify"}, +- { 0x00ee, "Write, Open, Create, Parental, Search, Modify"}, +- { 0x00ef, "Read, Write, Open, Create, Parental, Search, Modify"}, +- { 0x00f0, "Delete, Parental, Search, Modify"}, ++ { 0x00ee, "Write, Open, Create, Parental, Search, Modify"}, ++ { 0x00ef, "Read, Write, Open, Create, Parental, Search, Modify"}, ++ { 0x00f0, "Delete, Parental, Search, Modify"}, + { 0x00f1, "Read, Delete, Parental, Search, Modify"}, +- { 0x00f2, "Write, Delete, Parental, Search, Modify"}, +- { 0x00f3, "Read, Write, Delete, Parental, Search, Modify"}, +- { 0x00f4, "Open, Delete, Parental, Search, Modify"}, ++ { 0x00f2, "Write, Delete, Parental, Search, Modify"}, ++ { 0x00f3, "Read, Write, Delete, Parental, Search, Modify"}, ++ { 0x00f4, "Open, Delete, Parental, Search, Modify"}, + { 0x00f5, "Read, Open, Delete, Parental, Search, Modify"}, +- { 0x00f6, "Write, Open, Delete, Parental, Search, Modify"}, +- { 0x00f7, "Read, Write, Open, Delete, Parental, Search, Modify"}, +- { 0x00f8, "Create, Delete, Parental, Search, Modify"}, ++ { 0x00f6, "Write, Open, Delete, Parental, Search, Modify"}, ++ { 0x00f7, "Read, Write, Open, Delete, Parental, Search, Modify"}, ++ { 0x00f8, "Create, Delete, Parental, Search, Modify"}, + { 0x00f9, "Read, Create, Delete, Parental, Search, Modify"}, +- { 0x00fa, "Write, Create, Delete, Parental, Search, Modify"}, +- { 0x00fb, "Read, Write, Create, Delete, Parental, Search, Modify"}, +- { 0x00fc, "Open, Create, Delete, Parental, Search, Modify"}, ++ { 0x00fa, "Write, Create, Delete, Parental, Search, Modify"}, ++ { 0x00fb, "Read, Write, Create, Delete, Parental, Search, Modify"}, ++ { 0x00fc, "Open, Create, Delete, Parental, Search, Modify"}, + { 0x00fd, "Read, Open, Create, Delete, Parental, Search, Modify"}, +- { 0x00fe, "Write, Open, Create, Delete, Parental, Search, Modify"}, +- { 0x00ff, "Read, Write, Open, Create, Delete, Parental, Search, Modify"}, +- { 0x0100, "Supervisor"}, ++ { 0x00fe, "Write, Open, Create, Delete, Parental, Search, Modify"}, ++ { 0x00ff, "Read, Write, Open, Create, Delete, Parental, Search, Modify"}, ++ { 0x0100, "Supervisor"}, + { 0x0101, "Read, Supervisor"}, +- { 0x0102, "Write, Supervisor"}, +- { 0x0103, "Read, Write, Supervisor"}, +- { 0x0104, "Open, Supervisor"}, ++ { 0x0102, "Write, Supervisor"}, ++ { 0x0103, "Read, Write, Supervisor"}, ++ { 0x0104, "Open, Supervisor"}, + { 0x0105, "Read, Open, Supervisor"}, +- { 0x0106, "Write, Open, Supervisor"}, +- { 0x0107, "Read, Write, Open, Supervisor"}, +- { 0x0108, "Create, Supervisor"}, ++ { 0x0106, "Write, Open, Supervisor"}, ++ { 0x0107, "Read, Write, Open, Supervisor"}, ++ { 0x0108, "Create, Supervisor"}, + { 0x0109, "Read, Create, Supervisor"}, +- { 0x010a, "Write, Create, Supervisor"}, +- { 0x010b, "Read, Write, Create, Supervisor"}, +- { 0x010c, "Open, Create, Supervisor"}, ++ { 0x010a, "Write, Create, Supervisor"}, ++ { 0x010b, "Read, Write, Create, Supervisor"}, ++ { 0x010c, "Open, Create, Supervisor"}, + { 0x010d, "Read, Open, Create, Supervisor"}, +- { 0x010e, "Write, Open, Create, Supervisor"}, +- { 0x010f, "Read, Write, Open, Create, Supervisor"}, +- { 0x0110, "Delete, Supervisor"}, ++ { 0x010e, "Write, Open, Create, Supervisor"}, ++ { 0x010f, "Read, Write, Open, Create, Supervisor"}, ++ { 0x0110, "Delete, Supervisor"}, + { 0x0111, "Read, Delete, Supervisor"}, +- { 0x0112, "Write, Delete, Supervisor"}, +- { 0x0113, "Read, Write, Delete, Supervisor"}, +- { 0x0114, "Open, Delete, Supervisor"}, ++ { 0x0112, "Write, Delete, Supervisor"}, ++ { 0x0113, "Read, Write, Delete, Supervisor"}, ++ { 0x0114, "Open, Delete, Supervisor"}, + { 0x0115, "Read, Open, Delete, Supervisor"}, +- { 0x0116, "Write, Open, Delete, Supervisor"}, +- { 0x0117, "Read, Write, Open, Delete, Supervisor"}, +- { 0x0118, "Create, Delete, Supervisor"}, ++ { 0x0116, "Write, Open, Delete, Supervisor"}, ++ { 0x0117, "Read, Write, Open, Delete, Supervisor"}, ++ { 0x0118, "Create, Delete, Supervisor"}, + { 0x0119, "Read, Create, Delete, Supervisor"}, +- { 0x011a, "Write, Create, Delete, Supervisor"}, +- { 0x011b, "Read, Write, Create, Delete, Supervisor"}, +- { 0x011c, "Open, Create, Delete, Supervisor"}, ++ { 0x011a, "Write, Create, Delete, Supervisor"}, ++ { 0x011b, "Read, Write, Create, Delete, Supervisor"}, ++ { 0x011c, "Open, Create, Delete, Supervisor"}, + { 0x011d, "Read, Open, Create, Delete, Supervisor"}, +- { 0x011e, "Write, Open, Create, Delete, Supervisor"}, +- { 0x011f, "Read, Write, Open, Create, Delete, Supervisor"}, +- { 0x0120, "Parental, Supervisor"}, ++ { 0x011e, "Write, Open, Create, Delete, Supervisor"}, ++ { 0x011f, "Read, Write, Open, Create, Delete, Supervisor"}, ++ { 0x0120, "Parental, Supervisor"}, + { 0x0121, "Read, Parental, Supervisor"}, +- { 0x0122, "Write, Parental, Supervisor"}, +- { 0x0123, "Read, Write, Parental, Supervisor"}, +- { 0x0124, "Open, Parental, Supervisor"}, ++ { 0x0122, "Write, Parental, Supervisor"}, ++ { 0x0123, "Read, Write, Parental, Supervisor"}, ++ { 0x0124, "Open, Parental, Supervisor"}, + { 0x0125, "Read, Open, Parental, Supervisor"}, +- { 0x0126, "Write, Open, Parental, Supervisor"}, +- { 0x0127, "Read, Write, Open, Parental, Supervisor"}, +- { 0x0128, "Create, Parental, Supervisor"}, ++ { 0x0126, "Write, Open, Parental, Supervisor"}, ++ { 0x0127, "Read, Write, Open, Parental, Supervisor"}, ++ { 0x0128, "Create, Parental, Supervisor"}, + { 0x0129, "Read, Create, Parental, Supervisor"}, +- { 0x012a, "Write, Create, Parental, Supervisor"}, +- { 0x012b, "Read, Write, Create, Parental, Supervisor"}, +- { 0x012c, "Open, Create, Parental, Supervisor"}, ++ { 0x012a, "Write, Create, Parental, Supervisor"}, ++ { 0x012b, "Read, Write, Create, Parental, Supervisor"}, ++ { 0x012c, "Open, Create, Parental, Supervisor"}, + { 0x012d, "Read, Open, Create, Parental, Supervisor"}, +- { 0x012e, "Write, Open, Create, Parental, Supervisor"}, +- { 0x012f, "Read, Write, Open, Create, Parental, Supervisor"}, +- { 0x0130, "Delete, Parental, Supervisor"}, ++ { 0x012e, "Write, Open, Create, Parental, Supervisor"}, ++ { 0x012f, "Read, Write, Open, Create, Parental, Supervisor"}, ++ { 0x0130, "Delete, Parental, Supervisor"}, + { 0x0131, "Read, Delete, Parental, Supervisor"}, +- { 0x0132, "Write, Delete, Parental, Supervisor"}, +- { 0x0133, "Read, Write, Delete, Parental, Supervisor"}, +- { 0x0134, "Open, Delete, Parental, Supervisor"}, ++ { 0x0132, "Write, Delete, Parental, Supervisor"}, ++ { 0x0133, "Read, Write, Delete, Parental, Supervisor"}, ++ { 0x0134, "Open, Delete, Parental, Supervisor"}, + { 0x0135, "Read, Open, Delete, Parental, Supervisor"}, +- { 0x0136, "Write, Open, Delete, Parental, Supervisor"}, +- { 0x0137, "Read, Write, Open, Delete, Parental, Supervisor"}, +- { 0x0138, "Create, Delete, Parental, Supervisor"}, ++ { 0x0136, "Write, Open, Delete, Parental, Supervisor"}, ++ { 0x0137, "Read, Write, Open, Delete, Parental, Supervisor"}, ++ { 0x0138, "Create, Delete, Parental, Supervisor"}, + { 0x0139, "Read, Create, Delete, Parental, Supervisor"}, +- { 0x013a, "Write, Create, Delete, Parental, Supervisor"}, +- { 0x013b, "Read, Write, Create, Delete, Parental, Supervisor"}, +- { 0x013c, "Open, Create, Delete, Parental, Supervisor"}, ++ { 0x013a, "Write, Create, Delete, Parental, Supervisor"}, ++ { 0x013b, "Read, Write, Create, Delete, Parental, Supervisor"}, ++ { 0x013c, "Open, Create, Delete, Parental, Supervisor"}, + { 0x013d, "Read, Open, Create, Delete, Parental, Supervisor"}, +- { 0x013e, "Write, Open, Create, Delete, Parental, Supervisor"}, +- { 0x013f, "Read, Write, Open, Create, Delete, Parental, Supervisor"}, +- { 0x0140, "Search, Supervisor"}, ++ { 0x013e, "Write, Open, Create, Delete, Parental, Supervisor"}, ++ { 0x013f, "Read, Write, Open, Create, Delete, Parental, Supervisor"}, ++ { 0x0140, "Search, Supervisor"}, + { 0x0141, "Read, Search, Supervisor"}, +- { 0x0142, "Write, Search, Supervisor"}, +- { 0x0143, "Read, Write, Search, Supervisor"}, +- { 0x0144, "Open, Search, Supervisor"}, ++ { 0x0142, "Write, Search, Supervisor"}, ++ { 0x0143, "Read, Write, Search, Supervisor"}, ++ { 0x0144, "Open, Search, Supervisor"}, + { 0x0145, "Read, Open, Search, Supervisor"}, +- { 0x0146, "Write, Open, Search, Supervisor"}, +- { 0x0147, "Read, Write, Open, Search, Supervisor"}, +- { 0x0148, "Create, Search, Supervisor"}, ++ { 0x0146, "Write, Open, Search, Supervisor"}, ++ { 0x0147, "Read, Write, Open, Search, Supervisor"}, ++ { 0x0148, "Create, Search, Supervisor"}, + { 0x0149, "Read, Create, Search, Supervisor"}, +- { 0x014a, "Write, Create, Search, Supervisor"}, +- { 0x014b, "Read, Write, Create, Search, Supervisor"}, +- { 0x014c, "Open, Create, Search, Supervisor"}, ++ { 0x014a, "Write, Create, Search, Supervisor"}, ++ { 0x014b, "Read, Write, Create, Search, Supervisor"}, ++ { 0x014c, "Open, Create, Search, Supervisor"}, + { 0x014d, "Read, Open, Create, Search, Supervisor"}, +- { 0x014e, "Write, Open, Create, Search, Supervisor"}, +- { 0x014f, "Read, Write, Open, Create, Search, Supervisor"}, +- { 0x0150, "Delete, Search, Supervisor"}, ++ { 0x014e, "Write, Open, Create, Search, Supervisor"}, ++ { 0x014f, "Read, Write, Open, Create, Search, Supervisor"}, ++ { 0x0150, "Delete, Search, Supervisor"}, + { 0x0151, "Read, Delete, Search, Supervisor"}, +- { 0x0152, "Write, Delete, Search, Supervisor"}, +- { 0x0153, "Read, Write, Delete, Search, Supervisor"}, +- { 0x0154, "Open, Delete, Search, Supervisor"}, ++ { 0x0152, "Write, Delete, Search, Supervisor"}, ++ { 0x0153, "Read, Write, Delete, Search, Supervisor"}, ++ { 0x0154, "Open, Delete, Search, Supervisor"}, + { 0x0155, "Read, Open, Delete, Search, Supervisor"}, +- { 0x0156, "Write, Open, Delete, Search, Supervisor"}, +- { 0x0157, "Read, Write, Open, Delete, Search, Supervisor"}, +- { 0x0158, "Create, Delete, Search, Supervisor"}, ++ { 0x0156, "Write, Open, Delete, Search, Supervisor"}, ++ { 0x0157, "Read, Write, Open, Delete, Search, Supervisor"}, ++ { 0x0158, "Create, Delete, Search, Supervisor"}, + { 0x0159, "Read, Create, Delete, Search, Supervisor"}, +- { 0x015a, "Write, Create, Delete, Search, Supervisor"}, +- { 0x015b, "Read, Write, Create, Delete, Search, Supervisor"}, +- { 0x015c, "Open, Create, Delete, Search, Supervisor"}, ++ { 0x015a, "Write, Create, Delete, Search, Supervisor"}, ++ { 0x015b, "Read, Write, Create, Delete, Search, Supervisor"}, ++ { 0x015c, "Open, Create, Delete, Search, Supervisor"}, + { 0x015d, "Read, Open, Create, Delete, Search, Supervisor"}, +- { 0x015e, "Write, Open, Create, Delete, Search, Supervisor"}, +- { 0x015f, "Read, Write, Open, Create, Delete, Search, Supervisor"}, +- { 0x0160, "Parental, Search, Supervisor"}, ++ { 0x015e, "Write, Open, Create, Delete, Search, Supervisor"}, ++ { 0x015f, "Read, Write, Open, Create, Delete, Search, Supervisor"}, ++ { 0x0160, "Parental, Search, Supervisor"}, + { 0x0161, "Read, Parental, Search, Supervisor"}, +- { 0x0162, "Write, Parental, Search, Supervisor"}, +- { 0x0163, "Read, Write, Parental, Search, Supervisor"}, +- { 0x0164, "Open, Parental, Search, Supervisor"}, ++ { 0x0162, "Write, Parental, Search, Supervisor"}, ++ { 0x0163, "Read, Write, Parental, Search, Supervisor"}, ++ { 0x0164, "Open, Parental, Search, Supervisor"}, + { 0x0165, "Read, Open, Parental, Search, Supervisor"}, +- { 0x0166, "Write, Open, Parental, Search, Supervisor"}, +- { 0x0167, "Read, Write, Open, Parental, Search, Supervisor"}, +- { 0x0168, "Create, Parental, Search, Supervisor"}, ++ { 0x0166, "Write, Open, Parental, Search, Supervisor"}, ++ { 0x0167, "Read, Write, Open, Parental, Search, Supervisor"}, ++ { 0x0168, "Create, Parental, Search, Supervisor"}, + { 0x0169, "Read, Create, Parental, Search, Supervisor"}, +- { 0x016a, "Write, Create, Parental, Search, Supervisor"}, +- { 0x016b, "Read, Write, Create, Parental, Search, Supervisor"}, +- { 0x016c, "Open, Create, Parental, Search, Supervisor"}, ++ { 0x016a, "Write, Create, Parental, Search, Supervisor"}, ++ { 0x016b, "Read, Write, Create, Parental, Search, Supervisor"}, ++ { 0x016c, "Open, Create, Parental, Search, Supervisor"}, + { 0x016d, "Read, Open, Create, Parental, Search, Supervisor"}, +- { 0x016e, "Write, Open, Create, Parental, Search, Supervisor"}, +- { 0x016f, "Read, Write, Open, Create, Parental, Search, Supervisor"}, +- { 0x0170, "Delete, Parental, Search, Supervisor"}, ++ { 0x016e, "Write, Open, Create, Parental, Search, Supervisor"}, ++ { 0x016f, "Read, Write, Open, Create, Parental, Search, Supervisor"}, ++ { 0x0170, "Delete, Parental, Search, Supervisor"}, + { 0x0171, "Read, Delete, Parental, Search, Supervisor"}, +- { 0x0172, "Write, Delete, Parental, Search, Supervisor"}, +- { 0x0173, "Read, Write, Delete, Parental, Search, Supervisor"}, +- { 0x0174, "Open, Delete, Parental, Search, Supervisor"}, ++ { 0x0172, "Write, Delete, Parental, Search, Supervisor"}, ++ { 0x0173, "Read, Write, Delete, Parental, Search, Supervisor"}, ++ { 0x0174, "Open, Delete, Parental, Search, Supervisor"}, + { 0x0175, "Read, Open, Delete, Parental, Search, Supervisor"}, +- { 0x0176, "Write, Open, Delete, Parental, Search, Supervisor"}, +- { 0x0177, "Read, Write, Open, Delete, Parental, Search, Supervisor"}, +- { 0x0178, "Create, Delete, Parental, Search, Supervisor"}, ++ { 0x0176, "Write, Open, Delete, Parental, Search, Supervisor"}, ++ { 0x0177, "Read, Write, Open, Delete, Parental, Search, Supervisor"}, ++ { 0x0178, "Create, Delete, Parental, Search, Supervisor"}, + { 0x0179, "Read, Create, Delete, Parental, Search, Supervisor"}, +- { 0x017a, "Write, Create, Delete, Parental, Search, Supervisor"}, +- { 0x017b, "Read, Write, Create, Delete, Parental, Search, Supervisor"}, +- { 0x017c, "Open, Create, Delete, Parental, Search, Supervisor"}, ++ { 0x017a, "Write, Create, Delete, Parental, Search, Supervisor"}, ++ { 0x017b, "Read, Write, Create, Delete, Parental, Search, Supervisor"}, ++ { 0x017c, "Open, Create, Delete, Parental, Search, Supervisor"}, + { 0x017d, "Read, Open, Create, Delete, Parental, Search, Supervisor"}, +- { 0x017e, "Write, Open, Create, Delete, Parental, Search, Supervisor"}, +- { 0x017f, "Read, Write, Open, Create, Delete, Parental, Search, Supervisor"}, +- { 0x0180, "Modify, Supervisor"}, ++ { 0x017e, "Write, Open, Create, Delete, Parental, Search, Supervisor"}, ++ { 0x017f, "Read, Write, Open, Create, Delete, Parental, Search, Supervisor"}, ++ { 0x0180, "Modify, Supervisor"}, + { 0x0181, "Read, Modify, Supervisor"}, +- { 0x0182, "Write, Modify, Supervisor"}, +- { 0x0183, "Read, Write, Modify, Supervisor"}, +- { 0x0184, "Open, Modify, Supervisor"}, ++ { 0x0182, "Write, Modify, Supervisor"}, ++ { 0x0183, "Read, Write, Modify, Supervisor"}, ++ { 0x0184, "Open, Modify, Supervisor"}, + { 0x0185, "Read, Open, Modify, Supervisor"}, +- { 0x0186, "Write, Open, Modify, Supervisor"}, +- { 0x0187, "Read, Write, Open, Modify, Supervisor"}, +- { 0x0188, "Create, Modify, Supervisor"}, ++ { 0x0186, "Write, Open, Modify, Supervisor"}, ++ { 0x0187, "Read, Write, Open, Modify, Supervisor"}, ++ { 0x0188, "Create, Modify, Supervisor"}, + { 0x0189, "Read, Create, Modify, Supervisor"}, +- { 0x018a, "Write, Create, Modify, Supervisor"}, +- { 0x018b, "Read, Write, Create, Modify, Supervisor"}, +- { 0x018c, "Open, Create, Modify, Supervisor"}, ++ { 0x018a, "Write, Create, Modify, Supervisor"}, ++ { 0x018b, "Read, Write, Create, Modify, Supervisor"}, ++ { 0x018c, "Open, Create, Modify, Supervisor"}, + { 0x018d, "Read, Open, Create, Modify, Supervisor"}, +- { 0x018e, "Write, Open, Create, Modify, Supervisor"}, +- { 0x018f, "Read, Write, Open, Create, Modify, Supervisor"}, +- { 0x0190, "Delete, Modify, Supervisor"}, ++ { 0x018e, "Write, Open, Create, Modify, Supervisor"}, ++ { 0x018f, "Read, Write, Open, Create, Modify, Supervisor"}, ++ { 0x0190, "Delete, Modify, Supervisor"}, + { 0x0191, "Read, Delete, Modify, Supervisor"}, +- { 0x0192, "Write, Delete, Modify, Supervisor"}, +- { 0x0193, "Read, Write, Delete, Modify, Supervisor"}, +- { 0x0194, "Open, Delete, Modify, Supervisor"}, ++ { 0x0192, "Write, Delete, Modify, Supervisor"}, ++ { 0x0193, "Read, Write, Delete, Modify, Supervisor"}, ++ { 0x0194, "Open, Delete, Modify, Supervisor"}, + { 0x0195, "Read, Open, Delete, Modify, Supervisor"}, +- { 0x0196, "Write, Open, Delete, Modify, Supervisor"}, +- { 0x0197, "Read, Write, Open, Delete, Modify, Supervisor"}, +- { 0x0198, "Create, Delete, Modify, Supervisor"}, ++ { 0x0196, "Write, Open, Delete, Modify, Supervisor"}, ++ { 0x0197, "Read, Write, Open, Delete, Modify, Supervisor"}, ++ { 0x0198, "Create, Delete, Modify, Supervisor"}, + { 0x0199, "Read, Create, Delete, Modify, Supervisor"}, +- { 0x019a, "Write, Create, Delete, Modify, Supervisor"}, +- { 0x019b, "Read, Write, Create, Delete, Modify, Supervisor"}, +- { 0x019c, "Open, Create, Delete, Modify, Supervisor"}, ++ { 0x019a, "Write, Create, Delete, Modify, Supervisor"}, ++ { 0x019b, "Read, Write, Create, Delete, Modify, Supervisor"}, ++ { 0x019c, "Open, Create, Delete, Modify, Supervisor"}, + { 0x019d, "Read, Open, Create, Delete, Modify, Supervisor"}, +- { 0x019e, "Write, Open, Create, Delete, Modify, Supervisor"}, +- { 0x019f, "Read, Write, Open, Create, Delete, Modify, Supervisor"}, +- { 0x01a0, "Parental, Modify, Supervisor"}, ++ { 0x019e, "Write, Open, Create, Delete, Modify, Supervisor"}, ++ { 0x019f, "Read, Write, Open, Create, Delete, Modify, Supervisor"}, ++ { 0x01a0, "Parental, Modify, Supervisor"}, + { 0x01a1, "Read, Parental, Modify, Supervisor"}, +- { 0x01a2, "Write, Parental, Modify, Supervisor"}, +- { 0x01a3, "Read, Write, Parental, Modify, Supervisor"}, +- { 0x01a4, "Open, Parental, Modify, Supervisor"}, ++ { 0x01a2, "Write, Parental, Modify, Supervisor"}, ++ { 0x01a3, "Read, Write, Parental, Modify, Supervisor"}, ++ { 0x01a4, "Open, Parental, Modify, Supervisor"}, + { 0x01a5, "Read, Open, Parental, Modify, Supervisor"}, +- { 0x01a6, "Write, Open, Parental, Modify, Supervisor"}, +- { 0x01a7, "Read, Write, Open, Parental, Modify, Supervisor"}, +- { 0x01a8, "Create, Parental, Modify, Supervisor"}, ++ { 0x01a6, "Write, Open, Parental, Modify, Supervisor"}, ++ { 0x01a7, "Read, Write, Open, Parental, Modify, Supervisor"}, ++ { 0x01a8, "Create, Parental, Modify, Supervisor"}, + { 0x01a9, "Read, Create, Parental, Modify, Supervisor"}, +- { 0x01aa, "Write, Create, Parental, Modify, Supervisor"}, +- { 0x01ab, "Read, Write, Create, Parental, Modify, Supervisor"}, +- { 0x01ac, "Open, Create, Parental, Modify, Supervisor"}, ++ { 0x01aa, "Write, Create, Parental, Modify, Supervisor"}, ++ { 0x01ab, "Read, Write, Create, Parental, Modify, Supervisor"}, ++ { 0x01ac, "Open, Create, Parental, Modify, Supervisor"}, + { 0x01ad, "Read, Open, Create, Parental, Modify, Supervisor"}, +- { 0x01ae, "Write, Open, Create, Parental, Modify, Supervisor"}, +- { 0x01af, "Read, Write, Open, Create, Parental, Modify, Supervisor"}, +- { 0x01b0, "Delete, Parental, Modify, Supervisor"}, ++ { 0x01ae, "Write, Open, Create, Parental, Modify, Supervisor"}, ++ { 0x01af, "Read, Write, Open, Create, Parental, Modify, Supervisor"}, ++ { 0x01b0, "Delete, Parental, Modify, Supervisor"}, + { 0x01b1, "Read, Delete, Parental, Modify, Supervisor"}, +- { 0x01b2, "Write, Delete, Parental, Modify, Supervisor"}, +- { 0x01b3, "Read, Write, Delete, Parental, Modify, Supervisor"}, +- { 0x01b4, "Open, Delete, Parental, Modify, Supervisor"}, ++ { 0x01b2, "Write, Delete, Parental, Modify, Supervisor"}, ++ { 0x01b3, "Read, Write, Delete, Parental, Modify, Supervisor"}, ++ { 0x01b4, "Open, Delete, Parental, Modify, Supervisor"}, + { 0x01b5, "Read, Open, Delete, Parental, Modify, Supervisor"}, +- { 0x01b6, "Write, Open, Delete, Parental, Modify, Supervisor"}, +- { 0x01b7, "Read, Write, Open, Delete, Parental, Modify, Supervisor"}, +- { 0x01b8, "Create, Delete, Parental, Modify, Supervisor"}, ++ { 0x01b6, "Write, Open, Delete, Parental, Modify, Supervisor"}, ++ { 0x01b7, "Read, Write, Open, Delete, Parental, Modify, Supervisor"}, ++ { 0x01b8, "Create, Delete, Parental, Modify, Supervisor"}, + { 0x01b9, "Read, Create, Delete, Parental, Modify, Supervisor"}, +- { 0x01ba, "Write, Create, Delete, Parental, Modify, Supervisor"}, +- { 0x01bb, "Read, Write, Create, Delete, Parental, Modify, Supervisor"}, +- { 0x01bc, "Open, Create, Delete, Parental, Modify, Supervisor"}, ++ { 0x01ba, "Write, Create, Delete, Parental, Modify, Supervisor"}, ++ { 0x01bb, "Read, Write, Create, Delete, Parental, Modify, Supervisor"}, ++ { 0x01bc, "Open, Create, Delete, Parental, Modify, Supervisor"}, + { 0x01bd, "Read, Open, Create, Delete, Parental, Modify, Supervisor"}, +- { 0x01be, "Write, Open, Create, Delete, Parental, Modify, Supervisor"}, +- { 0x01bf, "Read, Write, Open, Create, Delete, Parental, Modify, Supervisor"}, +- { 0x01c0, "Search, Modify, Supervisor"}, ++ { 0x01be, "Write, Open, Create, Delete, Parental, Modify, Supervisor"}, ++ { 0x01bf, "Read, Write, Open, Create, Delete, Parental, Modify, Supervisor"}, ++ { 0x01c0, "Search, Modify, Supervisor"}, + { 0x01c1, "Read, Search, Modify, Supervisor"}, +- { 0x01c2, "Write, Search, Modify, Supervisor"}, +- { 0x01c3, "Read, Write, Search, Modify, Supervisor"}, +- { 0x01c4, "Open, Search, Modify, Supervisor"}, ++ { 0x01c2, "Write, Search, Modify, Supervisor"}, ++ { 0x01c3, "Read, Write, Search, Modify, Supervisor"}, ++ { 0x01c4, "Open, Search, Modify, Supervisor"}, + { 0x01c5, "Read, Open, Search, Modify, Supervisor"}, +- { 0x01c6, "Write, Open, Search, Modify, Supervisor"}, +- { 0x01c7, "Read, Write, Open, Search, Modify, Supervisor"}, +- { 0x01c8, "Create, Search, Modify, Supervisor"}, ++ { 0x01c6, "Write, Open, Search, Modify, Supervisor"}, ++ { 0x01c7, "Read, Write, Open, Search, Modify, Supervisor"}, ++ { 0x01c8, "Create, Search, Modify, Supervisor"}, + { 0x01c9, "Read, Create, Search, Modify, Supervisor"}, +- { 0x01ca, "Write, Create, Search, Modify, Supervisor"}, +- { 0x01cb, "Read, Write, Create, Search, Modify, Supervisor"}, +- { 0x01cc, "Open, Create, Search, Modify, Supervisor"}, ++ { 0x01ca, "Write, Create, Search, Modify, Supervisor"}, ++ { 0x01cb, "Read, Write, Create, Search, Modify, Supervisor"}, ++ { 0x01cc, "Open, Create, Search, Modify, Supervisor"}, + { 0x01cd, "Read, Open, Create, Search, Modify, Supervisor"}, +- { 0x01ce, "Write, Open, Create, Search, Modify, Supervisor"}, +- { 0x01cf, "Read, Write, Open, Create, Search, Modify, Supervisor"}, +- { 0x01d0, "Delete, Search, Modify, Supervisor"}, ++ { 0x01ce, "Write, Open, Create, Search, Modify, Supervisor"}, ++ { 0x01cf, "Read, Write, Open, Create, Search, Modify, Supervisor"}, ++ { 0x01d0, "Delete, Search, Modify, Supervisor"}, + { 0x01d1, "Read, Delete, Search, Modify, Supervisor"}, +- { 0x01d2, "Write, Delete, Search, Modify, Supervisor"}, +- { 0x01d3, "Read, Write, Delete, Search, Modify, Supervisor"}, +- { 0x01d4, "Open, Delete, Search, Modify, Supervisor"}, ++ { 0x01d2, "Write, Delete, Search, Modify, Supervisor"}, ++ { 0x01d3, "Read, Write, Delete, Search, Modify, Supervisor"}, ++ { 0x01d4, "Open, Delete, Search, Modify, Supervisor"}, + { 0x01d5, "Read, Open, Delete, Search, Modify, Supervisor"}, +- { 0x01d6, "Write, Open, Delete, Search, Modify, Supervisor"}, +- { 0x01d7, "Read, Write, Open, Delete, Search, Modify, Supervisor"}, +- { 0x01d8, "Create, Delete, Search, Modify, Supervisor"}, ++ { 0x01d6, "Write, Open, Delete, Search, Modify, Supervisor"}, ++ { 0x01d7, "Read, Write, Open, Delete, Search, Modify, Supervisor"}, ++ { 0x01d8, "Create, Delete, Search, Modify, Supervisor"}, + { 0x01d9, "Read, Create, Delete, Search, Modify, Supervisor"}, +- { 0x01da, "Write, Create, Delete, Search, Modify, Supervisor"}, +- { 0x01db, "Read, Write, Create, Delete, Search, Modify, Supervisor"}, +- { 0x01dc, "Open, Create, Delete, Search, Modify, Supervisor"}, ++ { 0x01da, "Write, Create, Delete, Search, Modify, Supervisor"}, ++ { 0x01db, "Read, Write, Create, Delete, Search, Modify, Supervisor"}, ++ { 0x01dc, "Open, Create, Delete, Search, Modify, Supervisor"}, + { 0x01dd, "Read, Open, Create, Delete, Search, Modify, Supervisor"}, +- { 0x01de, "Write, Open, Create, Delete, Search, Modify, Supervisor"}, +- { 0x01df, "Read, Write, Open, Create, Delete, Search, Modify, Supervisor"}, +- { 0x01e0, "Parental, Search, Modify, Supervisor"}, ++ { 0x01de, "Write, Open, Create, Delete, Search, Modify, Supervisor"}, ++ { 0x01df, "Read, Write, Open, Create, Delete, Search, Modify, Supervisor"}, ++ { 0x01e0, "Parental, Search, Modify, Supervisor"}, + { 0x01e1, "Read, Parental, Search, Modify, Supervisor"}, +- { 0x01e2, "Write, Parental, Search, Modify, Supervisor"}, +- { 0x01e3, "Read, Write, Parental, Search, Modify, Supervisor"}, +- { 0x01e4, "Open, Parental, Search, Modify, Supervisor"}, ++ { 0x01e2, "Write, Parental, Search, Modify, Supervisor"}, ++ { 0x01e3, "Read, Write, Parental, Search, Modify, Supervisor"}, ++ { 0x01e4, "Open, Parental, Search, Modify, Supervisor"}, + { 0x01e5, "Read, Open, Parental, Search, Modify, Supervisor"}, +- { 0x01e6, "Write, Open, Parental, Search, Modify, Supervisor"}, +- { 0x01e7, "Read, Write, Open, Parental, Search, Modify, Supervisor"}, +- { 0x01e8, "Create, Parental, Search, Modify, Supervisor"}, ++ { 0x01e6, "Write, Open, Parental, Search, Modify, Supervisor"}, ++ { 0x01e7, "Read, Write, Open, Parental, Search, Modify, Supervisor"}, ++ { 0x01e8, "Create, Parental, Search, Modify, Supervisor"}, + { 0x01e9, "Read, Create, Parental, Search, Modify, Supervisor"}, +- { 0x01ea, "Write, Create, Parental, Search, Modify, Supervisor"}, +- { 0x01eb, "Read, Write, Create, Parental, Search, Modify, Supervisor"}, +- { 0x01ec, "Open, Create, Parental, Search, Modify, Supervisor"}, ++ { 0x01ea, "Write, Create, Parental, Search, Modify, Supervisor"}, ++ { 0x01eb, "Read, Write, Create, Parental, Search, Modify, Supervisor"}, ++ { 0x01ec, "Open, Create, Parental, Search, Modify, Supervisor"}, + { 0x01ed, "Read, Open, Create, Parental, Search, Modify, Supervisor"}, +- { 0x01ee, "Write, Open, Create, Parental, Search, Modify, Supervisor"}, +- { 0x01ef, "Read, Write, Open, Create, Parental, Search, Modify, Supervisor"}, +- { 0x01f0, "Delete, Parental, Search, Modify, Supervisor"}, ++ { 0x01ee, "Write, Open, Create, Parental, Search, Modify, Supervisor"}, ++ { 0x01ef, "Read, Write, Open, Create, Parental, Search, Modify, Supervisor"}, ++ { 0x01f0, "Delete, Parental, Search, Modify, Supervisor"}, + { 0x01f1, "Read, Delete, Parental, Search, Modify, Supervisor"}, +- { 0x01f2, "Write, Delete, Parental, Search, Modify, Supervisor"}, +- { 0x01f3, "Read, Write, Delete, Parental, Search, Modify, Supervisor"}, +- { 0x01f4, "Open, Delete, Parental, Search, Modify, Supervisor"}, ++ { 0x01f2, "Write, Delete, Parental, Search, Modify, Supervisor"}, ++ { 0x01f3, "Read, Write, Delete, Parental, Search, Modify, Supervisor"}, ++ { 0x01f4, "Open, Delete, Parental, Search, Modify, Supervisor"}, + { 0x01f5, "Read, Open, Delete, Parental, Search, Modify, Supervisor"}, +- { 0x01f6, "Write, Open, Delete, Parental, Search, Modify, Supervisor"}, +- { 0x01f7, "Read, Write, Open, Delete, Parental, Search, Modify, Supervisor"}, +- { 0x01f8, "Create, Delete, Parental, Search, Modify, Supervisor"}, ++ { 0x01f6, "Write, Open, Delete, Parental, Search, Modify, Supervisor"}, ++ { 0x01f7, "Read, Write, Open, Delete, Parental, Search, Modify, Supervisor"}, ++ { 0x01f8, "Create, Delete, Parental, Search, Modify, Supervisor"}, + { 0x01f9, "Read, Create, Delete, Parental, Search, Modify, Supervisor"}, +- { 0x01fa, "Write, Create, Delete, Parental, Search, Modify, Supervisor"}, +- { 0x01fb, "Read, Write, Create, Delete, Parental, Search, Modify, Supervisor"}, +- { 0x01fc, "Open, Create, Delete, Parental, Search, Modify, Supervisor"}, ++ { 0x01fa, "Write, Create, Delete, Parental, Search, Modify, Supervisor"}, ++ { 0x01fb, "Read, Write, Create, Delete, Parental, Search, Modify, Supervisor"}, ++ { 0x01fc, "Open, Create, Delete, Parental, Search, Modify, Supervisor"}, + { 0x01fd, "Read, Open, Create, Delete, Parental, Search, Modify, Supervisor"}, +- { 0x01fe, "Write, Open, Create, Delete, Parental, Search, Modify, Supervisor"}, +- { 0x01ff, "Read, Write, Open, Create, Delete, Parental, Search, Modify, Supervisor"}, +- { 0, NULL } ++ { 0x01fe, "Write, Open, Create, Delete, Parental, Search, Modify, Supervisor"}, ++ { 0x01ff, "Read, Write, Open, Create, Delete, Parental, Search, Modify, Supervisor"}, ++ { 0, NULL } + }; + + +@@ -1467,7 +1468,8 @@ + #define NDS_PTYPE_TCPv6 0x0000000b + #define NDS_PTYPE_INTERNAL 0x0000000c + #define NDS_PTYPE_URL 0x0000000d +-#define NDS_PTYPE_DNS 0x0000000e ++#define NDS_PTYPE_DNS 0x0000000e ++#define NDS_PTYPE_CNT 0x0000000f + + static const value_string nds_protocol_type[] = { + { NDS_PTYPE_IPX, "(IPX Protocol)" }, +@@ -1485,6 +1487,7 @@ + { NDS_PTYPE_INTERNAL, "(Internal Protocol)" }, + { NDS_PTYPE_URL, "(URL Protocol)" }, + { NDS_PTYPE_DNS, "(DNS Protocol)" }, ++ { NDS_PTYPE_CNT, "(Number of protocol types defined)" }, + { 0, NULL } + }; + +@@ -1623,7 +1626,7 @@ + + typedef struct { + ncp_req_eid_hash_key *nds_eid; +- char object_name[256]; ++ char object_name[256]; + char *object_class; + } ncp_req_eid_hash_value; + +@@ -1701,15 +1704,15 @@ + static void + ncp_init_protocol(void) + { +- int i; ++ int i; + + /* fragment */ + fragment_table_init(&nds_fragment_table); + reassembled_table_init(&nds_reassembled_table); + +- for (i = 0; i < 99; i++) { +- frags[i].nds_frag = 0xfffffff0; +- } ++ for (i = 0; i < 99; i++) { ++ frags[i].nds_frag = 0xfffffff0; ++ } + + if (ncp_req_hash) { + g_hash_table_foreach(ncp_req_hash, ncp_req_hash_cleanup, NULL); +@@ -1735,7 +1738,7 @@ + NCP_PACKET_INIT_COUNT * sizeof(ncp_req_hash_key), + G_ALLOC_ONLY); + ncp_req_hash_values = g_mem_chunk_new("ncp_req_hash_values", +- sizeof(ncp_req_hash_value), ++ sizeof(ncp_req_hash_value), + NCP_PACKET_INIT_COUNT * sizeof(ncp_req_hash_value), + G_ALLOC_ONLY); + ncp_req_eid_hash_keys = g_mem_chunk_new("ncp_req_eid_hash_keys", +@@ -1970,38 +1973,36 @@ + guint second; + } nw_time_t; + +-typedef struct { +- char buffer[1024]; +-} nw_uni_t; ++#define NW_UNI_MAX 1024 + +-#define VTYPE_NONE 0 /* no value */ +-#define VTYPE_UINT8 1 +-#define VTYPE_UINT16 2 +-#define VTYPE_UINT32 3 +-#define VTYPE_STRING 4 +-#define VTYPE_BITFIELD 5 +-#define VTYPE_MULTIVALUE_UINT32 6 +-#define VTYPE_BYTES 7 +-#define VTYPE_BOOLEAN 8 +-#define VTYPE_ITEM 9 ++#define VTYPE_NONE 0 /* no value */ ++#define VTYPE_UINT8 1 ++#define VTYPE_UINT16 2 ++#define VTYPE_UINT32 3 ++#define VTYPE_STRING 4 ++#define VTYPE_BITFIELD 5 ++#define VTYPE_MULTIVALUE_UINT32 6 ++#define VTYPE_BYTES 7 ++#define VTYPE_BOOLEAN 8 ++#define VTYPE_ITEM 9 + +-#define MVTYPE_ATTR_REQUEST 1 +-#define MVTYPE_ATTR_REPLY 2 +-#define MVTYPE_ATTR_REQUEST2 3 +-#define MVTYPE_READ_CLASS_REQ 4 +-#define MVTYPE_READ_REPLICAS 5 +-#define MVTYPE_MODIFY_ATTR_REQUEST 6 +-#define MVTYPE_ADDR_REFERRAL_REQUEST 7 +-#define MVTYPE_ADDR_REFERRAL_REPLY 8 +-#define MVTYPE_LOC_ADDR_REFERRAL_REPLY 9 ++#define MVTYPE_ATTR_REQUEST 1 ++#define MVTYPE_ATTR_REPLY 2 ++#define MVTYPE_ATTR_REQUEST2 3 ++#define MVTYPE_READ_CLASS_REQ 4 ++#define MVTYPE_READ_REPLICAS 5 ++#define MVTYPE_MODIFY_ATTR_REQUEST 6 ++#define MVTYPE_ADDR_REFERRAL_REQUEST 7 ++#define MVTYPE_ADDR_REFERRAL_REPLY 8 ++#define MVTYPE_LOC_ADDR_REFERRAL_REPLY 9 + #define MVTYPE_PROC_ENTRY_SPECIFIERS 10 + #define MVTYPE_PRINT_TIMESTAMP 11 + #define MVTYPE_LIST_PARTITIONS 12 + #define MVTYPE_CLASS_NAMES 13 + #define MVTYPE_MODIFY_CLASS 14 + #define MVTYPE_ADD_ATTR_REQUEST 15 +-#define MVTYPE_PROCESS_TAGS 16 +-#define MVTYPE_PROCESS_ITERATOR 17 ++#define MVTYPE_PROCESS_TAGS 16 ++#define MVTYPE_PROCESS_ITERATOR 17 + + typedef struct { + guint8 vtype; +@@ -2046,6 +2047,7 @@ + guint8 mvtype; + guint32 vflags; + guint32 nds_version; ++ guint32 pflags; /* NDS Protocol Flags */ + } nds_val; + + +@@ -2124,23 +2126,24 @@ + /* Convert a string from little-endian unicode to ascii. At the moment we + fake it by taking every odd byte. )-: The caller must free the + result returned. */ ++/* XXX This prints the proto_item name, but not its value. */ + static proto_item* + padd_uni(ptvcursor_t *ptvc, const ptvc_record *rec) + { + proto_item *item; +- nw_uni_t nw_uni; +- guint offset; ++ /* nw_uni_t nw_uni; */ ++ guint offset; + +- nw_uni.buffer[0] = '\0'; +- offset = ptvcursor_current_offset(ptvc); ++ /* nw_uni.buffer[0] = '\0'; */ ++ offset = ptvcursor_current_offset(ptvc); + + item = ptvcursor_add(ptvc, *rec->hf_ptr, + rec->length, rec->endianness); + + if (item) { + proto_item_set_text(item, "%s", get_item_name(item)); +- proto_item_append_text(item, " %s", +- nw_uni.buffer); ++ /* proto_item_append_text(item, " %s", ++ nw_uni.buffer); */ + } + + return item; +@@ -2444,23 +2447,29 @@ + return 0; + } + +-static void +-get_string(tvbuff_t* tvb, guint offset, guint str_length, char *dest_buf) ++static char * ++get_string(tvbuff_t* tvb, guint offset, guint str_length) + { ++ char *dest_buf; + gint i; + guint16 c_char; + gint length_remaining = 0; ++ gint max_length = (str_length < NW_UNI_MAX) ? str_length : NW_UNI_MAX; + + length_remaining = tvb_length_remaining(tvb, offset); + if((gint)str_length > length_remaining) + { + THROW(ReportedBoundsError); + } +- dest_buf[0] = '\0'; ++ + if(str_length == 0) + { +- return; ++ return ""; + } ++ ++ dest_buf = ep_alloc(max_length + 1); ++ dest_buf[0] = '\0'; ++ + for ( i = 0; i < (gint)str_length; i++ ) + { + c_char = tvb_get_guint8(tvb, offset ); +@@ -2487,9 +2496,9 @@ + if(length_remaining==1) + { + dest_buf[i+1] = '\0'; +- return; ++ return dest_buf; + } +- if (i >= 1023) { /* Don't process beyond the size of our varible */ ++ if (i >= 1023) { /* Don't process beyond the size of our variable */ + break; /* If string is too long just return the first 1K. */ + } + } +@@ -2497,7 +2506,7 @@ + i = 0; + } + dest_buf[i] = '\0'; +- return; ++ return dest_buf; + } + + static void +@@ -2732,46 +2741,49 @@ + * and their associated values. Store results in passed buffer. + */ + static void +-build_expert_data(proto_tree *ncp_tree, char *hf_name, char *buffer, int repeat_lookup, gboolean search_structs) ++build_expert_data(proto_tree *ncp_tree, const char *hf_name, char *buffer, ++ size_t buffer_size, int repeat_lookup, ++ gboolean search_structs) + { +- proto_tree *tree_pointer; +- proto_tree *tree_loc; +- proto_tree *struct_tree_pointer = NULL; ++ proto_tree *tree_pointer; ++ proto_tree *tree_loc; ++ proto_tree *struct_tree_pointer = NULL; + char temp_buffer[256]="\0"; + gboolean in_struct=FALSE; + + tree_loc = ncp_tree->first_child; +- for (tree_pointer=tree_loc; tree_pointer!=NULL; tree_pointer=tree_pointer->next) +- { ++ for (tree_pointer=tree_loc; tree_pointer!=NULL; tree_pointer=tree_pointer->next) ++ { + /* We currently only go one structure deep in our search for values */ + if (tree_pointer->first_child && !in_struct && search_structs) { + struct_tree_pointer = tree_pointer; + tree_pointer = tree_pointer->first_child; + in_struct=TRUE; + } +- if (strcmp(tree_pointer->finfo->hfinfo->abbrev, hf_name)==0) +- { +- switch (tree_pointer->finfo->hfinfo->type) +- { +- case 3: /* uint8 */ +- case 4: /* uint16 */ +- g_snprintf(buffer, get_finfo_length(tree_pointer->finfo)*4, "%d", get_finfo_value_integer(tree_pointer->finfo)); +- break; ++ if (strcmp(tree_pointer->finfo->hfinfo->abbrev, hf_name)==0) ++ { ++ switch (tree_pointer->finfo->hfinfo->type) ++ { ++ case 3: /* uint8 */ ++ case 4: /* uint16 */ ++ g_snprintf(buffer, buffer_size, "%u", get_finfo_value_integer(tree_pointer->finfo)); ++ break; + + case 6: /* uint32 */ +- g_snprintf(buffer, get_finfo_length(tree_pointer->finfo)*4, "%08x", get_finfo_value_integer(tree_pointer->finfo)); +- break; ++ g_snprintf(buffer, buffer_size, "%08x", get_finfo_value_integer(tree_pointer->finfo)); ++ break; + case 17: + case 18: + case 19: +- case 20: /* string */ +- uni_to_string(get_finfo_value_string(tree_pointer->finfo), get_finfo_length(tree_pointer->finfo), buffer); ++ case 20: /* string */ ++ /* XXX: Should we verify: buffer_size is as large as value returned by get_finfo_length(...) ??? */ ++ uni_to_string(get_finfo_value_string(tree_pointer->finfo), get_finfo_length(tree_pointer->finfo), buffer); + if (repeat_lookup > 0) { + if (strlen(temp_buffer) + strlen(buffer) < 250) { + g_strlcat(temp_buffer, buffer, 256); + repeat_lookup--; + if (repeat_lookup == 0) { +- g_strlcpy(buffer, temp_buffer, 256); ++ g_strlcpy(buffer, temp_buffer, buffer_size); + break; + } + else +@@ -2791,23 +2803,23 @@ + } + case 21: + case 22: /* Bytes */ +- g_snprintf(buffer, (get_finfo_length(tree_pointer->finfo))*4, "%s", bytes_to_str(get_finfo_value_string(tree_pointer->finfo), get_finfo_length(tree_pointer->finfo))); ++ g_snprintf(buffer, buffer_size, "%s", bytes_to_str(get_finfo_value_string(tree_pointer->finfo), get_finfo_length(tree_pointer->finfo))); + break; +- default: /* Dont currently handle. Only need string, integers, and bytes */ +- buffer = "Unsupported Expert Type\0"; +- return; +- } ++ default: /* Dont currently handle. Only need string, integers, and bytes */ ++ g_snprintf(buffer, buffer_size, "Unsupported Expert Type"); ++ return; ++ } + if (repeat_lookup ==0) { + break; + } +- } ++ } + if (tree_pointer->next==NULL && in_struct && search_structs) { + tree_pointer = struct_tree_pointer; + in_struct=FALSE; + } +- } ++ } + if (strlen(buffer)==0) { +- buffer = "No Value\0"; ++ g_snprintf(buffer, buffer_size, "No Value"); + } + return; + } +@@ -2832,38 +2844,48 @@ + if (ncp_rec->func == 66) { + char p_filehandle[15]="\0"; + +- build_expert_data(ncp_tree, "ncp.file_handle", p_filehandle, 0, FALSE); ++ build_expert_data(ncp_tree, "ncp.file_handle", p_filehandle, ++ sizeof p_filehandle, 0, FALSE); + + expert_add_info_format(pinfo, NULL, PI_REQUEST_CODE, PI_CHAT, "Close file handle %s", p_filehandle); + } + /* The following allows for oplock level 1 file opens echoed to expert tap. */ + if ((ncp_rec->func == 89 || ncp_rec->func == 87) && (ncp_rec->subfunc == 1 || ncp_rec->subfunc == 30 || ncp_rec->subfunc == 32 || ncp_rec->subfunc == 33)) { +- char oaction[2]="\0"; ++ char oaction[3]="\0"; + char p_filename[256]="\0"; +- char p_rights[2]="\0"; +- char p_path_count[2]="\0"; ++ char p_rights[3]="\0"; ++ char p_path_count[3]="\0"; + +- build_expert_data(ncp_tree, "ncp.open_create_mode", oaction, 0, FALSE); +- build_expert_data(ncp_tree, "ncp.desired_access_rights", p_rights, 0, FALSE); +- build_expert_data(ncp_tree, "ncp.path_count", p_path_count, 0, FALSE); ++ build_expert_data(ncp_tree, "ncp.open_create_mode", oaction, ++ sizeof oaction, 0, FALSE); ++ build_expert_data(ncp_tree, "ncp.desired_access_rights", ++ p_rights, sizeof p_rights, 0, FALSE); ++ build_expert_data(ncp_tree, "ncp.path_count", p_path_count, ++ sizeof p_path_count, 0, FALSE); + + if (ncp_rec->func == 87) { +- build_expert_data(ncp_tree, "ncp.path", p_filename, atoi(p_path_count), FALSE); ++ build_expert_data(ncp_tree, "ncp.path", p_filename, ++ sizeof p_filename, atoi(p_path_count), ++ FALSE); + } + else + { +- build_expert_data(ncp_tree, "ncp.path16", p_filename, atoi(p_path_count), FALSE); ++ build_expert_data(ncp_tree, "ncp.path16", p_filename, ++ sizeof p_filename, atoi(p_path_count), ++ FALSE); + } + + expert_add_info_format(pinfo, NULL, PI_REQUEST_CODE, PI_CHAT, "%s: %s, Rights:(%s)", match_strval((atoi(oaction) & 0xeb), open_create_mode_vals), p_filename, match_strval((atoi(p_rights) & 0x5f), ncp_rights_vals)); + } + /* The following allows for oplock ack's and level 2 request echoed to expert tap. */ + if (ncp_rec->func == 87 && ncp_rec->subfunc == 34) { +- char cc_function[2]="\0"; ++ char cc_function[3]="\0"; + char p_filehandle[15]="\0"; + +- build_expert_data(ncp_tree, "ncp.cc_file_handle", p_filehandle, 0, FALSE); +- build_expert_data(ncp_tree, "ncp.cc_function", cc_function, 0, FALSE); ++ build_expert_data(ncp_tree, "ncp.cc_file_handle", ++ p_filehandle, sizeof p_filehandle, 0, FALSE); ++ build_expert_data(ncp_tree, "ncp.cc_function", ++ cc_function, sizeof cc_function, 0, FALSE); + + expert_add_info_format(pinfo, NULL, PI_REQUEST_CODE, PI_CHAT, "Op-lock on handle %s - %s", p_filehandle, match_strval(atoi(cc_function), ncp_cc_function_vals)); + } +@@ -2873,9 +2895,12 @@ + char n_rights[20]="\0"; + char p_filehandle[15]="\0"; + +- build_expert_data(ncp_tree, "ncp.file_handle", p_filehandle, 0, FALSE); +- build_expert_data(ncp_tree, "ncp.access_rights_mask_word", p_rights, 0, FALSE); +- build_expert_data(ncp_tree, "ncp.new_access_rights_mask", n_rights, 0, FALSE); ++ build_expert_data(ncp_tree, "ncp.file_handle", ++ p_filehandle, sizeof p_filehandle, 0, FALSE); ++ build_expert_data(ncp_tree, "ncp.access_rights_mask_word", ++ p_rights, sizeof p_rights, 0, FALSE); ++ build_expert_data(ncp_tree, "ncp.new_access_rights_mask", ++ n_rights, sizeof n_rights, 0, FALSE); + expert_add_info_format(pinfo, NULL, PI_REQUEST_CODE, PI_CHAT, "Change handle %s rights from:(%s) to:(%s)", p_filehandle, match_strval((atoi(p_rights) & 0x1ff), access_rights_vals), match_strval((atoi(n_rights) & 0x1ff), access_rights_vals)); + } + } +@@ -2886,19 +2911,22 @@ + if (ncp_echo_file) { /* Echo File System Data */ + /* The following allows for oplock level 1 file opens echoed to expert tap. */ + if ((ncp_rec->func == 89 || ncp_rec->func == 87) && (ncp_rec->subfunc == 32 || ncp_rec->subfunc == 1)) { +- char oaction[2]="\0"; +- char oplockflg[2]="\0"; ++ char oaction[3]="\0"; ++ char oplockflg[3]="\0"; + char p_filehandle[15]="\0"; + +- build_expert_data(ncp_tree, "ncp.open_create_action", oaction, 0, FALSE); +- build_expert_data(ncp_tree, "ncp.file_handle", p_filehandle, 0, FALSE); ++ build_expert_data(ncp_tree, "ncp.open_create_action", ++ oaction, sizeof oaction, 0, FALSE); ++ build_expert_data(ncp_tree, "ncp.file_handle", ++ p_filehandle, sizeof p_filehandle, 0, FALSE); + + if (ncp_rec->subfunc == 1) { + expert_add_info_format(pinfo, NULL, PI_RESPONSE_CODE, PI_CHAT, "%s - File handle %s", match_strval((atoi(oaction) & 0x8f), open_create_action_vals), p_filehandle); + } + else + { +- build_expert_data(ncp_tree, "ncp.o_c_ret_flags", oplockflg, 0, FALSE); ++ build_expert_data(ncp_tree, "ncp.o_c_ret_flags", ++ oplockflg, sizeof oplockflg, 0, FALSE); + expert_add_info_format(pinfo, NULL, PI_RESPONSE_CODE, PI_CHAT, "%s - File handle %s, %s", match_strval((atoi(oaction) & 0x8f), open_create_action_vals), p_filehandle, match_strval(atoi(oplockflg), ncp_o_c_ret_flags_vals)); + } + } +@@ -2907,8 +2935,10 @@ + char p_rights[20]="\0"; + char p_filehandle[15]="\0"; + +- build_expert_data(ncp_tree, "ncp.file_handle", p_filehandle, 0, FALSE); +- build_expert_data(ncp_tree, "ncp.effective_rights", p_rights, 0, FALSE); ++ build_expert_data(ncp_tree, "ncp.file_handle", ++ p_filehandle, sizeof p_filehandle, 0, FALSE); ++ build_expert_data(ncp_tree, "ncp.effective_rights", ++ p_rights, sizeof p_rights, 0, FALSE); + expert_add_info_format(pinfo, NULL, PI_RESPONSE_CODE, PI_CHAT, "Handle %s effective rights:(%s)", p_filehandle, match_strval((atoi(p_rights) & 0x1ff), access_rights_vals)); + } + } +@@ -2921,11 +2951,16 @@ + char p_lang[3]="\0"; + + /* Get Server name and version info */ +- build_expert_data(ncp_tree, "ncp.server_name", fsname, 0, FALSE); +- build_expert_data(ncp_tree, "ncp.product_major_version", p_maj_ver, 0, FALSE); +- build_expert_data(ncp_tree, "ncp.product_minor_version", p_min_ver, 0, FALSE); +- build_expert_data(ncp_tree, "ncp.product_revision_version", p_rev, 0, FALSE); +- build_expert_data(ncp_tree, "ncp.os_language_id", p_lang, 0, FALSE); ++ build_expert_data(ncp_tree, "ncp.server_name", ++ fsname, sizeof fsname, 0, FALSE); ++ build_expert_data(ncp_tree, "ncp.product_major_version", ++ p_maj_ver, sizeof p_maj_ver, 0, FALSE); ++ build_expert_data(ncp_tree, "ncp.product_minor_version", ++ p_min_ver, sizeof p_min_ver, 0, FALSE); ++ build_expert_data(ncp_tree, "ncp.product_revision_version", ++ p_rev, sizeof p_rev, 0, FALSE); ++ build_expert_data(ncp_tree, "ncp.os_language_id", ++ p_lang, sizeof p_lang, 0, FALSE); + expert_add_info_format(pinfo, NULL, PI_RESPONSE_CODE, PI_CHAT, "Server %s, version %s.%s, support pack %s, language %s", fsname, + p_maj_ver, p_min_ver, p_rev, p_lang); + } +@@ -2955,16 +2990,16 @@ + guint16 rstate = 0; + guint16 rnum = 0; + guint16 revent = 0; +- gint length_remaining; ++ gint length_remaining; + nstime_t ns; + gboolean entry_rights = FALSE; + nds_val temp_values; + + voffset = vvalues->voffset; +- if(tvb_get_guint8(tvb, voffset) == 0x00) ++ /*if(tvb_get_guint8(tvb, voffset) == 0x00) + { + voffset = voffset+2; +- } ++ }*/ + + number_of_values = tvb_get_letohl(tvb, voffset); + +@@ -2985,220 +3020,221 @@ + oldvoffset = voffset; + switch(syntax_type) + { +- case 0x00000006: /* Case Insensitive List */ +- case 0x00000012: /* Postal Address */ +- voffset += align_4(tvb, voffset); +- voffset = voffset+4; +- number_of_items = tvb_get_letohl(tvb, voffset); +- voffset = voffset+4; +- for (r=1; r<=number_of_items; r++) +- { +- value1 = tvb_get_letohl(tvb, voffset); +- voffset = voffset + 4; +- get_string(tvb, voffset, value1, vvalues->vstring); +- proto_tree_add_string(nvtree, hf_value_string, tvb, voffset, +- value1, vvalues->vstring); +- voffset = voffset + value1; +- voffset += align_4(tvb, voffset); +- } +- break; +- case 0x00000007: /* Boolean */ +- voffset+=4; /* this is always just a parameter count of 1, so ignore */ +- value1 = tvb_get_guint8(tvb, voffset); /* Boolean value */ +- if (value1==0) +- { +- vvalues->vstring = "False"; +- } +- else +- { +- vvalues->vstring = "True"; +- } +- tvb_ensure_bytes_exist(tvb, voffset, 1); +- proto_tree_add_string(nvtree, hf_value_string, tvb, voffset, +- 1, vvalues->vstring); +- voffset=voffset+1; +- voffset += align_4(tvb, voffset); +- break; +- case 0x00000009: /* Binary String */ +- value1 = tvb_get_letohl(tvb, voffset); /* length of field */ +- length_remaining = tvb_length_remaining(tvb, voffset); +- if(length_remaining == -1 || value1 > (guint32) length_remaining) +- { +- break; +- } +- voffset += 4; +- tvb_ensure_bytes_exist(tvb, voffset, value1); +- proto_tree_add_bytes(nvtree, hf_value_bytes, tvb, voffset, value1, tvb_get_ptr(tvb, voffset, value1)); +- voffset += value1; +- voffset += (value1%2); +- break; +- case 0x0000000d: /* Binary String List */ +- value1 = tvb_get_letohl(tvb, voffset); /* Overall length of field list */ +- length_remaining = tvb_length_remaining(tvb, voffset); +- if(length_remaining == -1 || value1 > (guint32) length_remaining) +- { +- break; +- } +- voffset += 4; +- tvb_ensure_bytes_exist(tvb, voffset, value1); +- number_of_items = tvb_get_letohl(tvb, voffset); +- voffset = voffset+4; +- for (r=1; r<=number_of_items; r++) +- { +- value1 = tvb_get_letohl(tvb, voffset); /* length of field */ +- length_remaining = tvb_length_remaining(tvb, voffset); +- if(length_remaining == -1 || value1 > (guint32) length_remaining) +- { +- break; +- } +- voffset += 4; +- tvb_ensure_bytes_exist(tvb, voffset, value1); +- proto_tree_add_bytes(nvtree, hf_value_bytes, tvb, voffset, value1, tvb_get_ptr(tvb, voffset, value1)); +- voffset += value1; +- voffset += (value1%2); +- } +- break; +- case 0x00000015: /* Stream */ +- value1 = tvb_get_letohl(tvb, voffset); /* length of field */ +- length_remaining = tvb_length_remaining(tvb, voffset); +- if(length_remaining == -1 || value1 > (guint32) length_remaining) +- { +- break; +- } +- proto_tree_add_text(nvtree, tvb, voffset, 4, "No value, Open stream file for data."); +- voffset += 4; +- voffset += value1; +- voffset += (value1%2); +- break; +- case 0x00000008: /* Signed Integer */ +- case 0x00000016: /* Counter */ +- case 0x0000001b: /* Interval */ +- value1 = tvb_get_letohl(tvb, voffset); /* length of field */ +- voffset = voffset+4; +- value2 = tvb_get_letohl(tvb, voffset); /* Value */ +- tvb_ensure_bytes_exist(tvb, voffset, value1); +- if (strcmp(vvalues->vstring, "zendmSearchType")==0) { +- proto_tree_add_uint_format(nvtree, hf_nds_uint32value, tvb, voffset, +- value1, value2, "Value (%d) = %s", value2, match_strval(value2, zensearchenum)); +- } +- else +- { +- proto_tree_add_uint_format(nvtree, hf_nds_uint32value, tvb, voffset, +- value1, value2, "Value %d", value2); +- } +- voffset = voffset+4; +- break; +- case 0x0000000b: /* Fax Number */ +- value1 = tvb_get_letohl(tvb, voffset); /* length of field */ +- voffset = voffset+4; +- get_string(tvb, voffset, value1, vvalues->vstring); +- proto_tree_add_string(nvtree, hf_value_string, tvb, voffset, +- value1, vvalues->vstring); +- voffset = voffset + value1; +- voffset += align_4(tvb, voffset); +- break; +- case 0x0000000c: /* Network Address */ +- value1 = tvb_get_letohl(tvb, voffset); /* length of field */ +- voffset = voffset + 4; +- value2 = tvb_get_letohl(tvb, voffset); /* type of Protocol */ +- valuestr = match_strval(value2, nds_protocol_type); +- if (valuestr == NULL) +- { +- valuestr="(Undefined Protocol)"; +- } +- tvb_ensure_bytes_exist(tvb, voffset, value1); +- proto_tree_add_uint_format(nvtree, hf_nds_uint32value, tvb, voffset, +- value1, value2, valuestr, value2); +- voffset = voffset+4; +- value3 = tvb_get_letohl(tvb, voffset); /* length of address */ +- voffset = voffset+4; +- switch (value2) +- { +- case NDS_PTYPE_IPX: ++ case 0x00000006: /* Case Insensitive List */ ++ case 0x00000012: /* Postal Address */ ++ voffset += align_4(tvb, voffset); ++ voffset = voffset+4; ++ number_of_items = tvb_get_letohl(tvb, voffset); ++ voffset = voffset+4; ++ for (r=1; r<=number_of_items; r++) ++ { ++ value1 = tvb_get_letohl(tvb, voffset); ++ voffset = voffset + 4; ++ vvalues->vstring = get_string(tvb, voffset, value1); ++ proto_tree_add_string(nvtree, hf_value_string, tvb, voffset, ++ value1, vvalues->vstring); ++ voffset = voffset + value1; ++ voffset += align_4(tvb, voffset); ++ } ++ break; ++ case 0x00000007: /* Boolean */ ++ voffset+=4; /* this is always just a parameter count of 1, so ignore */ ++ value1 = tvb_get_guint8(tvb, voffset); /* Boolean value */ ++ if (value1==0) ++ { ++ vvalues->vstring = "False"; ++ } ++ else ++ { ++ vvalues->vstring = "True"; ++ } ++ tvb_ensure_bytes_exist(tvb, voffset, 1); ++ proto_tree_add_string(nvtree, hf_value_string, tvb, voffset, ++ 1, vvalues->vstring); ++ voffset=voffset+1; ++ voffset += align_4(tvb, voffset); ++ break; ++ case 0x00000009: /* Binary String */ ++ value1 = tvb_get_letohl(tvb, voffset); /* length of field */ ++ length_remaining = tvb_length_remaining(tvb, voffset); ++ if(length_remaining == -1 || value1 > (guint32) length_remaining) ++ { ++ break; ++ } ++ voffset += 4; ++ tvb_ensure_bytes_exist(tvb, voffset, value1); ++ proto_tree_add_bytes(nvtree, hf_value_bytes, tvb, voffset, value1, tvb_get_ptr(tvb, voffset, value1)); ++ voffset += value1; ++ voffset += (value1%2); ++ break; ++ case 0x0000000d: /* Binary String List */ ++ value1 = tvb_get_letohl(tvb, voffset); /* Overall length of field list */ ++ length_remaining = tvb_length_remaining(tvb, voffset); ++ if(length_remaining == -1 || value1 > (guint32) length_remaining) ++ { ++ break; ++ } ++ voffset += 4; ++ tvb_ensure_bytes_exist(tvb, voffset, value1); ++ number_of_items = tvb_get_letohl(tvb, voffset); ++ voffset = voffset+4; ++ for (r=1; r<=number_of_items; r++) ++ { ++ value1 = tvb_get_letohl(tvb, voffset); /* length of field */ ++ length_remaining = tvb_length_remaining(tvb, voffset); ++ if(length_remaining == -1 || value1 > (guint32) length_remaining) ++ { ++ break; ++ } ++ voffset += 4; ++ tvb_ensure_bytes_exist(tvb, voffset, value1); ++ proto_tree_add_bytes(nvtree, hf_value_bytes, tvb, voffset, value1, tvb_get_ptr(tvb, voffset, value1)); ++ voffset += value1; ++ voffset += (value1%2); ++ } ++ break; ++ case 0x00000015: /* Stream */ ++ value1 = tvb_get_letohl(tvb, voffset); /* length of field */ ++ length_remaining = tvb_length_remaining(tvb, voffset); ++ if(length_remaining == -1 || value1 > (guint32) length_remaining) ++ { ++ break; ++ } ++ proto_tree_add_text(nvtree, tvb, voffset, 4, "No value, Open stream file for data."); ++ voffset += 4; ++ voffset += value1; ++ voffset += (value1%2); ++ break; ++ case 0x00000008: /* Signed Integer */ ++ case 0x00000016: /* Counter */ ++ case 0x0000001b: /* Interval */ ++ value1 = tvb_get_letohl(tvb, voffset); /* length of field */ ++ voffset = voffset+4; ++ value2 = tvb_get_letohl(tvb, voffset); /* Value */ ++ tvb_ensure_bytes_exist(tvb, voffset, value1); ++ if (strcmp(vvalues->vstring, "zendmSearchType")==0) { ++ proto_tree_add_uint_format(nvtree, hf_nds_uint32value, tvb, voffset, ++ value1, value2, ++ "Value (%d) = %s", value2, match_strval(value2, zensearchenum)); ++ } ++ else ++ { ++ proto_tree_add_uint_format(nvtree, hf_nds_uint32value, tvb, voffset, ++ value1, value2, "Value %d", value2); ++ } ++ voffset = voffset+4; ++ break; ++ case 0x0000000b: /* Fax Number */ ++ value1 = tvb_get_letohl(tvb, voffset); /* length of field */ ++ voffset = voffset+4; ++ vvalues->vstring = get_string(tvb, voffset, value1); ++ proto_tree_add_string(nvtree, hf_value_string, tvb, voffset, ++ value1, vvalues->vstring); ++ voffset = voffset + value1; ++ voffset += align_4(tvb, voffset); ++ break; ++ case 0x0000000c: /* Network Address */ ++ value1 = tvb_get_letohl(tvb, voffset); /* length of field */ ++ voffset = voffset + 4; ++ value2 = tvb_get_letohl(tvb, voffset); /* type of Protocol */ ++ valuestr = match_strval(value2, nds_protocol_type); ++ if (valuestr == NULL) ++ { ++ valuestr="(Undefined Protocol)"; ++ } ++ tvb_ensure_bytes_exist(tvb, voffset, value1); ++ proto_tree_add_uint_format(nvtree, hf_nds_uint32value, tvb, voffset, ++ value1, value2, valuestr, value2); ++ voffset = voffset+4; ++ value3 = tvb_get_letohl(tvb, voffset); /* length of address */ ++ voffset = voffset+4; ++ switch (value2) ++ { ++ case NDS_PTYPE_IPX: + proto_tree_add_item(nvtree, hf_nds_net, tvb, voffset, 4, FALSE); +- proto_tree_add_item(nvtree, hf_nds_node, tvb, voffset+4, 6, FALSE); +- proto_tree_add_item(nvtree, hf_nds_socket, tvb, voffset+10, 2, FALSE); ++ proto_tree_add_item(nvtree, hf_nds_node, tvb, voffset+4, 6, FALSE); ++ proto_tree_add_item(nvtree, hf_nds_socket, tvb, voffset+10, 2, FALSE); + break; + case NDS_PTYPE_IP: +- if (value3 > 4) { +- proto_tree_add_item(nvtree, hf_nds_port, tvb, voffset, 2, FALSE); +- voffset += 2; +- } +- proto_tree_add_item(nvtree, hf_add_ref_ip, tvb, voffset, 4, FALSE); +- break; ++ if (value3 > 4) { ++ proto_tree_add_item(nvtree, hf_nds_port, tvb, voffset, 2, FALSE); ++ voffset += 2; ++ } ++ proto_tree_add_item(nvtree, hf_add_ref_ip, tvb, voffset, 4, FALSE); ++ break; + case NDS_PTYPE_UDP: +- if (value3 > 4) { +- proto_tree_add_item(nvtree, hf_nds_port, tvb, voffset, 2, FALSE); +- voffset += 2; +- } +- proto_tree_add_item(nvtree, hf_add_ref_udp, tvb, voffset, 4, FALSE); +- break; ++ if (value3 > 4) { ++ proto_tree_add_item(nvtree, hf_nds_port, tvb, voffset, 2, FALSE); ++ voffset += 2; ++ } ++ proto_tree_add_item(nvtree, hf_add_ref_udp, tvb, voffset, 4, FALSE); ++ break; + case NDS_PTYPE_TCP: +- proto_tree_add_item(nvtree, hf_nds_port, tvb, voffset, 2, FALSE); ++ proto_tree_add_item(nvtree, hf_nds_port, tvb, voffset, 2, FALSE); + proto_tree_add_item(nvtree, hf_add_ref_tcp, tvb, voffset+2, 4, FALSE); + break; + case NDS_PTYPE_URL: + case NDS_PTYPE_DNS: +- get_string(tvb, voffset, value3, vvalues->vstring); ++ vvalues->vstring = get_string(tvb, voffset, value3); + proto_tree_add_string(nvtree, hf_value_string, tvb, voffset, +- value3, vvalues->vstring); ++ value3, vvalues->vstring); + break; + default: + break; +- } +- voffset = voffset + value3; +- voffset += align_4(tvb, voffset); +- break; +- case 0x0000000f: /* File System Path */ +- value1 = tvb_get_letohl(tvb, voffset); /* length of field */ +- voffset = voffset + 4; +- value2 = tvb_get_letohl(tvb, voffset); /* Name Space */ +- valuestr = match_strval(value2, name_space_type); +- if (valuestr == NULL) +- { ++ } ++ voffset = voffset + value3; ++ voffset += align_4(tvb, voffset); ++ break; ++ case 0x0000000f: /* File System Path */ ++ value1 = tvb_get_letohl(tvb, voffset); /* length of field */ ++ voffset = voffset + 4; ++ value2 = tvb_get_letohl(tvb, voffset); /* Name Space */ ++ valuestr = match_strval(value2, name_space_type); ++ if (valuestr == NULL) ++ { + valuestr = "Unknown Name Space"; +- } +- proto_tree_add_string(nvtree, hf_value_string, tvb, voffset, +- 4, valuestr); +- voffset = voffset+4; +- value3 = tvb_get_letohl(tvb, voffset); /* Length of Volume name */ +- voffset = voffset+4; +- get_string(tvb, voffset, value3, vvalues->vstring); +- proto_tree_add_string(nvtree, hf_value_string, tvb, voffset, +- value3, vvalues->vstring); +- voffset = voffset+value3; +- voffset += align_4(tvb, voffset); +- value4 = tvb_get_letohl(tvb, voffset); /* Length of Path name */ +- voffset = voffset+4; +- get_string(tvb, voffset, value4, vvalues->vstring); +- proto_tree_add_string(nvtree, hf_value_string, tvb, voffset, +- value4, vvalues->vstring); +- voffset = voffset+value4; +- voffset += align_4(tvb, voffset); +- break; +- case 0x00000010: /* Replica Pointer */ +- value1 = tvb_get_letohl(tvb, voffset); /* length of field */ +- voffset = voffset + 4; +- value2 = tvb_get_letohl(tvb, voffset); /* Length of Server name */ +- voffset = voffset+4; +- get_string(tvb, voffset, value2, vvalues->vstring); +- proto_tree_add_string(nvtree, hf_value_string, tvb, voffset, +- value2, vvalues->vstring); +- voffset = voffset+value2; +- voffset += align_4(tvb, voffset); +- rtype = tvb_get_letohs(tvb, voffset); /* replica type */ +- valuestr = match_strval(rtype, nds_replica_type); +- if (valuestr == NULL) +- { ++ } ++ proto_tree_add_string(nvtree, hf_value_string, tvb, voffset, ++ 4, valuestr); ++ voffset = voffset+4; ++ value3 = tvb_get_letohl(tvb, voffset); /* Length of Volume name */ ++ voffset = voffset+4; ++ vvalues->vstring = get_string(tvb, voffset, value3); ++ proto_tree_add_string(nvtree, hf_value_string, tvb, voffset, ++ value3, vvalues->vstring); ++ voffset = voffset+value3; ++ voffset += align_4(tvb, voffset); ++ value4 = tvb_get_letohl(tvb, voffset); /* Length of Path name */ ++ voffset = voffset+4; ++ vvalues->vstring = get_string(tvb, voffset, value4); ++ proto_tree_add_string(nvtree, hf_value_string, tvb, voffset, ++ value4, vvalues->vstring); ++ voffset = voffset+value4; ++ voffset += align_4(tvb, voffset); ++ break; ++ case 0x00000010: /* Replica Pointer */ ++ value1 = tvb_get_letohl(tvb, voffset); /* length of field */ ++ voffset = voffset + 4; ++ value2 = tvb_get_letohl(tvb, voffset); /* Length of Server name */ ++ voffset = voffset+4; ++ vvalues->vstring = get_string(tvb, voffset, value2); ++ proto_tree_add_string(nvtree, hf_value_string, tvb, voffset, ++ value2, vvalues->vstring); ++ voffset = voffset+value2; ++ voffset += align_4(tvb, voffset); ++ rtype = tvb_get_letohs(tvb, voffset); /* replica type */ ++ valuestr = match_strval(rtype, nds_replica_type); ++ if (valuestr == NULL) ++ { + valuestr="(Unknown Replica Type)"; +- } +- proto_tree_add_string(nvtree, hf_replica_type, tvb, voffset, +- 2, valuestr); +- voffset = voffset+2; +- rstate = tvb_get_letohs(tvb, voffset); /* replica state */ +- valuestr = match_strval(rstate, nds_replica_state); +- if (valuestr == NULL) +- { ++ } ++ proto_tree_add_string(nvtree, hf_replica_type, tvb, voffset, ++ 2, valuestr); ++ voffset = voffset+2; ++ rstate = tvb_get_letohs(tvb, voffset); /* replica state */ ++ valuestr = match_strval(rstate, nds_replica_state); ++ if (valuestr == NULL) ++ { + valuestr="(Unknown Replica State)"; + } + proto_tree_add_string(nvtree, hf_replica_state, tvb, voffset, +@@ -3208,23 +3244,35 @@ + proto_tree_add_uint_format(nvtree, hf_replica_number, tvb, voffset, + 4, value3, "Replica Number %d", value3); + voffset = voffset+4; ++ if(vvalues->pflags & 0x8000) ++ { ++ /* If this request flag is set then this is a server. Server structures ++ * include the RootID as part of the replica data. */ ++ proto_tree_add_item(nvtree, hf_nds_partition_root_id, tvb, voffset, 4, FALSE); ++ voffset += 4; ++ } + number_of_items = tvb_get_letohl(tvb, voffset); /* Number of Addresses */ + aditem = proto_tree_add_uint_format(nvtree, hf_nds_uint32value, tvb, voffset, + 4, number_of_items, "Number of Addresses: %u", number_of_items); + +- adtree = proto_item_add_subtree(aditem, ett_nds); +- voffset = voffset+4; +- for (r=1; r <= number_of_items; r++) +- { ++ adtree = proto_item_add_subtree(aditem, ett_nds); ++ voffset = voffset+4; ++ for (r=1; r <= number_of_items; r++) ++ { ++ /* Trap for end of packet */ ++ if(tvb_length_remaining(tvb, voffset)<12) ++ { ++ THROW(ReportedBoundsError); ++ } + voffset += align_4(tvb, voffset); + value4 = tvb_get_letohl(tvb, voffset); /* type of Protocol */ + valuestr = match_strval(value4, nds_protocol_type); + if (valuestr == NULL) + { +- valuestr="(Undefined Protocol)"; ++ valuestr="(Undefined Protocol)"; + } + proto_tree_add_uint_format(adtree, hf_nds_uint32value, tvb, voffset, +- 4, value4, valuestr, value4); ++ 4, value4, valuestr, value4); + voffset = voffset+4; + value5 = tvb_get_letohl(tvb, voffset); /* length of address */ + voffset = voffset+4; +@@ -3232,24 +3280,24 @@ + { + case NDS_PTYPE_IPX: + proto_tree_add_item(adtree, hf_nds_net, tvb, voffset, 4, FALSE); +- proto_tree_add_item(adtree, hf_nds_node, tvb, voffset+4, 6, FALSE); +- proto_tree_add_item(adtree, hf_nds_socket, tvb, voffset+10, 2, FALSE); ++ proto_tree_add_item(adtree, hf_nds_node, tvb, voffset+4, 6, FALSE); ++ proto_tree_add_item(adtree, hf_nds_socket, tvb, voffset+10, 2, FALSE); + break; + case NDS_PTYPE_IP: +- proto_tree_add_item(adtree, hf_nds_port, tvb, voffset, 2, FALSE); +- proto_tree_add_item(adtree, hf_add_ref_ip, tvb, voffset+2, 4, FALSE); ++ proto_tree_add_item(adtree, hf_nds_port, tvb, voffset, 2, FALSE); ++ proto_tree_add_item(adtree, hf_add_ref_ip, tvb, voffset+2, 4, FALSE); + break; + case NDS_PTYPE_UDP: +- proto_tree_add_item(adtree, hf_nds_port, tvb, voffset, 2, FALSE); +- proto_tree_add_item(adtree, hf_add_ref_udp, tvb, voffset+2, 4, FALSE); ++ proto_tree_add_item(adtree, hf_nds_port, tvb, voffset, 2, FALSE); ++ proto_tree_add_item(adtree, hf_add_ref_udp, tvb, voffset+2, 4, FALSE); + break; + case NDS_PTYPE_TCP: +- proto_tree_add_item(adtree, hf_nds_port, tvb, voffset, 2, FALSE); ++ proto_tree_add_item(adtree, hf_nds_port, tvb, voffset, 2, FALSE); + proto_tree_add_item(adtree, hf_add_ref_tcp, tvb, voffset+2, 4, FALSE); + break; + case NDS_PTYPE_URL: + case NDS_PTYPE_DNS: +- get_string(tvb, voffset, value5, vvalues->vstring); ++ vvalues->vstring = get_string(tvb, voffset, value5); + proto_tree_add_string(adtree, hf_value_string, tvb, voffset, + value5, vvalues->vstring); + break; +@@ -3257,270 +3305,270 @@ + break; + } + voffset = voffset + value5; +- } +- voffset += align_4(tvb, voffset); +- break; +- case 0x00000011: /* Object ACL */ +- value1 = tvb_get_letohl(tvb, voffset); /* Length of Field */ +- voffset = voffset + 4; +- value2 = tvb_get_letohl(tvb, voffset); +- voffset = voffset + 4; +- get_string(tvb, voffset, value2, vvalues->vstring); /* Unicode String */ +- proto_tree_add_string(nvtree, hf_value_string, tvb, voffset, +- value2, vvalues->vstring); +- if (strcmp(vvalues->vstring, "[Entry Rights]")) { +- entry_rights=TRUE; +- } +- else +- { +- entry_rights=FALSE; +- } +- voffset = voffset + value2; +- voffset += align_4(tvb, voffset); +- value3 = tvb_get_letohl(tvb, voffset); +- voffset = voffset + 4; +- get_string(tvb, voffset, value3, vvalues->vstring); /* Unicode Subject Name */ +- proto_tree_add_string(nvtree, hf_value_string, tvb, voffset, +- value3, vvalues->vstring); +- voffset = voffset + value3; +- voffset += align_4(tvb, voffset); +- temp_values.vvalue = tvb_get_letohl(tvb, voffset); /* Entry or Attribute Privileges */ +- temp_values.vlength = 2; +- temp_values.hfname = hf_nds_vflags; +- temp_values.voffset = voffset; +- temp_values.vdesc = "Privileges"; +- if (entry_rights) { +- /* if Entries then use these bits */ +- temp_values.bit1 = "Compare Attributes"; +- temp_values.bit1hfname = hf_nds_compare_attributes; +- temp_values.bit2 = "Read Attribute"; +- temp_values.bit2hfname = hf_nds_read_attribute; +- temp_values.bit3 = "Write, Add, Delete Attribute"; +- temp_values.bit3hfname = hf_nds_write_add_delete_attribute; +- temp_values.bit4 = "Add/Delete Self"; +- temp_values.bit4hfname = hf_nds_add_delete_self; +- temp_values.bit5 = "Attribute Privilege Not Defined"; +- temp_values.bit5hfname = hf_nds_privilege_not_defined; +- temp_values.bit6 = "Supervisor"; +- temp_values.bit6hfname = hf_nds_supervisor; +- temp_values.bit7 = "Inheritance Control"; +- temp_values.bit7hfname = hf_nds_inheritance_control; +- temp_values.bit8 = "Not Defined"; +- temp_values.bit8hfname = hf_bit8vflags; +- temp_values.bit9 = "Not Defined"; +- temp_values.bit9hfname = hf_bit9vflags; +- temp_values.bit10 = "Not Defined"; +- temp_values.bit10hfname = hf_bit10vflags; +- temp_values.bit11 = "Not Defined"; +- temp_values.bit11hfname = hf_bit11vflags; +- temp_values.bit12 = "Not Defined"; +- temp_values.bit12hfname = hf_bit12vflags; +- temp_values.bit13 = "Not Defined"; +- temp_values.bit13hfname = hf_bit13vflags; +- temp_values.bit14 = "Not Defined"; +- temp_values.bit14hfname = hf_bit14vflags; +- temp_values.bit15 = "Not Defined"; +- temp_values.bit15hfname = hf_bit15vflags; +- temp_values.bit16 = "Not Defined"; +- temp_values.bit16hfname = hf_bit16vflags; +- } +- else +- { +- /* if attribute rights then do these bits */ +- temp_values.bit1 = "Browse"; +- temp_values.bit1hfname = hf_nds_browse_entry; +- temp_values.bit2 = "Add"; +- temp_values.bit2hfname = hf_nds_add_entry; +- temp_values.bit3 = "Delete"; +- temp_values.bit3hfname = hf_nds_delete_entry; +- temp_values.bit4 = "Rename"; +- temp_values.bit4hfname = hf_nds_rename_entry; +- temp_values.bit5 = "Supervisor"; +- temp_values.bit5hfname = hf_nds_supervisor_entry; +- temp_values.bit6 = "Entry Privilege Not Defined"; +- temp_values.bit6hfname = hf_nds_entry_privilege_not_defined; +- temp_values.bit7 = "Inheritance Control"; +- temp_values.bit7hfname = hf_nds_inheritance_control; +- temp_values.bit8 = "Not Defined"; +- temp_values.bit8hfname = hf_bit8vflags; +- temp_values.bit9 = "Not Defined"; +- temp_values.bit9hfname = hf_bit9vflags; +- temp_values.bit10 = "Not Defined"; +- temp_values.bit10hfname = hf_bit10vflags; +- temp_values.bit11 = "Not Defined"; +- temp_values.bit11hfname = hf_bit11vflags; +- temp_values.bit12 = "Not Defined"; +- temp_values.bit12hfname = hf_bit12vflags; +- temp_values.bit13 = "Not Defined"; +- temp_values.bit13hfname = hf_bit13vflags; +- temp_values.bit14 = "Not Defined"; +- temp_values.bit14hfname = hf_bit14vflags; +- temp_values.bit15 = "Not Defined"; +- temp_values.bit15hfname = hf_bit15vflags; +- temp_values.bit16 = "Not Defined"; +- temp_values.bit16hfname = hf_bit16vflags; +- } +- process_bitfield(nvtree, tvb, &temp_values); +- voffset = voffset+4; +- voffset += align_4(tvb, voffset); +- break; +- case 0x00000013: /* Time Stamp */ +- value1 = tvb_get_letohl(tvb, voffset); /* Seconds */ +- proto_tree_add_uint_format(nvtree, hf_nds_uint32value, tvb, voffset, +- 4, value1, "Length of Record: %d", value1); +- voffset = voffset+4; +- ns.secs = tvb_get_letohl(tvb, voffset); +- ns.nsecs = 0; +- proto_tree_add_time_format(nvtree, hf_nds_ds_time, tvb, voffset, 4, &ns, "Timestamp: %s", abs_time_to_str(&ns)); +- voffset = voffset + 4; +- rnum = tvb_get_letohs(tvb, voffset); /* replica number */ +- proto_tree_add_uint_format(nvtree, hf_nds_rnum, tvb, voffset, +- 2, rnum, "Replica Number: %d", rnum); +- voffset = voffset+2; +- revent = tvb_get_letohs(tvb, voffset); /* Event */ +- proto_tree_add_uint_format(nvtree, hf_nds_revent, tvb, voffset, +- 2, revent, "Event: %d", revent); +- voffset = voffset+2; +- voffset += align_4(tvb, voffset); +- break; +- case 0x00000017: /* Back Link */ +- value1 = tvb_get_letohl(tvb, voffset); /* Length */ +- proto_tree_add_uint_format(nvtree, hf_nds_uint32value, tvb, voffset, +- 4, value1, "Length of Record %08x", value1); +- voffset = voffset+4; +- value2 = tvb_get_letohl(tvb, voffset); /* Remote ID */ +- proto_tree_add_uint_format(nvtree, hf_nds_uint32value, tvb, voffset, +- 4, value2, "Remote ID %08x", value2); +- voffset = voffset+4; +- value3 = tvb_get_letohl(tvb, voffset); /* Length of string */ +- voffset = voffset+4; +- get_string(tvb, voffset, value3, vvalues->vstring); +- proto_tree_add_string_format(nvtree, hf_value_string, tvb, voffset, +- value3, vvalues->vstring, +- "Server Distinguished Name - %s", vvalues->vstring); +- voffset = voffset+value3; +- voffset += align_4(tvb, voffset); +- break; +- case 0x00000018: /* Time */ +- voffset += 4; /* This is the length of the time data no need to decode, always 4 bytes */ +- ns.secs = tvb_get_letohl(tvb, voffset); +- ns.nsecs = 0; +- proto_tree_add_time_format(nvtree, hf_nds_ds_time, tvb, voffset, 4, &ns, "Time: %s", abs_time_to_str(&ns)); +- voffset = voffset + 4; +- break; +- case 0x00000019: /* Typed Name */ +- value1 = tvb_get_letohl(tvb, voffset); /* Length */ +- proto_tree_add_uint_format(nvtree, hf_nds_uint32value, tvb, voffset, +- 4, value1, "Length of Record %08x", value1); +- voffset = voffset+4; +- value2 = tvb_get_letohl(tvb, voffset); /* Level */ +- proto_tree_add_uint_format(nvtree, hf_nds_uint32value, tvb, voffset, +- 4, value2, "Level %d", value2); +- voffset = voffset+4; +- value3 = tvb_get_letohl(tvb, voffset); /* Interval */ +- proto_tree_add_uint_format(nvtree, hf_nds_uint32value, tvb, voffset, +- 4, value3, "Interval %d", value3); +- voffset = voffset+4; +- value4 = tvb_get_letohl(tvb, voffset); /* Distinguished Name */ +- voffset = voffset+4; +- get_string(tvb, voffset, value4, vvalues->vstring); +- proto_tree_add_string_format(nvtree, hf_value_string, tvb, voffset, +- value4, vvalues->vstring, +- "Distinguished Name - %s", vvalues->vstring); +- voffset = voffset+value4; +- voffset += align_4(tvb, voffset); +- break; +- case 0x0000001a: /* Hold */ +- value1 = tvb_get_letohl(tvb, voffset); /* Length */ +- proto_tree_add_uint_format(nvtree, hf_nds_uint32value, tvb, voffset, +- 4, value1, "Length of Record %08x", value1); +- voffset = voffset+4; +- value2 = tvb_get_letohl(tvb, voffset); /* Amount */ +- proto_tree_add_uint_format(nvtree, hf_nds_uint32value, tvb, voffset, +- 4, value2, "Amount %d", value2); +- voffset = voffset+4; +- value3 = tvb_get_letohl(tvb, voffset); /* Subject */ +- voffset = voffset+4; +- get_string(tvb, voffset, value3, vvalues->vstring); +- proto_tree_add_string_format(nvtree, hf_value_string, tvb, voffset, +- value3, vvalues->vstring, +- "Subject - %s", vvalues->vstring); +- voffset = voffset+value3; +- voffset += align_4(tvb, voffset); +- break; +- case 0x00000001: /* Distinguished Name */ +- case 0x00000002: /* Case Sensitive Unicode String */ +- case 0x00000003: /* Non Case Sensitive Unicode String */ +- case 0x00000004: /* Printable String */ +- case 0x00000005: /* Numeric String */ +- case 0x0000000a: /* Telephone Number */ +- case 0x0000000e: /* Email Address */ +- case 0x00000014: /* Class Name */ +- default: +- value1 = tvb_get_letohl(tvb, voffset); +- voffset = voffset + 4; +- if (strcmp(vvalues->vstring, "zendmSearchOrder")==0) { +- get_string(tvb, voffset, value1, vvalues->vstring); +- if (strcmp(vvalues->vstring, "0")==0) { +- vvalues->vstring = "Value (0) = Object"; +- } +- if (strcmp(vvalues->vstring, "1")==0) { +- vvalues->vstring = "Value (1) = Group"; +- } +- if (strcmp(vvalues->vstring, "2")==0) { +- vvalues->vstring = "Value (2) = Container"; +- } +- if (strcmp(vvalues->vstring, "01")==0) { +- vvalues->vstring = "Value (01) = Object, Group"; +- } +- if (strcmp(vvalues->vstring, "02")==0) { +- vvalues->vstring = "Value (02) = Object, Container"; +- } +- if (strcmp(vvalues->vstring, "10")==0) { +- vvalues->vstring = "Value (10) = Group, Object"; +- } +- if (strcmp(vvalues->vstring, "12")==0) { +- vvalues->vstring = "Value (12) = Group, Container"; +- } +- if (strcmp(vvalues->vstring, "20")==0) { +- vvalues->vstring = "Value (20) = Container, Object"; +- } +- if (strcmp(vvalues->vstring, "21")==0) { +- vvalues->vstring = "Value (21) = Container, Group"; +- } +- if (strcmp(vvalues->vstring, "012")==0) { +- vvalues->vstring = "Value (012) = Object, Group, Container"; +- } +- if (strcmp(vvalues->vstring, "021")==0) { +- vvalues->vstring = "Value (021) = Object, Container, Group"; +- } +- if (strcmp(vvalues->vstring, "102")==0) { +- vvalues->vstring = "Value (102) = Group, Object, Container"; +- } +- if (strcmp(vvalues->vstring, "120")==0) { +- vvalues->vstring = "Value (120) = Group, Container, Object"; +- } +- if (strcmp(vvalues->vstring, "201")==0) { +- vvalues->vstring = "Value (201) = Container, Object, Group"; +- } +- if (strcmp(vvalues->vstring, "210")==0) { +- vvalues->vstring = "Value (210) = Container, Group, Object"; +- } +- } +- else +- { +- get_string(tvb, voffset, value1, vvalues->vstring); +- } +- proto_tree_add_string(nvtree, hf_value_string, tvb, voffset, +- value1, vvalues->vstring); +- voffset = voffset + value1; +- voffset += align_4(tvb, voffset); +- break; ++ } ++ voffset += align_4(tvb, voffset); ++ break; ++ case 0x00000011: /* Object ACL */ ++ value1 = tvb_get_letohl(tvb, voffset); /* Length of Field */ ++ voffset = voffset + 4; ++ value2 = tvb_get_letohl(tvb, voffset); ++ voffset = voffset + 4; ++ vvalues->vstring = get_string(tvb, voffset, value2); /* Unicode String */ ++ proto_tree_add_string(nvtree, hf_value_string, tvb, voffset, ++ value2, vvalues->vstring); ++ if (strcmp(vvalues->vstring, "[Entry Rights]")) { ++ entry_rights=TRUE; ++ } ++ else ++ { ++ entry_rights=FALSE; ++ } ++ voffset = voffset + value2; ++ voffset += align_4(tvb, voffset); ++ value3 = tvb_get_letohl(tvb, voffset); ++ voffset = voffset + 4; ++ vvalues->vstring = get_string(tvb, voffset, value3); /* Unicode Subject Name */ ++ proto_tree_add_string(nvtree, hf_value_string, tvb, voffset, ++ value3, vvalues->vstring); ++ voffset = voffset + value3; ++ voffset += align_4(tvb, voffset); ++ temp_values.vvalue = tvb_get_letohl(tvb, voffset); /* Entry or Attribute Privileges */ ++ temp_values.vlength = 2; ++ temp_values.hfname = hf_nds_vflags; ++ temp_values.voffset = voffset; ++ temp_values.vdesc = "Privileges"; ++ if (entry_rights) { ++ /* if Entries then use these bits */ ++ temp_values.bit1 = "Compare Attributes"; ++ temp_values.bit1hfname = hf_nds_compare_attributes; ++ temp_values.bit2 = "Read Attribute"; ++ temp_values.bit2hfname = hf_nds_read_attribute; ++ temp_values.bit3 = "Write, Add, Delete Attribute"; ++ temp_values.bit3hfname = hf_nds_write_add_delete_attribute; ++ temp_values.bit4 = "Add/Delete Self"; ++ temp_values.bit4hfname = hf_nds_add_delete_self; ++ temp_values.bit5 = "Attribute Privilege Not Defined"; ++ temp_values.bit5hfname = hf_nds_privilege_not_defined; ++ temp_values.bit6 = "Supervisor"; ++ temp_values.bit6hfname = hf_nds_supervisor; ++ temp_values.bit7 = "Inheritance Control"; ++ temp_values.bit7hfname = hf_nds_inheritance_control; ++ temp_values.bit8 = "Not Defined"; ++ temp_values.bit8hfname = hf_bit8vflags; ++ temp_values.bit9 = "Not Defined"; ++ temp_values.bit9hfname = hf_bit9vflags; ++ temp_values.bit10 = "Not Defined"; ++ temp_values.bit10hfname = hf_bit10vflags; ++ temp_values.bit11 = "Not Defined"; ++ temp_values.bit11hfname = hf_bit11vflags; ++ temp_values.bit12 = "Not Defined"; ++ temp_values.bit12hfname = hf_bit12vflags; ++ temp_values.bit13 = "Not Defined"; ++ temp_values.bit13hfname = hf_bit13vflags; ++ temp_values.bit14 = "Not Defined"; ++ temp_values.bit14hfname = hf_bit14vflags; ++ temp_values.bit15 = "Not Defined"; ++ temp_values.bit15hfname = hf_bit15vflags; ++ temp_values.bit16 = "Not Defined"; ++ temp_values.bit16hfname = hf_bit16vflags; ++ } ++ else ++ { ++ /* if attribute rights then do these bits */ ++ temp_values.bit1 = "Browse"; ++ temp_values.bit1hfname = hf_nds_browse_entry; ++ temp_values.bit2 = "Add"; ++ temp_values.bit2hfname = hf_nds_add_entry; ++ temp_values.bit3 = "Delete"; ++ temp_values.bit3hfname = hf_nds_delete_entry; ++ temp_values.bit4 = "Rename"; ++ temp_values.bit4hfname = hf_nds_rename_entry; ++ temp_values.bit5 = "Supervisor"; ++ temp_values.bit5hfname = hf_nds_supervisor_entry; ++ temp_values.bit6 = "Entry Privilege Not Defined"; ++ temp_values.bit6hfname = hf_nds_entry_privilege_not_defined; ++ temp_values.bit7 = "Inheritance Control"; ++ temp_values.bit7hfname = hf_nds_inheritance_control; ++ temp_values.bit8 = "Not Defined"; ++ temp_values.bit8hfname = hf_bit8vflags; ++ temp_values.bit9 = "Not Defined"; ++ temp_values.bit9hfname = hf_bit9vflags; ++ temp_values.bit10 = "Not Defined"; ++ temp_values.bit10hfname = hf_bit10vflags; ++ temp_values.bit11 = "Not Defined"; ++ temp_values.bit11hfname = hf_bit11vflags; ++ temp_values.bit12 = "Not Defined"; ++ temp_values.bit12hfname = hf_bit12vflags; ++ temp_values.bit13 = "Not Defined"; ++ temp_values.bit13hfname = hf_bit13vflags; ++ temp_values.bit14 = "Not Defined"; ++ temp_values.bit14hfname = hf_bit14vflags; ++ temp_values.bit15 = "Not Defined"; ++ temp_values.bit15hfname = hf_bit15vflags; ++ temp_values.bit16 = "Not Defined"; ++ temp_values.bit16hfname = hf_bit16vflags; ++ } ++ process_bitfield(nvtree, tvb, &temp_values); ++ voffset = voffset+4; ++ voffset += align_4(tvb, voffset); ++ break; ++ case 0x00000013: /* Time Stamp */ ++ value1 = tvb_get_letohl(tvb, voffset); /* Seconds */ ++ proto_tree_add_uint_format(nvtree, hf_nds_uint32value, tvb, voffset, ++ 4, value1, "Length of Record: %u", value1); ++ voffset = voffset+4; ++ ns.secs = tvb_get_letohl(tvb, voffset); ++ ns.nsecs = 0; ++ proto_tree_add_time_format(nvtree, hf_nds_ds_time, tvb, voffset, 4, &ns, "Timestamp: %s", abs_time_to_str(&ns)); ++ voffset = voffset + 4; ++ rnum = tvb_get_letohs(tvb, voffset); /* replica number */ ++ proto_tree_add_uint_format(nvtree, hf_nds_rnum, tvb, voffset, ++ 2, rnum, "Replica Number: %d", rnum); ++ voffset = voffset+2; ++ revent = tvb_get_letohs(tvb, voffset); /* Event */ ++ proto_tree_add_uint_format(nvtree, hf_nds_revent, tvb, voffset, ++ 2, revent, "Event: %d", revent); ++ voffset = voffset+2; ++ voffset += align_4(tvb, voffset); ++ break; ++ case 0x00000017: /* Back Link */ ++ value1 = tvb_get_letohl(tvb, voffset); /* Length */ ++ proto_tree_add_uint_format(nvtree, hf_nds_uint32value, tvb, voffset, ++ 4, value1, "Length of Record %08x", value1); ++ voffset = voffset+4; ++ value2 = tvb_get_letohl(tvb, voffset); /* Remote ID */ ++ proto_tree_add_uint_format(nvtree, hf_nds_uint32value, tvb, voffset, ++ 4, value2, "Remote ID %08x", value2); ++ voffset = voffset+4; ++ value3 = tvb_get_letohl(tvb, voffset); /* Length of string */ ++ voffset = voffset+4; ++ vvalues->vstring = get_string(tvb, voffset, value3); ++ proto_tree_add_string_format(nvtree, hf_value_string, tvb, voffset, ++ value3, vvalues->vstring, ++ "Server Distinguished Name - %s", vvalues->vstring); ++ voffset = voffset+value3; ++ voffset += align_4(tvb, voffset); ++ break; ++ case 0x00000018: /* Time */ ++ voffset += 4; /* This is the length of the time data no need to decode, always 4 bytes */ ++ ns.secs = tvb_get_letohl(tvb, voffset); ++ ns.nsecs = 0; ++ proto_tree_add_time_format(nvtree, hf_nds_ds_time, tvb, voffset, 4, &ns, "Time: %s", abs_time_to_str(&ns)); ++ voffset = voffset + 4; ++ break; ++ case 0x00000019: /* Typed Name */ ++ value1 = tvb_get_letohl(tvb, voffset); /* Length */ ++ proto_tree_add_uint_format(nvtree, hf_nds_uint32value, tvb, voffset, ++ 4, value1, "Length of Record %08x", value1); ++ voffset = voffset+4; ++ value2 = tvb_get_letohl(tvb, voffset); /* Level */ ++ proto_tree_add_uint_format(nvtree, hf_nds_uint32value, tvb, voffset, ++ 4, value2, "Level %d", value2); ++ voffset = voffset+4; ++ value3 = tvb_get_letohl(tvb, voffset); /* Interval */ ++ proto_tree_add_uint_format(nvtree, hf_nds_uint32value, tvb, voffset, ++ 4, value3, "Interval %d", value3); ++ voffset = voffset+4; ++ value4 = tvb_get_letohl(tvb, voffset); /* Distinguished Name */ ++ voffset = voffset+4; ++ vvalues->vstring = get_string(tvb, voffset, value4); ++ proto_tree_add_string_format(nvtree, hf_value_string, tvb, voffset, ++ value4, vvalues->vstring, ++ "Distinguished Name - %s", vvalues->vstring); ++ voffset = voffset+value4; ++ voffset += align_4(tvb, voffset); ++ break; ++ case 0x0000001a: /* Hold */ ++ value1 = tvb_get_letohl(tvb, voffset); /* Length */ ++ proto_tree_add_uint_format(nvtree, hf_nds_uint32value, tvb, voffset, ++ 4, value1, "Length of Record %08x", value1); ++ voffset = voffset+4; ++ value2 = tvb_get_letohl(tvb, voffset); /* Amount */ ++ proto_tree_add_uint_format(nvtree, hf_nds_uint32value, tvb, voffset, ++ 4, value2, "Amount %d", value2); ++ voffset = voffset+4; ++ value3 = tvb_get_letohl(tvb, voffset); /* Subject */ ++ voffset = voffset+4; ++ vvalues->vstring = get_string(tvb, voffset, value3); ++ proto_tree_add_string_format(nvtree, hf_value_string, tvb, voffset, ++ value3, vvalues->vstring, ++ "Subject - %s", vvalues->vstring); ++ voffset = voffset+value3; ++ voffset += align_4(tvb, voffset); ++ break; ++ case 0x00000001: /* Distinguished Name */ ++ case 0x00000002: /* Case Sensitive Unicode String */ ++ case 0x00000003: /* Non Case Sensitive Unicode String */ ++ case 0x00000004: /* Printable String */ ++ case 0x00000005: /* Numeric String */ ++ case 0x0000000a: /* Telephone Number */ ++ case 0x0000000e: /* Email Address */ ++ case 0x00000014: /* Class Name */ ++ default: ++ value1 = tvb_get_letohl(tvb, voffset); ++ voffset = voffset + 4; ++ if (strcmp(vvalues->vstring, "zendmSearchOrder")==0) { ++ vvalues->vstring = get_string(tvb, voffset, value1); ++ if (strcmp(vvalues->vstring, "0")==0) { ++ vvalues->vstring = "Value (0) = Object"; ++ } ++ else if (strcmp(vvalues->vstring, "1")==0) { ++ vvalues->vstring = "Value (1) = Group"; ++ } ++ else if (strcmp(vvalues->vstring, "2")==0) { ++ vvalues->vstring = "Value (2) = Container"; ++ } ++ else if (strcmp(vvalues->vstring, "01")==0) { ++ vvalues->vstring = "Value (01) = Object, Group"; ++ } ++ else if (strcmp(vvalues->vstring, "02")==0) { ++ vvalues->vstring = "Value (02) = Object, Container"; ++ } ++ else if (strcmp(vvalues->vstring, "10")==0) { ++ vvalues->vstring = "Value (10) = Group, Object"; ++ } ++ else if (strcmp(vvalues->vstring, "12")==0) { ++ vvalues->vstring = "Value (12) = Group, Container"; ++ } ++ else if (strcmp(vvalues->vstring, "20")==0) { ++ vvalues->vstring = "Value (20) = Container, Object"; ++ } ++ else if (strcmp(vvalues->vstring, "21")==0) { ++ vvalues->vstring = "Value (21) = Container, Group"; ++ } ++ else if (strcmp(vvalues->vstring, "012")==0) { ++ vvalues->vstring = "Value (012) = Object, Group, Container"; ++ } ++ else if (strcmp(vvalues->vstring, "021")==0) { ++ vvalues->vstring = "Value (021) = Object, Container, Group"; ++ } ++ else if (strcmp(vvalues->vstring, "102")==0) { ++ vvalues->vstring = "Value (102) = Group, Object, Container"; ++ } ++ else if (strcmp(vvalues->vstring, "120")==0) { ++ vvalues->vstring = "Value (120) = Group, Container, Object"; ++ } ++ else if (strcmp(vvalues->vstring, "201")==0) { ++ vvalues->vstring = "Value (201) = Container, Object, Group"; ++ } ++ else if (strcmp(vvalues->vstring, "210")==0) { ++ vvalues->vstring = "Value (210) = Container, Group, Object"; ++ } ++ } ++ else ++ { ++ vvalues->vstring = get_string(tvb, voffset, value1); ++ } ++ proto_tree_add_string(nvtree, hf_value_string, tvb, voffset, ++ value1, vvalues->vstring); ++ voffset = voffset + value1; ++ voffset += align_4(tvb, voffset); ++ break; + } + voffset += align_4(tvb, voffset); + } + vvalues->voffset=voffset; +-return; ++ return; + } + + static guint32 +@@ -3536,18 +3584,15 @@ + guint32 i; + guint16 replica_num; + guint16 event_num; +- nw_uni_t mval_buf; + proto_tree *nestree; +- proto_item *nesitem; ++ proto_item *nesitem; + proto_tree *sub1tree; +- proto_item *sub1item; ++ proto_item *sub1item; + proto_tree *sub2tree; +- proto_item *sub2item; ++ proto_item *sub2item; + const char *vstring=""; + nstime_t ns; + +- mval_buf.buffer[0] = '\0'; +- + switch (vtype) + { + case 0: /* No Specifier Type */ +@@ -3557,18 +3602,16 @@ + ioffset = ioffset + 4; + break; + case 1: /* Unicode String */ +- value1 = tvb_get_letohl(tvb, ioffset); /* Delimeter Set */ ++ value1 = tvb_get_letohl(tvb, ioffset); /* Delimiter Set */ + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value1, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value1); + proto_tree_add_string_format(estree, hf_mv_string, tvb, ioffset, +- value1, values->vstring, "Delimeter ->%s", values->vstring); ++ value1, values->vstring, "Delimiter ->%s", values->vstring); + ioffset=ioffset + value1; + ioffset += align_4(tvb, ioffset); + value2 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value2); + proto_tree_add_string(estree, hf_mv_string, tvb, ioffset, + value2, values->vstring); + values->voffset=ioffset + value2; +@@ -3595,18 +3638,16 @@ + ioffset = ioffset + 4; + break; + case 1: /* Unicode String */ +- value2 = tvb_get_letohl(tvb, ioffset); /* Delimeter Set */ ++ value2 = tvb_get_letohl(tvb, ioffset); /* Delimiter Set */ + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value2); + proto_tree_add_string_format(nestree, hf_mv_string, tvb, ioffset, +- value2, values->vstring, "Delimeter ->%s", values->vstring); ++ value2, values->vstring, "Delimiter ->%s", values->vstring); + ioffset=ioffset + value2; + ioffset += align_4(tvb, ioffset); + value3 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value3, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value3); + proto_tree_add_string(nestree, hf_mv_string, tvb, ioffset, + value3, values->vstring); + values->voffset=ioffset + value3; +@@ -3638,18 +3679,16 @@ + 2, event_num); + ioffset = ioffset + 2; + } +- value4 = tvb_get_letohl(tvb, ioffset); /* Delimeter Set */ ++ value4 = tvb_get_letohl(tvb, ioffset); /* Delimiter Set */ + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value4, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value4); + proto_tree_add_string(nestree, hf_mv_string, tvb, ioffset, + value4, values->vstring); + ioffset=ioffset + value4; + ioffset += align_4(tvb, ioffset); + value5 = tvb_get_letohl(tvb, ioffset); /* RDN */ + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value5, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value5); + proto_tree_add_string(nestree, hf_rdn_string, tvb, ioffset, + value5, values->vstring); + ioffset=ioffset + value5; +@@ -3664,7 +3703,7 @@ + 4, value1); + ioffset = ioffset + 4; + break; +- } ++ } + value1 = tvb_get_letohl(tvb, ioffset); /* ES Type */ + vstring = match_strval(value1, es_type); + if (vstring == NULL) +@@ -3684,18 +3723,16 @@ + ioffset = ioffset + 4; + break; + case 1: /* Unicode String */ +- value2 = tvb_get_letohl(tvb, ioffset); /* Delimeter Set */ ++ value2 = tvb_get_letohl(tvb, ioffset); /* Delimiter Set */ + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value2); + proto_tree_add_string_format(estree, hf_mv_string, tvb, ioffset, +- value2, values->vstring, "Delimeter ->%s", values->vstring); ++ value2, values->vstring, "Delimiter ->%s", values->vstring); + ioffset=ioffset + value2; + ioffset += align_4(tvb, ioffset); + value3 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value3, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value3); + proto_tree_add_string(estree, hf_mv_string, tvb, ioffset, + value3, values->vstring); + values->voffset=ioffset + value3; +@@ -3727,18 +3764,16 @@ + 2, event_num); + ioffset = ioffset + 2; + } +- value4 = tvb_get_letohl(tvb, ioffset); /* Delimeter Set */ ++ value4 = tvb_get_letohl(tvb, ioffset); /* Delimiter Set */ + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value4, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value4); + proto_tree_add_string(estree, hf_mv_string, tvb, ioffset, + value4, values->vstring); + ioffset=ioffset + value4; + ioffset += align_4(tvb, ioffset); + value5 = tvb_get_letohl(tvb, ioffset); /* RDN */ + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value5, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value5); + proto_tree_add_string(estree, hf_rdn_string, tvb, ioffset, + value5, values->vstring); + ioffset=ioffset + value5; +@@ -3753,7 +3788,7 @@ + 4, value1); + ioffset = ioffset + 4; + break; +- } ++ } + break; + case 3: /* Hinted */ + number_of_referrals = tvb_get_letohl(tvb, ioffset); +@@ -3761,13 +3796,13 @@ + for (r = 1 ; r <= number_of_referrals; r++ ) + { + sub1item = proto_tree_add_uint_format(estree, hf_referral_record, tvb, 6, 0, +- r, "NDS Referral Record #%u", r); ++ r, "NDS Referral Record #%u", r); + sub1tree = proto_item_add_subtree(sub1item, ett_nds); + + value1 = tvb_get_letohl(tvb, ioffset); + + proto_tree_add_uint_format(sub1tree, hf_referral_addcount, tvb, ioffset, 4, +- value1, "Number of Addresses in Referral - %d", value1); ++ value1, "Number of Addresses in Referral - %u", value1); + + ioffset = ioffset + 4; + for (i = 1 ; i <= value1; i++ ) +@@ -3804,7 +3839,7 @@ + break; + case NDS_PTYPE_URL: + case NDS_PTYPE_DNS: +- get_string(tvb, ioffset, value3, values->vstring); ++ values->vstring = get_string(tvb, ioffset, value3); + proto_tree_add_string(sub1tree, hf_value_string, tvb, ioffset, + value3, values->vstring); + break; +@@ -3823,7 +3858,7 @@ + vstring = "No ES Type Found"; + } + nesitem = proto_tree_add_string_format(estree, hf_es_type, tvb, ioffset, +- 4, vstring, "Object Name Type - %s", vstring); ++ 4, vstring, "Object Name Type - %s", vstring); + nestree = proto_item_add_subtree(nesitem, ett_nds); + ioffset = ioffset + 4; + switch (value1) +@@ -3835,18 +3870,16 @@ + ioffset = ioffset + 4; + break; + case 1: /* Unicode String */ +- value2 = tvb_get_letohl(tvb, ioffset); /* Delimeter Set */ ++ value2 = tvb_get_letohl(tvb, ioffset); /* Delimiter Set */ + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value2); + proto_tree_add_string_format(estree, hf_mv_string, tvb, ioffset, +- value2, values->vstring, "Delimeter ->%s", values->vstring); ++ value2, values->vstring, "Delimiter ->%s", values->vstring); + ioffset=ioffset + value2; + ioffset += align_4(tvb, ioffset); + value3 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value3, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value3); + proto_tree_add_string(estree, hf_mv_string, tvb, ioffset, + value3, values->vstring); + values->voffset=ioffset + value3; +@@ -3878,18 +3911,16 @@ + 2, event_num); + ioffset = ioffset + 2; + } +- value4 = tvb_get_letohl(tvb, ioffset); /* Delimeter Set */ ++ value4 = tvb_get_letohl(tvb, ioffset); /* Delimiter Set */ + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value4, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value4); + proto_tree_add_string(estree, hf_mv_string, tvb, ioffset, + value4, values->vstring); + ioffset=ioffset + value4; + ioffset += align_4(tvb, ioffset); + value5 = tvb_get_letohl(tvb, ioffset); /* RDN */ + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value5, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value5); + proto_tree_add_string(estree, hf_rdn_string, tvb, ioffset, + value5, values->vstring); + ioffset=ioffset + value5; +@@ -3904,17 +3935,17 @@ + 4, value1); + ioffset = ioffset + 4; + break; +- } ++ } + break; + case 4: /* Tuned */ + value1 = tvb_get_letohl(tvb, ioffset); + sub1item = proto_tree_add_uint_format(estree, hf_es_rdn_count, tvb, ioffset, +- 4, value1, "Number of RDN Items %d", value1); ++ 4, value1, "Number of RDN Items %u", value1); + sub1tree = proto_item_add_subtree(sub1item, ett_nds); + ioffset = ioffset + 4; + for (r = 1 ; r <= value1; r++ ) + { +- sub2item = proto_tree_add_text(sub1tree, tvb, ioffset, 0, "Item %d", r); ++ sub2item = proto_tree_add_text(sub1tree, tvb, ioffset, 0, "Item %u", r); + sub2tree = proto_item_add_subtree(sub2item, ett_nds); + + ns.secs = tvb_get_letohl(tvb, ioffset); /* Seconds */ +@@ -3931,18 +3962,16 @@ + 2, event_num); + ioffset = ioffset + 2; + } +- value3 = tvb_get_letohl(tvb, ioffset); /* Delimeter Set */ ++ value3 = tvb_get_letohl(tvb, ioffset); /* Delimiter Set */ + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value3, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value3); + proto_tree_add_string(sub1tree, hf_mv_string, tvb, ioffset, + value3, values->vstring); + ioffset=ioffset + value3; + ioffset += align_4(tvb, ioffset); + value4 = tvb_get_letohl(tvb, ioffset); /* RDN */ + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value4, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value4); + proto_tree_add_string(sub1tree, hf_rdn_string, tvb, ioffset, + value4, values->vstring); + ioffset=ioffset + value4; +@@ -3957,7 +3986,7 @@ + 4, value1); + ioffset = ioffset + 4; + break; +- } ++ } + return ioffset; + } + +@@ -3975,11 +4004,11 @@ + search_string = (char *)match_strval(search_tag, itersearchenum); + if(search_string == NULL) + { +- search_string = "(No Search Operation Type Found!)"; ++ search_string = "(No Search Operation Type Found!)"; + } + proto_tree_add_uint_format(it_tree, hf_iter_search, tvb, ioffset, 4, +- search_tag, "Search Operation Type: %d, (0x%04x), %s", +- search_tag, search_tag, search_string); ++ search_tag, "Search Operation Type: %d, (0x%04x), %s", ++ search_tag, search_tag, search_string); + ioffset += 4; + switch (search_tag) + { +@@ -3989,82 +4018,82 @@ + case NDS_SEARCH_APPROX: + case NDS_SEARCH_ATTR_FLAGS: + case NDS_SEARCH_ATTR_HAS_FLAG: +- /* start of DCWPutAttribute */ +- values->vvalue = tvb_get_letohl(tvb, ioffset); +- ioffset = ioffset + 4; +- get_string(tvb, ioffset, values->vvalue, values->vstring); +- proto_tree_add_string(it_tree, hf_mv_string, tvb, ioffset, +- values->vvalue, values->vstring); +- ioffset += values->vvalue; +- /* end of DCWPutAttribute */ ++ /* start of DCWPutAttribute */ ++ values->vvalue = tvb_get_letohl(tvb, ioffset); ++ ioffset = ioffset + 4; ++ values->vstring = get_string(tvb, ioffset, values->vvalue); ++ proto_tree_add_string(it_tree, hf_mv_string, tvb, ioffset, ++ values->vvalue, values->vstring); ++ ioffset += values->vvalue; ++ /* end of DCWPutAttribute */ + +- ioffset += align_4(tvb, ioffset); ++ ioffset += align_4(tvb, ioffset); + +- /* start of DCWPutValue */ +- values->vvalue = tvb_get_letohl(tvb, ioffset); +- values->vstring = (char *)match_strval(values->vvalue, nds_syntax); +- if (values->vstring == NULL) +- { +- values->vstring = "No Syntax Found"; +- } +- proto_tree_add_string(it_tree, hf_nds_syntax, tvb, ioffset, +- 4, values->vstring); +- ioffset = ioffset + 4; +- values->vvalue = tvb_get_letohl(tvb, ioffset); +- ioffset = ioffset + 4; +- get_string(tvb, ioffset, values->vvalue, values->vstring); +- proto_tree_add_string(it_tree, hf_mv_string, tvb, ioffset, +- values->vvalue, values->vstring); +- ioffset += values->vvalue; +- /* end of DCWPutValue */ ++ /* start of DCWPutValue */ ++ values->vvalue = tvb_get_letohl(tvb, ioffset); ++ values->vstring = (char *)match_strval(values->vvalue, nds_syntax); ++ if (values->vstring == NULL) ++ { ++ values->vstring = "No Syntax Found"; ++ } ++ proto_tree_add_string(it_tree, hf_nds_syntax, tvb, ioffset, ++ 4, values->vstring); ++ ioffset = ioffset + 4; ++ values->vvalue = tvb_get_letohl(tvb, ioffset); ++ ioffset = ioffset + 4; ++ values->vstring = get_string(tvb, ioffset, values->vvalue); ++ proto_tree_add_string(it_tree, hf_mv_string, tvb, ioffset, ++ values->vvalue, values->vstring); ++ ioffset += values->vvalue; ++ /* end of DCWPutValue */ + +- break; ++ break; + case NDS_SEARCH_PRESENT: +- /* start of DCWPutAttribute */ +- values->vvalue = tvb_get_letohl(tvb, ioffset); +- ioffset = ioffset + 4; +- get_string(tvb, ioffset, values->vvalue, values->vstring); +- proto_tree_add_string(it_tree, hf_mv_string, tvb, ioffset, +- values->vvalue, values->vstring); +- ioffset = ioffset + values->vvalue; +- /* end of DCWPutAttribute */ +- break; ++ /* start of DCWPutAttribute */ ++ values->vvalue = tvb_get_letohl(tvb, ioffset); ++ ioffset = ioffset + 4; ++ values->vstring = get_string(tvb, ioffset, values->vvalue); ++ proto_tree_add_string(it_tree, hf_mv_string, tvb, ioffset, ++ values->vvalue, values->vstring); ++ ioffset = ioffset + values->vvalue; ++ /* end of DCWPutAttribute */ ++ break; + + case NDS_SEARCH_RDN: +- /* print the relative distinguished name. This includes context info... */ +- /*if (err = DCWPutRDN(context, cur, limit, item->data)) +- return err;*/ ++ /* print the relative distinguished name. This includes context info... */ ++ /*if (err = DCWPutRDN(context, cur, limit, item->data)) ++ return err;*/ + +- values->vvalue = tvb_get_letohl(tvb, ioffset); +- ioffset = ioffset + 4; +- get_string(tvb, ioffset, values->vvalue, values->vstring); +- proto_tree_add_string(it_tree, hf_mv_string, tvb, ioffset, +- values->vvalue, values->vstring); +- ioffset += values->vvalue; +- break; ++ values->vvalue = tvb_get_letohl(tvb, ioffset); ++ ioffset = ioffset + 4; ++ values->vstring = get_string(tvb, ioffset, values->vvalue); ++ proto_tree_add_string(it_tree, hf_mv_string, tvb, ioffset, ++ values->vvalue, values->vstring); ++ ioffset += values->vvalue; ++ break; + case NDS_SEARCH_BASE_CLASS: + case NDS_SEARCH_ENTRY_FLAGS: + case NDS_SEARCH_ENTRY_HAS_FLAG: + case NDS_SEARCH_VALUE_FLAGS: + case NDS_SEARCH_VALUE_HAS_FLAG: +- /* start of DCWPutValue */ +- /*values->vvalue = tvb_get_letohl(tvb, ioffset); +- values->vstring = (char *)match_strval(values->vvalue, nds_syntax); +- if (values->vstring == NULL) +- { +- values->vstring = "No Syntax Found"; +- } +- proto_tree_add_string(it_tree, hf_nds_syntax, tvb, ioffset, +- 4, values->vstring); +- ioffset = ioffset + 4;*/ +- values->vvalue = tvb_get_letohl(tvb, ioffset); +- ioffset = ioffset + 4; +- get_string(tvb, ioffset, values->vvalue, values->vstring); +- proto_tree_add_string(it_tree, hf_mv_string, tvb, ioffset, +- values->vvalue, values->vstring); +- ioffset += values->vvalue; +- /* end of DCWPutValue */ +- break; ++ /* start of DCWPutValue */ ++ /*values->vvalue = tvb_get_letohl(tvb, ioffset); ++ values->vstring = (char *)match_strval(values->vvalue, nds_syntax); ++ if (values->vstring == NULL) ++ { ++ values->vstring = "No Syntax Found"; ++ } ++ proto_tree_add_string(it_tree, hf_nds_syntax, tvb, ioffset, ++ 4, values->vstring); ++ ioffset = ioffset + 4;*/ ++ values->vvalue = tvb_get_letohl(tvb, ioffset); ++ ioffset = ioffset + 4; ++ values->vstring = get_string(tvb, ioffset, values->vvalue); ++ proto_tree_add_string(it_tree, hf_mv_string, tvb, ioffset, ++ values->vvalue, values->vstring); ++ ioffset += values->vvalue; ++ /* end of DCWPutValue */ ++ break; + case DCS_VALUE_GE_WITH_ATTR: /* Deprecated, use DS_SEARCH_VALUE_MTS_GE */ + case NDS_SEARCH_VALUE_MTS_GE: + case NDS_SEARCH_VALUE_MTS_G: +@@ -4078,35 +4107,35 @@ + case NDS_SEARCH_VALUE_CTS_L: + case NDS_SEARCH_VALUE_CTS_EQ: + case NDS_SEARCH_VALUE_CTS_EQ_APPROX: +- /* start of DCWPutAttribute */ +- values->vvalue = tvb_get_letohl(tvb, ioffset); +- ioffset = ioffset + 4; +- get_string(tvb, ioffset, values->vvalue, values->vstring); +- proto_tree_add_string(it_tree, hf_mv_string, tvb, ioffset, +- values->vvalue, values->vstring); +- ioffset += values->vvalue; +- /* end of DCWPutAttribute */ ++ /* start of DCWPutAttribute */ ++ values->vvalue = tvb_get_letohl(tvb, ioffset); ++ ioffset = ioffset + 4; ++ values->vstring = get_string(tvb, ioffset, values->vvalue); ++ proto_tree_add_string(it_tree, hf_mv_string, tvb, ioffset, ++ values->vvalue, values->vstring); ++ ioffset += values->vvalue; ++ /* end of DCWPutAttribute */ + +- ioffset += align_4(tvb, ioffset); ++ ioffset += align_4(tvb, ioffset); + +- /* start of DCWPutValue */ +- values->vvalue = tvb_get_letohl(tvb, ioffset); +- values->vstring = (char *)match_strval(values->vvalue, nds_syntax); +- if (values->vstring == NULL) +- { +- values->vstring = "No Syntax Found"; ++ /* start of DCWPutValue */ ++ values->vvalue = tvb_get_letohl(tvb, ioffset); ++ values->vstring = (char *)match_strval(values->vvalue, nds_syntax); ++ if (values->vstring == NULL) ++ { ++ values->vstring = "No Syntax Found"; + } +- proto_tree_add_string(it_tree, hf_nds_syntax, tvb, ioffset, +- 4, values->vstring); +- ioffset = ioffset + 4; +- values->vvalue = tvb_get_letohl(tvb, ioffset); +- ioffset = ioffset + 4; +- get_string(tvb, ioffset, values->vvalue, values->vstring); +- proto_tree_add_string(it_tree, hf_mv_string, tvb, ioffset, +- values->vvalue, values->vstring); +- ioffset += values->vvalue; +- /* end of DCWPutValue */ +- break; ++ proto_tree_add_string(it_tree, hf_nds_syntax, tvb, ioffset, ++ 4, values->vstring); ++ ioffset = ioffset + 4; ++ values->vvalue = tvb_get_letohl(tvb, ioffset); ++ ioffset = ioffset + 4; ++ values->vstring = get_string(tvb, ioffset, values->vvalue); ++ proto_tree_add_string(it_tree, hf_mv_string, tvb, ioffset, ++ values->vvalue, values->vstring); ++ ioffset += values->vvalue; ++ /* end of DCWPutValue */ ++ break; + case DCS_MOD_GE_WITH_ATTR: /* Deprecated, use DS_SEARCH_ENTRY_MTS */ + case NDS_SEARCH_ENTRY_MTS_GE: + case NDS_SEARCH_ENTRY_MTS_G: +@@ -4120,67 +4149,67 @@ + case NDS_SEARCH_ENTRY_CTS_L: + case NDS_SEARCH_ENTRY_CTS_EQ: + case NDS_SEARCH_ENTRY_CTS_EQ_APPROX: +- /* start of DCWPutAttribute */ +- values->vvalue = tvb_get_letohl(tvb, ioffset); +- ioffset = ioffset + 4; +- get_string(tvb, ioffset, values->vvalue, values->vstring); +- proto_tree_add_string(it_tree, hf_mv_string, tvb, ioffset, +- values->vvalue, values->vstring); +- ioffset += values->vvalue; +- /* end of DCWPutAttribute */ ++ /* start of DCWPutAttribute */ ++ values->vvalue = tvb_get_letohl(tvb, ioffset); ++ ioffset = ioffset + 4; ++ values->vstring = get_string(tvb, ioffset, values->vvalue); ++ proto_tree_add_string(it_tree, hf_mv_string, tvb, ioffset, ++ values->vvalue, values->vstring); ++ ioffset += values->vvalue; ++ /* end of DCWPutAttribute */ + +- ioffset += align_4(tvb, ioffset); ++ ioffset += align_4(tvb, ioffset); + +- /* start of DCWPutValue */ +- values->vvalue = tvb_get_letohl(tvb, ioffset); +- values->vstring = (char *)match_strval(values->vvalue, nds_syntax); +- if (values->vstring == NULL) +- { +- values->vstring = "No Syntax Found"; +- } +- proto_tree_add_string(it_tree, hf_nds_syntax, tvb, ioffset, +- 4, values->vstring); +- ioffset = ioffset + 4; +- values->vvalue = tvb_get_letohl(tvb, ioffset); +- ioffset = ioffset + 4; +- get_string(tvb, ioffset, values->vvalue, values->vstring); +- proto_tree_add_string(it_tree, hf_mv_string, tvb, ioffset, +- values->vvalue, values->vstring); +- ioffset += values->vvalue; +- /* end of DCWPutValue */ ++ /* start of DCWPutValue */ ++ values->vvalue = tvb_get_letohl(tvb, ioffset); ++ values->vstring = (char *)match_strval(values->vvalue, nds_syntax); ++ if (values->vstring == NULL) ++ { ++ values->vstring = "No Syntax Found"; ++ } ++ proto_tree_add_string(it_tree, hf_nds_syntax, tvb, ioffset, ++ 4, values->vstring); ++ ioffset = ioffset + 4; ++ values->vvalue = tvb_get_letohl(tvb, ioffset); ++ ioffset = ioffset + 4; ++ values->vstring = get_string(tvb, ioffset, values->vvalue); ++ proto_tree_add_string(it_tree, hf_mv_string, tvb, ioffset, ++ values->vvalue, values->vstring); ++ ioffset += values->vvalue; ++ /* end of DCWPutValue */ + +- break; ++ break; + case NDS_SEARCH_EID: + case NDS_SEARCH_ENTRY_SUBCOUNT_GE: + case NDS_SEARCH_ENTRY_SUBCOUNT_G: + case NDS_SEARCH_ENTRY_SUBCOUNT_LE: + case NDS_SEARCH_ENTRY_SUBCOUNT_L: + case NDS_SEARCH_ENTRY_SUBCOUNT_EQ: +- /* start of DCWPutValue */ +- values->vvalue = tvb_get_letohl(tvb, ioffset); +- values->vstring = (char *)match_strval(values->vvalue, nds_syntax); +- if (values->vstring == NULL) +- { +- values->vstring = "No Syntax Found"; +- } +- proto_tree_add_string(it_tree, hf_nds_syntax, tvb, ioffset, +- 4, values->vstring); +- ioffset = ioffset + 4; +- values->vvalue = tvb_get_letohl(tvb, ioffset); +- ioffset = ioffset + 4; +- get_string(tvb, ioffset, values->vvalue, values->vstring); +- proto_tree_add_string(it_tree, hf_mv_string, tvb, ioffset, +- values->vvalue, values->vstring); +- ioffset += values->vvalue; +- /* end of DCWPutValue */ ++ /* start of DCWPutValue */ ++ values->vvalue = tvb_get_letohl(tvb, ioffset); ++ values->vstring = (char *)match_strval(values->vvalue, nds_syntax); ++ if (values->vstring == NULL) ++ { ++ values->vstring = "No Syntax Found"; ++ } ++ proto_tree_add_string(it_tree, hf_nds_syntax, tvb, ioffset, ++ 4, values->vstring); ++ ioffset = ioffset + 4; ++ values->vvalue = tvb_get_letohl(tvb, ioffset); ++ ioffset = ioffset + 4; ++ values->vstring = get_string(tvb, ioffset, values->vvalue); ++ proto_tree_add_string(it_tree, hf_mv_string, tvb, ioffset, ++ values->vvalue, values->vstring); ++ ioffset += values->vvalue; ++ /* end of DCWPutValue */ + +- break; ++ break; + + default: /* Unknown Iteration search Item type */ +- if (tvb_length_remaining(tvb, ioffset) < 4) { +- THROW(ReportedBoundsError); +- } +- break; ++ if (tvb_length_remaining(tvb, ioffset) < 4) { ++ THROW(ReportedBoundsError); ++ } ++ break; + } + ioffset += align_4(tvb, ioffset); + values->voffset = ioffset; +@@ -4202,7 +4231,7 @@ + ioffset += 4; + for (i = 0; i < number_of_items; i++) + { +- it_subitem1 = proto_tree_add_text(it_subtree, tvb, ioffset, -1, "Item #: %d", i+1); ++ it_subitem1 = proto_tree_add_text(it_subtree, tvb, ioffset, -1, "Item #: %u", i+1); + it_subtree1 = proto_item_add_subtree(it_subitem1, ett_nds); + + values->voffset = ioffset; +@@ -4242,7 +4271,7 @@ + /* start of DCWPutAttribute */ + values->vvalue = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, values->vvalue, values->vstring); ++ values->vstring = get_string(tvb, ioffset, values->vvalue); + proto_tree_add_string(it_tree, hf_mv_string, tvb, ioffset, + values->vvalue, values->vstring); + ioffset = ioffset + values->vvalue; +@@ -4255,16 +4284,16 @@ + values->vstring = (char *)match_strval(values->vvalue, nds_syntax); + if (values->vstring == NULL) + { +- values->vstring = "No Syntax Found"; ++ values->vstring = "No Syntax Found"; + } + proto_tree_add_string(it_tree, hf_nds_syntax, tvb, ioffset, + 4, values->vstring); + ioffset = ioffset + 4; + values->vvalue = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, values->vvalue, values->vstring); ++ values->vstring = get_string(tvb, ioffset, values->vvalue); + proto_tree_add_string(it_tree, hf_mv_string, tvb, ioffset, +- values->vvalue, values->vstring); ++ values->vvalue, values->vstring); + ioffset += values->vvalue; + /* end of DCWPutValue */ + +@@ -4296,25 +4325,25 @@ + { + case NDS_SEARCH_ITEM: + /* DCWPutSearchExp */ +- process_search_expression(it_tree, tvb, values); +- break; ++ process_search_expression(it_tree, tvb, values); ++ break; + + case NDS_SEARCH_EXTENSIBLE: +- /*err = DCWPutSearchExtMatch(context, syncFormat, cur, limit, sexp->u.extMatch);*/ +- process_search_match(it_tree, tvb, values); +- break; ++ /*err = DCWPutSearchExtMatch(context, syncFormat, cur, limit, sexp->u.extMatch);*/ ++ process_search_match(it_tree, tvb, values); ++ break; + + case NDS_SEARCH_OR: + case NDS_SEARCH_AND: + case NDS_SEARCH_NOT: +- /* DCWPutSearchSubExp = process_search_subexpression */ +- process_search_subexpression(it_tree, tvb, pinfo, values); +- break; ++ /* DCWPutSearchSubExp = process_search_subexpression */ ++ process_search_subexpression(it_tree, tvb, pinfo, values); ++ break; + default: /* Unknown Iteration search type */ +- if (tvb_length_remaining(tvb, ioffset) < 4) { +- THROW(ReportedBoundsError); +- } +- break; ++ if (tvb_length_remaining(tvb, ioffset) < 4) { ++ THROW(ReportedBoundsError); ++ } ++ break; + } + ioffset = values->voffset; + return; +@@ -4325,10 +4354,9 @@ + { + guint32 iter_flags, ioffset = values->voffset; + guint16 replica_num, event_num; +- char temp_string[256]; + nstime_t ns; + +- values->vstring = temp_string; ++ values->vstring = NULL; + ioffset += align_4(tvb, ioffset); + iter_flags = tvb_get_letohl(tvb, ioffset); + +@@ -4527,7 +4555,7 @@ + values->vstring = (char *)match_strval(values->vvalue, nds_replica_type); + if (values->vstring == NULL) + { +- values->vstring = "No Replica Type Found"; ++ values->vstring = "No Replica Type Found"; + } + proto_tree_add_string(it_tree, hf_replica_type, tvb, ioffset, + 4, values->vstring); +@@ -4535,7 +4563,7 @@ + values->vstring = (char *)match_strval(values->vvalue, nds_replica_state); + if (values->vstring == NULL) + { +- values->vstring = "No Replica State Found"; ++ values->vstring = "No Replica State Found"; + } + proto_tree_add_string(it_tree, hf_replica_state, tvb, ioffset, + 4, values->vstring); +@@ -4544,50 +4572,50 @@ + if (iter_flags & DSI_BASE_CLASS) { /* Base Class */ + values->vvalue = tvb_get_letohl(tvb, ioffset); /* Length of string */ + ioffset = ioffset+4; +- get_string(tvb, ioffset, values->vvalue, values->vstring); ++ values->vstring = get_string(tvb, ioffset, values->vvalue); + proto_tree_add_string_format(it_tree, hf_value_string, tvb, ioffset, +- values->vvalue, temp_string, +- "Base Class: - %s", temp_string); ++ values->vvalue, values->vstring, ++ "Base Class: - %s", values->vstring); + ioffset = ioffset+values->vvalue; + ioffset += align_4(tvb, ioffset); + } + if (iter_flags & DSI_ENTRY_RDN) { /* Relative Distiguished Name */ + values->vvalue = tvb_get_letohl(tvb, ioffset); /* Length of string */ + ioffset = ioffset+4; +- get_string(tvb, ioffset, values->vvalue, values->vstring); ++ values->vstring = get_string(tvb, ioffset, values->vvalue); + proto_tree_add_string_format(it_tree, hf_value_string, tvb, ioffset, +- values->vvalue, temp_string, +- "Relative Distinguished Name - %s", temp_string); ++ values->vvalue, values->vstring, ++ "Relative Distinguished Name - %s", values->vstring); + ioffset = ioffset+values->vvalue; + ioffset += align_4(tvb, ioffset); + } + if (iter_flags & DSI_ENTRY_DN) { /* Distinguished Name */ + values->vvalue = tvb_get_letohl(tvb, ioffset); /* Length of string */ + ioffset = ioffset+4; +- get_string(tvb, ioffset, values->vvalue, values->vstring); ++ values->vstring = get_string(tvb, ioffset, values->vvalue); + proto_tree_add_string_format(it_tree, hf_value_string, tvb, ioffset, +- values->vvalue, temp_string, +- "Distinguished Name - %s", temp_string); ++ values->vvalue, values->vstring, ++ "Distinguished Name - %s", values->vstring); + ioffset = ioffset+values->vvalue; + ioffset += align_4(tvb, ioffset); + } + if (iter_flags & DSI_PARTITION_ROOT_DN) { /* Root Distinguished Name */ + values->vvalue = tvb_get_letohl(tvb, ioffset); /* Length of string */ + ioffset = ioffset+4; +- get_string(tvb, ioffset, values->vvalue, values->vstring); ++ values->vstring = get_string(tvb, ioffset, values->vvalue); + proto_tree_add_string_format(it_tree, hf_value_string, tvb, ioffset, +- values->vvalue, temp_string, +- "Root Distinguished Name - %s", temp_string); ++ values->vvalue, values->vstring, ++ "Root Distinguished Name - %s", values->vstring); + ioffset = ioffset+values->vvalue; + ioffset += align_4(tvb, ioffset); + } + if (iter_flags & DSI_PARENT_DN) { /* Parent Distinguished Name */ + values->vvalue = tvb_get_letohl(tvb, ioffset); /* Length of string */ + ioffset = ioffset+4; +- get_string(tvb, ioffset, values->vvalue, values->vstring); ++ values->vstring = get_string(tvb, ioffset, values->vvalue); + proto_tree_add_string_format(it_tree, hf_value_string, tvb, ioffset, +- values->vvalue, temp_string, +- "Parent Distinguished Name - %s", temp_string); ++ values->vvalue, values->vstring, ++ "Parent Distinguished Name - %s", values->vstring); + ioffset = ioffset+values->vvalue; + ioffset += align_4(tvb, ioffset); + } +@@ -4601,9 +4629,9 @@ + if (iter_flags & DSI_DEREFERENCED_BASE_CLASS) { /* Dereference Base Class */ + values->vvalue = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, values->vvalue, values->vstring); ++ values->vstring = get_string(tvb, ioffset, values->vvalue); + proto_tree_add_string(it_tree, hf_deref_base, tvb, ioffset, +- values->vvalue, temp_string); ++ values->vvalue, values->vstring); + ioffset = ioffset + values->vvalue; + } + if (iter_flags & DSI_REPLICA_NUMBER) { /* Replica Number */ +@@ -4617,7 +4645,7 @@ + values->vstring = (char *)match_strval(values->vvalue, nds_replica_state); + if (values->vstring == NULL) + { +- values->vstring = "No Replica State Found"; ++ values->vstring = "No Replica State Found"; + } + proto_tree_add_string(it_tree, hf_replica_state, tvb, ioffset, + 4, values->vstring); +@@ -4713,8 +4741,8 @@ + values.vlength = 0; + values.voffset = 0; + values.hfname = 0; +- values.vdesc = "\0"; +- values.vstring = "\0"; ++ values.vdesc = ""; ++ values.vstring = NULL; + values.mvtype = 0; + values.vflags = 0; + +@@ -4787,25 +4815,27 @@ + ioffset += 4; + for (i=0; i < number_of_items; i++) { + /* Process the attribute tag */ +- values.vvalue = tvb_get_letohl(tvb, ioffset); ++ /*values.vvalue = tvb_get_letohl(tvb, ioffset); + values.vstring = (char *)match_strval(values.vvalue, nds_tags); + if(values.vstring == NULL) + { +- values.vstring = "No Tags Set"; ++ values.vstring = "No Tags Set"; + } +- proto_tree_add_string(it_subtree, hf_nds_tag_string, tvb, ioffset, 4, values.vstring); ++ proto_tree_add_string(it_subtree, hf_nds_tag_string, tvb, ioffset, 4, values.vstring);*/ ++ ++ proto_tree_add_item(it_subtree, hf_iter_index, tvb, ioffset, 4, TRUE); + ioffset = ioffset + 4; + + /* start of DCWPutAttribute */ +- values.vvalue = tvb_get_letohl(tvb, ioffset); ++ /*values.vvalue = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, values.vvalue, values.vstring); ++ values.vstring = get_string(tvb, ioffset, values.vvalue); + proto_tree_add_string(it_subtree, hf_mv_string, tvb, ioffset, + values.vvalue, values.vstring); +- ioffset = ioffset + values.vvalue; ++ ioffset = ioffset + values.vvalue;*/ + /* end of DCWPutAttribute */ + +- ioffset += align_4(tvb, ioffset); ++ /*ioffset += align_4(tvb, ioffset);*/ + if (tvb_length_remaining(tvb, ioffset) < 4) { + THROW(ReportedBoundsError); + return; +@@ -4837,7 +4867,7 @@ + values.vstring = (char *)match_strval(values.vvalue, nds_tags); + if(values.vstring == NULL) + { +- values.vstring = "No Tags Set"; ++ values.vstring = "No Tags Set"; + } + proto_tree_add_string(it_tree, hf_nds_tag_string, tvb, ioffset, 4, values.vstring); + ioffset = ioffset + 4; +@@ -4845,7 +4875,7 @@ + } + values.vvalue = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, values.vvalue, values.vstring); ++ values.vstring = get_string(tvb, ioffset, values.vvalue); + proto_tree_add_string(it_subtree, hf_mv_string, tvb, ioffset, + values.vvalue, values.vstring); + ioffset = ioffset + values.vvalue; +@@ -4870,42 +4900,42 @@ + rcode, error_string ); + + if (rcode != 0 && ncp_echo_err) { +- expert_add_info_format(pinfo, expert_item, PI_RESPONSE_CODE, PI_ERROR, "Iteration Verb Error: 0x%08x %s", rcode, error_string); ++ expert_add_info_format(pinfo, expert_item, PI_RESPONSE_CODE, PI_ERROR, "Iteration Verb Error: 0x%08x %s", rcode, error_string); + } + ioffset += 4; + + switch (it_verb) { +- case IT_ATFIRST: +- case IT_ATEOF: +- case IT_ATLAST: +- case IT_ATBOF: ++ case IT_ATFIRST: ++ case IT_ATEOF: ++ case IT_ATLAST: ++ case IT_ATBOF: + proto_tree_add_item(it_subtree, hf_iter_ans, tvb, ioffset, 4, TRUE); + ioffset += 4; + break; + case IT_CLEAR: + break; +- case IT_COPY: ++ case IT_COPY: + proto_tree_add_item(it_subtree, hf_iter_copy, tvb, ioffset, 4, TRUE); + ioffset += 4; + break; +- case IT_COUNT: ++ case IT_COUNT: + proto_tree_add_item(it_subtree, hf_this_count, tvb, ioffset, 4, TRUE); + ioffset += 4; + break; +- case IT_CREATE: ++ case IT_CREATE: + proto_tree_add_item(it_subtree, hf_nds_iterator, tvb, ioffset, 4, TRUE); + ioffset += 4; + break; +- case IT_CURRENT: +- case IT_NEXT: +- case IT_PREV: +- case IT_FIRST: +- case IT_LAST: ++ case IT_CURRENT: ++ case IT_NEXT: ++ case IT_PREV: ++ case IT_FIRST: ++ case IT_LAST: + values.vvalue = tvb_get_letohl(tvb, ioffset); + values.vstring = (char *)match_strval(values.vvalue, nds_info_type); + if(values.vstring == NULL) + { +- values.vstring = "No Info Type Set"; ++ values.vstring = "No Info Type Set"; + } + proto_tree_add_string(it_subtree, hf_nds_info_type, tvb, ioffset, 4, values.vstring); + ioffset = ioffset + 4; +@@ -4914,9 +4944,9 @@ + number_of_items = tvb_get_letohl(tvb, ioffset); + proto_tree_add_item(it_subtree, hf_this_count, tvb, ioffset, 4, TRUE); + ioffset += 4; +- for (i = 0; i < number_of_items; i++) +- { +- it_subitem1 = proto_tree_add_text(it_subtree, tvb, ioffset, -1, "Item #: %d", i+1); ++ for (i = 0; i < number_of_items; i++) ++ { ++ it_subitem1 = proto_tree_add_text(it_subtree, tvb, ioffset, -1, "Item #: %u", i+1); + it_subtree1 = proto_item_add_subtree(it_subitem1, ett_nds); + + ioffset += align_4(tvb, ioffset); +@@ -4940,26 +4970,26 @@ + } + break; + case IT_DESTROY: +- case IT_DONE: ++ case IT_DONE: + break; + case IT_GETPOSITION: + proto_tree_add_item(it_subtree, hf_iter_position, tvb, ioffset, 4, TRUE); + ioffset += 4; + break; +- case IT_ISPOSITIONABLE: ++ case IT_ISPOSITIONABLE: + proto_tree_add_item(it_subtree, hf_positionable, tvb, ioffset, 4, TRUE); + ioffset += 4; + break; +- case IT_POSITION: +- case IT_POSITION_IT: +- case IT_SETFILTER: ++ case IT_POSITION: ++ case IT_POSITION_IT: ++ case IT_SETFILTER: + case IT_TYPEDOWN: + break; +- case IT_SETINDEX: ++ case IT_SETINDEX: + proto_tree_add_item(it_subtree, hf_iter_index, tvb, ioffset, 4, TRUE); + ioffset += 4; + break; +- case IT_SKIP: ++ case IT_SKIP: + proto_tree_add_item(it_subtree, hf_num_skipped, tvb, ioffset, 4, TRUE); + ioffset += 4; + break; +@@ -5004,25 +5034,24 @@ + const char *valuestr = ""; + proto_tree *ntree; + proto_tree *atree; +- proto_item *nitem; ++ proto_item *nitem; + proto_item *aitem; + guint32 number_of_referrals = 0; +- nw_uni_t mval_buf; + proto_tree *estree; +- proto_item *esitem; ++ proto_item *esitem; + guint16 replica_num = 0; + guint16 event_num = 0; + guint32 bvalue=0; + nds_val temp_values; + proto_tree *sub1tree; +- proto_item *sub1item; ++ proto_item *sub1item; + proto_tree *sub2tree; +- proto_item *sub2item; +- gint length_remaining; ++ proto_item *sub2item; ++ gint length_remaining; + nstime_t ns; + +- mval_buf.buffer[0] = '\0'; + mv_resolve_name_string[0] = '\0'; ++ values->vstring = ""; + + /* Is the value passed a string or UINT32? */ + if(values->mvtype != MVTYPE_LIST_PARTITIONS && values->mvtype != MVTYPE_PROCESS_TAGS) +@@ -5047,8 +5076,7 @@ + ioffset += align_4(tvb, ioffset); + value1 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value1, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value1); + proto_tree_add_string(ntree, hf_mv_string, tvb, ioffset, + value1, values->vstring); + ioffset = ioffset + value1; +@@ -5064,8 +5092,7 @@ + ioffset += align_4(tvb, ioffset); + value1 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value1, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value1); + proto_tree_add_string(ntree, hf_mv_string, tvb, ioffset, + value1, values->vstring); + ioffset = ioffset + value1; +@@ -5085,8 +5112,7 @@ + ioffset = ioffset + 4; + value2 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value2); + proto_tree_add_string(ntree, hf_mv_string, tvb, ioffset, + value2, values->vstring); + ioffset += value2; +@@ -5111,8 +5137,7 @@ + ioffset = ioffset + 4; + value2 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value2); + proto_tree_add_string(ntree, hf_mv_string, tvb, ioffset, + value2, values->vstring); + values->voffset=ioffset + value2; +@@ -5121,7 +5146,7 @@ + value3 = tvb_get_letohl(tvb, ioffset); + + proto_tree_add_uint_format(ntree, hf_nds_uint32value, tvb, ioffset, 4, +- value3, "Number of Values - %d", value3); ++ value3, "Number of Values - %u", value3); + + ioffset = ioffset + 4; + for (r = 1 ; r <= value3; r++ ) +@@ -5150,8 +5175,7 @@ + ioffset = ioffset + 4; + value2 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value2); + proto_tree_add_string(ntree, hf_mv_string, tvb, ioffset, + value2, values->vstring); + ioffset = ioffset + value2; +@@ -5159,7 +5183,7 @@ + value3 = tvb_get_letohl(tvb, ioffset); + + aitem = proto_tree_add_uint_format(ntree, hf_nds_uint32value, tvb, ioffset, 4, +- value3, "Number of Values - %d", value3); ++ value3, "Number of Values - %u", value3); + + atree = proto_item_add_subtree(aitem, ett_nds); + +@@ -5246,15 +5270,14 @@ + ioffset = ioffset + 4; + value2 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value2); + proto_tree_add_string(ntree, hf_mv_string, tvb, ioffset, + value2, values->vstring); + ioffset = ioffset + value2; + value3 = tvb_get_letohl(tvb, ioffset); + + proto_tree_add_uint_format(ntree, hf_nds_uint32value, tvb, ioffset, 4, +- value3, "Number of Values - %d", value3); ++ value3, "Number of Values - %u", value3); + + ioffset = ioffset + 4; + for (r = 1 ; r <= value3; r++ ) +@@ -5346,8 +5369,7 @@ + { + value1 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value1, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value1); + proto_tree_add_string(ntree, hf_mv_string, tvb, ioffset, + value1, values->vstring); + ioffset = ioffset + value1; +@@ -5364,8 +5386,7 @@ + ioffset += align_4(tvb, ioffset); + value1 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value1, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value1); + proto_tree_add_string(ntree, hf_nds_base, tvb, ioffset, + value1, values->vstring); + values->mvtype = MVTYPE_ATTR_REQUEST; +@@ -5376,12 +5397,10 @@ + case MVTYPE_READ_REPLICAS: /* Read Replicas */ + for (i = 1 ; i <= values->vvalue; i++ ) + { +- + bvalue = 0x00000001; + + for (r = 0 ; r < 9; r++ ) + { +- + if (values->vflags & bvalue) + { + switch(bvalue) +@@ -5475,8 +5494,7 @@ + case 0x00000040: /*p3values.bit7 = "Distinguished Name"*/ + value1 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value1, mval_buf.buffer); +- temp_values.vstring = mval_buf.buffer; ++ temp_values.vstring = get_string(tvb, ioffset, value1); + proto_tree_add_string(ntree, hf_nds_name, tvb, ioffset, + value1, temp_values.vstring); + ioffset = ioffset + value1; +@@ -5508,7 +5526,6 @@ + break; + default: + break; +- + } + } + bvalue = bvalue*2; +@@ -5533,23 +5550,23 @@ + valuestr = match_strval(value1, nds_kind_of_changes); + if (valuestr == NULL) + { +- valuestr="(Kind Change Not Found)"; ++ valuestr="(Kind Change Not Found)"; + } + tvb_ensure_bytes_exist(tvb, ioffset, values->vlength); + proto_tree_add_uint_format(ntree, hf_nds_uint32value, tvb, ioffset, +- values->vlength, value1, valuestr, value1); ++ values->vlength, value1, valuestr, value1); + ioffset = ioffset+4; + value2 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); /* Name of Attribute */ +- temp_values.vstring = mval_buf.buffer; ++ temp_values.vstring = get_string(tvb, ioffset, value2); /* Name of Attribute */ + proto_tree_add_string(ntree, hf_mv_string, tvb, ioffset, +- value2, temp_values.vstring); ++ value2, temp_values.vstring); + ioffset = ioffset + value2; + ioffset += align_4(tvb, ioffset); + if(value1 != 1 && value1 != 6) + { + values->voffset = ioffset; ++ /* XX: Is values.vstring set properly at this point ?? */ + print_nds_values(ntree, tvb, 9, values); + ioffset = values->voffset; + } +@@ -5559,12 +5576,11 @@ + case MVTYPE_ADDR_REFERRAL_REQUEST: /* Address Referral Request */ + for (i = 0 ; i < values->vvalue; i++ ) + { +- + value1 = tvb_get_letohl(tvb, ioffset); + valuestr = match_strval(value1, nds_protocol_type); + if (valuestr == NULL) + { +- valuestr="(Undefined Protocol)"; ++ valuestr="(Undefined Protocol)"; + } + tvb_ensure_bytes_exist(tvb, ioffset, values->vlength); + proto_tree_add_uint_format(ntree, hf_nds_uint32value, tvb, ioffset, +@@ -5579,13 +5595,13 @@ + for (r = 1 ; r <= number_of_referrals; r++ ) + { + aitem = proto_tree_add_uint_format(ntree, hf_referral_record, tvb, 6, 0, +- r, "NDS Referral Record #%u", r); ++ r, "NDS Referral Record #%u", r); + atree = proto_item_add_subtree(aitem, ett_nds); + + value1 = tvb_get_letohl(tvb, ioffset); + + proto_tree_add_uint_format(atree, hf_referral_addcount, tvb, ioffset, 4, +- value1, "Number of Addresses in Referral - %d", value1); ++ value1, "Number of Addresses in Referral - %u", value1); + + ioffset = ioffset + 4; + for (i = 1 ; i <= value1; i++ ) +@@ -5623,7 +5639,7 @@ + break; + case NDS_PTYPE_URL: + case NDS_PTYPE_DNS: +- get_string(tvb, ioffset, value3, values->vstring); ++ values->vstring = get_string(tvb, ioffset, value3); + proto_tree_add_string(atree, hf_value_string, tvb, ioffset, + value3, values->vstring); + break; +@@ -5643,7 +5659,7 @@ + for (r = 1 ; r <= number_of_referrals; r++ ) + { + aitem = proto_tree_add_uint_format(ntree, hf_referral_record, tvb, 6, 0, +- r, "NDS Referral Record #%u", r); ++ r, "NDS Referral Record #%u", r); + atree = proto_item_add_subtree(aitem, ett_nds); + + value2 = tvb_get_letohl(tvb, ioffset); +@@ -5680,7 +5696,7 @@ + break; + case NDS_PTYPE_URL: + case NDS_PTYPE_DNS: +- get_string(tvb, ioffset, value3, values->vstring); ++ values->vstring = get_string(tvb, ioffset, value3); + proto_tree_add_string(atree, hf_value_string, tvb, ioffset, + value3, values->vstring); + break; +@@ -5719,7 +5735,7 @@ + g_strlcpy(mv_resolve_name_string, values->vstring, 128); + value4 = tvb_get_letohl(tvb, ioffset); + aitem = proto_tree_add_uint_format(ntree, hf_referral_record, tvb, ioffset, 4, +- value4, "Referral Protocols - %d", value4); ++ value4, "Referral Protocols - %u", value4); + atree = proto_item_add_subtree(aitem, ett_nds); + ioffset += 4; + for (i = 0 ; i < value4; i++ ) +@@ -5728,15 +5744,15 @@ + valuestr = match_strval(value5, nds_protocol_type); + if (valuestr == NULL) + { +- valuestr="(Undefined Protocol)"; ++ valuestr="(Undefined Protocol)"; + } + proto_tree_add_string_format(atree, hf_value_string, tvb, ioffset, +- 4, valuestr, "Protocol -> %s", valuestr); ++ 4, valuestr, "Protocol -> %s", valuestr); + ioffset = ioffset+4; + } + value6 = tvb_get_letohl(tvb, ioffset); + aitem = proto_tree_add_uint_format(ntree, hf_referral_record, tvb, ioffset, 4, +- value6, "Tree Walking Protocols - %d", value6); ++ value6, "Tree Walking Protocols - %u", value6); + atree = proto_item_add_subtree(aitem, ett_nds); + ioffset += 4; + for (i = 0 ; i < value6; i++ ) +@@ -5745,10 +5761,10 @@ + valuestr = match_strval(value7, nds_protocol_type); + if (valuestr == NULL) + { +- valuestr="(Undefined Protocol)"; ++ valuestr="(Undefined Protocol)"; + } + proto_tree_add_string_format(atree, hf_value_string, tvb, ioffset, +- 4, valuestr, "Protocol -> %s", valuestr); ++ 4, valuestr, "Protocol -> %s", valuestr); + ioffset = ioffset+4; + } + values->vstring = " "; +@@ -5768,12 +5784,12 @@ + case MVTYPE_LIST_PARTITIONS: /* List Partitions */ + number_of_referrals = values->vvalue; + /* A bad packet could put us in a tight loop so trap for anything +- * over 256 referals. ++ * over 256 referrals. + */ + if (number_of_referrals > 256) { +- proto_tree_add_text(ntree, tvb, 0, 0, "[ Bad referal at offset: %u ]", ioffset); +- THROW(ReportedBoundsError); +- break; ++ proto_tree_add_text(ntree, tvb, 0, 0, "[ Bad referal at offset: %u ]", ioffset); ++ THROW(ReportedBoundsError); ++ break; + } + for (i = 0; i < number_of_referrals; i++) + { +@@ -5789,7 +5805,6 @@ + case 0x00000001: /* Information Flags */ + temp_values.vvalue = tvb_get_letohs(tvb, ioffset); + temp_values.vtype = VTYPE_BITFIELD; +- temp_values.vstring = mval_buf.buffer; + temp_values.vdesc = "Information Flags (low) Byte:"; + temp_values.vlength = 2; + temp_values.hfname= hf_nds_rflags; +@@ -5830,7 +5845,6 @@ + ioffset = ioffset+2; + temp_values.vvalue = tvb_get_letohs(tvb, ioffset); + temp_values.vtype = VTYPE_BITFIELD; +- temp_values.vstring = mval_buf.buffer; + temp_values.vdesc = "Information Flags (high) Byte:"; + temp_values.vlength = 2; + temp_values.hfname= hf_nds_rflags; +@@ -5879,7 +5893,6 @@ + case 0x00000004: /* Entry Flags */ + temp_values.vvalue = tvb_get_letohl(tvb, ioffset); + temp_values.vtype = VTYPE_BITFIELD; +- temp_values.vstring = mval_buf.buffer; + temp_values.vdesc = "Entry Flags:"; + temp_values.vlength = 2; + temp_values.hfname= hf_nds_eflags; +@@ -5922,7 +5935,7 @@ + case 0x0000008: /* Subordinate Count */ + value1 = tvb_get_letohl(tvb, ioffset); + proto_tree_add_uint_format(ntree, hf_sub_count, tvb, ioffset, +- 4, value1, "Subordinate Count %d", value1); ++ 4, value1, "Subordinate Count %u", value1); + ioffset = ioffset + 4; + break; + case 0x0000010: /* Modification Time */ +@@ -5977,7 +5990,7 @@ + case 0x00000200: /* Revision Count */ + value1 = tvb_get_letohl(tvb, ioffset); + proto_tree_add_uint_format(ntree, hf_nds_revision, tvb, ioffset, +- 4, value1, "Revision Count %d", value1); ++ 4, value1, "Revision Count %u", value1); + ioffset = ioffset + 4; + break; + case 0x00000400: /* Replica Type & State */ +@@ -6003,8 +6016,7 @@ + case 0x00000800: /* Base Class */ + value1 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value1, mval_buf.buffer); +- temp_values.vstring = mval_buf.buffer; ++ temp_values.vstring = get_string(tvb, ioffset, value1); + proto_tree_add_string(ntree, hf_nds_base, tvb, ioffset, + value1, temp_values.vstring); + ioffset = ioffset + value1; +@@ -6012,8 +6024,7 @@ + case 0x00001000: /* Relative Distinguished Name */ + value1 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value1, mval_buf.buffer); +- temp_values.vstring = mval_buf.buffer; ++ temp_values.vstring = get_string(tvb, ioffset, value1); + proto_tree_add_string(ntree, hf_nds_relative_dn, tvb, ioffset, + value1, temp_values.vstring); + ioffset = ioffset + value1; +@@ -6021,8 +6032,7 @@ + case 0x00002000: /* Distinguished Name */ + value1 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value1, mval_buf.buffer); +- temp_values.vstring = mval_buf.buffer; ++ temp_values.vstring = get_string(tvb, ioffset, value1); + proto_tree_add_string(ntree, hf_nds_name, tvb, ioffset, + value1, temp_values.vstring); + ioffset = ioffset + value1; +@@ -6030,8 +6040,7 @@ + case 0x00004000: /* Root Distinguished Name */ + value1 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value1, mval_buf.buffer); +- temp_values.vstring = mval_buf.buffer; ++ temp_values.vstring = get_string(tvb, ioffset, value1); + proto_tree_add_string(ntree, hf_nds_name, tvb, ioffset, + value1, temp_values.vstring); + ioffset = ioffset + value1; +@@ -6039,8 +6048,7 @@ + case 0x00008000: /* Parent Distinguished Name */ + value1 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value1, mval_buf.buffer); +- temp_values.vstring = mval_buf.buffer; ++ temp_values.vstring = get_string(tvb, ioffset, value1); + proto_tree_add_string(ntree, hf_nds_name, tvb, ioffset, + value1, temp_values.vstring); + ioffset = ioffset + value1; +@@ -6055,8 +6063,7 @@ + case 0x00020000: /* Dereference Base Class */ + value1 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value1, mval_buf.buffer); +- temp_values.vstring = mval_buf.buffer; ++ temp_values.vstring = get_string(tvb, ioffset, value1); + proto_tree_add_string(ntree, hf_deref_base, tvb, ioffset, + value1, temp_values.vstring); + ioffset = ioffset + value1; +@@ -6093,8 +6100,7 @@ + ioffset += align_4(tvb, ioffset); + value1 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value1, mval_buf.buffer); +- temp_values.vstring = mval_buf.buffer; ++ temp_values.vstring = get_string(tvb, ioffset, value1); + sub1item = proto_tree_add_string(ntree, hf_nds_base_class, tvb, ioffset, + value1, temp_values.vstring); + sub1tree = proto_item_add_subtree(sub1item, ett_nds); +@@ -6104,7 +6110,6 @@ + { + temp_values.vvalue = tvb_get_letohl(tvb, ioffset); + temp_values.vtype = VTYPE_BITFIELD; +- temp_values.vstring = mval_buf.buffer; + temp_values.vdesc = "Class Flags:"; + temp_values.vlength = 2; + temp_values.hfname= hf_nds_cflags; +@@ -6161,15 +6166,14 @@ + { + value1 = tvb_get_letohl(tvb, ioffset); /* Super Classes */ + sub2item = proto_tree_add_uint_format(sub1tree, hf_nds_number_of_items, tvb, ioffset, +- 4, value1, "Super Classes %d", value1); ++ 4, value1, "Super Classes %u", value1); + sub2tree = proto_item_add_subtree(sub2item, ett_nds); + ioffset = ioffset + 4; + for (r = 0; r < value1; r++) + { + value2 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); +- temp_values.vstring = mval_buf.buffer; ++ temp_values.vstring = get_string(tvb, ioffset, value2); + proto_tree_add_string(sub2tree, hf_nds_super, tvb, ioffset, + value2, temp_values.vstring); + ioffset = ioffset + value2; +@@ -6177,15 +6181,14 @@ + } + value1 = tvb_get_letohl(tvb, ioffset); /* Containment Classes */ + sub2item = proto_tree_add_uint_format(sub1tree, hf_nds_number_of_items, tvb, ioffset, +- 4, value1, "Containment Classes %d", value1); ++ 4, value1, "Containment Classes %u", value1); + sub2tree = proto_item_add_subtree(sub2item, ett_nds); + ioffset = ioffset + 4; + for (r = 0; r < value1; r++) + { + value2 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); +- temp_values.vstring = mval_buf.buffer; ++ temp_values.vstring = get_string(tvb, ioffset, value2); + proto_tree_add_string(sub2tree, hf_nds_base_class, tvb, ioffset, + value2, temp_values.vstring); + ioffset = ioffset + value2; +@@ -6193,15 +6196,14 @@ + } + value1 = tvb_get_letohl(tvb, ioffset); /* Naming Attributes */ + sub2item = proto_tree_add_uint_format(sub1tree, hf_nds_number_of_items, tvb, ioffset, +- 4, value1, "Naming Attributes %d", value1); ++ 4, value1, "Naming Attributes %u", value1); + sub2tree = proto_item_add_subtree(sub2item, ett_nds); + ioffset = ioffset + 4; + for (r = 0; r < value1; r++) + { + value2 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); +- temp_values.vstring = mval_buf.buffer; ++ temp_values.vstring = get_string(tvb, ioffset, value2); + proto_tree_add_string(sub2tree, hf_mv_string, tvb, ioffset, + value2, temp_values.vstring); + ioffset = ioffset + value2; +@@ -6209,15 +6211,14 @@ + } + value1 = tvb_get_letohl(tvb, ioffset); /* Mandatory Attributes */ + sub2item = proto_tree_add_uint_format(sub1tree, hf_nds_number_of_items, tvb, ioffset, +- 4, value1, "Mandatory Attributes %d", value1); ++ 4, value1, "Mandatory Attributes %u", value1); + sub2tree = proto_item_add_subtree(sub2item, ett_nds); + ioffset = ioffset + 4; + for (r = 0; r < value1; r++) + { + value2 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); +- temp_values.vstring = mval_buf.buffer; ++ temp_values.vstring = get_string(tvb, ioffset, value2); + proto_tree_add_string(sub2tree, hf_mv_string, tvb, ioffset, + value2, temp_values.vstring); + ioffset = ioffset + value2; +@@ -6225,7 +6226,7 @@ + } + value1 = tvb_get_letohl(tvb, ioffset); /* Optional Attributes */ + sub2item = proto_tree_add_uint_format(sub1tree, hf_nds_number_of_items, tvb, ioffset, +- 4, value1, "Optional Attributes %d", value1); ++ 4, value1, "Optional Attributes %u", value1); + sub2tree = proto_item_add_subtree(sub2item, ett_nds); + ioffset = ioffset + 4; + for (r = 0; r < value1; r++) +@@ -6233,8 +6234,7 @@ + ioffset += align_4(tvb, ioffset); + value2 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); +- temp_values.vstring = mval_buf.buffer; ++ temp_values.vstring = get_string(tvb, ioffset, value2); + proto_tree_add_string(sub2tree, hf_mv_string, tvb, ioffset, + value2, temp_values.vstring); + ioffset = ioffset + value2; +@@ -6249,15 +6249,14 @@ + { + value1 = tvb_get_letohl(tvb, ioffset); /* Containment Classes */ + sub2item = proto_tree_add_uint_format(sub1tree, hf_nds_number_of_items, tvb, ioffset, +- 4, value1, "Containment Classes %d", value1); ++ 4, value1, "Containment Classes %u", value1); + sub2tree = proto_item_add_subtree(sub2item, ett_nds); + ioffset = ioffset + 4; + for (r = 0; r < value1; r++) + { + value2 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); +- temp_values.vstring = mval_buf.buffer; ++ temp_values.vstring = get_string(tvb, ioffset, value2); + proto_tree_add_string(sub2tree, hf_nds_base_class, tvb, ioffset, + value2, temp_values.vstring); + ioffset = ioffset + value2; +@@ -6265,15 +6264,14 @@ + } + value1 = tvb_get_letohl(tvb, ioffset); /* Naming Attributes */ + sub2item = proto_tree_add_uint_format(sub1tree, hf_nds_number_of_items, tvb, ioffset, +- 4, value1, "Naming Attributes %d", value1); ++ 4, value1, "Naming Attributes %u", value1); + sub2tree = proto_item_add_subtree(sub2item, ett_nds); + ioffset = ioffset + 4; + for (r = 0; r < value1; r++) + { + value2 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); +- temp_values.vstring = mval_buf.buffer; ++ temp_values.vstring = get_string(tvb, ioffset, value2); + proto_tree_add_string(sub2tree, hf_mv_string, tvb, ioffset, + value2, temp_values.vstring); + ioffset = ioffset + value2; +@@ -6281,15 +6279,14 @@ + } + value1 = tvb_get_letohl(tvb, ioffset); /* Mandatory Attributes */ + sub2item = proto_tree_add_uint_format(sub1tree, hf_nds_number_of_items, tvb, ioffset, +- 4, value1, "Mandatory Attributes %d", value1); ++ 4, value1, "Mandatory Attributes %u", value1); + sub2tree = proto_item_add_subtree(sub2item, ett_nds); + ioffset = ioffset + 4; + for (r = 0; r < value1; r++) + { + value2 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); +- temp_values.vstring = mval_buf.buffer; ++ temp_values.vstring = get_string(tvb, ioffset, value2); + proto_tree_add_string(sub2tree, hf_mv_string, tvb, ioffset, + value2, temp_values.vstring); + ioffset = ioffset + value2; +@@ -6297,15 +6294,14 @@ + } + value1 = tvb_get_letohl(tvb, ioffset); /* Optional Attributes */ + sub2item = proto_tree_add_uint_format(sub1tree, hf_nds_number_of_items, tvb, ioffset, +- 4, value1, "Optional Attributes %d", value1); ++ 4, value1, "Optional Attributes %u", value1); + sub2tree = proto_item_add_subtree(sub2item, ett_nds); + ioffset = ioffset + 4; + for (r = 0; r < value1; r++) + { + value2 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); +- temp_values.vstring = mval_buf.buffer; ++ temp_values.vstring = get_string(tvb, ioffset, value2); + proto_tree_add_string(sub2tree, hf_mv_string, tvb, ioffset, + value2, temp_values.vstring); + ioffset = ioffset + value2; +@@ -6351,15 +6347,14 @@ + /* Class Definition */ + value1 = tvb_get_letohl(tvb, ioffset); /* Super Classes */ + sub2item = proto_tree_add_uint_format(sub1tree, hf_nds_number_of_items, tvb, ioffset, +- 4, value1, "Super Classes %d", value1); ++ 4, value1, "Super Classes %u", value1); + sub2tree = proto_item_add_subtree(sub2item, ett_nds); + ioffset = ioffset + 4; + for (r = 0; r < value1; r++) + { + value2 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); +- temp_values.vstring = mval_buf.buffer; ++ temp_values.vstring = get_string(tvb, ioffset, value2); + proto_tree_add_string(sub2tree, hf_nds_super, tvb, ioffset, + value2, temp_values.vstring); + ioffset = ioffset + value2; +@@ -6367,15 +6362,14 @@ + } + value1 = tvb_get_letohl(tvb, ioffset); /* Containment Classes */ + sub2item = proto_tree_add_uint_format(sub1tree, hf_nds_number_of_items, tvb, ioffset, +- 4, value1, "Containment Classes %d", value1); ++ 4, value1, "Containment Classes %u", value1); + sub2tree = proto_item_add_subtree(sub2item, ett_nds); + ioffset = ioffset + 4; + for (r = 0; r < value1; r++) + { + value2 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); +- temp_values.vstring = mval_buf.buffer; ++ temp_values.vstring = get_string(tvb, ioffset, value2); + proto_tree_add_string(sub2tree, hf_nds_base_class, tvb, ioffset, + value2, temp_values.vstring); + ioffset = ioffset + value2; +@@ -6383,15 +6377,14 @@ + } + value1 = tvb_get_letohl(tvb, ioffset); /* Naming Attributes */ + sub2item = proto_tree_add_uint_format(sub1tree, hf_nds_number_of_items, tvb, ioffset, +- 4, value1, "Naming Attributes %d", value1); ++ 4, value1, "Naming Attributes %u", value1); + sub2tree = proto_item_add_subtree(sub2item, ett_nds); + ioffset = ioffset + 4; + for (r = 0; r < value1; r++) + { + value2 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); +- temp_values.vstring = mval_buf.buffer; ++ temp_values.vstring = get_string(tvb, ioffset, value2); + proto_tree_add_string(sub2tree, hf_mv_string, tvb, ioffset, + value2, temp_values.vstring); + ioffset = ioffset + value2; +@@ -6399,15 +6392,14 @@ + } + value1 = tvb_get_letohl(tvb, ioffset); /* Mandatory Attributes */ + sub2item = proto_tree_add_uint_format(sub1tree, hf_nds_number_of_items, tvb, ioffset, +- 4, value1, "Mandatory Attributes %d", value1); ++ 4, value1, "Mandatory Attributes %u", value1); + sub2tree = proto_item_add_subtree(sub2item, ett_nds); + ioffset = ioffset + 4; + for (r = 0; r < value1; r++) + { + value2 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); +- temp_values.vstring = mval_buf.buffer; ++ temp_values.vstring = get_string(tvb, ioffset, value2); + proto_tree_add_string(sub2tree, hf_mv_string, tvb, ioffset, + value2, temp_values.vstring); + ioffset = ioffset + value2; +@@ -6415,15 +6407,14 @@ + } + value1 = tvb_get_letohl(tvb, ioffset); /* Optional Attributes */ + sub2item = proto_tree_add_uint_format(sub1tree, hf_nds_number_of_items, tvb, ioffset, +- 4, value1, "Optional Attributes %d", value1); ++ 4, value1, "Optional Attributes %u", value1); + sub2tree = proto_item_add_subtree(sub2item, ett_nds); + ioffset = ioffset + 4; + for (r = 0; r < value1; r++) + { + value2 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); +- temp_values.vstring = mval_buf.buffer; ++ temp_values.vstring = get_string(tvb, ioffset, value2); + proto_tree_add_string(sub2tree, hf_mv_string, tvb, ioffset, + value2, temp_values.vstring); + ioffset = ioffset + value2; +@@ -6448,8 +6439,7 @@ + ioffset += align_4(tvb, ioffset); + value1 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value1, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value1); + proto_tree_add_string(ntree, hf_mv_string, tvb, ioffset, + value1, values->vstring); + ioffset = ioffset + value1; +@@ -6461,15 +6451,14 @@ + ioffset += align_4(tvb, ioffset); + value1 = tvb_get_letohl(tvb, ioffset); + proto_tree_add_uint_format(ntree, hf_nds_att_del, tvb, ioffset, +- 4, value1, "Attribute Names to Delete %d", value1); ++ 4, value1, "Attribute Names to Delete %u", value1); + ioffset = ioffset + 4; + for (i = 1 ; i <= value1; i++ ) /* Attribute Names to delete*/ + { + ioffset += align_4(tvb, ioffset); + value2 = tvb_get_letohl(tvb, ioffset); + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value2); + proto_tree_add_string(ntree, hf_mv_string, tvb, ioffset, + value2, values->vstring); + ioffset = ioffset + value2; +@@ -6481,23 +6470,21 @@ + ioffset += align_4(tvb, ioffset); + value1 = tvb_get_letohl(tvb, ioffset); + proto_tree_add_uint_format(ntree, hf_nds_acl_add, tvb, ioffset, +- 4, value1, "ACL Templates to Add %d", value1); ++ 4, value1, "ACL Templates to Add %u", value1); + ioffset = ioffset + 4; + for (i = 1 ; i <= value1; i++ ) /* ACL templates to add*/ + { + ioffset += align_4(tvb, ioffset); + value2 = tvb_get_letohl(tvb, ioffset); /* Attribute Name */ + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value2); + proto_tree_add_string(ntree, hf_nds_attribute_dn, tvb, ioffset, + value2, values->vstring); + ioffset = ioffset + value2; + ioffset += align_4(tvb, ioffset); + value2 = tvb_get_letohl(tvb, ioffset); /* DN of Trustee */ + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value2); + proto_tree_add_string(ntree, hf_nds_trustee_dn, tvb, ioffset, + value2, values->vstring); + ioffset = ioffset + value2; +@@ -6514,23 +6501,21 @@ + ioffset += align_4(tvb, ioffset); + value1 = tvb_get_letohl(tvb, ioffset); + proto_tree_add_uint_format(ntree, hf_nds_acl_del, tvb, ioffset, +- 4, value1, "ACL Templates to Delete %d", value1); ++ 4, value1, "ACL Templates to Delete %u", value1); + ioffset = ioffset + 4; + for (i = 1 ; i <= value1; i++ ) /* ACL templates to delete*/ + { + ioffset += align_4(tvb, ioffset); + value2 = tvb_get_letohl(tvb, ioffset); /* Attribute Name */ + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value2); + proto_tree_add_string(ntree, hf_nds_attribute_dn, tvb, ioffset, + value2, values->vstring); + ioffset = ioffset + value2; + ioffset += align_4(tvb, ioffset); + value2 = tvb_get_letohl(tvb, ioffset); /* DN of Trustee */ + ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, value2); + proto_tree_add_string(ntree, hf_nds_trustee_dn, tvb, ioffset, + value2, values->vstring); + ioffset = ioffset + value2; +@@ -6541,7 +6526,8 @@ + ioffset = ioffset + 4; + } + break; +- case MVTYPE_PROCESS_TAGS: /* Process tags and paths depending on name type returned. */ ++ ++ case MVTYPE_PROCESS_TAGS: /* Process tags and paths depending on name type returned. */ + switch (values->vflags) { + + case 8: /* Tuned Name */ +@@ -6551,235 +6537,237 @@ + valuestr = match_strval(value1, nds_tuned_tags); + if (valuestr == NULL) + { +- valuestr="(Undefined Tuned Name Tag)"; ++ valuestr="(Undefined Tuned Name Tag)"; + } + proto_tree_add_string_format(ntree, hf_value_string, tvb, ioffset, +- 2, valuestr, "Tuned Name Tag -> %s", valuestr); ++ 2, valuestr, "Tuned Name Tag -> %s", valuestr); + ioffset += 2; + ioffset += align_4(tvb, ioffset); + if (value1 == 0) { /* RDN Hint - really just returns the dist name + timestamp info */ +- value2 = tvb_get_letohl(tvb, ioffset); /* Distinguished Name Len, String[len]*/ +- ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); +- values->vstring = mval_buf.buffer; +- proto_tree_add_string(ntree, hf_mv_string, tvb, ioffset, +- value2, values->vstring); +- ioffset += value2; +- ioffset += align_4(tvb, ioffset); +- ns.secs = tvb_get_letohl(tvb, ioffset); /* Seconds */ +- ns.nsecs = 0; +- proto_tree_add_time_format(ntree, hf_es_seconds, tvb, ioffset, +- 4, &ns, "Creation Timestamp: %s", abs_time_to_str(&ns)); +- ioffset += 4; +- replica_num = tvb_get_letohs(tvb, ioffset); /* Replica */ +- proto_tree_add_item(ntree, hf_nds_replica_num, tvb, ioffset, +- 2, replica_num); +- ioffset = ioffset + 2; +- event_num = tvb_get_letohs(tvb, ioffset); /* Event */ +- proto_tree_add_item(ntree, hf_nds_event_num, tvb, ioffset, +- 2, event_num); +- ioffset = ioffset + 2; ++ value2 = tvb_get_letohl(tvb, ioffset); /* Distinguished Name Len, String[len]*/ ++ ioffset = ioffset + 4; ++ values->vstring = get_string(tvb, ioffset, value2); ++ proto_tree_add_string(ntree, hf_mv_string, tvb, ioffset, ++ value2, values->vstring); ++ ioffset += value2; ++ ioffset += align_4(tvb, ioffset); ++ ns.secs = tvb_get_letohl(tvb, ioffset); /* Seconds */ ++ ns.nsecs = 0; ++ proto_tree_add_time_format(ntree, hf_es_seconds, tvb, ioffset, ++ 4, &ns, "Creation Timestamp: %s", abs_time_to_str(&ns)); ++ ioffset += 4; ++ replica_num = tvb_get_letohs(tvb, ioffset); /* Replica */ ++ proto_tree_add_item(ntree, hf_nds_replica_num, tvb, ioffset, ++ 2, replica_num); ++ ioffset = ioffset + 2; ++ event_num = tvb_get_letohs(tvb, ioffset); /* Event */ ++ proto_tree_add_item(ntree, hf_nds_event_num, tvb, ioffset, ++ 2, event_num); ++ ioffset = ioffset + 2; + } + else /* Process the full RDN history including ancestors */ + { +- value1 = tvb_get_letohl(tvb, ioffset); +- sub1item = proto_tree_add_uint_format(ntree, hf_nds_acl_del, tvb, ioffset, +- 4, value1, "Number of RDN Items %d", value1); +- sub1tree = proto_item_add_subtree(sub1item, ett_nds); +- ioffset = ioffset + 4; +- for (i=1; i <= value1; i++) { +- +- sub2item = proto_tree_add_text(sub1tree, tvb, ioffset, 0, "Item %d", i); +- sub2tree = proto_item_add_subtree(sub2item, ett_nds); +- ioffset += align_4(tvb, ioffset); +- +- value5 = tvb_get_letohl(tvb, ioffset); +- valuestr = match_strval(value5, nds_tuned_item_tags); +- if (valuestr == NULL) +- { +- valuestr="(Undefined Tuned Name Tag)"; +- } +- if (value5 == 0) { /* Items are timestamp + Distinguished name (0 value == one entry)*/ +- proto_tree_add_string_format(sub2tree, hf_value_string, tvb, ioffset, +- 4, valuestr, "Item Tag -> %s", valuestr); +- ioffset += 4; +- ns.secs = tvb_get_letohl(tvb, ioffset); /* Seconds */ +- ns.nsecs = 0; +- proto_tree_add_time_format(sub2tree, hf_es_seconds, tvb, ioffset, +- 4, &ns, "Timestamp: %s", abs_time_to_str(&ns)); +- ioffset += 4; +- replica_num = tvb_get_letohs(tvb, ioffset); /* Replica */ +- proto_tree_add_item(sub2tree, hf_nds_replica_num, tvb, ioffset, +- 2, replica_num); +- ioffset = ioffset + 2; +- event_num = tvb_get_letohs(tvb, ioffset); /* Event */ +- proto_tree_add_item(sub2tree, hf_nds_event_num, tvb, ioffset, +- 2, event_num); +- ioffset = ioffset + 2; +- value2 = tvb_get_letohl(tvb, ioffset); /* Distinguished Name Len, String[len]*/ +- ioffset = ioffset + 4; +- get_string(tvb, ioffset, value2, mval_buf.buffer); +- values->vstring = mval_buf.buffer; +- proto_tree_add_string(sub2tree, hf_mv_string, tvb, ioffset, +- value2, values->vstring); +- ioffset += value2; ++ value1 = tvb_get_letohl(tvb, ioffset); ++ sub1item = proto_tree_add_uint_format(ntree, hf_nds_acl_del, tvb, ioffset, ++ 4, value1, "Number of RDN Items %u", value1); ++ sub1tree = proto_item_add_subtree(sub1item, ett_nds); ++ ioffset = ioffset + 4; ++ for (i=1; i <= value1; i++) { ++ sub2item = proto_tree_add_text(sub1tree, tvb, ioffset, 0, "Item %u", i); ++ sub2tree = proto_item_add_subtree(sub2item, ett_nds); ++ ioffset += align_4(tvb, ioffset); + +- } +- } +- values->voffset=ioffset; +- break; ++ value5 = tvb_get_letohl(tvb, ioffset); ++ valuestr = match_strval(value5, nds_tuned_item_tags); ++ if (valuestr == NULL) ++ { ++ valuestr="(Undefined Tuned Name Tag)"; ++ } ++ if (value5 == 0) { /* Items are timestamp + Distinguished name (0 value == one entry)*/ ++ proto_tree_add_string_format(sub2tree, hf_value_string, tvb, ioffset, ++ 4, valuestr, "Item Tag -> %s", valuestr); ++ ioffset += 4; ++ ns.secs = tvb_get_letohl(tvb, ioffset); /* Seconds */ ++ ns.nsecs = 0; ++ proto_tree_add_time_format(sub2tree, hf_es_seconds, tvb, ioffset, ++ 4, &ns, "Timestamp: %s", abs_time_to_str(&ns)); ++ ioffset += 4; ++ replica_num = tvb_get_letohs(tvb, ioffset); /* Replica */ ++ proto_tree_add_item(sub2tree, hf_nds_replica_num, tvb, ioffset, ++ 2, replica_num); ++ ioffset = ioffset + 2; ++ event_num = tvb_get_letohs(tvb, ioffset); /* Event */ ++ proto_tree_add_item(sub2tree, hf_nds_event_num, tvb, ioffset, ++ 2, event_num); ++ ioffset = ioffset + 2; ++ value2 = tvb_get_letohl(tvb, ioffset); /* Distinguished Name Len, String[len]*/ ++ ioffset = ioffset + 4; ++ values->vstring = get_string(tvb, ioffset, value2); ++ proto_tree_add_string(sub2tree, hf_mv_string, tvb, ioffset, ++ value2, values->vstring); ++ ioffset += value2; ++ } ++ /* XXX: What if "multiple items" ? */ ++ /* What if "Undefined ... " ? */ ++ /* For now: we'll just keep on walking... */ ++ /* Presumably we'll get a ReportedBoundsError */ ++ /* pretty quickly. */ ++ else /* Undefined or "multiple items" ... */ ++ { ++ ioffset += 4; ++ } ++ } /* for */ ++ } /* else */ ++ values->voffset=ioffset; ++ break; + default: /* All other name types are just a string */ +- get_string(tvb, ioffset, values->vlength, mval_buf.buffer); +- values->vstring = mval_buf.buffer; ++ values->vstring = get_string(tvb, ioffset, values->vlength); + proto_tree_add_string(ntree, hf_mv_string, tvb, ioffset, + values->vlength, values->vstring); + values->voffset=ioffset + values->vlength; + ioffset = values->voffset; + ioffset += align_4(tvb, ioffset); + break; +- } +- break; +- } +- break; +- case MVTYPE_PROCESS_ITERATOR: /* Process Iterator subverbs. */ +- temp_values.vvalue = tvb_get_letohl(tvb, ioffset); ++ } /* switch (values->vflags) */ ++ break; + +- temp_values.vstring = (char *)match_strval(temp_values.vvalue, nds_info_type); +- if(temp_values.vstring == NULL) +- { +- temp_values.vstring = "No Info Type Set"; +- } +- /*g_strdup(value)*/ +- proto_tree_add_string(ntree, hf_nds_info_type, tvb, ioffset, 4, temp_values.vstring); +- ioffset = ioffset + 4; +- temp_values.vvalue = tvb_get_letohs(tvb, ioffset); +- value5 = tvb_get_letohl(tvb, ioffset); +- temp_values.vdesc = "Information Flags (low) Byte:"; +- temp_values.vlength = 2; +- temp_values.hfname = hf_nds_rflags; +- temp_values.voffset = ioffset; +- temp_values.bit1 = "Output Flags"; +- temp_values.bit1hfname = hf_bit1infoflagsl; +- temp_values.bit2 = "Entry ID"; +- temp_values.bit2hfname = hf_bit2infoflagsl; +- temp_values.bit3 = "Entry Flags"; +- temp_values.bit3hfname = hf_bit3infoflagsl; +- temp_values.bit4 = "Subordinate Count"; +- temp_values.bit4hfname = hf_bit4infoflagsl; +- temp_values.bit5 = "Modification Time"; +- temp_values.bit5hfname = hf_bit5infoflagsl; +- temp_values.bit6 = "Modification Timestamp"; +- temp_values.bit6hfname = hf_bit6infoflagsl; +- temp_values.bit7 = "Creation Timestamp"; +- temp_values.bit7hfname = hf_bit7infoflagsl; +- temp_values.bit8 = "Partition Root ID"; +- temp_values.bit8hfname = hf_bit8infoflagsl; +- temp_values.bit9 = "Parent ID"; +- temp_values.bit9hfname = hf_bit9infoflagsl; +- temp_values.bit10 = "Revision Count"; +- temp_values.bit10hfname = hf_bit10infoflagsl; +- temp_values.bit11 = "Replica Type"; +- temp_values.bit11hfname = hf_bit11infoflagsl; +- temp_values.bit12 = "Base Class"; +- temp_values.bit12hfname = hf_bit12infoflagsl; +- temp_values.bit13 = "Relative Distinguished Name"; +- temp_values.bit13hfname = hf_bit13infoflagsl; +- temp_values.bit14 = "Distinguished Name"; +- temp_values.bit14hfname = hf_bit14infoflagsl; +- temp_values.bit15 = "Root Distinguished Name"; +- temp_values.bit15hfname = hf_bit15infoflagsl; +- temp_values.bit16 = "Parent Distinguished Name"; +- temp_values.bit16hfname = hf_bit16infoflagsl; +- process_bitfield(ntree, tvb, &temp_values); +- ioffset = ioffset+2; +- temp_values.vvalue = tvb_get_letohs(tvb, ioffset); +- temp_values.vtype = VTYPE_BITFIELD; +- temp_values.vdesc = "Information Flags (high) Byte:"; +- temp_values.vlength = 2; +- temp_values.hfname= hf_nds_rflags; +- temp_values.voffset = ioffset; +- temp_values.bit1 = "Purge Time"; +- temp_values.bit1hfname = hf_bit1infoflagsh; +- temp_values.bit2 = "Dereference Base Class"; +- temp_values.bit2hfname = hf_bit2infoflagsh; +- temp_values.bit3 = "Replica Number"; +- temp_values.bit3hfname = hf_bit3infoflagsh; +- temp_values.bit4 = "Replica State"; +- temp_values.bit4hfname = hf_bit4infoflagsh; +- temp_values.bit5 = "Federation Boundary"; +- temp_values.bit5hfname = hf_bit5infoflagsh; +- temp_values.bit6 = "Schema Boundary"; +- temp_values.bit6hfname = hf_bit6infoflagsh; +- temp_values.bit7 = "Federation Boundary ID"; +- temp_values.bit7hfname = hf_bit7infoflagsh; +- temp_values.bit8 = "Schema Boundary ID"; +- temp_values.bit8hfname = hf_bit8infoflagsh; +- temp_values.bit9 = "Current Subcount"; +- temp_values.bit9hfname = hf_bit9infoflagsh; +- temp_values.bit10 = "Local Entry Flags"; +- temp_values.bit10hfname = hf_bit10infoflagsh; +- temp_values.bit11 = "Not Defined"; +- temp_values.bit11hfname = hf_bit11infoflagsh; +- temp_values.bit12 = "Not Defined"; +- temp_values.bit12hfname = hf_bit12infoflagsh; +- temp_values.bit13 = "Not Defined"; +- temp_values.bit13hfname = hf_bit13infoflagsh; +- temp_values.bit14 = "Not Defined"; +- temp_values.bit14hfname = hf_bit14infoflagsh; +- temp_values.bit15 = "Not Defined"; +- temp_values.bit15hfname = hf_bit15infoflagsh; +- temp_values.bit16 = "Not Defined"; +- temp_values.bit16hfname = hf_bit16infoflagsh; +- ioffset = ioffset+2; +- process_bitfield(ntree, tvb, &temp_values); +- ioffset += 4; +- proto_tree_add_item(ntree, hf_nds_time_filter, tvb, ioffset, 4, FALSE); +- ioffset += 4; +- proto_tree_add_item(ntree, hf_nds_all_attr, tvb, ioffset, 4, FALSE); +- ioffset += 4; +- value2 = tvb_get_letohl(tvb, ioffset); +- sub1item = proto_tree_add_uint_format(ntree, hf_nds_number_of_items, tvb, ioffset, +- 4, value2, "Number of Attributes %d", value2); +- sub1tree = proto_item_add_subtree(sub1item, ett_nds); +- ioffset += 4; +- for (i=1; i<=value2; i++) { +- sub2item = proto_tree_add_text(sub1tree, tvb, ioffset, 0, "Attribute %d", i); +- sub2tree = proto_item_add_subtree(sub2item, ett_nds); +- ioffset += align_4(tvb, ioffset); +- value3 = tvb_get_letohl(tvb, ioffset); /* Attribute Name */ +- ioffset = ioffset + 4; +- get_string(tvb, ioffset, value3, mval_buf.buffer); +- values->vstring = mval_buf.buffer; +- proto_tree_add_string(sub2tree, hf_nds_attribute_dn, tvb, ioffset, +- value3, values->vstring); +- ioffset = ioffset + value3; ++ case MVTYPE_PROCESS_ITERATOR: /* Process Iterator subverbs. */ ++ temp_values.vvalue = tvb_get_letohl(tvb, ioffset); + +- if(tvb_length_remaining(tvb, ioffset) < 4 ) +- { +- break; +- } +- } +- ioffset += align_4(tvb, ioffset); +- value4 = tvb_get_letohl(tvb, ioffset); +- values->vstring = (char *)match_strval(value4, iterator_subverbs); +- if(values->vstring == NULL) +- { +- values->vstring = "(No Iteration Verb Found)"; +- } +- ioffset += 4; +- dissect_nds_iterator(ntree, tvb, pinfo, value4, value5, ioffset, TRUE); ++ temp_values.vstring = (char *)match_strval(temp_values.vvalue, nds_info_type); ++ if(temp_values.vstring == NULL) ++ { ++ temp_values.vstring = "No Info Type Set"; ++ } ++ /*g_strdup(value)*/ ++ proto_tree_add_string(ntree, hf_nds_info_type, tvb, ioffset, 4, temp_values.vstring); ++ ioffset = ioffset + 4; ++ temp_values.vvalue = tvb_get_letohs(tvb, ioffset); ++ value5 = tvb_get_letohl(tvb, ioffset); ++ temp_values.vdesc = "Information Flags (low) Byte:"; ++ temp_values.vlength = 2; ++ temp_values.hfname = hf_nds_rflags; ++ temp_values.voffset = ioffset; ++ temp_values.bit1 = "Output Flags"; ++ temp_values.bit1hfname = hf_bit1infoflagsl; ++ temp_values.bit2 = "Entry ID"; ++ temp_values.bit2hfname = hf_bit2infoflagsl; ++ temp_values.bit3 = "Entry Flags"; ++ temp_values.bit3hfname = hf_bit3infoflagsl; ++ temp_values.bit4 = "Subordinate Count"; ++ temp_values.bit4hfname = hf_bit4infoflagsl; ++ temp_values.bit5 = "Modification Time"; ++ temp_values.bit5hfname = hf_bit5infoflagsl; ++ temp_values.bit6 = "Modification Timestamp"; ++ temp_values.bit6hfname = hf_bit6infoflagsl; ++ temp_values.bit7 = "Creation Timestamp"; ++ temp_values.bit7hfname = hf_bit7infoflagsl; ++ temp_values.bit8 = "Partition Root ID"; ++ temp_values.bit8hfname = hf_bit8infoflagsl; ++ temp_values.bit9 = "Parent ID"; ++ temp_values.bit9hfname = hf_bit9infoflagsl; ++ temp_values.bit10 = "Revision Count"; ++ temp_values.bit10hfname = hf_bit10infoflagsl; ++ temp_values.bit11 = "Replica Type"; ++ temp_values.bit11hfname = hf_bit11infoflagsl; ++ temp_values.bit12 = "Base Class"; ++ temp_values.bit12hfname = hf_bit12infoflagsl; ++ temp_values.bit13 = "Relative Distinguished Name"; ++ temp_values.bit13hfname = hf_bit13infoflagsl; ++ temp_values.bit14 = "Distinguished Name"; ++ temp_values.bit14hfname = hf_bit14infoflagsl; ++ temp_values.bit15 = "Root Distinguished Name"; ++ temp_values.bit15hfname = hf_bit15infoflagsl; ++ temp_values.bit16 = "Parent Distinguished Name"; ++ temp_values.bit16hfname = hf_bit16infoflagsl; ++ process_bitfield(ntree, tvb, &temp_values); ++ ioffset = ioffset+2; ++ temp_values.vvalue = tvb_get_letohs(tvb, ioffset); ++ temp_values.vtype = VTYPE_BITFIELD; ++ temp_values.vdesc = "Information Flags (high) Byte:"; ++ temp_values.vlength = 2; ++ temp_values.hfname= hf_nds_rflags; ++ temp_values.voffset = ioffset; ++ temp_values.bit1 = "Purge Time"; ++ temp_values.bit1hfname = hf_bit1infoflagsh; ++ temp_values.bit2 = "Dereference Base Class"; ++ temp_values.bit2hfname = hf_bit2infoflagsh; ++ temp_values.bit3 = "Replica Number"; ++ temp_values.bit3hfname = hf_bit3infoflagsh; ++ temp_values.bit4 = "Replica State"; ++ temp_values.bit4hfname = hf_bit4infoflagsh; ++ temp_values.bit5 = "Federation Boundary"; ++ temp_values.bit5hfname = hf_bit5infoflagsh; ++ temp_values.bit6 = "Schema Boundary"; ++ temp_values.bit6hfname = hf_bit6infoflagsh; ++ temp_values.bit7 = "Federation Boundary ID"; ++ temp_values.bit7hfname = hf_bit7infoflagsh; ++ temp_values.bit8 = "Schema Boundary ID"; ++ temp_values.bit8hfname = hf_bit8infoflagsh; ++ temp_values.bit9 = "Current Subcount"; ++ temp_values.bit9hfname = hf_bit9infoflagsh; ++ temp_values.bit10 = "Local Entry Flags"; ++ temp_values.bit10hfname = hf_bit10infoflagsh; ++ temp_values.bit11 = "Not Defined"; ++ temp_values.bit11hfname = hf_bit11infoflagsh; ++ temp_values.bit12 = "Not Defined"; ++ temp_values.bit12hfname = hf_bit12infoflagsh; ++ temp_values.bit13 = "Not Defined"; ++ temp_values.bit13hfname = hf_bit13infoflagsh; ++ temp_values.bit14 = "Not Defined"; ++ temp_values.bit14hfname = hf_bit14infoflagsh; ++ temp_values.bit15 = "Not Defined"; ++ temp_values.bit15hfname = hf_bit15infoflagsh; ++ temp_values.bit16 = "Not Defined"; ++ temp_values.bit16hfname = hf_bit16infoflagsh; ++ ioffset = ioffset+2; ++ process_bitfield(ntree, tvb, &temp_values); ++ ioffset += 4; ++ proto_tree_add_item(ntree, hf_nds_time_filter, tvb, ioffset, 4, FALSE); ++ ioffset += 4; ++ proto_tree_add_item(ntree, hf_nds_all_attr, tvb, ioffset, 4, FALSE); ++ ioffset += 4; ++ value2 = tvb_get_letohl(tvb, ioffset); ++ sub1item = proto_tree_add_uint_format(ntree, hf_nds_number_of_items, tvb, ioffset, ++ 4, value2, "Number of Attributes %u", value2); ++ sub1tree = proto_item_add_subtree(sub1item, ett_nds); ++ ioffset += 4; ++ for (i=1; i<=value2; i++) { ++ sub2item = proto_tree_add_text(sub1tree, tvb, ioffset, 0, "Attribute %u", i); ++ sub2tree = proto_item_add_subtree(sub2item, ett_nds); ++ ioffset += align_4(tvb, ioffset); ++ value3 = tvb_get_letohl(tvb, ioffset); /* Attribute Name */ ++ ioffset = ioffset + 4; ++ values->vstring = get_string(tvb, ioffset, value3); ++ proto_tree_add_string(sub2tree, hf_nds_attribute_dn, tvb, ioffset, ++ value3, values->vstring); ++ ioffset = ioffset + value3; + +- g_strlcpy(mval_buf.buffer, " (", 1024); +- g_strlcat(mval_buf.buffer, values->vstring, 1024); +- g_strlcat(mval_buf.buffer, ") ", 1024); +- values->vstring = mval_buf.buffer; +- break; +- default: +- break; ++ if(tvb_length_remaining(tvb, ioffset) < 4 ) ++ { ++ break; ++ } ++ } ++ ioffset += align_4(tvb, ioffset); ++ value4 = tvb_get_letohl(tvb, ioffset); ++ values->vstring = (char *)match_strval(value4, iterator_subverbs); ++ if(values->vstring == NULL) ++ { ++ values->vstring = "(No Iteration Verb Found)"; ++ } ++ ioffset += 4; ++ dissect_nds_iterator(ntree, tvb, pinfo, value4, value5, ioffset, TRUE); ++ ++ values->vstring = ep_strdup_printf("(%s)", values->vstring); ++ break; ++ ++ default: ++ break; + } + } + +-static void dissect_ncp_89_6_request(tvbuff_t *tvb, proto_tree *volatile ncp_tree, guint32 offset) ++static void ++dissect_ncp_89_6_request(tvbuff_t *tvb, proto_tree *volatile ncp_tree, guint32 offset) + { + guint32 string_len, datatype, count, i; + +@@ -6804,7 +6792,7 @@ + offset += string_len; + if(tvb_length_remaining(tvb, offset) < 4 ) + { +- break; ++ break; + } + } + } +@@ -6844,7 +6832,7 @@ + loffset = 40; + for (x = 1; x <= number_of_items; x++) + { +- aitem = proto_tree_add_text(ncp_tree, tvb, loffset, -1, "Network Address - %d", x); ++ aitem = proto_tree_add_text(ncp_tree, tvb, loffset, -1, "Network Address - %u", x); + atree = proto_item_add_subtree(aitem, ett_ncp); + + addr_type = tvb_get_guint8(tvb, loffset); +@@ -6856,33 +6844,33 @@ + + switch (addr_type) + { +- case 1: +- proto_tree_add_item(atree, hf_nds_net, tvb, loffset, 4, FALSE); +- proto_tree_add_item(atree, hf_nds_node, tvb, loffset+4, 6, FALSE); +- proto_tree_add_item(atree, hf_nds_socket, tvb, loffset+10, 2, FALSE); +- loffset += 12; +- break; +- case 5: +- proto_tree_add_item(atree, hf_nds_port, tvb, loffset, 2, FALSE); +- proto_tree_add_item(atree, hf_add_ref_udp, tvb, loffset+2, 4, FALSE); +- loffset += 6; +- break; +- case 6: +- proto_tree_add_item(atree, hf_nds_port, tvb, loffset, 2, FALSE); +- proto_tree_add_item(atree, hf_add_ref_tcp, tvb, loffset+2, 4, FALSE); +- loffset += 6; +- break; +- default: +- proto_tree_add_text(atree, tvb, loffset, -1, "Unknown Address Type"); +- /* unknown type so read the length field and then +- * just skip the record and move on to the next */ +- loffset += tvb_get_letohl(tvb, loffset - 4); +- break; ++ case 1: ++ proto_tree_add_item(atree, hf_nds_net, tvb, loffset, 4, FALSE); ++ proto_tree_add_item(atree, hf_nds_node, tvb, loffset+4, 6, FALSE); ++ proto_tree_add_item(atree, hf_nds_socket, tvb, loffset+10, 2, FALSE); ++ loffset += 12; ++ break; ++ case 5: ++ proto_tree_add_item(atree, hf_nds_port, tvb, loffset, 2, FALSE); ++ proto_tree_add_item(atree, hf_add_ref_udp, tvb, loffset+2, 4, FALSE); ++ loffset += 6; ++ break; ++ case 6: ++ proto_tree_add_item(atree, hf_nds_port, tvb, loffset, 2, FALSE); ++ proto_tree_add_item(atree, hf_add_ref_tcp, tvb, loffset+2, 4, FALSE); ++ loffset += 6; ++ break; ++ default: ++ proto_tree_add_text(atree, tvb, loffset, -1, "Unknown Address Type"); ++ /* unknown type so read the length field and then ++ * just skip the record and move on to the next */ ++ loffset += tvb_get_letohl(tvb, loffset - 4); ++ break; + } + proto_item_set_end(aitem, tvb, loffset); + if(tvb_length_remaining(tvb, loffset) < 4 ) + { +- break; ++ break; + } + } + } +@@ -6911,11 +6899,11 @@ + dissect_ncp_8x20reply(tvbuff_t *tvb, proto_tree *volatile ncp_tree, + const ncp_record *ncp_rec, ncp_req_hash_value *request_value) + { +- guint16 x; +- guint32 loffset, number_of_items, str_length; +- ptvcursor_t *ptvc = NULL; +- proto_tree *atree, *btree; +- proto_item *aitem, *bitem; ++ guint16 x; ++ guint32 loffset, number_of_items, str_length; ++ ptvcursor_t *ptvc = NULL; ++ proto_tree *atree, *btree; ++ proto_item *aitem, *bitem; + + aitem = proto_tree_add_text(ncp_tree, tvb, 8, 9, "Search Sequence:"); + atree = proto_item_add_subtree(aitem, ett_ncp); +@@ -6930,7 +6918,7 @@ + loffset = 20; + for (x = 1; x <= number_of_items; x++ ) + { +- aitem = proto_tree_add_text(ncp_tree, tvb, loffset, -1, "Information Item %d", x); ++ aitem = proto_tree_add_text(ncp_tree, tvb, loffset, -1, "Information Item %u", x); + atree = proto_item_add_subtree(aitem, ett_ncp); + /* Data Stream Space Allocated */ + if (request_value->req_mask & 0x0002) { +@@ -7249,24 +7237,26 @@ + char value_format[2]="\0"; + char param_string[256]="\0"; + +- build_expert_data(ncp_tree, "ncp.set_cmd_type", value_format, 0, FALSE); +- build_expert_data(ncp_tree, "ncp.set_cmd_name", param_string, 0, FALSE); ++ build_expert_data(ncp_tree, "ncp.set_cmd_type", ++ value_format, sizeof value_format, 0, FALSE); ++ build_expert_data(ncp_tree, "ncp.set_cmd_name", ++ param_string, sizeof param_string, 0, FALSE); + switch (atoi(value_format)) { +- case 0: /* { 0x00, "Numeric Value" }, */ +- case 2: /* { 0x02, "Ticks Value" }, */ +- case 4: /* { 0x04, "Time Value" }, */ +- case 6: /* { 0x06, "Trigger Value" }, */ +- case 7: /* { 0x07, "Numeric Value" }, */ +- proto_tree_add_item(ncp_tree, hf_srvr_param_number, tvb, 37+strlen(param_string), 4, TRUE); +- break; +- case 1: /* { 0x01, "Boolean Value" }, */ +- proto_tree_add_item(ncp_tree, hf_srvr_param_boolean, tvb, 37+strlen(param_string), 1, TRUE); +- break; +- case 5: /* { 0x05, "String Value" }, */ +- proto_tree_add_item(ncp_tree, hf_srvr_param_string, tvb, 37+strlen(param_string), -1, TRUE); +- break; +- default: +- break; ++ case 0: /* { 0x00, "Numeric Value" }, */ ++ case 2: /* { 0x02, "Ticks Value" }, */ ++ case 4: /* { 0x04, "Time Value" }, */ ++ case 6: /* { 0x06, "Trigger Value" }, */ ++ case 7: /* { 0x07, "Numeric Value" }, */ ++ proto_tree_add_item(ncp_tree, hf_srvr_param_number, tvb, 37+strlen(param_string), 4, TRUE); ++ break; ++ case 1: /* { 0x01, "Boolean Value" }, */ ++ proto_tree_add_item(ncp_tree, hf_srvr_param_boolean, tvb, 37+strlen(param_string), 1, TRUE); ++ break; ++ case 5: /* { 0x05, "String Value" }, */ ++ proto_tree_add_item(ncp_tree, hf_srvr_param_string, tvb, 37+strlen(param_string), -1, TRUE); ++ break; ++ default: ++ break; + } + } + +@@ -7289,7 +7279,7 @@ + * the last fragment packet number. + * + * Also the NDS dissection requires the values of NDS Verb, Version, and Flags. +- * Without this values being remembered from the first request packet then ++ * Without these values being remembered from the first request packet then + * we will be unable to dissect the reply packet. For this reason we remember + * these values on the first fragment and then populate the values in the final + * fragment. We only do this on the first dissection. +@@ -7298,7 +7288,7 @@ + nds_defrag(tvbuff_t *tvb, packet_info *pinfo, guint32 nw_connection, guint8 sequence, guint16 type, proto_tree *tree, struct novell_tap *ncp_tap) + { + int i, frag_count=0; +- guint len=0; ++ guint len=0; + guint32 tid = 1; + tvbuff_t *frag_tvb = NULL; + fragment_data *fd_head; +@@ -7308,8 +7298,8 @@ + + for (i = 0; i < 99; i++) { + if (!frags[i].nds_fragmented) +- { +- frags[i].nds_frag = 0xfffffff0; ++ { ++ frags[i].nds_frag = 0xfffffff0; + } + } + /* Check to see if defragmentation is enabeled in the dissector */ +@@ -7321,23 +7311,23 @@ + if (!pinfo->fd->flags.visited) { + /* Find the conversation whence the request would have come. */ + conversation = find_conversation(pinfo->fd->num, &pinfo->src, &pinfo->dst, +- PT_NCP, nw_connection, nw_connection, 0); ++ PT_NCP, nw_connection, nw_connection, 0); + if (conversation != NULL) { +- /* find the record telling us the request made that caused +- this reply */ +- request_value = ncp_hash_lookup(conversation, sequence); +- if (!request_value) { +- dissect_ncp_reply(tvb, pinfo, nw_connection, sequence, type, tree, ncp_tap); +- return; +- } +- p_add_proto_data(pinfo->fd, proto_ncp, (void*) request_value); ++ /* find the record telling us the request made that caused ++ this reply */ ++ request_value = ncp_hash_lookup(conversation, sequence); ++ if (!request_value) { ++ dissect_ncp_reply(tvb, pinfo, nw_connection, sequence, type, tree, ncp_tap); ++ return; ++ } ++ p_add_proto_data(pinfo->fd, proto_ncp, (void*) request_value); + } + /* else... we haven't seen an NCP Request for that conversation and sequence. */ + else +- { ++ { + dissect_ncp_reply(tvb, pinfo, nw_connection, sequence, type, tree, ncp_tap); + return; +- } ++ } + } + else { + request_value = p_get_proto_data(pinfo->fd, proto_ncp); +@@ -7349,7 +7339,7 @@ + /* Validate that this is an NDS packet */ + /* If this isn't an NDS packet then just return */ + if (!request_value->ncp_rec || +- request_value->ncp_rec->func!=104 || request_value->ncp_rec->subfunc!=2) { ++ request_value->ncp_rec->func!=104 || request_value->ncp_rec->subfunc!=2) { + dissect_ncp_reply(tvb, pinfo, nw_connection, sequence, type, tree, ncp_tap); + return; + } +@@ -7367,13 +7357,14 @@ + { + if (frags[i].nds_frag == nds_frag || frags[i].nds_frag == 0xfffffff0) + { +- if (frags[i].nds_frag == 0xfffffff0) ++ if (frags[i].nds_frag == 0xfffffff0) + { +- frags[i].nds_length = 0; +- frags[i].nds_frag = nds_frag; +- frags[i].nds_fragmented = TRUE; ++ frags[i].nds_length = 0; ++ frags[i].nds_frag = nds_frag; ++ frags[i].nds_fragmented = TRUE; ++ frags[i].sequence = 0; + } +- break; ++ break; + } + } + if (i > 99) +@@ -7384,8 +7375,8 @@ + /* is this the end of an existing fragment or just another reply */ + if (nds_frag == 0xffffffff && request_value->nds_frag_num == 0xffffffff) + { +- dissect_ncp_reply(tvb, pinfo, nw_connection, sequence, type, tree, ncp_tap); +- return; ++ dissect_ncp_reply(tvb, pinfo, nw_connection, sequence, type, tree, ncp_tap); ++ return; + } + + /* Now we process the fragments */ +@@ -7393,16 +7384,16 @@ + { + /* Check to see of this is a fragment. If so then mark as a fragment. */ + if (frags[frag_count].nds_frag==0xffffffff) { +- request_value->nds_frag = FALSE; +- /* nds_length of 0 means start of fragment */ +- frags[frag_count].nds_length = 0; ++ request_value->nds_frag = FALSE; ++ /* nds_length of 0 means start of fragment */ ++ frags[frag_count].nds_length = 0; + } + else + { +- if (frags[frag_count].nds_length == 0) +- { +- frags[frag_count].nds_length = tvb_get_letohl(tvb, 0); +- } ++ if (frags[frag_count].nds_length == 0) ++ { ++ frags[frag_count].nds_length = tvb_get_letohl(tvb, 0); ++ } + } + /* + * Fragment +@@ -7420,13 +7411,33 @@ + frags[frag_count].nds_frag_flags = request_value->req_nds_flags; + frags[frag_count].nds_frag_prot_flags = request_value->req_nds_prot_flags; + fd_head = fragment_add_seq_next(tvb, 0, pinfo, tid, nds_fragment_table, nds_reassembled_table, len, request_value->nds_frag); ++ frags[frag_count].sequence = sequence; + frags[frag_count].nds_length = 1; + } + else + { + /* Subsequent fragments should be offset by 16 since we do not need */ + /* the additional fragment handle and size fields in our composite data */ +- fd_head = fragment_add_seq_next(tvb, 16, pinfo, tid, nds_fragment_table, nds_reassembled_table, len-16, request_value->nds_frag); ++ /* Also do not add retransmitted packets, just mark and return */ ++ if (!pinfo->fd->flags.visited) ++ { ++ if (sequence != frags[frag_count].sequence) { ++ fd_head = fragment_add_seq_next(tvb, 16, pinfo, tid, nds_fragment_table, nds_reassembled_table, len-16, request_value->nds_frag); ++ frags[frag_count].sequence = sequence; ++ } ++ else ++ { ++ if (check_col(pinfo->cinfo, COL_INFO)) { ++ col_add_fstr(pinfo->cinfo, COL_INFO, "[Retransmitted NDS Fragment 0x%08x]", frags[frag_count].nds_frag); ++ } ++ return; ++ } ++ } ++ else ++ { ++ fd_head = fragment_add_seq_next(tvb, 16, pinfo, tid, nds_fragment_table, nds_reassembled_table, len-16, request_value->nds_frag); ++ frags[frag_count].sequence = sequence; ++ } + } + if (fd_head != NULL) + { +@@ -7434,43 +7445,43 @@ + if (fd_head->next != NULL && !request_value->nds_frag) + { + frag_tvb = tvb_new_real_data(fd_head->data, +- fd_head->len, fd_head->len); ++ fd_head->len, fd_head->len); + tvb_set_child_real_data_tvbuff(tvb, +- frag_tvb); ++ frag_tvb); + add_new_data_source(pinfo, +- frag_tvb, +- "Reassembled NDS"); ++ frag_tvb, ++ "Reassembled NDS"); + /* Show all fragments. */ + if (tree) + { + proto_item *frag_tree_item; + show_fragment_seq_tree(fd_head, +- &nds_frag_items, +- tree, pinfo, +- frag_tvb, &frag_tree_item); ++ &nds_frag_items, ++ tree, pinfo, ++ frag_tvb, &frag_tree_item); + tid++; + } + + if (!pinfo->fd->flags.visited) + { +- /* Now we need to find the original fragment number. */ +- /* Get the fragment flag */ +- nds_frag = tvb_get_letohl(frag_tvb, 12); +- for (i=0; i<100; i++) +- { +- if (frags[i].nds_frag == nds_frag) +- { +- break; +- } +- } +- if (i > 99) +- return; +- if (frags[i].nds_frag == 0xffffffff) +- { +- /* Error can't find fragment */ +- /*DISSECTOR_ASSERT(0);*/ +- } +- frag_count = i; ++ /* Now we need to find the original fragment number. */ ++ /* Get the fragment flag */ ++ nds_frag = tvb_get_letohl(frag_tvb, 12); ++ for (i=0; i<100; i++) ++ { ++ if (frags[i].nds_frag == nds_frag) ++ { ++ break; ++ } ++ } ++ if (i > 99) ++ return; ++ if (frags[i].nds_frag == 0xffffffff) ++ { ++ /* Error can't find fragment */ ++ /*DISSECTOR_ASSERT(0);*/ ++ } ++ frag_count = i; + /* Remember this fragment information so we can dissect. + * Only do this on the first dissection. After the first + * dissection we will just read the memory values. +@@ -7491,7 +7502,7 @@ + { + if (request_value->nds_frag) + { +- col_add_fstr(pinfo->cinfo, COL_INFO, "[NDS Fragment %08x]", frags[frag_count].nds_frag); ++ col_add_fstr(pinfo->cinfo, COL_INFO, "[NDS Fragment 0x%08x]", frags[frag_count].nds_frag); + } + } + } +@@ -7503,7 +7514,7 @@ + { + if (request_value->nds_frag) + { +- col_add_fstr(pinfo->cinfo, COL_INFO, "[NDS Fragment %08x]", frags[frag_count].nds_frag); ++ col_add_fstr(pinfo->cinfo, COL_INFO, "[NDS Fragment 0x%08x]", frags[frag_count].nds_frag); + } + } + frag_tvb = NULL; +@@ -7519,9 +7530,9 @@ + if (frag_tvb == NULL) + { + /* This is a fragment packet */ +- frag_tvb = tvb_new_subset (tvb, 0, -1, -1); +- nds_data_handle = find_dissector("data"); +- call_dissector(nds_data_handle, frag_tvb, pinfo, tree); ++ frag_tvb = tvb_new_subset (tvb, 0, -1, -1); ++ nds_data_handle = find_dissector("data"); ++ call_dissector(nds_data_handle, frag_tvb, pinfo, tree); + } + else + { +@@ -7535,9 +7546,17 @@ + else + { + /* This is not any fragment packet */ +- frags[frag_count].nds_length = 0; + request_value->nds_frag = FALSE; +- dissect_ncp_reply(tvb, pinfo, nw_connection, sequence, type, tree, ncp_tap); ++ /* Trap for retransmitted end fragment */ ++ if (request_value->nds_end_frag < pinfo->fd->num) { ++ if (check_col(pinfo->cinfo, COL_INFO)) { ++ col_add_fstr(pinfo->cinfo, COL_INFO, "[Retransmitted end of NDS Fragment 0x%08x, see packet #%d for details.]", request_value->nds_frag_num, request_value->nds_end_frag); ++ } ++ } ++ else ++ { ++ dissect_ncp_reply(tvb, pinfo, nw_connection, sequence, type, tree, ncp_tap); ++ } + } + } + +@@ -7546,7 +7565,7 @@ + guint32 nw_connection, guint8 sequence, + guint16 type, proto_tree *volatile ncp_tree) + { +- volatile guint8 func=0; ++ volatile guint8 func=0; + volatile guint8 subfunc = 0; + gboolean requires_subfunc = FALSE; + gboolean has_length = FALSE; +@@ -7576,22 +7595,22 @@ + } + else + { +- ncp_rec = &ncp1111_request; +- if (ncp_echo_conn) { +- expert_add_info_format(pinfo, NULL, PI_RESPONSE_CODE, PI_CHAT, "Connection Request"); +- } ++ ncp_rec = &ncp1111_request; ++ if (ncp_echo_conn) { ++ expert_add_info_format(pinfo, NULL, PI_RESPONSE_CODE, PI_CHAT, "Connection Request"); ++ } + } + } + else + { +- ncp_rec = &ncp1111_request; ++ ncp_rec = &ncp1111_request; + if (ncp_echo_conn) { +- expert_add_info_format(pinfo, NULL, PI_RESPONSE_CODE, PI_CHAT, "Connection Request"); ++ expert_add_info_format(pinfo, NULL, PI_RESPONSE_CODE, PI_CHAT, "Connection Request"); + } + } + break; + case NCP_SERVICE_REQUEST: +- func = tvb_get_guint8(tvb, 6); ++ func = tvb_get_guint8(tvb, 6); + requires_subfunc = ncp_requires_subfunc(func); + has_length = ncp_has_length_parameter(func); + if (requires_subfunc) { +@@ -7606,9 +7625,9 @@ + break; + case NCP_DEALLOCATE_SLOT: + ncp_rec = &ncp5555_request; +- if (ncp_echo_conn) { +- expert_add_info_format(pinfo, NULL, PI_RESPONSE_CODE, PI_CHAT, "Destroy Connection %d Request", nw_connection); +- } ++ if (ncp_echo_conn) { ++ expert_add_info_format(pinfo, NULL, PI_RESPONSE_CODE, PI_CHAT, "Destroy Connection %u Request", nw_connection); ++ } + break; + case NCP_BROADCAST_SLOT: + ncp_rec = &ncpbbbb_request; +@@ -7636,13 +7655,13 @@ + col_add_fstr(pinfo->cinfo, COL_INFO, + "C Unknown Function %u %u (0x%02X/0x%02x)", + func, subfunc, func, subfunc); +- return; ++ return; + } + else { + col_add_fstr(pinfo->cinfo, COL_INFO, + "C Unknown Function %u (0x%02x)", + func, func); +- return; ++ return; + } + } + } +@@ -7744,21 +7763,21 @@ + ; /* nothing */ + break; + } +- if (request_value) { +- request_value->length = 0; +- } ++ if (request_value) { ++ request_value->length = 0; ++ } + if (requires_subfunc) { + if (has_length) { +- if (request_value && func==123) { +- request_value->length = tvb_get_ntohs(tvb, 7); +- } +- proto_tree_add_item(ncp_tree, hf_ncp_length, tvb, 7, ++ if (request_value && func==123) { ++ request_value->length = tvb_get_ntohs(tvb, 7); ++ } ++ proto_tree_add_item(ncp_tree, hf_ncp_length, tvb, 7, + 2, FALSE); +- proto_tree_add_uint_format(ncp_tree, hf_ncp_subfunc, tvb, 9, 1, ++ proto_tree_add_uint_format(ncp_tree, hf_ncp_subfunc, tvb, 9, 1, + subfunc, "SubFunction: %u (0x%02x)", + subfunc, subfunc); +- ptvc = ptvcursor_new(ncp_tree, tvb, 10); +- } ++ ptvc = ptvcursor_new(ncp_tree, tvb, 10); ++ } + else { + proto_tree_add_uint_format(ncp_tree, hf_ncp_subfunc, tvb, 7, 1, + subfunc, "SubFunction: %u (0x%02x)", +@@ -7773,7 +7792,7 @@ + /* The group is not part of the packet, but it's useful + * information to display anyway. Put it in the tree for filtering and tap use*/ + if (ncp_rec) { +- proto_tree_add_uint_format(ncp_tree, hf_ncp_group, tvb, 0, 0, ncp_rec->group, "Group: %s", ncp_groups[ncp_rec->group]); ++ proto_tree_add_uint_format(ncp_tree, hf_ncp_group, tvb, 0, 0, ncp_rec->group, "Group: %s", ncp_groups[ncp_rec->group]); + } + + except_code = 0; +@@ -7936,24 +7955,27 @@ + } + } + } +- /* Store NCP request specific flags for manual dissection */ +- if ((func == 0x57 || func == 0x59) && subfunc == 0x14 && ncp_tree && request_value) { +- char ret_info_string[16]; +- char ret_info_string_ext[16]; ++ /* Store NCP request specific flags for manual dissection */ ++ if ((func == 0x57 || func == 0x59) && subfunc == 0x14 && ncp_tree && request_value) { ++ char ret_info_string[16]; ++ char ret_info_string_ext[16]; + +- build_expert_data(ncp_tree, "ncp.ret_info_mask", ret_info_string, 0, FALSE); +- request_value->req_mask = atoi(ret_info_string); +- build_expert_data(ncp_tree, "ncp.ext_info", ret_info_string_ext, 0, FALSE); +- request_value->req_mask_ext = atoi(ret_info_string_ext); +- } +- /* NCP function 89/6 passes either ASCII or UTF8 data */ +- /* Decode manually since it is not possible to SREC the request */ +- /* packets from the python code */ +- if (func == 0x59 && subfunc == 0x6) { +- dissect_ncp_89_6_request(tvb, ncp_tree, 22); +- } +- /* Check to see if we need to report to the expert table */ +- trap_for_expert_event(ncp_tree, pinfo, ncp_rec, 0); ++ build_expert_data(ncp_tree, "ncp.ret_info_mask", ++ ret_info_string, sizeof ret_info_string, 0, FALSE); ++ request_value->req_mask = atoi(ret_info_string); ++ build_expert_data(ncp_tree, "ncp.ext_info", ++ ret_info_string_ext, sizeof ret_info_string_ext, ++ 0, FALSE); ++ request_value->req_mask_ext = atoi(ret_info_string_ext); ++ } ++ /* NCP function 89/6 passes either ASCII or UTF8 data */ ++ /* Decode manually since it is not possible to SREC the request */ ++ /* packets from the python code */ ++ if (func == 0x59 && subfunc == 0x6) { ++ dissect_ncp_89_6_request(tvb, ncp_tree, 22); ++ } ++ /* Check to see if we need to report to the expert table */ ++ trap_for_expert_event(ncp_tree, pinfo, ncp_rec, 0); + /* Free the temporary proto_tree */ + CLEANUP_CALL_AND_POP; + +@@ -7967,18 +7989,16 @@ + dissect_nds_ping_reply(tvbuff_t *tvb, packet_info *pinfo _U_, + proto_tree *ncp_tree, ncp_req_hash_value *request_value) + { +- nw_uni_t reply_buffer; ++ char * reply_buffer; + guint8 ping_version; + guint32 nds_string_len; + guint32 nds_offset; + guint32 bvalue; + guint32 nds_flags; +- nds_val pvalues[9]; +- int i; ++ nds_val pvalues[9]; ++ int i; + nstime_t ns; + +- reply_buffer.buffer[0] = '\0'; +- + ping_version = tvb_get_guint8(tvb, 8); + proto_tree_add_item(ncp_tree, hf_ping_version, tvb, 8, 1, TRUE); + if (ping_version == 9) { +@@ -8224,9 +8244,9 @@ + } + nds_string_len = tvb_get_letohl(tvb, nds_offset); + nds_offset += 4; +- get_string(tvb, nds_offset, nds_string_len, reply_buffer.buffer); ++ reply_buffer = get_string(tvb, nds_offset, nds_string_len); + tvb_ensure_bytes_exist(tvb, nds_offset, nds_string_len); +- proto_tree_add_text(ncp_tree, tvb, nds_offset, nds_string_len, "SAP Name: %s", reply_buffer.buffer); ++ proto_tree_add_text(ncp_tree, tvb, nds_offset, nds_string_len, "SAP Name: %s", reply_buffer); + nds_offset += nds_string_len; + nds_offset += align_4(tvb, nds_offset); + break; +@@ -8237,9 +8257,9 @@ + } + nds_string_len = tvb_get_letohl(tvb, nds_offset); + nds_offset += 4; +- get_string(tvb, nds_offset, nds_string_len, reply_buffer.buffer); ++ reply_buffer = get_string(tvb, nds_offset, nds_string_len); + tvb_ensure_bytes_exist(tvb, nds_offset, nds_string_len); +- proto_tree_add_text(ncp_tree, tvb, nds_offset, nds_string_len, "NDS Tree Name: %s", reply_buffer.buffer); ++ proto_tree_add_text(ncp_tree, tvb, nds_offset, nds_string_len, "NDS Tree Name: %s", reply_buffer); + nds_offset += nds_string_len; + nds_offset += align_4(tvb, nds_offset); + break; +@@ -8250,9 +8270,9 @@ + } + nds_string_len = tvb_get_letohl(tvb, nds_offset); + nds_offset += 4; +- get_string(tvb, nds_offset, nds_string_len, reply_buffer.buffer); ++ reply_buffer = get_string(tvb, nds_offset, nds_string_len); + tvb_ensure_bytes_exist(tvb, nds_offset, nds_string_len); +- proto_tree_add_text(ncp_tree, tvb, nds_offset, nds_string_len, "OS Name: %s", reply_buffer.buffer); ++ proto_tree_add_text(ncp_tree, tvb, nds_offset, nds_string_len, "OS Name: %s", reply_buffer); + nds_offset += nds_string_len; + nds_offset += align_4(tvb, nds_offset); + break; +@@ -8263,9 +8283,9 @@ + } + nds_string_len = tvb_get_letohl(tvb, nds_offset); + nds_offset += 4; +- get_string(tvb, nds_offset, nds_string_len, reply_buffer.buffer); ++ reply_buffer = get_string(tvb, nds_offset, nds_string_len); + tvb_ensure_bytes_exist(tvb, nds_offset, nds_string_len); +- proto_tree_add_text(ncp_tree, tvb, nds_offset, nds_string_len, "Hardware Name: %s", reply_buffer.buffer); ++ proto_tree_add_text(ncp_tree, tvb, nds_offset, nds_string_len, "Hardware Name: %s", reply_buffer); + nds_offset += nds_string_len; + nds_offset += align_4(tvb, nds_offset); + break; +@@ -8276,9 +8296,9 @@ + } + nds_string_len = tvb_get_letohl(tvb, nds_offset); + nds_offset += 4; +- get_string(tvb, nds_offset, nds_string_len, reply_buffer.buffer); ++ reply_buffer = get_string(tvb, nds_offset, nds_string_len); + tvb_ensure_bytes_exist(tvb, nds_offset, nds_string_len); +- proto_tree_add_text(ncp_tree, tvb, nds_offset, nds_string_len, "Vendor Name: %s", reply_buffer.buffer); ++ proto_tree_add_text(ncp_tree, tvb, nds_offset, nds_string_len, "Vendor Name: %s", reply_buffer); + nds_offset += nds_string_len; + nds_offset += align_4(tvb, nds_offset); + break; +@@ -8302,13 +8322,12 @@ + guint32 nds_frag; + const char *verb_string; + nds_val pvalues[9]; +- char string_buffer[9][1024]; + gboolean resolve_eid=FALSE; + guint32 global_eid=0; + gboolean add_eid = FALSE; + char global_object_name[256]; +- ncp_req_eid_hash_value *request_eid_value = NULL; +- int i; ++ ncp_req_eid_hash_value *request_eid_value = NULL; ++ int i; + + global_object_name[0] = '\0'; + +@@ -8340,159 +8359,158 @@ + } + if (request_value && nds_error_code == 0x00000000) + { +- nds_offset = 20; +- for (i = 0; i < 9; i++) { ++ nds_offset = 20; ++ for (i = 0; i < 9; i++) { + pvalues[i].vtype = 0; +- pvalues[i].vvalue = 0; +- pvalues[i].vlength = 0; +- pvalues[i].voffset = 0; +- pvalues[i].hfname = 0; +- pvalues[i].vdesc = ""; +- string_buffer[i][0] = '\0'; +- pvalues[i].vstring = string_buffer[i]; +- pvalues[i].mvtype = 0; +- } +- verb_string = val_to_str(request_value->nds_request_verb, +- ncp_nds_verb_vals, "Continuation Fragment"); +- if(request_value->req_nds_prot_flags & 0x4000) +- { +- /* CRC is included in the NDS header so justify the offset */ +- proto_tree_add_item(ncp_tree, hf_nds_crc, tvb, nds_offset, 4, TRUE); +- nds_offset += 4; +- } +- switch (request_value->nds_request_verb) ++ pvalues[i].vvalue = 0; ++ pvalues[i].vlength = 0; ++ pvalues[i].voffset = 0; ++ pvalues[i].hfname = 0; ++ pvalues[i].vdesc = ""; ++ pvalues[i].vstring = NULL; ++ pvalues[i].mvtype = 0; ++ } ++ verb_string = val_to_str(request_value->nds_request_verb, ++ ncp_nds_verb_vals, "Continuation Fragment"); ++ if(request_value->req_nds_prot_flags & 0x4000) ++ { ++ /* CRC is included in the NDS header so justify the offset */ ++ proto_tree_add_item(ncp_tree, hf_nds_crc, tvb, nds_offset, 4, TRUE); ++ nds_offset += 4; ++ } ++ switch (request_value->nds_request_verb) + { + case 0x01: +- pvalues[0].vvalue = tvb_get_letohl(tvb, nds_offset); +- pvalues[0].vstring = (char *)match_strval(pvalues[0].vvalue, nds_tags); +- if(pvalues[0].vstring == NULL) +- { +- pvalues[0].vstring = "No Tags Set"; +- } +- pvalues[0].vtype = VTYPE_STRING; +- pvalues[0].vdesc = "Tag: %s"; +- pvalues[0].vlength = 4; +- pvalues[0].voffset = nds_offset; +- pvalues[0].hfname = hf_nds_tag_string; +- nds_offset = nds_offset+pvalues[0].vlength; +- switch(pvalues[0].vvalue) +- { +- case NDS_TAG_NO_SUCH_ENTRY: +- break; +- case NDS_TAG_LOCAL_ENTRY: +- pvalues[1].vvalue = tvb_get_letohl(tvb, nds_offset); +- pvalues[1].vtype = VTYPE_UINT32; +- pvalues[1].vdesc = "Entry ID: 0x%08x"; +- add_eid = TRUE; +- resolve_eid = TRUE; +- g_strlcpy(global_object_name, request_value->object_name, 256); +- global_eid = pvalues[1].vvalue; +- pvalues[1].vlength = 4; +- pvalues[1].voffset = nds_offset; +- pvalues[1].hfname = hf_nds_eid; +- nds_offset = nds_offset+pvalues[1].vlength; +- pvalues[2].vvalue = tvb_get_letohl(tvb, nds_offset); +- pvalues[2].vtype = VTYPE_MULTIVALUE_UINT32; +- pvalues[2].vdesc = "Referral Records: %u"; +- pvalues[2].vlength = 4; +- pvalues[2].voffset = nds_offset; +- pvalues[2].hfname = hf_nds_referrals; +- pvalues[2].mvtype = MVTYPE_LOC_ADDR_REFERRAL_REPLY; +- break; +- case NDS_TAG_REMOTE_ENTRY: +- nds_offset += 4; /* GUINT32 reserved field */ +- pvalues[1].vvalue = tvb_get_letohl(tvb, nds_offset); +- pvalues[1].vtype = VTYPE_UINT32; +- pvalues[1].vdesc = "Entry ID: 0x%08x"; +- pvalues[1].vlength = 4; +- pvalues[1].voffset = nds_offset; +- pvalues[1].hfname = hf_nds_eid; +- nds_offset = nds_offset+pvalues[1].vlength; +- pvalues[2].vvalue = tvb_get_letohl(tvb, nds_offset); +- pvalues[2].vtype = VTYPE_MULTIVALUE_UINT32; +- pvalues[2].vdesc = "Referral Records: %u"; +- pvalues[2].vlength = 4; +- pvalues[2].voffset = nds_offset; +- pvalues[2].hfname = hf_nds_referrals; +- pvalues[2].mvtype = MVTYPE_LOC_ADDR_REFERRAL_REPLY; +- break; +- case NDS_TAG_ALIAS_ENTRY: +- pvalues[1].vtype = VTYPE_STRING; +- pvalues[1].vdesc = "Alias Name: %s"; +- pvalues[1].mvtype = MVTYPE_ATTR_REQUEST; +- pvalues[1].vvalue = 0; +- pvalues[1].vlength = 256; +- pvalues[1].vlength = tvb_get_letohl(tvb, nds_offset); +- if (pvalues[1].vlength == 0x00) +- { +- pvalues[1].vtype = VTYPE_NONE; +- break; +- } +- pvalues[1].voffset = nds_offset+4; +- nds_offset += 4; +- get_string(tvb, pvalues[1].voffset, pvalues[1].vlength, pvalues[1].vstring); +- nds_offset += pvalues[1].vlength; +- nds_offset += align_4(tvb, nds_offset); +- pvalues[1].hfname= hf_nds_name; +- break; +- case NDS_TAG_REFERRAL_INFORMATION: +- pvalues[1].vvalue = tvb_get_letohl(tvb, nds_offset); +- pvalues[1].vtype = VTYPE_UINT32; +- pvalues[1].vdesc = "Distance Object is From Root: 0x%08x"; +- pvalues[1].vlength = 4; +- pvalues[1].voffset = nds_offset; +- pvalues[1].hfname = hf_nds_eid; +- nds_offset = nds_offset+pvalues[1].vlength; +- pvalues[2].vvalue = tvb_get_letohl(tvb, nds_offset); +- pvalues[2].vtype = VTYPE_MULTIVALUE_UINT32; +- pvalues[2].vdesc = "Referral Records: %u"; +- pvalues[2].vlength = 4; +- pvalues[2].voffset = nds_offset; +- pvalues[2].hfname = hf_nds_depth; +- pvalues[2].mvtype = MVTYPE_ADDR_REFERRAL_REPLY; +- break; +- case NDS_TAG_ENTRY_AND_REFERRALS: +- pvalues[1].vvalue = tvb_get_letohl(tvb, nds_offset); +- pvalues[1].vtype = VTYPE_UINT32; +- pvalues[1].vdesc = "Result Flags: 0x%08x"; +- pvalues[1].vlength = 4; +- pvalues[1].voffset = nds_offset; +- pvalues[1].hfname = hf_nds_result_flags; +- nds_offset = nds_offset+pvalues[1].vlength; +- pvalues[2].vvalue = tvb_get_letohl(tvb, nds_offset); +- pvalues[2].vtype = VTYPE_UINT32; +- pvalues[2].vdesc = "Entry ID: 0x%08x"; +- add_eid = TRUE; +- resolve_eid = TRUE; +- global_eid = pvalues[2].vvalue; +- g_strlcpy(global_object_name, request_value->object_name, 256); +- pvalues[2].vlength = 4; +- pvalues[2].voffset = nds_offset; +- pvalues[2].hfname = hf_nds_eid; +- nds_offset = nds_offset+pvalues[2].vlength; +- pvalues[3].vvalue = tvb_get_letohl(tvb, nds_offset); +- pvalues[3].vtype = VTYPE_MULTIVALUE_UINT32; +- pvalues[3].vdesc = "Referral Records: %u"; +- pvalues[3].vlength = 4; +- pvalues[3].voffset = nds_offset; +- pvalues[3].mvtype = MVTYPE_ADDR_REFERRAL_REPLY; +- pvalues[3].hfname = hf_nds_referrals; +- break; +- default: ++ pvalues[0].vvalue = tvb_get_letohl(tvb, nds_offset); ++ pvalues[0].vstring = (char *)match_strval(pvalues[0].vvalue, nds_tags); ++ if(pvalues[0].vstring == NULL) ++ { ++ pvalues[0].vstring = "No Tags Set"; ++ } ++ pvalues[0].vtype = VTYPE_STRING; ++ pvalues[0].vdesc = "Tag: %s"; ++ pvalues[0].vlength = 4; ++ pvalues[0].voffset = nds_offset; ++ pvalues[0].hfname = hf_nds_tag_string; ++ nds_offset = nds_offset+pvalues[0].vlength; ++ switch(pvalues[0].vvalue) ++ { ++ case NDS_TAG_NO_SUCH_ENTRY: ++ break; ++ case NDS_TAG_LOCAL_ENTRY: ++ pvalues[1].vvalue = tvb_get_letohl(tvb, nds_offset); ++ pvalues[1].vtype = VTYPE_UINT32; ++ pvalues[1].vdesc = "Entry ID: 0x%08x"; ++ add_eid = TRUE; ++ resolve_eid = TRUE; ++ g_strlcpy(global_object_name, request_value->object_name, 256); ++ global_eid = pvalues[1].vvalue; ++ pvalues[1].vlength = 4; ++ pvalues[1].voffset = nds_offset; ++ pvalues[1].hfname = hf_nds_eid; ++ nds_offset = nds_offset+pvalues[1].vlength; ++ pvalues[2].vvalue = tvb_get_letohl(tvb, nds_offset); ++ pvalues[2].vtype = VTYPE_MULTIVALUE_UINT32; ++ pvalues[2].vdesc = "Referral Records: %u"; ++ pvalues[2].vlength = 4; ++ pvalues[2].voffset = nds_offset; ++ pvalues[2].hfname = hf_nds_referrals; ++ pvalues[2].mvtype = MVTYPE_LOC_ADDR_REFERRAL_REPLY; ++ break; ++ case NDS_TAG_REMOTE_ENTRY: ++ nds_offset += 4; /* GUINT32 reserved field */ ++ pvalues[1].vvalue = tvb_get_letohl(tvb, nds_offset); ++ pvalues[1].vtype = VTYPE_UINT32; ++ pvalues[1].vdesc = "Entry ID: 0x%08x"; ++ pvalues[1].vlength = 4; ++ pvalues[1].voffset = nds_offset; ++ pvalues[1].hfname = hf_nds_eid; ++ nds_offset = nds_offset+pvalues[1].vlength; ++ pvalues[2].vvalue = tvb_get_letohl(tvb, nds_offset); ++ pvalues[2].vtype = VTYPE_MULTIVALUE_UINT32; ++ pvalues[2].vdesc = "Referral Records: %u"; ++ pvalues[2].vlength = 4; ++ pvalues[2].voffset = nds_offset; ++ pvalues[2].hfname = hf_nds_referrals; ++ pvalues[2].mvtype = MVTYPE_LOC_ADDR_REFERRAL_REPLY; ++ break; ++ case NDS_TAG_ALIAS_ENTRY: ++ pvalues[1].vtype = VTYPE_STRING; ++ pvalues[1].vdesc = "Alias Name: %s"; ++ pvalues[1].mvtype = MVTYPE_ATTR_REQUEST; ++ pvalues[1].vvalue = 0; ++ pvalues[1].vlength = 256; ++ pvalues[1].vlength = tvb_get_letohl(tvb, nds_offset); ++ if (pvalues[1].vlength == 0x00) ++ { ++ pvalues[1].vtype = VTYPE_NONE; + break; ++ } ++ pvalues[1].voffset = nds_offset+4; ++ nds_offset += 4; ++ pvalues[1].vstring = get_string(tvb, pvalues[1].voffset, pvalues[1].vlength); ++ nds_offset += pvalues[1].vlength; ++ nds_offset += align_4(tvb, nds_offset); ++ pvalues[1].hfname= hf_nds_name; ++ break; ++ case NDS_TAG_REFERRAL_INFORMATION: ++ pvalues[1].vvalue = tvb_get_letohl(tvb, nds_offset); ++ pvalues[1].vtype = VTYPE_UINT32; ++ pvalues[1].vdesc = "Distance Object is From Root: 0x%08x"; ++ pvalues[1].vlength = 4; ++ pvalues[1].voffset = nds_offset; ++ pvalues[1].hfname = hf_nds_eid; ++ nds_offset = nds_offset+pvalues[1].vlength; ++ pvalues[2].vvalue = tvb_get_letohl(tvb, nds_offset); ++ pvalues[2].vtype = VTYPE_MULTIVALUE_UINT32; ++ pvalues[2].vdesc = "Referral Records: %u"; ++ pvalues[2].vlength = 4; ++ pvalues[2].voffset = nds_offset; ++ pvalues[2].hfname = hf_nds_depth; ++ pvalues[2].mvtype = MVTYPE_ADDR_REFERRAL_REPLY; ++ break; ++ case NDS_TAG_ENTRY_AND_REFERRALS: ++ pvalues[1].vvalue = tvb_get_letohl(tvb, nds_offset); ++ pvalues[1].vtype = VTYPE_UINT32; ++ pvalues[1].vdesc = "Result Flags: 0x%08x"; ++ pvalues[1].vlength = 4; ++ pvalues[1].voffset = nds_offset; ++ pvalues[1].hfname = hf_nds_result_flags; ++ nds_offset = nds_offset+pvalues[1].vlength; ++ pvalues[2].vvalue = tvb_get_letohl(tvb, nds_offset); ++ pvalues[2].vtype = VTYPE_UINT32; ++ pvalues[2].vdesc = "Entry ID: 0x%08x"; ++ add_eid = TRUE; ++ resolve_eid = TRUE; ++ global_eid = pvalues[2].vvalue; ++ g_strlcpy(global_object_name, request_value->object_name, 256); ++ pvalues[2].vlength = 4; ++ pvalues[2].voffset = nds_offset; ++ pvalues[2].hfname = hf_nds_eid; ++ nds_offset = nds_offset+pvalues[2].vlength; ++ pvalues[3].vvalue = tvb_get_letohl(tvb, nds_offset); ++ pvalues[3].vtype = VTYPE_MULTIVALUE_UINT32; ++ pvalues[3].vdesc = "Referral Records: %u"; ++ pvalues[3].vlength = 4; ++ pvalues[3].voffset = nds_offset; ++ pvalues[3].mvtype = MVTYPE_ADDR_REFERRAL_REPLY; ++ pvalues[3].hfname = hf_nds_referrals; ++ break; ++ default: ++ break; + } +- break; ++ break; + case 0x02: +- nds_offset -= 4; +- pvalues[0].vvalue = 1; +- pvalues[0].vtype = VTYPE_MULTIVALUE_UINT32; +- pvalues[0].vdesc = "Entry Information"; +- pvalues[0].vlength = 0; +- pvalues[0].voffset = nds_offset; +- pvalues[0].hfname = hf_nds_name; +- pvalues[0].mvtype = MVTYPE_LIST_PARTITIONS; +- pvalues[0].vflags = request_value->req_nds_flags; +- break; ++ nds_offset -= 4; ++ pvalues[0].vvalue = 1; ++ pvalues[0].vtype = VTYPE_MULTIVALUE_UINT32; ++ pvalues[0].vdesc = "Entry Information"; ++ pvalues[0].vlength = 0; ++ pvalues[0].voffset = nds_offset; ++ pvalues[0].hfname = hf_nds_name; ++ pvalues[0].mvtype = MVTYPE_LIST_PARTITIONS; ++ pvalues[0].vflags = request_value->req_nds_flags; ++ break; + case 0x03: + pvalues[0].vvalue = tvb_get_letohl(tvb, nds_offset); + pvalues[0].vtype = VTYPE_UINT32; +@@ -8522,7 +8540,7 @@ + pvalues[2].mvtype = MVTYPE_ATTR_REPLY; + pvalues[2].vflags = request_value->req_nds_flags; + pvalues[2].nds_version = request_value->nds_version; +- break; ++ pvalues[2].pflags = request_value->req_nds_prot_flags; + case 0x04: + pvalues[0].vvalue = tvb_get_guint8(tvb, nds_offset); + if (pvalues[0].vvalue == 0) +@@ -8660,7 +8678,7 @@ + } + pvalues[1].voffset = nds_offset+4; + nds_offset += 4; +- get_string(tvb, pvalues[1].voffset, pvalues[1].vlength, pvalues[1].vstring); ++ pvalues[1].vstring = get_string(tvb, pvalues[1].voffset, pvalues[1].vlength); + nds_offset += pvalues[1].vlength; + nds_offset += align_4(tvb, nds_offset); + pvalues[1].hfname= hf_nds_name; +@@ -8840,97 +8858,97 @@ + case 0x4d: + break; + case 0x6e: +- pvalues[0].vvalue = tvb_get_letohl(tvb, nds_offset); +- pvalues[0].vtype = VTYPE_UINT32; +- pvalues[0].vdesc = "Iteration Handle: 0x%08x"; +- pvalues[0].vlength = 4; +- pvalues[0].voffset = nds_offset; +- pvalues[0].hfname= hf_nds_iteration; +- nds_offset = nds_offset+pvalues[0].vlength; +- pvalues[1].vvalue = tvb_get_letohl(tvb, nds_offset); +- pvalues[1].vtype = VTYPE_NONE; +- pvalues[1].vdesc = "Iteration Completion Code: 0x%08x"; +- pvalues[1].vlength = 4; +- pvalues[1].voffset = nds_offset; +- pvalues[1].hfname = hf_iter_completion_code; +- expert_item = proto_tree_add_uint_format(ncp_tree, pvalues[1].hfname, tvb, nds_offset, +- 4, pvalues[1].vvalue, "NDS Iteration Completion Code: 0x%08x, %s", +- pvalues[1].vvalue, match_strval(pvalues[1].vvalue, nds_reply_errors)); ++ pvalues[0].vvalue = tvb_get_letohl(tvb, nds_offset); ++ pvalues[0].vtype = VTYPE_UINT32; ++ pvalues[0].vdesc = "Iteration Handle: 0x%08x"; ++ pvalues[0].vlength = 4; ++ pvalues[0].voffset = nds_offset; ++ pvalues[0].hfname= hf_nds_iteration; ++ nds_offset = nds_offset+pvalues[0].vlength; ++ pvalues[1].vvalue = tvb_get_letohl(tvb, nds_offset); ++ pvalues[1].vtype = VTYPE_NONE; ++ pvalues[1].vdesc = "Iteration Completion Code: 0x%08x"; ++ pvalues[1].vlength = 4; ++ pvalues[1].voffset = nds_offset; ++ pvalues[1].hfname = hf_iter_completion_code; ++ expert_item = proto_tree_add_uint_format(ncp_tree, pvalues[1].hfname, tvb, nds_offset, ++ 4, pvalues[1].vvalue, "NDS Iteration Completion Code: 0x%08x, %s", ++ pvalues[1].vvalue, match_strval(pvalues[1].vvalue, nds_reply_errors)); + +- if (pvalues[1].vvalue != 0 && ncp_echo_err) { +- expert_add_info_format(pinfo, expert_item, PI_RESPONSE_CODE, PI_ERROR, "NDS Iteration Error: 0x%08x %s", pvalues[1].vvalue, match_strval(pvalues[1].vvalue, nds_reply_errors)); +- } +- nds_offset = nds_offset+pvalues[1].vlength; +- pvalues[2].vvalue = tvb_get_letohl(tvb, nds_offset); +- pvalues[2].vtype = VTYPE_ITEM; +- pvalues[2].vlength = 4; +- pvalues[2].voffset = nds_offset; +- pvalues[2].mvtype = MVTYPE_PROCESS_ITERATOR; +- pvalues[2].hfname = hf_ncp_nds_iterverb; +- nds_offset = nds_offset + pvalues[2].vlength; +- break; ++ if (pvalues[1].vvalue != 0 && ncp_echo_err) { ++ expert_add_info_format(pinfo, expert_item, PI_RESPONSE_CODE, PI_ERROR, "NDS Iteration Error: 0x%08x %s", pvalues[1].vvalue, match_strval(pvalues[1].vvalue, nds_reply_errors)); ++ } ++ nds_offset = nds_offset+pvalues[1].vlength; ++ pvalues[2].vvalue = tvb_get_letohl(tvb, nds_offset); ++ pvalues[2].vtype = VTYPE_ITEM; ++ pvalues[2].vlength = 4; ++ pvalues[2].voffset = nds_offset; ++ pvalues[2].mvtype = MVTYPE_PROCESS_ITERATOR; ++ pvalues[2].hfname = hf_ncp_nds_iterverb; ++ nds_offset = nds_offset + pvalues[2].vlength; ++ break; + default: + break; +- } +- if(request_value->nds_request_verb != 0) +- { +- proto_tree_add_uint_format(ncp_tree, ++ } ++ if(request_value->nds_request_verb != 0) ++ { ++ proto_tree_add_uint_format(ncp_tree, + hf_ncp_nds_verb, tvb, 6, 0, + request_value->nds_request_verb, + "NDS Verb: %d, %s", + request_value->nds_request_verb, verb_string); +- } +- /* NDS Entry ID's (EID) is identified in the reply +- * packet of an NDS resolve name. We need to store +- * this EID and its associated name into our hash +- * so that we can resolve the name for other NDS +- * requests. */ +- if (!pinfo->fd->flags.visited) { +- if(add_eid) +- { +- request_eid_value = ncp_eid_hash_lookup(conversation, global_eid); +- if (!request_eid_value) { +- request_eid_value = ncp_eid_hash_insert(global_eid); +- g_strlcpy(request_eid_value->object_name, global_object_name, 256); +- } +- } +- } +- /* Echo EID data to expert Chat window */ +- if (add_eid && nds_echo_eid) { +- expert_add_info_format(pinfo, NULL, +- PI_RESPONSE_CODE, PI_CHAT, +- "EID (%08x) = %s", global_eid, global_object_name); +- } +- /* For NDS requests with just an EID, resolve name +- * from hash table. */ +- if(resolve_eid) ++ } ++ /* NDS Entry ID's (EID) is identified in the reply ++ * packet of an NDS resolve name. We need to store ++ * this EID and its associated name into our hash ++ * so that we can resolve the name for other NDS ++ * requests. */ ++ if (!pinfo->fd->flags.visited) { ++ if(add_eid) + { + request_eid_value = ncp_eid_hash_lookup(conversation, global_eid); +- if (request_eid_value) { +- g_strlcpy(global_object_name, request_eid_value->object_name, 256); +- proto_tree_add_string_format(ncp_tree, +- hf_nds_name, tvb, 6, 0, +- global_object_name, +- "NDS Name for EID - %s", +- global_object_name); ++ if (!request_eid_value) { ++ request_eid_value = ncp_eid_hash_insert(global_eid); ++ g_strlcpy(request_eid_value->object_name, global_object_name, 256); + } + } +- for (i = 0; i < 9; i++) { +- switch (pvalues[i].vtype) { ++ } ++ /* Echo EID data to expert Chat window */ ++ if (add_eid && nds_echo_eid) { ++ expert_add_info_format(pinfo, NULL, ++ PI_RESPONSE_CODE, PI_CHAT, ++ "EID (%08x) = %s", global_eid, global_object_name); ++ } ++ /* For NDS requests with just an EID, resolve name ++ * from hash table. */ ++ if(resolve_eid) ++ { ++ request_eid_value = ncp_eid_hash_lookup(conversation, global_eid); ++ if (request_eid_value) { ++ g_strlcpy(global_object_name, request_eid_value->object_name, 256); ++ proto_tree_add_string_format(ncp_tree, ++ hf_nds_name, tvb, 6, 0, ++ global_object_name, ++ "NDS Name for EID - %s", ++ global_object_name); ++ } ++ } ++ for (i = 0; i < 9; i++) { ++ switch (pvalues[i].vtype) { + +- case VTYPE_NONE: /* no value */ ++ case VTYPE_NONE: /* no value */ + break; + +- case VTYPE_ITEM: +- if (pvalues[i].mvtype == MVTYPE_PROCESS_ITERATOR) +- { +- dissect_nds_iterator(ncp_tree, tvb, pinfo, pvalues[i].vvalue, 0, nds_offset, FALSE); +- } +- else +- { +- proto_tree_add_item(ncp_tree, pvalues[i].hfname, tvb, pvalues[i].voffset, +- pvalues[i].vlength, TRUE); +- } ++ case VTYPE_ITEM: ++ if (pvalues[i].mvtype == MVTYPE_PROCESS_ITERATOR) ++ { ++ dissect_nds_iterator(ncp_tree, tvb, pinfo, pvalues[i].vvalue, 0, nds_offset, FALSE); ++ } ++ else ++ { ++ proto_tree_add_item(ncp_tree, pvalues[i].hfname, tvb, pvalues[i].voffset, ++ pvalues[i].vlength, TRUE); ++ } + break; + case VTYPE_UINT8: + proto_tree_add_uint_format(ncp_tree, pvalues[i].hfname, tvb, pvalues[i].voffset, +@@ -8960,8 +8978,8 @@ + process_bitfield(ncp_tree, tvb, &pvalues[i]); + break; + +- case VTYPE_MULTIVALUE_UINT32: +- process_multivalues(ncp_tree, tvb, pinfo, &pvalues[i]); ++ case VTYPE_MULTIVALUE_UINT32: ++ process_multivalues(ncp_tree, tvb, pinfo, &pvalues[i]); + break; + + default: +@@ -8969,7 +8987,7 @@ + pvalues[i].vlength, pvalues[i].vtype, "NDS Parameter not defined %u", + pvalues[i].vtype); + break; +- } ++ } + } + } + } +@@ -9033,23 +9051,23 @@ + p_add_proto_data(pinfo->fd, proto_ncp, + (void*) request_value); + } +- else { +- conversation = find_conversation(pinfo->fd->num, +- &pinfo->src, &pinfo->dst, PT_NCP, 0, 0, 0); +- if (conversation != NULL) { +- /* find the record telling us the request made +- that caused this reply */ +- request_value = ncp_hash_lookup(conversation, +- sequence); +- if (request_value) { +- ncp_rec = request_value->ncp_rec; +- } +- p_add_proto_data(pinfo->fd, proto_ncp, +- (void*) request_value); +- } +- /* else... we haven't seen an NCP Request for that +- conversation and sequence. */ +- } ++ else { ++ conversation = find_conversation(pinfo->fd->num, ++ &pinfo->src, &pinfo->dst, PT_NCP, 0, 0, 0); ++ if (conversation != NULL) { ++ /* find the record telling us the request made ++ that caused this reply */ ++ request_value = ncp_hash_lookup(conversation, ++ sequence); ++ if (request_value) { ++ ncp_rec = request_value->ncp_rec; ++ } ++ p_add_proto_data(pinfo->fd, proto_ncp, ++ (void*) request_value); ++ } ++ /* else... we haven't seen an NCP Request for that ++ conversation and sequence. */ ++ } + } + } + else { +@@ -9163,23 +9181,23 @@ + } + + if (ncp_tree) { +- guint8 conn_stat; ++ guint8 conn_stat; + +- conn_stat = tvb_get_guint8(tvb, 7); ++ conn_stat = tvb_get_guint8(tvb, 7); + expert_item = proto_tree_add_item(ncp_tree, hf_ncp_connection_status, tvb, + 7, 1, FALSE); +- if (conn_stat != 0 && conn_stat != 0x40 ) { +- if (check_col(pinfo->cinfo, COL_INFO)) { +- col_set_str(pinfo->cinfo, COL_INFO, +- "Error: Bad Connection Status"); +- } +- if (ncp_echo_err) { +- expert_add_info_format(pinfo, expert_item, +- PI_RESPONSE_CODE, PI_ERROR, +- "Error: Bad Connection Status"); +- } +- return; +- } ++ if (conn_stat != 0 && conn_stat != 0x40 ) { ++ if (check_col(pinfo->cinfo, COL_INFO)) { ++ col_set_str(pinfo->cinfo, COL_INFO, ++ "Error: Bad Connection Status"); ++ } ++ if (ncp_echo_err) { ++ expert_add_info_format(pinfo, expert_item, ++ PI_RESPONSE_CODE, PI_ERROR, ++ "Error: Bad Connection Status"); ++ } ++ return; ++ } + } + /* + * Unless this is a successful reply, that's all there +@@ -9263,18 +9281,22 @@ + /* Echo the NDS EID and name for NCP 22,51 replies to expert tap */ + if (!pinfo->fd->flags.visited && ncp_rec->func == 0x16 && ncp_rec->subfunc == 0x33) { + +- char eid_string[10]; +- char global_object_name[256]; ++ char eid_string[10]; ++ char global_object_name[256]; + +- build_expert_data(ncp_tree, "ncp.directory_services_object_id", eid_string, 0, TRUE); +- build_expert_data(ncp_tree, "ncp.volume_name_len", global_object_name, 0, FALSE); ++ build_expert_data(ncp_tree, "ncp.directory_services_object_id", ++ eid_string, sizeof eid_string, ++ 0, TRUE); ++ build_expert_data(ncp_tree, "ncp.volume_name_len", ++ global_object_name, sizeof global_object_name, ++ 0, FALSE); + +- /* Echo EID data to expert Chat window */ +- if (nds_echo_eid) { +- expert_add_info_format(pinfo, NULL, +- PI_RESPONSE_CODE, PI_CHAT, +- "EID (%s) = %s", eid_string, global_object_name); +- } ++ /* Echo EID data to expert Chat window */ ++ if (nds_echo_eid) { ++ expert_add_info_format(pinfo, NULL, ++ PI_RESPONSE_CODE, PI_CHAT, ++ "EID (%s) = %s", eid_string, global_object_name); ++ } + } + /* Process ncp 123/17 address records manually to format correctly. */ + if (ncp_rec->func == 0x7b && ncp_rec->subfunc == 0x11) { +@@ -9296,7 +9318,7 @@ + expert_item = proto_tree_add_text(ncp_tree, tvb, 8, -1, + "No request record found. Parsing is impossible."); + if (ncp_echo_err) { +- expert_add_info_format(pinfo, expert_item, PI_SEQUENCE, PI_NOTE, "No request record found."); ++ expert_add_info_format(pinfo, expert_item, PI_SEQUENCE, PI_NOTE, "No request record found."); + } + } + } +@@ -9321,10 +9343,8 @@ + guint32 nds_frag = 0; + gboolean added_arrow; + nds_val pvalues[9], prot_flags[1]; +- char string_buffer[9][1024]; + guint8 nds_version = 0; + guint32 foffset = 0; +- nw_uni_t req_buffer; + char global_object_name[256]; + guint32 global_eid=0; + gboolean resolve_eid=FALSE; +@@ -9338,13 +9358,11 @@ + pvalues[i].voffset = 0; + pvalues[i].hfname = 0; + pvalues[i].vdesc = ""; +- string_buffer[i][0] = '\0'; +- pvalues[i].vstring = string_buffer[i]; ++ pvalues[i].vstring = NULL; + pvalues[i].mvtype = 0; + pvalues[i].vflags = 0; + } + +- req_buffer.buffer[0] = '\0'; + global_object_name[0] = '\0'; + + func = tvb_get_guint8(tvb, 6); +@@ -9448,9 +9466,8 @@ + } + pvalues[3].voffset = foffset+4; + foffset = foffset + 4; +- get_string(tvb, pvalues[3].voffset, pvalues[3].vlength, req_buffer.buffer); +- pvalues[3].vstring = req_buffer.buffer; +- g_strlcpy(global_object_name, req_buffer.buffer, 256); ++ pvalues[3].vstring = get_string(tvb, pvalues[3].voffset, pvalues[3].vlength); ++ g_strlcpy(global_object_name, pvalues[3].vstring, 256); + pvalues[3].hfname= hf_nds_name; + foffset = foffset+pvalues[3].vlength; + foffset += align_4(tvb, foffset); +@@ -9517,8 +9534,7 @@ + pvalues[7].vlength = tvb_get_letohl(tvb, foffset); + pvalues[7].voffset = foffset+4; + foffset = foffset + 4; +- get_string(tvb, pvalues[7].voffset, pvalues[7].vlength, req_buffer.buffer); +- pvalues[7].vstring = req_buffer.buffer; ++ pvalues[7].vstring = get_string(tvb, pvalues[7].voffset, pvalues[7].vlength); + pvalues[7].hfname= hf_nds_output_delimiter; + foffset = foffset+pvalues[7].vlength; + foffset += align_4(tvb, foffset); +@@ -9898,6 +9914,11 @@ + pvalues[0].voffset = foffset; + pvalues[0].hfname= hf_nds_ver; + foffset = foffset+pvalues[0].vlength; ++ if (pvalues[0].vvalue == 1) { ++ /* Version 1 specifies for this offset value to always be a value of 1*/ ++ /* No need to display to user */ ++ foffset += 4; ++ } + pvalues[1].vvalue = tvb_get_letohl(tvb, foffset); + pvalues[1].vtype = VTYPE_UINT32; + pvalues[1].vdesc = "Entry ID: 0x%08x"; +@@ -9921,9 +9942,8 @@ + } + pvalues[2].voffset = foffset+4; + foffset = foffset + 4; +- get_string(tvb, pvalues[2].voffset, pvalues[2].vlength, req_buffer.buffer); +- pvalues[2].vstring = req_buffer.buffer; +- g_strlcpy(global_object_name, req_buffer.buffer, 256); ++ pvalues[2].vstring = get_string(tvb, pvalues[2].voffset, pvalues[2].vlength); ++ g_strlcpy(global_object_name, pvalues[2].vstring, 256); + pvalues[2].hfname= hf_nds_name; + foffset = foffset+pvalues[2].vlength; + foffset += align_4(tvb, foffset); +@@ -9936,7 +9956,7 @@ + pvalues[3].vlength = tvb_get_letohl(tvb, foffset); + pvalues[3].voffset = foffset+4; + foffset = foffset + 4; +- get_string(tvb, pvalues[3].voffset, pvalues[3].vlength, pvalues[3].vstring); ++ pvalues[3].vstring = get_string(tvb, pvalues[3].voffset, pvalues[3].vlength); + pvalues[3].hfname= hf_value_string; + foffset = foffset+pvalues[3].vlength; + break; +@@ -10089,7 +10109,7 @@ + pvalues[6].vlength = tvb_get_letohl(tvb, foffset); + pvalues[6].voffset = foffset+4; + foffset = foffset + 4; +- get_string(tvb, pvalues[6].voffset, pvalues[6].vlength, pvalues[6].vstring); ++ pvalues[6].vstring = get_string(tvb, pvalues[6].voffset, pvalues[6].vlength); + pvalues[6].hfname= hf_nds_name_filter; + foffset = foffset+pvalues[6].vlength; + if(pvalues[0].vvalue == 0) +@@ -10105,7 +10125,7 @@ + pvalues[7].vlength = tvb_get_letohl(tvb, foffset); + pvalues[7].voffset = foffset+4; + foffset = foffset + 4; +- get_string(tvb, pvalues[7].voffset, pvalues[7].vlength, pvalues[7].vstring); ++ pvalues[7].vstring = get_string(tvb, pvalues[7].voffset, pvalues[7].vlength); + pvalues[7].hfname= hf_nds_class_filter; + foffset = foffset+pvalues[7].vlength; + if(pvalues[0].vvalue == 1) +@@ -10340,9 +10360,8 @@ + } + pvalues[3].voffset = foffset+4; + foffset = foffset + 4; +- get_string(tvb, pvalues[3].voffset, pvalues[3].vlength, req_buffer.buffer); +- pvalues[3].vstring = req_buffer.buffer; +- g_strlcpy(global_object_name, req_buffer.buffer, 256); ++ pvalues[3].vstring = get_string(tvb, pvalues[3].voffset, pvalues[3].vlength); ++ g_strlcpy(global_object_name, pvalues[3].vstring, 256); + pvalues[3].hfname= hf_nds_relative_dn; + foffset = foffset+pvalues[3].vlength; + foffset += align_4(tvb, foffset); +@@ -10389,9 +10408,8 @@ + } + pvalues[4].voffset = foffset+4; + foffset = foffset + 4; +- get_string(tvb, pvalues[4].voffset, pvalues[4].vlength, req_buffer.buffer); +- pvalues[4].vstring = req_buffer.buffer; +- g_strlcpy(global_object_name, req_buffer.buffer, 256); ++ pvalues[4].vstring = get_string(tvb, pvalues[4].voffset, pvalues[4].vlength); ++ g_strlcpy(global_object_name, pvalues[4].vstring, 256); + pvalues[4].hfname= hf_nds_relative_dn; + foffset = foffset+pvalues[4].vlength; + foffset += align_4(tvb, foffset); +@@ -10532,7 +10550,7 @@ + pvalues[3].vlength = tvb_get_letohl(tvb, foffset); + pvalues[3].voffset = foffset+4; + foffset = foffset + 4; +- get_string(tvb, pvalues[3].voffset, pvalues[3].vlength, pvalues[3].vstring); ++ pvalues[3].vstring = get_string(tvb, pvalues[3].voffset, pvalues[3].vlength); + pvalues[3].hfname= hf_nds_new_rdn; + foffset = foffset+pvalues[3].vlength; + break; +@@ -10597,9 +10615,8 @@ + } + pvalues[2].voffset = foffset+4; + foffset = foffset + 4; +- get_string(tvb, pvalues[2].voffset, pvalues[2].vlength, req_buffer.buffer); +- pvalues[2].vstring = req_buffer.buffer; +- g_strlcpy(global_object_name, req_buffer.buffer, 256); ++ pvalues[2].vstring = get_string(tvb, pvalues[2].voffset, pvalues[2].vlength); ++ g_strlcpy(global_object_name, pvalues[2].vstring, 256); + pvalues[2].hfname= hf_nds_name; + foffset = foffset+pvalues[2].vlength; + foffset += align_4(tvb, foffset); +@@ -10662,9 +10679,8 @@ + } + pvalues[1].voffset = foffset+4; + foffset = foffset + 4; +- get_string(tvb, pvalues[1].voffset, pvalues[1].vlength, req_buffer.buffer); +- pvalues[1].vstring = req_buffer.buffer; +- g_strlcpy(global_object_name, req_buffer.buffer, 256); ++ pvalues[1].vstring = get_string(tvb, pvalues[1].voffset, pvalues[1].vlength); ++ g_strlcpy(global_object_name, pvalues[1].vstring, 256); + pvalues[1].hfname= hf_nds_attribute_dn; + break; + case 0x0e: +@@ -10719,7 +10735,7 @@ + foffset += align_4(tvb, foffset); + pvalues[4].vvalue = tvb_get_letohl(tvb, foffset); + pvalues[4].vtype = VTYPE_MULTIVALUE_UINT32; +- pvalues[4].vdesc = "Classes: %d"; ++ pvalues[4].vdesc = "Classes: %u"; + pvalues[4].vlength = 4; + pvalues[4].voffset = foffset; + pvalues[4].mvtype = MVTYPE_READ_CLASS_REQ; +@@ -10746,9 +10762,8 @@ + } + pvalues[1].voffset = foffset+4; + foffset = foffset + 4; +- get_string(tvb, pvalues[1].voffset, pvalues[1].vlength, req_buffer.buffer); +- pvalues[1].vstring = req_buffer.buffer; +- g_strlcpy(global_object_name, req_buffer.buffer, 256); ++ pvalues[1].vstring = get_string(tvb, pvalues[1].voffset, pvalues[1].vlength); ++ g_strlcpy(global_object_name, pvalues[1].vstring, 256); + pvalues[1].hfname= hf_nds_base_class; + foffset = foffset+pvalues[1].vlength; + foffset += align_4(tvb, foffset); +@@ -10781,9 +10796,8 @@ + } + pvalues[1].voffset = foffset+4; + foffset = foffset + 4; +- get_string(tvb, pvalues[1].voffset, pvalues[1].vlength, req_buffer.buffer); +- pvalues[1].vstring = req_buffer.buffer; +- g_strlcpy(global_object_name, req_buffer.buffer, 256); ++ pvalues[1].vstring = get_string(tvb, pvalues[1].voffset, pvalues[1].vlength); ++ g_strlcpy(global_object_name, pvalues[1].vstring, 256); + pvalues[1].hfname= hf_nds_base; + break; + case 0x12: +@@ -10841,8 +10855,7 @@ + } + pvalues[2].voffset = foffset+4; + foffset = foffset + 4; +- get_string(tvb, pvalues[2].voffset, pvalues[2].vlength, req_buffer.buffer); +- pvalues[2].vstring = req_buffer.buffer; ++ pvalues[2].vstring = get_string(tvb, pvalues[2].voffset, pvalues[2].vlength); + pvalues[2].hfname= hf_nds_name; + foffset = foffset+pvalues[2].vlength; + foffset += align_4(tvb, foffset); +@@ -10859,7 +10872,7 @@ + } + pvalues[3].voffset = foffset+4; + foffset = foffset + 4; +- get_string(tvb, pvalues[3].voffset, pvalues[3].vlength, pvalues[3].vstring); ++ pvalues[3].vstring = get_string(tvb, pvalues[3].voffset, pvalues[3].vlength); + pvalues[3].hfname= hf_nds_name; + foffset = foffset+pvalues[3].vlength; + foffset += align_4(tvb, foffset); +@@ -10878,7 +10891,7 @@ + } + pvalues[4].voffset = foffset+4; + foffset = foffset + 4; +- get_string(tvb, pvalues[4].voffset, pvalues[4].vlength, pvalues[4].vstring); ++ pvalues[4].vstring = get_string(tvb, pvalues[4].voffset, pvalues[4].vlength); + pvalues[4].hfname= hf_nds_name; + foffset = foffset+pvalues[4].vlength; + foffset += align_4(tvb, foffset); +@@ -11134,7 +11147,7 @@ + } + pvalues[4].voffset = foffset+4; + foffset = foffset + 4; +- get_string(tvb, pvalues[4].voffset, pvalues[4].vlength, pvalues[4].vstring); ++ pvalues[4].vstring = get_string(tvb, pvalues[4].voffset, pvalues[4].vlength); + pvalues[4].hfname= hf_nds_target_name; + break; + case 0x1a: +@@ -11177,7 +11190,7 @@ + } + pvalues[3].voffset = foffset+4; + foffset += 4; +- get_string(tvb, pvalues[3].voffset, pvalues[3].vlength, pvalues[3].vstring); ++ pvalues[3].vstring = get_string(tvb, pvalues[3].voffset, pvalues[3].vlength); + foffset += pvalues[3].vlength; + foffset += align_4(tvb, foffset); + pvalues[3].hfname= hf_nds_stream_name; +@@ -11249,7 +11262,7 @@ + } + pvalues[3].voffset = foffset+4; + foffset += 4; +- get_string(tvb, pvalues[3].voffset, pvalues[3].vlength, pvalues[3].vstring); ++ pvalues[3].vstring = get_string(tvb, pvalues[3].voffset, pvalues[3].vlength); + foffset += pvalues[3].vlength; + foffset += align_4(tvb, foffset); + pvalues[3].hfname= hf_nds_root_name; +@@ -11312,7 +11325,7 @@ + pvalues[3].vlength = tvb_get_letohl(tvb, foffset); + pvalues[3].voffset = foffset+4; + foffset = foffset + 4; +- get_string(tvb, pvalues[3].voffset, pvalues[3].vlength, pvalues[3].vstring); ++ pvalues[3].vstring = get_string(tvb, pvalues[3].voffset, pvalues[3].vlength); + pvalues[3].hfname= hf_nds_new_rdn; + foffset = foffset+pvalues[3].vlength; + foffset += align_4(tvb, foffset); +@@ -11329,7 +11342,7 @@ + } + pvalues[4].voffset = foffset+4; + foffset = foffset + 4; +- get_string(tvb, pvalues[4].voffset, pvalues[4].vlength, pvalues[4].vstring); ++ pvalues[4].vstring = get_string(tvb, pvalues[4].voffset, pvalues[4].vlength); + pvalues[4].hfname= hf_nds_target_name; + break; + case 0x2b: +@@ -11375,7 +11388,7 @@ + pvalues[4].vlength = tvb_get_letohl(tvb, foffset); + pvalues[4].voffset = foffset+4; + foffset = foffset + 4; +- get_string(tvb, pvalues[4].voffset, pvalues[4].vlength, pvalues[4].vstring); ++ pvalues[4].vstring = get_string(tvb, pvalues[4].voffset, pvalues[4].vlength); + pvalues[4].hfname= hf_nds_new_rdn; + foffset = foffset+pvalues[4].vlength; + foffset += align_4(tvb, foffset); +@@ -11392,7 +11405,7 @@ + } + pvalues[5].voffset = foffset+4; + foffset = foffset + 4; +- get_string(tvb, pvalues[5].voffset, pvalues[5].vlength, pvalues[5].vstring); ++ pvalues[5].vstring = get_string(tvb, pvalues[5].voffset, pvalues[5].vlength); + pvalues[5].hfname= hf_nds_target_name; + break; + case 0x2c: +@@ -11618,92 +11631,92 @@ + pvalues[0].vtype = VTYPE_NONE; /* Not Defined */ + break; + case 0x6e: +- pvalues[0].vvalue = tvb_get_letohl(tvb, foffset); +- pvalues[0].vtype = VTYPE_UINT32; +- pvalues[0].vdesc = "Version: %u"; +- pvalues[0].vlength = 4; +- pvalues[0].hfname = hf_nds_ver; +- pvalues[0].voffset = foffset; +- foffset = foffset+pvalues[0].vlength; +- pvalues[1].vvalue = tvb_get_letohl(tvb, foffset); +- global_flags = pvalues[1].vvalue; +- pvalues[1].vtype = VTYPE_BITFIELD; +- pvalues[1].vdesc = "Request Flags:"; +- pvalues[1].vlength = 2; +- pvalues[1].hfname= hf_nds_rflags; +- pvalues[1].voffset = foffset; +- pvalues[1].bit1 = "Typeless"; +- pvalues[1].bit1hfname = hf_bit1rflags; +- pvalues[1].bit2 = "Slashed"; +- pvalues[1].bit2hfname = hf_bit2rflags; +- pvalues[1].bit3 = "Dotted"; +- pvalues[1].bit3hfname = hf_bit3rflags; +- pvalues[1].bit4 = "Tuned"; +- pvalues[1].bit4hfname = hf_bit4rflags; +- pvalues[1].bit5 = "Not Defined"; +- pvalues[1].bit5hfname = hf_bit5rflags; +- pvalues[1].bit6 = "Not Defined"; +- pvalues[1].bit6hfname = hf_bit6rflags; +- pvalues[1].bit7 = "Not Defined"; +- pvalues[1].bit7hfname = hf_bit7rflags; +- pvalues[1].bit8 = "Not Defined"; +- pvalues[1].bit8hfname = hf_bit8rflags; +- pvalues[1].bit9 = "Not Defined"; +- pvalues[1].bit9hfname = hf_bit9rflags; +- pvalues[1].bit10 = "Not Defined"; +- pvalues[1].bit10hfname = hf_bit10rflags; +- pvalues[1].bit11 = "Not Defined"; +- pvalues[1].bit11hfname = hf_bit11rflags; +- pvalues[1].bit12 = "Not Defined"; +- pvalues[1].bit12hfname = hf_bit12rflags; +- pvalues[1].bit13 = "Not Defined"; +- pvalues[1].bit13hfname = hf_bit13rflags; +- pvalues[1].bit14 = "Not Defined"; +- pvalues[1].bit14hfname = hf_bit14rflags; +- pvalues[1].bit15 = "Not Defined"; +- pvalues[1].bit15hfname = hf_bit15rflags; +- pvalues[1].bit16 = "Not Defined"; +- pvalues[1].bit16hfname = hf_bit16rflags; +- foffset = foffset+pvalues[1].vlength+2; +- pvalues[2].vvalue = tvb_get_letohl(tvb, foffset); +- pvalues[2].vtype = VTYPE_UINT32; +- pvalues[2].vdesc = "Iteration Handle: 0x%08x"; +- pvalues[2].vlength = 4; +- pvalues[2].voffset = foffset; +- pvalues[2].hfname= hf_nds_iteration; +- foffset = foffset+pvalues[2].vlength; +- pvalues[3].vvalue = tvb_get_letohl(tvb, foffset); +- pvalues[3].vtype = VTYPE_UINT32; +- pvalues[3].vdesc = "Base Entry ID: 0x%08x"; +- pvalues[3].vlength = 4; +- resolve_eid = TRUE; +- global_eid = pvalues[3].vvalue; +- pvalues[3].voffset = foffset; +- pvalues[3].hfname= hf_nds_eid; +- foffset = foffset+pvalues[3].vlength; +- pvalues[4].vvalue = tvb_get_letohl(tvb, foffset); +- pvalues[4].vtype = VTYPE_UINT32; +- pvalues[4].vdesc = (char *)match_strval(pvalues[4].vvalue, nds_scope_vals); +- if(pvalues[4].vdesc == NULL) +- { +- pvalues[4].vdesc = "Unknown Scope Defined"; +- } +- pvalues[4].vlength = 4; +- pvalues[4].hfname = hf_nds_scope; +- pvalues[4].voffset = foffset; +- foffset = foffset+pvalues[4].vlength; +- pvalues[5].vvalue = tvb_get_letohl(tvb, foffset); +- pvalues[5].vtype = VTYPE_MULTIVALUE_UINT32; +- pvalues[5].vdesc = "Iterator: 0x%08x"; +- pvalues[5].vlength = 4; +- pvalues[5].voffset = foffset; +- pvalues[5].hfname= hf_nds_iterator; +- pvalues[5].mvtype = MVTYPE_PROCESS_ITERATOR; +- foffset = foffset+pvalues[5].vlength; +- break; ++ pvalues[0].vvalue = tvb_get_letohl(tvb, foffset); ++ pvalues[0].vtype = VTYPE_UINT32; ++ pvalues[0].vdesc = "Version: %u"; ++ pvalues[0].vlength = 4; ++ pvalues[0].hfname = hf_nds_ver; ++ pvalues[0].voffset = foffset; ++ foffset = foffset+pvalues[0].vlength; ++ pvalues[1].vvalue = tvb_get_letohl(tvb, foffset); ++ global_flags = pvalues[1].vvalue; ++ pvalues[1].vtype = VTYPE_BITFIELD; ++ pvalues[1].vdesc = "Request Flags:"; ++ pvalues[1].vlength = 2; ++ pvalues[1].hfname= hf_nds_rflags; ++ pvalues[1].voffset = foffset; ++ pvalues[1].bit1 = "Typeless"; ++ pvalues[1].bit1hfname = hf_bit1rflags; ++ pvalues[1].bit2 = "Slashed"; ++ pvalues[1].bit2hfname = hf_bit2rflags; ++ pvalues[1].bit3 = "Dotted"; ++ pvalues[1].bit3hfname = hf_bit3rflags; ++ pvalues[1].bit4 = "Tuned"; ++ pvalues[1].bit4hfname = hf_bit4rflags; ++ pvalues[1].bit5 = "Not Defined"; ++ pvalues[1].bit5hfname = hf_bit5rflags; ++ pvalues[1].bit6 = "Not Defined"; ++ pvalues[1].bit6hfname = hf_bit6rflags; ++ pvalues[1].bit7 = "Not Defined"; ++ pvalues[1].bit7hfname = hf_bit7rflags; ++ pvalues[1].bit8 = "Not Defined"; ++ pvalues[1].bit8hfname = hf_bit8rflags; ++ pvalues[1].bit9 = "Not Defined"; ++ pvalues[1].bit9hfname = hf_bit9rflags; ++ pvalues[1].bit10 = "Not Defined"; ++ pvalues[1].bit10hfname = hf_bit10rflags; ++ pvalues[1].bit11 = "Not Defined"; ++ pvalues[1].bit11hfname = hf_bit11rflags; ++ pvalues[1].bit12 = "Not Defined"; ++ pvalues[1].bit12hfname = hf_bit12rflags; ++ pvalues[1].bit13 = "Not Defined"; ++ pvalues[1].bit13hfname = hf_bit13rflags; ++ pvalues[1].bit14 = "Not Defined"; ++ pvalues[1].bit14hfname = hf_bit14rflags; ++ pvalues[1].bit15 = "Not Defined"; ++ pvalues[1].bit15hfname = hf_bit15rflags; ++ pvalues[1].bit16 = "Not Defined"; ++ pvalues[1].bit16hfname = hf_bit16rflags; ++ foffset = foffset+pvalues[1].vlength+2; ++ pvalues[2].vvalue = tvb_get_letohl(tvb, foffset); ++ pvalues[2].vtype = VTYPE_UINT32; ++ pvalues[2].vdesc = "Iteration Handle: 0x%08x"; ++ pvalues[2].vlength = 4; ++ pvalues[2].voffset = foffset; ++ pvalues[2].hfname= hf_nds_iteration; ++ foffset = foffset+pvalues[2].vlength; ++ pvalues[3].vvalue = tvb_get_letohl(tvb, foffset); ++ pvalues[3].vtype = VTYPE_UINT32; ++ pvalues[3].vdesc = "Base Entry ID: 0x%08x"; ++ pvalues[3].vlength = 4; ++ resolve_eid = TRUE; ++ global_eid = pvalues[3].vvalue; ++ pvalues[3].voffset = foffset; ++ pvalues[3].hfname= hf_nds_eid; ++ foffset = foffset+pvalues[3].vlength; ++ pvalues[4].vvalue = tvb_get_letohl(tvb, foffset); ++ pvalues[4].vtype = VTYPE_UINT32; ++ pvalues[4].vdesc = (char *)match_strval(pvalues[4].vvalue, nds_scope_vals); ++ if(pvalues[4].vdesc == NULL) ++ { ++ pvalues[4].vdesc = "Unknown Scope Defined"; ++ } ++ pvalues[4].vlength = 4; ++ pvalues[4].hfname = hf_nds_scope; ++ pvalues[4].voffset = foffset; ++ foffset = foffset+pvalues[4].vlength; ++ pvalues[5].vvalue = tvb_get_letohl(tvb, foffset); ++ pvalues[5].vtype = VTYPE_MULTIVALUE_UINT32; ++ pvalues[5].vdesc = "Iterator: 0x%08x"; ++ pvalues[5].vlength = 4; ++ pvalues[5].voffset = foffset; ++ pvalues[5].hfname= hf_nds_iterator; ++ pvalues[5].mvtype = MVTYPE_PROCESS_ITERATOR; ++ foffset = foffset+pvalues[5].vlength; ++ break; + default: +- pvalues[0].vtype = VTYPE_NONE; /* Not Defined */ +- break; ++ pvalues[0].vtype = VTYPE_NONE; /* Not Defined */ ++ break; + } + } + /* Fill in the INFO column. */ +@@ -11711,7 +11724,7 @@ + if (ncp_rec) { + col_set_str(pinfo->cinfo, COL_PROTOCOL, "NDS"); + if (nds_frag != 0xffffffff) { +- col_add_fstr(pinfo->cinfo, COL_INFO, "C Continue NDS Fragment %08x", nds_frag); ++ col_add_fstr(pinfo->cinfo, COL_INFO, "C Continue NDS Fragment 0x%08x", nds_frag); + } + else { + col_add_fstr(pinfo->cinfo, COL_INFO, "C NDS %s", verb_string); +@@ -11819,59 +11832,59 @@ + + proto_tree_add_item(ncp_tree, hf_ncp_message_size, tvb, 16, 4, TRUE); + +- nds_prot_flags = tvb_get_letohs(tvb, 22); +- prot_flags[0].vvalue = nds_prot_flags; +- prot_flags[0].vtype = VTYPE_BITFIELD; +- prot_flags[0].vdesc = "NDS Protocol Flags:"; +- prot_flags[0].vlength = 2; +- prot_flags[0].hfname= hf_ncp_nds_flag; +- prot_flags[0].voffset = 22; +- prot_flags[0].bit1 = "Not Defined"; +- prot_flags[0].bit1hfname = hf_ndsprot1flag; +- prot_flags[0].bit2 = "Not Defined"; +- prot_flags[0].bit2hfname = hf_ndsprot2flag; +- prot_flags[0].bit3 = "Not Defined"; +- prot_flags[0].bit3hfname = hf_ndsprot3flag; +- prot_flags[0].bit4 = "Not Defined"; +- prot_flags[0].bit4hfname = hf_ndsprot4flag; +- prot_flags[0].bit5 = "Not Defined"; +- prot_flags[0].bit5hfname = hf_ndsprot5flag; +- prot_flags[0].bit6 = "Not Defined"; +- prot_flags[0].bit6hfname = hf_ndsprot6flag; +- prot_flags[0].bit7 = "Not Defined"; +- prot_flags[0].bit7hfname = hf_ndsprot7flag; +- prot_flags[0].bit8 = "Not Defined"; +- prot_flags[0].bit8hfname = hf_ndsprot8flag; +- prot_flags[0].bit9 = "Not Defined"; +- prot_flags[0].bit9hfname = hf_ndsprot9flag; +- prot_flags[0].bit10 = "Not Defined"; +- prot_flags[0].bit10hfname = hf_ndsprot10flag; +- prot_flags[0].bit11= "Not Defined"; +- prot_flags[0].bit11hfname = hf_ndsprot11flag; +- prot_flags[0].bit12 = "Not Defined"; +- prot_flags[0].bit12hfname = hf_ndsprot12flag; +- prot_flags[0].bit13 = "Not Defined"; +- prot_flags[0].bit13hfname = hf_ndsprot13flag; +- prot_flags[0].bit14 = "Not Defined"; +- prot_flags[0].bit14hfname = hf_ndsprot14flag; +- prot_flags[0].bit15 = "Include CRC in NDS Header"; +- prot_flags[0].bit15hfname = hf_ndsprot15flag; +- prot_flags[0].bit16 = "Client is a Server"; +- prot_flags[0].bit16hfname = hf_ndsprot16flag; ++ nds_prot_flags = tvb_get_letohs(tvb, 22); ++ prot_flags[0].vvalue = nds_prot_flags; ++ prot_flags[0].vtype = VTYPE_BITFIELD; ++ prot_flags[0].vdesc = "NDS Protocol Flags:"; ++ prot_flags[0].vlength = 2; ++ prot_flags[0].hfname= hf_ncp_nds_flag; ++ prot_flags[0].voffset = 22; ++ prot_flags[0].bit1 = "Not Defined"; ++ prot_flags[0].bit1hfname = hf_ndsprot1flag; ++ prot_flags[0].bit2 = "Not Defined"; ++ prot_flags[0].bit2hfname = hf_ndsprot2flag; ++ prot_flags[0].bit3 = "Not Defined"; ++ prot_flags[0].bit3hfname = hf_ndsprot3flag; ++ prot_flags[0].bit4 = "Not Defined"; ++ prot_flags[0].bit4hfname = hf_ndsprot4flag; ++ prot_flags[0].bit5 = "Not Defined"; ++ prot_flags[0].bit5hfname = hf_ndsprot5flag; ++ prot_flags[0].bit6 = "Not Defined"; ++ prot_flags[0].bit6hfname = hf_ndsprot6flag; ++ prot_flags[0].bit7 = "Not Defined"; ++ prot_flags[0].bit7hfname = hf_ndsprot7flag; ++ prot_flags[0].bit8 = "Not Defined"; ++ prot_flags[0].bit8hfname = hf_ndsprot8flag; ++ prot_flags[0].bit9 = "Not Defined"; ++ prot_flags[0].bit9hfname = hf_ndsprot9flag; ++ prot_flags[0].bit10 = "Not Defined"; ++ prot_flags[0].bit10hfname = hf_ndsprot10flag; ++ prot_flags[0].bit11= "Not Defined"; ++ prot_flags[0].bit11hfname = hf_ndsprot11flag; ++ prot_flags[0].bit12 = "Not Defined"; ++ prot_flags[0].bit12hfname = hf_ndsprot12flag; ++ prot_flags[0].bit13 = "Not Defined"; ++ prot_flags[0].bit13hfname = hf_ndsprot13flag; ++ prot_flags[0].bit14 = "Not Defined"; ++ prot_flags[0].bit14hfname = hf_ndsprot14flag; ++ prot_flags[0].bit15 = "Include CRC in NDS Header"; ++ prot_flags[0].bit15hfname = hf_ndsprot15flag; ++ prot_flags[0].bit16 = "Client is a Server"; ++ prot_flags[0].bit16hfname = hf_ndsprot16flag; + +- process_bitfield(ncp_tree, tvb, &prot_flags[0]); ++ process_bitfield(ncp_tree, tvb, &prot_flags[0]); + +- if (nds_version == 0) { +- proto_tree_add_uint_format(ncp_tree, hf_ncp_nds_verb, tvb, 24, 4, +- nds_verb, "NDS Verb: %d, (0x%02x), %s", +- nds_verb, nds_verb, verb_string); +- } +- else { +- proto_tree_add_uint_format(ncp_tree, hf_ncp_nds_verb, tvb, 32, 4, +- nds_verb, "NDS Verb: %d, (0x%02x), %s", +- nds_verb, nds_verb, verb_string); +- } +- added_arrow = FALSE; ++ if (nds_version == 0) { ++ proto_tree_add_uint_format(ncp_tree, hf_ncp_nds_verb, tvb, 24, 4, ++ nds_verb, "NDS Verb: %d, (0x%02x), %s", ++ nds_verb, nds_verb, verb_string); ++ } ++ else { ++ proto_tree_add_uint_format(ncp_tree, hf_ncp_nds_verb, tvb, 32, 4, ++ nds_verb, "NDS Verb: %d, (0x%02x), %s", ++ nds_verb, nds_verb, verb_string); ++ } ++ added_arrow = FALSE; + for (i = 0; i < 9; i++) { + switch (pvalues[i].vtype) { + +@@ -11880,13 +11893,13 @@ + + case VTYPE_UINT8: + proto_tree_add_uint_format(ncp_tree, pvalues[i].hfname, tvb, pvalues[i].voffset, +- pvalues[i].vlength, pvalues[i].vtype, "NDS Parameter not defined %d", ++ pvalues[i].vlength, pvalues[i].vtype, "NDS Parameter not defined %u", + pvalues[i].vtype); + break; + + case VTYPE_UINT16: + proto_tree_add_uint_format(ncp_tree, pvalues[i].hfname, tvb, pvalues[i].voffset, +- pvalues[i].vlength, pvalues[i].vtype, "NDS Parameter not defined %d", ++ pvalues[i].vlength, pvalues[i].vtype, "NDS Parameter not defined %u", + pvalues[i].vtype); + break; + +@@ -11937,13 +11950,13 @@ + */ + if (check_col(pinfo->cinfo, COL_INFO)) { + col_append_str(pinfo->cinfo, COL_INFO, pvalues[i].vstring); +- if (pvalues[i].mvtype != MVTYPE_PROCESS_ITERATOR) { +- if (!added_arrow) { +- col_append_str(pinfo->cinfo, COL_INFO, " -> "); +- added_arrow = TRUE; +- } +- col_append_str(pinfo->cinfo, COL_INFO, mv_resolve_name_string); +- } ++ if (pvalues[i].mvtype != MVTYPE_PROCESS_ITERATOR) { ++ if (!added_arrow) { ++ col_append_str(pinfo->cinfo, COL_INFO, " -> "); ++ added_arrow = TRUE; ++ } ++ col_append_str(pinfo->cinfo, COL_INFO, mv_resolve_name_string); ++ } + } + } + break; +@@ -11963,8 +11976,8 @@ + pvalues[i].vtype); + break; + } +- /* For NDS requests with just an EID, resolve name from hash table. */ + } ++ /* For NDS requests with just an EID, resolve name from hash table. */ + request_eid_value = ncp_eid_hash_lookup(conversation, global_eid); + if(resolve_eid) { + if (request_eid_value) { +@@ -12019,12 +12032,11 @@ + guint32 nds_flags; + guint32 ping_version; + nds_val pvalue; +- char string_buffer[1024]; + + #ifdef FAKE_TREE_IS_VISIBLE +- if (ncp_tree) { +- PTREE_DATA(ncp_tree)->visible=1; +- } ++ if (ncp_tree) { ++ PTREE_DATA(ncp_tree)->visible=1; ++ } + #endif + + pvalue.vvalue = 0; +@@ -12032,8 +12044,7 @@ + pvalue.voffset = 0; + pvalue.hfname = 0; + pvalue.vdesc = ""; +- string_buffer[0] = '\0'; +- pvalue.vstring = string_buffer; ++ pvalue.vstring = NULL; + pvalue.mvtype = 0; + + func = tvb_get_guint8(tvb, 6); +@@ -12124,17 +12135,19 @@ + length_remaining = tvb_reported_length_remaining(tvb, 8); + + if (length_remaining >= 8) { ++ proto_item *pi; ++ + ping_version = tvb_get_letohl(tvb, 8); + proto_tree_add_uint(ncp_tree, hf_nds_ping_version, tvb, 8, +- 4, ping_version); ++ 4, ping_version); + nds_flags = tvb_get_letohl(tvb, 12); + if (request_value){ +- request_value->nds_request_verb = 0xf0; +- request_value->req_nds_flags = nds_flags; +- } +- proto_tree_add_uint_hidden(ncp_tree, hf_ncp_nds_verb, tvb, 0, 0, +- 240); ++ request_value->nds_request_verb = 0xf0; ++ request_value->req_nds_flags = nds_flags; ++ } + ++ pi = proto_tree_add_uint(ncp_tree, hf_ncp_nds_verb, tvb, 0, 0, 240); ++ PROTO_ITEM_SET_HIDDEN(pi); + + pvalue.vvalue = tvb_get_letohs(tvb, 12); + pvalue.vtype = VTYPE_BITFIELD; +@@ -12225,15 +12238,16 @@ + default: + ; /* nothing */ + break; +- } +- ptvc = ptvcursor_new(ncp_tree, tvb, 7); +- if (ncp_rec && ncp_rec->request_ptvc) { +- clear_repeat_vars(); +- process_ptvc_record(ptvc, ncp_rec->request_ptvc, NULL, TRUE, ncp_rec); +- } +- ptvcursor_free(ptvc); ++ } ++ ptvc = ptvcursor_new(ncp_tree, tvb, 7); ++ if (ncp_rec && ncp_rec->request_ptvc) { ++ clear_repeat_vars(); ++ process_ptvc_record(ptvc, ncp_rec->request_ptvc, NULL, TRUE, ncp_rec); ++ } ++ ptvcursor_free(ptvc); + +- /* Free the temporary proto_tree */ +- CLEANUP_CALL_AND_POP; ++ /* Free the temporary proto_tree */ ++ CLEANUP_CALL_AND_POP; + } + } ++ --- wireshark-1.0.2.orig/debian/patches/19_umask.dpatch +++ wireshark-1.0.2/debian/patches/19_umask.dpatch @@ -0,0 +1,43 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 19_umask.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: No description. + +@DPATCH@ +diff -urNad trunk~/dumpcap.c trunk/dumpcap.c +--- trunk~/dumpcap.c 2008-03-29 18:27:02.000000000 +0100 ++++ trunk/dumpcap.c 2008-04-26 10:26:43.000000000 +0200 +@@ -1645,7 +1645,7 @@ + } else { + /* Try to open/create the specified file for use as a capture buffer. */ + *save_file_fd = eth_open(capfile_name, O_RDWR|O_BINARY|O_TRUNC|O_CREAT, +- 0600); ++ 0666); + } + } + is_tempfile = FALSE; +diff -urNad trunk~/file.c trunk/file.c +--- trunk~/file.c 2008-03-29 18:27:02.000000000 +0100 ++++ trunk/file.c 2008-04-26 10:27:16.000000000 +0200 +@@ -1155,7 +1155,7 @@ + + if (*out_filenamep != NULL) { + out_filename = *out_filenamep; +- out_fd = eth_open(out_filename, O_CREAT|O_TRUNC|O_BINARY, 0600); ++ out_fd = eth_open(out_filename, O_CREAT|O_TRUNC|O_BINARY, 0666); + if (out_fd == -1) + open_err = errno; + } else { +diff -urNad trunk~/ringbuffer.c trunk/ringbuffer.c +--- trunk~/ringbuffer.c 2008-03-29 18:27:02.000000000 +0100 ++++ trunk/ringbuffer.c 2008-04-26 10:27:04.000000000 +0200 +@@ -125,7 +125,7 @@ + return -1; + } + +- rb_data.fd = eth_open(rfile->name, O_RDWR|O_BINARY|O_TRUNC|O_CREAT, 0600); ++ rb_data.fd = eth_open(rfile->name, O_RDWR|O_BINARY|O_TRUNC|O_CREAT, 0666); + + if (rb_data.fd == -1 && err != NULL) { + *err = errno; --- wireshark-1.0.2.orig/debian/patches/06_giop-buffer.dpatch +++ wireshark-1.0.2/debian/patches/06_giop-buffer.dpatch @@ -0,0 +1,19 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 06_giop-buffer.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: No description. + +@DPATCH@ +diff -urNad --exclude=CVS --exclude=.svn ./epan/dissectors/packet-giop.c /tmp/dpep-work.7N90PO/wireshark-0.10.11/epan/dissectors/packet-giop.c +--- ./epan/dissectors/packet-giop.c 2005-07-17 18:52:08.000000000 +0200 ++++ /tmp/dpep-work.7N90PO/wireshark-0.10.11/epan/dissectors/packet-giop.c 2005-07-17 18:55:32.000000000 +0200 +@@ -1760,6 +1760,8 @@ + + if (len == 0) + return FALSE; ++ if (*offset > header->message_size) ++ return FALSE; + + saved_proto = pinfo->current_proto; + for (i=0; i +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: use Debian sensible-browser + +@DPATCH@ +diff -urNad wireshark-0.99.7~pre1~/epan/prefs.c wireshark-0.99.7~pre1/epan/prefs.c +--- wireshark-0.99.7~pre1~/epan/prefs.c 2007-11-22 17:57:25.000000000 +0100 ++++ wireshark-0.99.7~pre1/epan/prefs.c 2007-11-22 18:04:50.555226510 +0100 +@@ -1198,7 +1198,7 @@ + prefs.gui_ask_unsaved = TRUE; + prefs.gui_find_wrap = TRUE; + prefs.gui_use_pref_save = FALSE; +- prefs.gui_webbrowser = g_strdup(HTML_VIEWER " %s"); ++ prefs.gui_webbrowser = g_strdup("sensible-browser %s"); + prefs.gui_window_title = g_strdup(""); + prefs.gui_layout_type = layout_type_5; + prefs.gui_layout_content_1 = layout_pane_content_plist; --- wireshark-1.0.2.orig/debian/patches/08_wireshark-desktop-menu.dpatch +++ wireshark-1.0.2/debian/patches/08_wireshark-desktop-menu.dpatch @@ -0,0 +1,24 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 08_wireshark-desktop-menu.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: No description. + +@DPATCH@ +diff -urNad trunk~/wireshark.desktop trunk/wireshark.desktop +--- trunk~/wireshark.desktop 2008-02-27 20:59:35.000000000 +0100 ++++ trunk/wireshark.desktop 2008-03-12 21:21:00.000000000 +0100 +@@ -68,10 +68,11 @@ + Comment[fi]=Verkkoliikenne analysaattori + Comment[fr]=Analyseur de trafic réseau + Comment[sv]=Nätverkstrafikanalysator +-Icon=wireshark.png ++Icon=hi48-app-wireshark.png + TryExec=wireshark + Exec=wireshark + Terminal=false + # Categorie entry according to version 1.0 of + # http://www.freedesktop.org/wiki/Specifications/menu-spec +-Categories=System;Monitor;GTK; ++Categories=GNOME;Network; ++Encoding=UTF-8 --- wireshark-1.0.2.orig/debian/patches/21_CVE-2008-3934.dpatch +++ wireshark-1.0.2/debian/patches/21_CVE-2008-3934.dpatch @@ -0,0 +1,42 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 21_CVE-2008-3934.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: No description. + +@DPATCH@ +diff -urNad lenny~/epan/dissectors/packet-k12.c lenny/epan/dissectors/packet-k12.c +--- lenny~/epan/dissectors/packet-k12.c 2008-07-10 19:39:24.000000000 +0200 ++++ lenny/epan/dissectors/packet-k12.c 2008-09-17 18:24:26.000000000 +0200 +@@ -275,12 +275,10 @@ + if (handles[i] == sscop_handle) { + sscop_payload_info *p_sscop_info = p_get_proto_data(pinfo->fd, proto_sscop); + if (!p_sscop_info) { +- p_sscop_info = ep_alloc0(sizeof(sscop_payload_info)); +- if (p_sscop_info) ++ p_sscop_info = se_alloc0(sizeof(sscop_payload_info)); + p_add_proto_data(pinfo->fd, proto_sscop, p_sscop_info); +- } +- if (p_sscop_info) + p_sscop_info->subdissector = handles[i+1]; ++ } + } + /* Add more protocols here */ + } +@@ -291,14 +289,13 @@ + if (sub_handle == fp_handle) { + fp_info *p_fp_info = p_get_proto_data(pinfo->fd, proto_fp); + if (!p_fp_info) { +- p_fp_info = ep_alloc0(sizeof(fp_info)); +- if (p_fp_info) ++ p_fp_info = se_alloc0(sizeof(fp_info)); + p_add_proto_data(pinfo->fd, proto_fp, p_fp_info); +- } + + fill_fp_info(p_fp_info, + pinfo->pseudo_header->k12.extra_info, + pinfo->pseudo_header->k12.extra_length); ++ } + } + + call_dissector(sub_handle, tvb, pinfo, tree);