aboutsummaryrefslogtreecommitdiff
path: root/print-smb.c
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2017-05-15 10:59:29 -0700
committerElliott Hughes <enh@google.com>2017-05-15 14:40:28 -0700
commite2e3bd11bd7561bc9d6686283a668fa94e1206b7 (patch)
treec99c1f63716e7286ebfb83a0c78d91be06ec8488 /print-smb.c
parent60aaf97844d4c21b8618fd50046e036c5f78ebe0 (diff)
downloadtcpdump-e2e3bd11bd7561bc9d6686283a668fa94e1206b7.tar.gz
Upgrade to tcpdump 4.9.0.
From CHANGES: Wednesday January 18, 2017 devel.fx.lebail@orange.fr Summary for 4.9.0 tcpdump release General updates: Improve separation frontend/backend (tcpdump/libnetdissect) Don't require IPv6 library support in order to support IPv6 addresses Introduce data types to use for integral values in packet structures Fix display of timestamps with -tt, -ttt and -ttttt options Fix some heap overflows found with American Fuzzy Lop by Hanno Boeck and others (More information in the log with CVE-2016-* and CVE-2017-*) Change the way protocols print link-layer addresses (Fix heap overflows in CALM-FAST and GeoNetworking printers) Pass correct caplen value to ether_print() and some other functions Fix lookup_nsap() to match what isonsap_string() expects Clean up relative time stamp printing (Fix an array overflow) Fix some alignment issues with GCC on Solaris 10 SPARC Add some ND_TTEST_/ND_TCHECK_ macros to simplify writing bounds checks Add a fn_printztn() which returns the number of bytes processed Add nd_init() and nd_cleanup() functions. Improve libsmi support Add CONTRIBUTING file Add a summary comment in all printers Compile with more warning options in devel mode if supported (-Wcast-qual, ...) Fix some leaks found by Valgrind/Memcheck Fix a bunch of de-constifications Squelch some Coverity warnings and some compiler warnings Update Coverity and Travis-CI setup Update Visual Studio files Frontend: Fix capsicum support to work with zerocopy buffers in bpf Try opening interfaces by name first, then by name-as-index Work around pcap_create() failures fetching time stamp type lists Fix a segmentation fault with 'tcpdump -J' Improve addrtostr6() bounds checking Add exit_tcpdump() function Don't drop CAP_SYS_CHROOT before chrooting Fixes issue where statistics not reported when -G and -W options used New printers supporting: Generic Protocol Extension for VXLAN (VXLAN-GPE) Home Networking Control Protocol (HNCP), RFCs 7787 and 7788 Locator/Identifier Separation Protocol (LISP), type 3 and type 4 packets Marvell Extended Distributed Switch Architecture header (MEDSA) Network Service Header (NSH) REdis Serialization Protocol (RESP) Updated printers: 802.11: Beginnings of 11ac radiotap support 802.11: Check the Protected bit for management frames 802.11: Do bounds checking on last_presentp before dereferencing it (Fix a heap overflow) 802.11: Fix the radiotap printer to handle the special bits correctly 802.11: If we have the MCS field, it's 11n 802.11: Only print unknown frame type or subtype messages once 802.11: Radiotap dBm values get printed as dB; Update a test output accordingly 802.11: Source and destination addresses were backwards AH: Add a bounds check AH: Report to our caller that dissection failed if a bounds check fails AP1394: Print src > dst, not dst > src ARP: Don't assume the target hardware address is <= 6 octets long (Fix a heap overflow) ATALK: Add bounds and length checks (Fix heap overflows) ATM: Add some bounds checks (Fix a heap overflow) ATM: Fix an incorrect bounds check BFD: Update specification from draft to RFC 5880 BFD: Update to print optional authentication field BGP: Add decoding of ADD-PATH capability BGP: Add support for the AIGP attribute (RFC7311) BGP: Print LARGE_COMMUNITY Path Attribute BGP: Update BGP numbers from IANA; Print minor values for FSM notification BOOTP: Add a bounds check Babel: Add decoder for source-specific extension CDP: Filter out non-printable characters CFM: Fixes to match the IEEE standard, additional bounds and length checks CSLIP: Add more bounds checks (Fix a heap overflow) ClassicalIPoATM: Add a bounds check on LLC+SNAP header (Fix a heap overflow) DHCP: Fix MUDURL and TZ options DHCPv6: Process MUDURL and TZ options DHCPv6: Update Status Codes with RFCs/IANA names DNS: Represent the "DNSSEC OK" bit as "DO" instead of "OK". Add a test case DTP: Improve packet integrity checks EGP: Fix bounds checks ESP: Don't use OpenSSL_add_all_algorithms() in OpenSSL 1.1.0 or later ESP: Handle OpenSSL 1.1.x Ethernet: Add some bounds checking before calling isoclns_print (Fix a heap overflow) Ethernet: Print the Length/Type field as length when needed FDDI: Fix -e output for FDDI FR: Add some packet-length checks and improve Q.933 printing (Fix heap overflows) GRE: Add some bounds checks (Fix heap overflows) Geneve: Fix error message with invalid option length; Update list option classes HNCP: Fix incorrect time interval format. Fix handling of IPv4 prefixes ICMP6: Fetch a 32-bit big-endian quantity with EXTRACT_32BITS() ICMP6: dagid is always an IPv6 address, not an opaque 128-bit string IGMP: Add a length check IP: Add a bounds check (Fix a heap overflow) IP: Check before fetching the protocol version (Fix a heap overflow) IP: Don't try to dissect if IP version != 4 (Fix a heap overflow) IP: Stop processing IPPROTO_ values once we hit IPPROTO_IPCOMP IPComp: Check whether we have the CPI before we fetch it (Fix a heap overflow) IPoFC: Fix -e output (IP-over-Fibre Channel) IPv6: Don't overwrite the destination IPv6 address for routing headers IPv6: Fix header printing IPv6: Stop processing IPPROTO_ values once we hit IPPROTO_IPCOMP ISAKMP: Clean up parsing of IKEv2 Security Associations ISOCLNS/IS-IS: Add support for Purge Originator Identifier (RFC6232) and test cases ISOCLNS/IS-IS: Don't overwrite packet data when checking the signature ISOCLNS/IS-IS: Filter out non-printable characters ISOCLNS/IS-IS: Fix segmentation faults ISOCLNS/IS-IS: Have signature_verify() do the copying and clearing ISOCLNS: Add some bounds checks Juniper: Make sure a Juniper header TLV isn't bigger than what's left in the packet (Fix a heap overflow) LLC/SNAP: With -e, print the LLC header before the SNAP header; without it, cut the SNAP header LLC: Add a bounds check (Fix a heap overflow) LLC: Clean up printing of LLC packets LLC: Fix the printing of RFC 948-style IP packets LLC: Skip the LLC and SNAP headers with -x for 802.11 and some other protocols LLDP: Implement IANA OUI and LLDP MUD option MPLS LSP ping: Update printing for RFC 4379, bug fixes, more bounds checks MPLS: "length" is now the *remaining* packet length MPLS: Add bounds and length checks (Fix a heap overflow) NFS: Add a test that makes unaligned accesses NFS: Don't assume the ONC RPC header is nicely aligned NFS: Don't overflow the Opaque_Handle buffer (Fix a segmentation fault) NFS: Don't run past the end of an NFSv3 file handle OLSR: Add a test to cover a HNA sgw case OLSR: Fix 'Advertised networks' count OLSR: Fix printing of smart-gateway HNAs in IPv4 OSPF: Add a bounds check for the Hello packet options OSPF: Do more bounds checking OSPF: Fix a segmentation fault OSPF: Fix printing 'ospf_topology_values' default OTV: Add missing bounds checks PGM: Print the formatted IP address, not the raw binary address, as a string PIM: Add some bounds checking (Fix a heap overflow) PIMv2: Fix checksumming of Register messages PPI: Pass an adjusted struct pcap_pkthdr to the sub-printer PPP: Add some bounds checks (Fix a heap overflow) PPP: Report invalid PAP AACK/ANAK packets Q.933: Add a missing bounds check RADIUS: Add Value 13 "VLAN" to Tunnel-Type attribute RADIUS: Filter out non-printable characters RADIUS: Translate UDP/1700 as RADIUS RESP: Do better checking of RESP packets RPKI-RTR: Add a return value check for "fn_printn" call RPKI-RTR: Remove printing when truncated condition already detected RPL: Fix 'Consistency Check' control code RPL: Fix suboption print RSVP: An INTEGRITY object in a submessage covers only the submessage RSVP: Fix an infinite loop; Add bounds and length checks RSVP: Fix some if statements missing brackets RSVP: Have signature_verify() do the copying and clearing RTCP: Add some bounds checks RTP: Add some bounds checks, fix two segmentation faults SCTP: Do more bounds checking SFLOW: Fix bounds checking SLOW: Fix bugs, add checks SMB: Before fetching the flags2 field, make sure we have it SMB: Do bounds checks on NBNS resource types and resource data lengths SNMP: Clean up the "have libsmi but no modules loaded" case SNMP: Clean up the object abbreviation list and fix the code to match them SNMP: Do bounds checks when printing character and octet strings SNMP: Improve ASN.1 bounds checks SNMP: More bounds and length checks STP: Add a bunch of bounds checks, and fix some printing (Fix heap overflows) STP: Filter out non-printable characters TCP: Add bounds and length checks for packets with TCP option 20 TCP: Correct TCP option Kind value for TCP Auth and add SCPS-TP TCP: Fix two bounds checks (Fix heap overflows) TCP: Make sure we have the data offset field before fetching it (Fix a heap overflow) TCP: Put TCP-AO option decoding right TFTP: Don't use strchr() to scan packet data (Fix a heap overflow) Telnet: Add some bounds checks TokenRing: Fix -e output UDLD: Fix an infinite loop UDP: Add a bounds check (Fix a heap overflow) UDP: Check against the packet length first UDP: Don't do the DDP-over-UDP heuristic check up front VAT: Add some bounds checks VTP: Add a test on Mgmt Domain Name length VTP: Add bounds checks and filter out non-printable characters VXLAN: Add a bound check and a test case ZeroMQ: Fix an infinite loop Tuesday April 14, 2015 guy@alum.mit.edu Summary for 4.8.0 tcpdump release Fix "-x" for Apple PKTAP and PPI packets Bug: N/A Test: "adb shell tcpdump" Change-Id: I81df72cf1ebdbe61c5b6069d8532ae817570f23f
Diffstat (limited to 'print-smb.c')
-rw-r--r--print-smb.c37
1 files changed, 21 insertions, 16 deletions
diff --git a/print-smb.c b/print-smb.c
index f5be9ffc..723b9a03 100644
--- a/print-smb.c
+++ b/print-smb.c
@@ -6,16 +6,17 @@
* or later
*/
-#define NETDISSECT_REWORKED
+/* \summary: SMB/CIFS printer */
+
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
-#include <tcpdump-stdinc.h>
+#include <netdissect-stdinc.h>
#include <string.h>
-#include "interface.h"
+#include "netdissect.h"
#include "extract.h"
#include "smb.h"
@@ -100,7 +101,7 @@ trans2_findfirst(netdissect_options *ndo,
smb_fdata(ndo, param, fmt, param + pcnt, unicodestr);
if (dcnt) {
ND_PRINT((ndo, "data:\n"));
- print_data(ndo, data, dcnt);
+ smb_print_data(ndo, data, dcnt);
}
}
@@ -135,7 +136,7 @@ trans2_qfsinfo(netdissect_options *ndo,
}
if (dcnt) {
ND_PRINT((ndo, "data:\n"));
- print_data(ndo, data, dcnt);
+ smb_print_data(ndo, data, dcnt);
}
return;
trunc:
@@ -416,7 +417,7 @@ print_negprot(netdissect_options *ndo,
smb_fdata(ndo, words + 1, f1, min(words + 1 + wct * 2, maxbuf),
unicodestr);
else
- print_data(ndo, words + 1, min(wct * 2, PTR_DIFF(maxbuf, words + 1)));
+ smb_print_data(ndo, words + 1, min(wct * 2, PTR_DIFF(maxbuf, words + 1)));
ND_TCHECK2(*data, 2);
bcc = EXTRACT_LE_16BITS(data);
@@ -426,7 +427,7 @@ print_negprot(netdissect_options *ndo,
smb_fdata(ndo, data + 2, f2, min(data + 2 + EXTRACT_LE_16BITS(data),
maxbuf), unicodestr);
else
- print_data(ndo, data + 2, min(EXTRACT_LE_16BITS(data), PTR_DIFF(maxbuf, data + 2)));
+ smb_print_data(ndo, data + 2, min(EXTRACT_LE_16BITS(data), PTR_DIFF(maxbuf, data + 2)));
}
return;
trunc:
@@ -460,7 +461,7 @@ print_sesssetup(netdissect_options *ndo,
smb_fdata(ndo, words + 1, f1, min(words + 1 + wct * 2, maxbuf),
unicodestr);
else
- print_data(ndo, words + 1, min(wct * 2, PTR_DIFF(maxbuf, words + 1)));
+ smb_print_data(ndo, words + 1, min(wct * 2, PTR_DIFF(maxbuf, words + 1)));
ND_TCHECK2(*data, 2);
bcc = EXTRACT_LE_16BITS(data);
@@ -470,7 +471,7 @@ print_sesssetup(netdissect_options *ndo,
smb_fdata(ndo, data + 2, f2, min(data + 2 + EXTRACT_LE_16BITS(data),
maxbuf), unicodestr);
else
- print_data(ndo, data + 2, min(EXTRACT_LE_16BITS(data), PTR_DIFF(maxbuf, data + 2)));
+ smb_print_data(ndo, data + 2, min(EXTRACT_LE_16BITS(data), PTR_DIFF(maxbuf, data + 2)));
}
return;
trunc:
@@ -510,7 +511,7 @@ print_lockingandx(netdissect_options *ndo,
smb_fdata(ndo, data + 2, f2, min(data + 2 + EXTRACT_LE_16BITS(data),
maxbuf), unicodestr);
else
- print_data(ndo, data + 2, min(EXTRACT_LE_16BITS(data), PTR_DIFF(maxbuf, data + 2)));
+ smb_print_data(ndo, data + 2, min(EXTRACT_LE_16BITS(data), PTR_DIFF(maxbuf, data + 2)));
}
return;
trunc:
@@ -805,9 +806,6 @@ print_smb(netdissect_options *ndo,
ND_TCHECK(buf[9]);
request = (buf[9] & 0x80) ? 0 : 1;
- flags2 = EXTRACT_LE_16BITS(&buf[10]);
- unicodestr = flags2 & 0x8000;
- nterrcodes = flags2 & 0x4000;
startbuf = buf;
command = buf[4];
@@ -822,6 +820,11 @@ print_smb(netdissect_options *ndo,
if (ndo->ndo_vflag < 2)
return;
+ ND_TCHECK_16BITS(&buf[10]);
+ flags2 = EXTRACT_LE_16BITS(&buf[10]);
+ unicodestr = flags2 & 0x8000;
+ nterrcodes = flags2 & 0x4000;
+
/* print out the header */
smb_fdata(ndo, buf, fmt_smbheader, buf + 33, unicodestr);
@@ -883,7 +886,7 @@ print_smb(netdissect_options *ndo,
} else {
if (bcc > 0) {
ND_PRINT((ndo, "smb_buf[]=\n"));
- print_data(ndo, data + 2, min(bcc, PTR_DIFF(maxbuf, data + 2)));
+ smb_print_data(ndo, data + 2, min(bcc, PTR_DIFF(maxbuf, data + 2)));
}
}
}
@@ -1164,10 +1167,12 @@ nbt_udp137_print(netdissect_options *ndo,
p = smb_fdata(ndo, p, "Name=[n1]\n#", maxbuf, 0);
if (p == NULL)
goto out;
+ ND_TCHECK_16BITS(p);
restype = EXTRACT_16BITS(p);
p = smb_fdata(ndo, p, "ResType=[rw]\nResClass=[rw]\nTTL=[rD]\n", p + 8, 0);
if (p == NULL)
goto out;
+ ND_TCHECK_16BITS(p);
rdlen = EXTRACT_16BITS(p);
ND_PRINT((ndo, "ResourceLength=%d\nResourceData=\n", rdlen));
p += 2;
@@ -1209,7 +1214,7 @@ nbt_udp137_print(netdissect_options *ndo,
p += 2;
}
} else {
- print_data(ndo, p, min(rdlen, length - (p - data)));
+ smb_print_data(ndo, p, min(rdlen, length - (p - data)));
p += rdlen;
}
}
@@ -1309,7 +1314,7 @@ out:
/*
print netbeui frames
*/
-struct nbf_strings {
+static struct nbf_strings {
const char *name;
const char *nonverbose;
const char *verbose;