From Christian Sievers: add support for TFTP option acknowledgements
(RFC 2347), and add an opening quotation mark to the error message
string.
Don't use the system's <arpa/tftp.h>, use our own.
Update the README to reflect the current practice for submitting
patches, and fix a spelling error.
diff --git a/CREDITS b/CREDITS
index f80ed4b..3394029 100644
--- a/CREDITS
+++ b/CREDITS
@@ -34,6 +34,7 @@
Charles M. Hannum <mycroft@netbsd.org>
Chris Cogdon <chris@cogdon.org>
Chris G. Demetriou <cgd@netbsd.org>
+ Christian Sievers <c_s@users.sourceforge.net>
Chris Jepeway <jepeway@blasted-heath.com>
Chris Larson <clarson@kergoth.com>
Craig Rodrigues <rodrigc@mediaone.net>
diff --git a/FILES b/FILES
index eca4cd1..dd7a355 100644
--- a/FILES
+++ b/FILES
@@ -241,6 +241,7 @@
tcpdump.c
tcpdump-stdinc.h
telnet.h
+tftp.h
timed.h
token.h
udp.h
diff --git a/INSTALL b/INSTALL
index 8fb41cf..3982a57 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,4 +1,4 @@
-@(#) $Header: /tcpdump/master/tcpdump/Attic/INSTALL,v 1.69 2007-09-12 19:36:18 guy Exp $ (LBL)
+@(#) $Header: /tcpdump/master/tcpdump/Attic/INSTALL,v 1.70 2007-09-14 01:02:07 guy Exp $ (LBL)
If you have not built libpcap, and your system does not have libpcap
installed, install libpcap first. Your system might provide a version
@@ -243,6 +243,7 @@
tcpdump.1 - manual entry
tcpdump.c - main program
telnet.h - Telnet definitions
+tftp.h - TFTP definitions
timed.h - BSD time daemon protocol definitions
token.h - Token Ring definitions
udp.h - UDP definitions
diff --git a/README b/README
index b166cb2..46710ba 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-@(#) $Header: /tcpdump/master/tcpdump/README,v 1.65 2004-10-12 02:01:59 guy Exp $ (LBL)
+@(#) $Header: /tcpdump/master/tcpdump/README,v 1.66 2007-09-14 01:02:07 guy Exp $ (LBL)
TCPDUMP 3.9
Now maintained by "The Tcpdump Group"
@@ -11,10 +11,11 @@
(password "anoncvs")
cvs -d :pserver:cvs.tcpdump.org:/tcpdump/master checkout tcpdump
-Version 3.9 of TCPDUMP can be retrived with the CVS tag "tcpdump_3_9rel1":
+Version 3.9 of TCPDUMP can be retrieved with the CVS tag "tcpdump_3_9rel1":
cvs -d :pserver:cvs.tcpdump.org:/tcpdump/master checkout -r tcpdump_3_9rel1 tcpdump
-Please send patches against the master copy to patches@tcpdump.org.
+Please submit patches against the master copy to the tcpdump project on
+sourceforge.net.
formerly from Lawrence Berkeley National Laboratory
Network Research Group <tcpdump@ee.lbl.gov>
diff --git a/print-tftp.c b/print-tftp.c
index 3ab61bc..6baf82e 100644
--- a/print-tftp.c
+++ b/print-tftp.c
@@ -23,7 +23,7 @@
#ifndef lint
static const char rcsid[] _U_ =
- "@(#) $Header: /tcpdump/master/tcpdump/print-tftp.c,v 1.37 2003-11-16 09:36:40 guy Exp $ (LBL)";
+ "@(#) $Header: /tcpdump/master/tcpdump/print-tftp.c,v 1.38 2007-09-14 01:02:07 guy Exp $ (LBL)";
#endif
#ifdef HAVE_CONFIG_H
@@ -35,7 +35,6 @@
#ifdef SEGSIZE
#undef SEGSIZE /* SINIX sucks */
#endif
-#include <arpa/tftp.h>
#include <stdio.h>
#include <string.h>
@@ -43,6 +42,7 @@
#include "interface.h"
#include "addrtoname.h"
#include "extract.h"
+#include "tftp.h"
/* op code to string mapping */
static struct tok op2str[] = {
@@ -51,6 +51,7 @@
{ DATA, "DATA" }, /* data packet */
{ ACK, "ACK" }, /* acknowledgement */
{ ERROR, "ERROR" }, /* error code */
+ { OACK, "OACK" }, /* option acknowledgement */
{ 0, NULL }
};
@@ -97,6 +98,7 @@
case RRQ:
case WRQ:
+ case OACK:
/*
* XXX Not all arpa/tftp.h's specify th_stuff as any
* array; use address of th_block instead
@@ -106,11 +108,15 @@
#else
p = (u_char *)&tp->th_block;
#endif
- fputs(" \"", stdout);
+ putchar(' ');
+ /* Print filename or first option */
+ if (opcode != OACK)
+ putchar('"');
i = fn_print(p, snapend);
- putchar('"');
+ if (opcode != OACK)
+ putchar('"');
- /* Print the mode and any options */
+ /* Print the mode (RRQ and WRQ only) and any options */
while ((p = (const u_char *)strchr((const char *)p, '\0')) != NULL) {
if (length <= (u_int)(p - (const u_char *)&tp->th_block))
break;
@@ -134,7 +140,7 @@
case ERROR:
/* Print error code string */
TCHECK(tp->th_code);
- printf(" %s ", tok2str(err2str, "tftp-err-#%d \"",
+ printf(" %s \"", tok2str(err2str, "tftp-err-#%d \"",
EXTRACT_16BITS(&tp->th_code)));
/* Print error message string */
i = fn_print((const u_char *)tp->th_data, snapend);
diff --git a/tftp.h b/tftp.h
new file mode 100644
index 0000000..b591322
--- /dev/null
+++ b/tftp.h
@@ -0,0 +1,82 @@
+/* @(#) $Header: /tcpdump/master/tcpdump/tftp.h,v 1.1 2007-09-14 01:02:07 guy Exp $ (LBL) */
+/*
+ * Copyright (c) 1983, 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. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. 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.
+ *
+ * @(#)tftp.h 8.1 (Berkeley) 6/2/93
+ */
+
+#ifndef _TFTP_H_
+#define _TFTP_H_
+
+/*
+ * Trivial File Transfer Protocol (IEN-133)
+ */
+#define SEGSIZE 512 /* data segment size */
+
+/*
+ * Packet types.
+ */
+#define RRQ 01 /* read request */
+#define WRQ 02 /* write request */
+#define DATA 03 /* data packet */
+#define ACK 04 /* acknowledgement */
+#define ERROR 05 /* error code */
+#define OACK 06 /* option acknowledgement */
+
+struct tftphdr {
+ unsigned short th_opcode; /* packet type */
+ union {
+ unsigned short tu_block; /* block # */
+ unsigned short tu_code; /* error code */
+ char tu_stuff[1]; /* request packet stuff */
+ } th_u;
+ char th_data[1]; /* data or error string */
+};
+
+#define th_block th_u.tu_block
+#define th_code th_u.tu_code
+#define th_stuff th_u.tu_stuff
+#define th_msg th_data
+
+/*
+ * Error codes.
+ */
+#define EUNDEF 0 /* not defined */
+#define ENOTFOUND 1 /* file not found */
+#define EACCESS 2 /* access violation */
+#define ENOSPACE 3 /* disk full or allocation exceeded */
+#define EBADOP 4 /* illegal TFTP operation */
+#define EBADID 5 /* unknown transfer ID */
+#define EEXISTS 6 /* file already exists */
+#define ENOUSER 7 /* no such user */
+
+#endif /* !_TFTP_H_ */