From Christian Sievers: add support for TFTP option acknowledgements
authorguy <guy>
Fri, 14 Sep 2007 01:03:12 +0000 (01:03 +0000)
committerguy <guy>
Fri, 14 Sep 2007 01:03:12 +0000 (01:03 +0000)
(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.

CREDITS
FILES
INSTALL
README
print-tftp.c
tftp.h [new file with mode: 0644]

diff --git a/CREDITS b/CREDITS
index da8534b04ef63ee4b89c9f99e6c40a79dea91a4c..06820b0391f635132d8c7e9d4a174164a0926f99 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -32,6 +32,7 @@ Additional people who have contributed patches:
        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 96df9c3db8814e72c429d0bab0143e0113fc152e..4e2afa26c61022be1afefb445a01a90f15f13510 100644 (file)
--- a/FILES
+++ b/FILES
@@ -231,6 +231,7 @@ tcpdump.1
 tcpdump.c
 tcpdump-stdinc.h
 telnet.h
+tftp.h
 timed.h
 token.h
 udp.h
diff --git a/INSTALL b/INSTALL
index 2a511cd587d42b1024f4a28f8d142a4d22cfc76f..5893f13252fa94181115f359095c81a032a4e943 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -1,4 +1,4 @@
-@(#) $Header: /tcpdump/master/tcpdump/Attic/INSTALL,v 1.63.2.6 2007-09-12 19:48:50 guy Exp $ (LBL)
+@(#) $Header: /tcpdump/master/tcpdump/Attic/INSTALL,v 1.63.2.7 2007-09-14 01:03:12 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 @@ tcp.h               - TCP definitions
 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 b166cb2f7e55f1b3130541ad6d778aeea196bf04..c95dc29b213777061976de4f9686db8fdf6a6caa 100644 (file)
--- 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.65.2.1 2007-09-14 01:03:12 guy Exp $ (LBL)
 
 TCPDUMP 3.9
 Now maintained by "The Tcpdump Group"
@@ -11,10 +11,11 @@ Anonymous CVS is available via:
        (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>
index 3ab61bc65ad80cfe57a08fadc8eeee6fb8cae255..dfd10dfee07af804d4917d031705e544d28c43f5 100644 (file)
@@ -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.37.2.1 2007-09-14 01:03:12 guy Exp $ (LBL)";
 #endif
 
 #ifdef HAVE_CONFIG_H
@@ -35,7 +35,6 @@ static const char rcsid[] _U_ =
 #ifdef SEGSIZE
 #undef SEGSIZE                                 /* SINIX sucks */
 #endif
-#include <arpa/tftp.h>
 
 #include <stdio.h>
 #include <string.h>
@@ -43,6 +42,7 @@ static const char rcsid[] _U_ =
 #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 @@ static struct tok op2str[] = {
        { DATA,         "DATA" },       /* data packet */
        { ACK,          "ACK" },        /* acknowledgement */
        { ERROR,        "ERROR" },      /* error code */
+       { OACK,         "OACK" },       /* option acknowledgement */
        { 0,            NULL }
 };
 
@@ -97,6 +98,7 @@ tftp_print(register const u_char *bp, u_int length)
 
        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 @@ tftp_print(register const u_char *bp, u_int length)
 #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 @@ tftp_print(register const u_char *bp, u_int length)
        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 (file)
index 0000000..87f3df5
--- /dev/null
+++ b/tftp.h
@@ -0,0 +1,82 @@
+/* @(#) $Header: /tcpdump/master/tcpdump/tftp.h,v 1.1.2.1 2007-09-14 01:03:12 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_ */