Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=frugalware-current.git;a=commitdiff;h=59b0af836554bd61dff03cc407f58eff0e8d0cc5

commit 59b0af836554bd61dff03cc407f58eff0e8d0cc5
Author: Baste <[email protected]>
Date:   Wed Oct 7 09:01:54 2015 +0200

tcpdump-4.7.4-1-x86_64
- 4.5.1 -> 4.7.4

diff --git a/source/network-extra/tcpdump/CVE-2014-8767.patch 
b/source/network-extra/tcpdump/CVE-2014-8767.patch
deleted file mode 100644
index e0eab74..0000000
--- a/source/network-extra/tcpdump/CVE-2014-8767.patch
+++ /dev/null
@@ -1,178 +0,0 @@
-From d8b4852e45a94fcde141ae28a2d5e36368ca92ae Mon Sep 17 00:00:00 2001
-From: Michal Sekletar <[email protected]>
-Date: Thu, 20 Nov 2014 11:38:46 +0100
-Subject: [PATCH] Do more bounds checking and length checking.
-
-Don't run past the end of the captured data, and don't run past the end
-of the packet (i.e., don't make the length variable go negative).
-
-Also, stop dissecting if the message length isn't valid.
-
-(cherry picked from commit 4038f83ebf654804829b258dde5e0a508c1c2003)
----
- print-olsr.c | 56 +++++++++++++++++++++++++++++++++++++++++++-------------
- 1 file changed, 43 insertions(+), 13 deletions(-)
-
-diff --git a/print-olsr.c b/print-olsr.c
-index d8619d4..f586d80 100644
---- a/print-olsr.c
-+++ b/print-olsr.c
-@@ -181,7 +181,7 @@ struct olsr_lq_neighbor6 {
- /*
-  * print a neighbor list with LQ extensions.
-  */
--static void
-+static int
- olsr_print_lq_neighbor4 (const u_char *msg_data, u_int hello_len)
- {
-     struct olsr_lq_neighbor4 *lq_neighbor;
-@@ -189,6 +189,8 @@ olsr_print_lq_neighbor4 (const u_char *msg_data, u_int 
hello_len)
-     while (hello_len >= sizeof(struct olsr_lq_neighbor4)) {
-
-         lq_neighbor = (struct olsr_lq_neighbor4 *)msg_data;
-+        if (!TTEST(*lq_neighbor))
-+            return (-1);
-
-         printf("\n\t      neighbor %s, link-quality %.2lf%%"
-                ", neighbor-link-quality %.2lf%%",
-@@ -199,10 +201,11 @@ olsr_print_lq_neighbor4 (const u_char *msg_data, u_int 
hello_len)
-         msg_data += sizeof(struct olsr_lq_neighbor4);
-         hello_len -= sizeof(struct olsr_lq_neighbor4);
-     }
-+    return (0);
- }
-
- #if INET6
--static void
-+static int
- olsr_print_lq_neighbor6 (const u_char *msg_data, u_int hello_len)
- {
-     struct olsr_lq_neighbor6 *lq_neighbor;
-@@ -210,6 +213,8 @@ olsr_print_lq_neighbor6 (const u_char *msg_data, u_int 
hello_len)
-     while (hello_len >= sizeof(struct olsr_lq_neighbor6)) {
-
-         lq_neighbor = (struct olsr_lq_neighbor6 *)msg_data;
-+        if (!TTEST(*lq_neighbor))
-+            return (-1);
-
-         printf("\n\t      neighbor %s, link-quality %.2lf%%"
-                ", neighbor-link-quality %.2lf%%",
-@@ -220,13 +225,14 @@ olsr_print_lq_neighbor6 (const u_char *msg_data, u_int 
hello_len)
-         msg_data += sizeof(struct olsr_lq_neighbor6);
-         hello_len -= sizeof(struct olsr_lq_neighbor6);
-     }
-+    return (0);
- }
- #endif /* INET6 */
-
- /*
-  * print a neighbor list.
-  */
--static void
-+static int
- olsr_print_neighbor (const u_char *msg_data, u_int hello_len)
- {
-     int neighbor;
-@@ -236,6 +242,9 @@ olsr_print_neighbor (const u_char *msg_data, u_int 
hello_len)
-
-     while (hello_len >= sizeof(struct in_addr)) {
-
-+        if (!TTEST2(*msg_data, sizeof(struct in_addr)))
-+            return (-1);
-+
-         /* print 4 neighbors per line */
-
-         printf("%s%s", ipaddr_string(msg_data),
-@@ -329,6 +338,9 @@ olsr_print (const u_char *pptr, u_int length, int is_ipv6)
-                     ME_TO_DOUBLE(msgptr.v6->vtime),
-                     EXTRACT_16BITS(msgptr.v6->msg_seq),
-                     msg_len, (msg_len_valid == 0) ? " (invalid)" : "");
-+            if (!msg_len_valid) {
-+                return;
-+            }
-
-             msg_tlen = msg_len - sizeof(struct olsr_msg6);
-             msg_data = tptr + sizeof(struct olsr_msg6);
-@@ -357,6 +369,9 @@ olsr_print (const u_char *pptr, u_int length, int is_ipv6)
-                     ME_TO_DOUBLE(msgptr.v4->vtime),
-                     EXTRACT_16BITS(msgptr.v4->msg_seq),
-                     msg_len, (msg_len_valid == 0) ? " (invalid)" : "");
-+            if (!msg_len_valid) {
-+                return;
-+            }
-
-             msg_tlen = msg_len - sizeof(struct olsr_msg4);
-             msg_data = tptr + sizeof(struct olsr_msg4);
-@@ -365,6 +380,8 @@ olsr_print (const u_char *pptr, u_int length, int is_ipv6)
-         switch (msg_type) {
-         case OLSR_HELLO_MSG:
-         case OLSR_HELLO_LQ_MSG:
-+            if (msg_tlen < sizeof(struct olsr_hello))
-+                goto trunc;
-             if (!TTEST2(*msg_data, sizeof(struct olsr_hello)))
-                 goto trunc;
-
-@@ -406,15 +423,21 @@ olsr_print (const u_char *pptr, u_int length, int 
is_ipv6)
-                 msg_tlen -= sizeof(struct olsr_hello_link);
-                 hello_len -= sizeof(struct olsr_hello_link);
-
-+                TCHECK2(*msg_data, hello_len);
-                 if (msg_type == OLSR_HELLO_MSG) {
--                    olsr_print_neighbor(msg_data, hello_len);
-+                    if (olsr_print_neighbor(msg_data, hello_len) == -1)
-+                        goto trunc;
-                 } else {
- #if INET6
--                    if (is_ipv6)
--                        olsr_print_lq_neighbor6(msg_data, hello_len);
--                    else
-+                    if (is_ipv6) {
-+                        if (olsr_print_lq_neighbor6(msg_data, hello_len) == 
-1)
-+                            goto trunc;
-+                    } else
- #endif
--                        olsr_print_lq_neighbor4(msg_data, hello_len);
-+                        {
-+                            if (olsr_print_lq_neighbor4(msg_data, hello_len) 
== -1)
-+                                goto trunc;
-+                        }
-                 }
-
-                 msg_data += hello_len;
-@@ -424,6 +447,8 @@ olsr_print (const u_char *pptr, u_int length, int is_ipv6)
-
-         case OLSR_TC_MSG:
-         case OLSR_TC_LQ_MSG:
-+            if (msg_tlen < sizeof(struct olsr_tc))
-+                goto trunc;
-             if (!TTEST2(*msg_data, sizeof(struct olsr_tc)))
-                 goto trunc;
-
-@@ -434,14 +459,19 @@ olsr_print (const u_char *pptr, u_int length, int 
is_ipv6)
-             msg_tlen -= sizeof(struct olsr_tc);
-
-             if (msg_type == OLSR_TC_MSG) {
--                olsr_print_neighbor(msg_data, msg_tlen);
-+                if (olsr_print_neighbor(msg_data, msg_tlen) == -1)
-+                    goto trunc;
-             } else {
- #if INET6
--                if (is_ipv6)
--                    olsr_print_lq_neighbor6(msg_data, msg_tlen);
--                else
-+                if (is_ipv6) {
-+                    if (olsr_print_lq_neighbor6(msg_data, msg_tlen) == -1)
-+                        goto trunc;
-+                } else
- #endif
--                    olsr_print_lq_neighbor4(msg_data, msg_tlen);
-+                    {
-+                        if (olsr_print_lq_neighbor4(msg_data, msg_tlen) == -1)
-+                            goto trunc;
-+                    }
-             }
-             break;
-
---
-1.8.3.1
-
diff --git a/source/network-extra/tcpdump/CVE-2014-8768.patch 
b/source/network-extra/tcpdump/CVE-2014-8768.patch
deleted file mode 100644
index 02ddd99..0000000
--- a/source/network-extra/tcpdump/CVE-2014-8768.patch
+++ /dev/null
@@ -1,335 +0,0 @@
-diff -up tcpdump-4.5.1/print-geonet.c.cve-2014-8768 
tcpdump-4.5.1/print-geonet.c
---- tcpdump-4.5.1/print-geonet.c.cve-2014-8768 2014-11-20 15:38:53.183794306 
+0100
-+++ tcpdump-4.5.1/print-geonet.c       2014-11-20 15:59:06.832860093 +0100
-@@ -56,16 +56,12 @@ static const struct tok msg_type_values[
- };
-
- static void
--print_btp_body(const u_char *bp, u_int length)
-+print_btp_body(const u_char *bp)
- {
-       int version;
-       int msg_type;
-       const char *msg_type_str;
-
--      if (length <= 2) {
--              return;
--      }
--
-       /* Assuming ItsDpuHeader */
-       version = bp[0];
-       msg_type = bp[1];
-@@ -82,7 +78,7 @@ print_btp(const u_char *bp)
-       printf("; BTP Dst:%u Src:%u", dest, src);
- }
-
--static void
-+static int
- print_long_pos_vector(const u_char *bp)
- {
-       int i;
-@@ -95,10 +91,14 @@ print_long_pos_vector(const u_char *bp)
-       }
-       printf(" ");
-
-+        if (!TTEST2(*(bp+12), 8))
-+              return (-1);
-+
-       lat = EXTRACT_32BITS(bp+12);
-       printf("lat:%d ", lat);
-       lon = EXTRACT_32BITS(bp+16);
-       printf("lon:%d", lon);
-+        return (0);
- }
-
-
-@@ -109,140 +109,159 @@ print_long_pos_vector(const u_char *bp)
- void
- geonet_print(netdissect_options *ndo, const u_char *eth, const u_char *bp, 
u_int length)
- {
--      printf("GeoNet src:%s; ", etheraddr_string(eth+6));
-+      int version;
-+      int next_hdr;
-+      int hdr_type;
-+      int hdr_subtype;
-+      uint16_t payload_length;
-+      int hop_limit;
-+      const char *next_hdr_txt = "Unknown";
-+      const char *hdr_type_txt = "Unknown";
-+      int hdr_size = -1;
-
--      if (length >= 36) {
--              /* Process Common Header */
--              int version = bp[0] >> 4;
--              int next_hdr = bp[0] & 0x0f;
--              int hdr_type = bp[1] >> 4;
--              int hdr_subtype = bp[1] & 0x0f;
--              u_int16_t payload_length = EXTRACT_16BITS(bp+4);
--              int hop_limit = bp[7];
--              const char *next_hdr_txt = "Unknown";
--              const char *hdr_type_txt = "Unknown";
--              int hdr_size = -1;
--
--              switch (next_hdr) {
--                      case 0: next_hdr_txt = "Any"; break;
--                      case 1: next_hdr_txt = "BTP-A"; break;
--                      case 2: next_hdr_txt = "BTP-B"; break;
--                      case 3: next_hdr_txt = "IPv6"; break;
--              }
--
--              switch (hdr_type) {
--                      case 0: hdr_type_txt = "Any"; break;
--                      case 1: hdr_type_txt = "Beacon"; break;
--                      case 2: hdr_type_txt = "GeoUnicast"; break;
--                      case 3: switch (hdr_subtype) {
--                                      case 0: hdr_type_txt = 
"GeoAnycastCircle"; break;
--                                      case 1: hdr_type_txt = 
"GeoAnycastRect"; break;
--                                      case 2: hdr_type_txt = 
"GeoAnycastElipse"; break;
--                              }
--                              break;
--                      case 4: switch (hdr_subtype) {
--                                      case 0: hdr_type_txt = 
"GeoBroadcastCircle"; break;
--                                      case 1: hdr_type_txt = 
"GeoBroadcastRect"; break;
--                                      case 2: hdr_type_txt = 
"GeoBroadcastElipse"; break;
--                              }
--                              break;
--                      case 5: switch (hdr_subtype) {
--                                      case 0: hdr_type_txt = 
"TopoScopeBcast-SH"; break;
--                                      case 1: hdr_type_txt = 
"TopoScopeBcast-MH"; break;
--                              }
--                              break;
--                      case 6: switch (hdr_subtype) {
--                                      case 0: hdr_type_txt = 
"LocService-Request"; break;
--                                      case 1: hdr_type_txt = 
"LocService-Reply"; break;
--                              }
--                              break;
--              }
--
--              printf("v:%d ", version);
--              printf("NH:%d-%s ", next_hdr, next_hdr_txt);
--              printf("HT:%d-%d-%s ", hdr_type, hdr_subtype, hdr_type_txt);
--              printf("HopLim:%d ", hop_limit);
--              printf("Payload:%d ", payload_length);
--              print_long_pos_vector(bp + 8);
--
--              /* Skip Common Header */
--              length -= 36;
--              bp += 36;
--
--              /* Process Extended Headers */
--              switch (hdr_type) {
--                      case 0: /* Any */
--                              hdr_size = 0;
--                              break;
--                      case 1: /* Beacon */
--                              hdr_size = 0;
--                              break;
--                      case 2: /* GeoUnicast */
--                              break;
--                      case 3: switch (hdr_subtype) {
--                                      case 0: /* GeoAnycastCircle */
--                                              break;
--                                      case 1: /* GeoAnycastRect */
--                                              break;
--                                      case 2: /* GeoAnycastElipse */
--                                              break;
--                              }
--                              break;
--                      case 4: switch (hdr_subtype) {
--                                      case 0: /* GeoBroadcastCircle */
--                                              break;
--                                      case 1: /* GeoBroadcastRect */
--                                              break;
--                                      case 2: /* GeoBroadcastElipse */
--                                              break;
--                              }
--                              break;
--                      case 5: switch (hdr_subtype) {
--                                      case 0: /* TopoScopeBcast-SH */
--                                              hdr_size = 0;
--                                              break;
--                                      case 1: /* TopoScopeBcast-MH */
--                                              hdr_size = 68 - 36;
--                                              break;
--                              }
--                              break;
--                      case 6: switch (hdr_subtype) {
--                                      case 0: /* LocService-Request */
--                                              break;
--                                      case 1: /* LocService-Reply */
--                                              break;
--                              }
--                              break;
--              }
--
--              /* Skip Extended headers */
--              if (hdr_size >= 0) {
--                      length -= hdr_size;
--                      bp += hdr_size;
--                      switch (next_hdr) {
--                              case 0: /* Any */
--                                      break;
--                              case 1:
--                              case 2: /* BTP A/B */
--                                      print_btp(bp);
--                                      length -= 4;
--                                      bp += 4;
--                                      print_btp_body(bp, length);
--                                      break;
--                              case 3: /* IPv6 */
--                                      break;
--                      }
--              }
--      } else {
--              printf("Malformed (small) ");
--      }
-+      printf("GeoNet src:%s; ", etheraddr_string(eth+6));
-
--      /* Print user data part */
--      if (ndo->ndo_vflag)
--              default_print(bp, length);
--}
-+      /* Process Common Header */
-+      if (length < 36)
-+              goto malformed;
-+
-+        ND_TCHECK2(*bp, 7);
-+      version = bp[0] >> 4;
-+      next_hdr = bp[0] & 0x0f;
-+      hdr_type = bp[1] >> 4;
-+      hdr_subtype = bp[1] & 0x0f;
-+      payload_length = EXTRACT_16BITS(bp+4);
-+      hop_limit = bp[7];
-+
-+        switch (next_hdr) {
-+        case 0: next_hdr_txt = "Any"; break;
-+        case 1: next_hdr_txt = "BTP-A"; break;
-+        case 2: next_hdr_txt = "BTP-B"; break;
-+        case 3: next_hdr_txt = "IPv6"; break;
-+        }
-+
-+        switch (hdr_type) {
-+        case 0: hdr_type_txt = "Any"; break;
-+        case 1: hdr_type_txt = "Beacon"; break;
-+        case 2: hdr_type_txt = "GeoUnicast"; break;
-+        case 3: switch (hdr_subtype) {
-+                case 0: hdr_type_txt = "GeoAnycastCircle"; break;
-+                case 1: hdr_type_txt = "GeoAnycastRect"; break;
-+                case 2: hdr_type_txt = "GeoAnycastElipse"; break;
-+                }
-+                break;
-+        case 4: switch (hdr_subtype) {
-+                case 0: hdr_type_txt = "GeoBroadcastCircle"; break;
-+                case 1: hdr_type_txt = "GeoBroadcastRect"; break;
-+                case 2: hdr_type_txt = "GeoBroadcastElipse"; break;
-+                }
-+                break;
-+        case 5: switch (hdr_subtype) {
-+                case 0: hdr_type_txt = "TopoScopeBcast-SH"; break;
-+                case 1: hdr_type_txt = "TopoScopeBcast-MH"; break;
-+                }
-+                break;
-+        case 6: switch (hdr_subtype) {
-+                case 0: hdr_type_txt = "LocService-Request"; break;
-+                case 1: hdr_type_txt = "LocService-Reply"; break;
-+                }
-+                break;
-+        }
-+
-+        printf("v:%d ", version);
-+        printf("NH:%d-%s ", next_hdr, next_hdr_txt);
-+        printf("HT:%d-%d-%s ", hdr_type, hdr_subtype, hdr_type_txt);
-+        printf("HopLim:%d ", hop_limit);
-+        printf("Payload:%d ", payload_length);
-+        print_long_pos_vector(bp + 8);
-+
-+        /* Skip Common Header */
-+        length -= 36;
-+        bp += 36;
-+
-+        /* Process Extended Headers */
-+        switch (hdr_type) {
-+        case 0: /* Any */
-+                hdr_size = 0;
-+                break;
-+        case 1: /* Beacon */
-+                hdr_size = 0;
-+                break;
-+        case 2: /* GeoUnicast */
-+                break;
-+        case 3: switch (hdr_subtype) {
-+                case 0: /* GeoAnycastCircle */
-+                        break;
-+                case 1: /* GeoAnycastRect */
-+                        break;
-+                case 2: /* GeoAnycastElipse */
-+                        break;
-+                }
-+                break;
-+        case 4: switch (hdr_subtype) {
-+                case 0: /* GeoBroadcastCircle */
-+                        break;
-+                case 1: /* GeoBroadcastRect */
-+                        break;
-+                case 2: /* GeoBroadcastElipse */
-+                        break;
-+                }
-+                break;
-+        case 5: switch (hdr_subtype) {
-+                case 0: /* TopoScopeBcast-SH */
-+                        hdr_size = 0;
-+                        break;
-+                case 1: /* TopoScopeBcast-MH */
-+                        hdr_size = 68 - 36;
-+                        break;
-+                }
-+                break;
-+        case 6: switch (hdr_subtype) {
-+                case 0: /* LocService-Request */
-+                        break;
-+                case 1: /* LocService-Reply */
-+                        break;
-+                }
-+                break;
-+        }
-+
-+        /* Skip Extended headers */
-+        if (hdr_size >= 0) {
-+                if (length < (u_int)hdr_size)
-+                        goto malformed;
-+                ND_TCHECK2(*bp, hdr_size);
-+
-+                length -= hdr_size;
-+                bp += hdr_size;
-+                switch (next_hdr) {
-+                case 0: /* Any */
-+                        break;
-+                case 1:
-+                case 2: /* BTP A/B */
-+                        print_btp(bp);
-+                        length -= 4;
-+                        bp += 4;
-+                        print_btp_body(bp);
-+                        break;
-+                case 3: /* IPv6 */
-+                        break;
-+                }
-+        }
-+
-+        /* Print user data part */
-+        if (ndo->ndo_vflag)
-+                default_print(bp, length);
-+        return;
-+
-+malformed:
-+      ND_PRINT((ndo, " Malformed (small) "));
-+      /* XXX - print the remaining data as hex? */
-+      return;
-
-+trunc:
-+      ND_PRINT((ndo, "[|geonet]"));
-
-+}
- /*
-  * Local Variables:
-  * c-style: whitesmith
diff --git a/source/network-extra/tcpdump/CVE-2014-8769.patch 
b/source/network-extra/tcpdump/CVE-2014-8769.patch
deleted file mode 100644
index 30d694a..0000000
--- a/source/network-extra/tcpdump/CVE-2014-8769.patch
+++ /dev/null
@@ -1,581 +0,0 @@
-From 357525b6942eef3ef9696f1fe92ba7fe2ed68ac2 Mon Sep 17 00:00:00 2001
-From: Michal Sekletar <[email protected]>
-Date: Fri, 21 Nov 2014 12:19:32 +0100
-Subject: [PATCH] Fix for CVE-2014-8769
-
-(cherry picked from ab4e52b94aac6cb729a5a695aa612d5ebda2ec3a
-                    3e8a443c3671baa37ae7870f08fb9b4bf386fd24)
----
- aodv.h       |  20 ----
- print-aodv.c | 315 +++++++++++++++++++++++++++++++----------------------------
- 2 files changed, 168 insertions(+), 167 deletions(-)
-
-diff --git a/aodv.h b/aodv.h
-index 456ec8b..18467d5 100644
---- a/aodv.h
-+++ b/aodv.h
-@@ -134,13 +134,6 @@ struct aodv_rerr {
-       u_int8_t        rerr_flags;     /* various flags */
-       u_int8_t        rerr_zero0;     /* reserved, set to zero */
-       u_int8_t        rerr_dc;        /* destination count */
--      union {
--              struct  rerr_unreach dest[1];
--#ifdef INET6
--              struct  rerr_unreach6 dest6[1];
--              struct  rerr_unreach6_draft_01 dest6_draft_01[1];
--#endif
--      } r;
- };
-
- #define RERR_NODELETE         0x80    /* don't delete the link */
-@@ -151,19 +144,6 @@ struct aodv_rrep_ack {
-       u_int8_t        ra_zero0;
- };
-
--union aodv {
--      struct aodv_rreq rreq;
--      struct aodv_rrep rrep;
--      struct aodv_rerr rerr;
--      struct aodv_rrep_ack rrep_ack;
--#ifdef INET6
--      struct aodv_rreq6 rreq6;
--      struct aodv_rreq6_draft_01 rreq6_draft_01;
--      struct aodv_rrep6 rrep6;
--      struct aodv_rrep6_draft_01 rrep6_draft_01;
--#endif
--};
--
- #define       AODV_RREQ               1       /* route request */
- #define       AODV_RREP               2       /* route response */
- #define       AODV_RERR               3       /* error report */
-diff --git a/print-aodv.c b/print-aodv.c
-index c5f6622..b4f7989 100644
---- a/print-aodv.c
-+++ b/print-aodv.c
-@@ -82,7 +82,7 @@ aodv_extension(const struct aodv_ext *ep, u_int length)
- }
-
- static void
--aodv_rreq(const union aodv *ap, const u_char *dat, u_int length)
-+aodv_rreq(const struct aodv_rreq *ap, const u_char *dat, u_int length)
- {
-       u_int i;
-
-@@ -91,30 +91,31 @@ aodv_rreq(const union aodv *ap, const u_char *dat, u_int 
length)
-               return;
-       }
-       i = min(length, (u_int)(snapend - dat));
--      if (i < sizeof(ap->rreq)) {
-+      if (i < sizeof(*ap)) {
-               printf(" [|rreq]");
-               return;
-       }
--      i -= sizeof(ap->rreq);
-+      i -= sizeof(*ap);
-       printf(" rreq %u %s%s%s%s%shops %u id 0x%08lx\n"
-           "\tdst %s seq %lu src %s seq %lu", length,
--          ap->rreq.rreq_type & RREQ_JOIN ? "[J]" : "",
--          ap->rreq.rreq_type & RREQ_REPAIR ? "[R]" : "",
--          ap->rreq.rreq_type & RREQ_GRAT ? "[G]" : "",
--          ap->rreq.rreq_type & RREQ_DEST ? "[D]" : "",
--          ap->rreq.rreq_type & RREQ_UNKNOWN ? "[U] " : " ",
--          ap->rreq.rreq_hops,
--          (unsigned long)EXTRACT_32BITS(&ap->rreq.rreq_id),
--          ipaddr_string(&ap->rreq.rreq_da),
--          (unsigned long)EXTRACT_32BITS(&ap->rreq.rreq_ds),
--          ipaddr_string(&ap->rreq.rreq_oa),
--          (unsigned long)EXTRACT_32BITS(&ap->rreq.rreq_os));
-+               ap->rreq_type & RREQ_JOIN ? "[J]" : "",
-+               ap->rreq_type & RREQ_REPAIR ? "[R]" : "",
-+               ap->rreq_type & RREQ_GRAT ? "[G]" : "",
-+               ap->rreq_type & RREQ_DEST ? "[D]" : "",
-+               ap->rreq_type & RREQ_UNKNOWN ? "[U] " : " ",
-+               ap->rreq_hops,
-+               (unsigned long)EXTRACT_32BITS(&ap->rreq_id),
-+               ipaddr_string(&ap->rreq_da),
-+               (unsigned long)EXTRACT_32BITS(&ap->rreq_ds),
-+               ipaddr_string(&ap->rreq_oa),
-+               (unsigned long)EXTRACT_32BITS(&ap->rreq_os));
-+
-       if (i >= sizeof(struct aodv_ext))
--              aodv_extension((void *)(&ap->rreq + 1), i);
-+              aodv_extension((void *)(ap + 1), i);
- }
-
- static void
--aodv_rrep(const union aodv *ap, const u_char *dat, u_int length)
-+aodv_rrep(const struct aodv_rrep *ap, const u_char *dat, u_int length)
- {
-       u_int i;
-
-@@ -123,62 +124,60 @@ aodv_rrep(const union aodv *ap, const u_char *dat, u_int 
length)
-               return;
-       }
-       i = min(length, (u_int)(snapend - dat));
--      if (i < sizeof(ap->rrep)) {
-+      if (i < sizeof(*ap)) {
-               printf(" [|rrep]");
-               return;
-       }
--      i -= sizeof(ap->rrep);
-+      i -= sizeof(*ap);
-       printf(" rrep %u %s%sprefix %u hops %u\n"
-           "\tdst %s dseq %lu src %s %lu ms", length,
--          ap->rrep.rrep_type & RREP_REPAIR ? "[R]" : "",
--          ap->rrep.rrep_type & RREP_ACK ? "[A] " : " ",
--          ap->rrep.rrep_ps & RREP_PREFIX_MASK,
--          ap->rrep.rrep_hops,
--          ipaddr_string(&ap->rrep.rrep_da),
--          (unsigned long)EXTRACT_32BITS(&ap->rrep.rrep_ds),
--          ipaddr_string(&ap->rrep.rrep_oa),
--          (unsigned long)EXTRACT_32BITS(&ap->rrep.rrep_life));
--      if (i >= sizeof(struct aodv_ext))
--              aodv_extension((void *)(&ap->rrep + 1), i);
-+          ap->rrep_type & RREP_REPAIR ? "[R]" : "",
-+          ap->rrep_type & RREP_ACK ? "[A] " : " ",
-+          ap->rrep_ps & RREP_PREFIX_MASK,
-+          ap->rrep_hops,
-+          ipaddr_string(&ap->rrep_da),
-+          (unsigned long)EXTRACT_32BITS(&ap->rrep_ds),
-+          ipaddr_string(&ap->rrep_oa),
-+               (unsigned long)EXTRACT_32BITS(&ap->rrep_life));
-+
-+        if (i >= sizeof(struct aodv_ext))
-+              aodv_extension((void *)(ap + 1), i);
- }
-
- static void
--aodv_rerr(const union aodv *ap, const u_char *dat, u_int length)
-+aodv_rerr(const struct aodv_rerr *ap, const u_char *dat, u_int length)
- {
--      u_int i;
--      const struct rerr_unreach *dp = NULL;
--      int n, trunc;
-+      u_int i, dc;
-+      const struct rerr_unreach *dp;
-
-       if (snapend < dat) {
-               printf(" [|aodv]");
-               return;
-       }
-       i = min(length, (u_int)(snapend - dat));
--      if (i < offsetof(struct aodv_rerr, r)) {
-+      if (i < sizeof(*ap)) {
-               printf(" [|rerr]");
-               return;
-       }
--      i -= offsetof(struct aodv_rerr, r);
--      dp = &ap->rerr.r.dest[0];
--      n = ap->rerr.rerr_dc * sizeof(ap->rerr.r.dest[0]);
-+      i -= sizeof(*ap);
-       printf(" rerr %s [items %u] [%u]:",
--          ap->rerr.rerr_flags & RERR_NODELETE ? "[D]" : "",
--          ap->rerr.rerr_dc, length);
--      trunc = n - (i/sizeof(ap->rerr.r.dest[0]));
--      for (; i >= sizeof(ap->rerr.r.dest[0]);
--          ++dp, i -= sizeof(ap->rerr.r.dest[0])) {
-+          ap->rerr_flags & RERR_NODELETE ? "[D]" : "",
-+          ap->rerr_dc, length);
-+        dp = (struct rerr_unreach *)(void *)(ap + 1);
-+      for (dc = ap->rerr_dc; dc != 0 && i >= sizeof(*dp);
-+             ++dp, --dc, i -= sizeof(*dp)) {
-               printf(" {%s}(%ld)", ipaddr_string(&dp->u_da),
-                   (unsigned long)EXTRACT_32BITS(&dp->u_ds));
-       }
--      if (trunc)
-+        if ((i % sizeof(*dp)) != 0)
-               printf("[|rerr]");
- }
-
- static void
- #ifdef INET6
--aodv_v6_rreq(const union aodv *ap, const u_char *dat, u_int length)
-+aodv_v6_rreq(const struct aodv_rreq6 *ap, const u_char *dat, u_int length)
- #else
--aodv_v6_rreq(const union aodv *ap _U_, const u_char *dat _U_, u_int length)
-+aodv_v6_rreq(const struct aodv_rreq6 *ap _U_, const u_char *dat _U_, u_int 
length)
- #endif
- {
- #ifdef INET6
-@@ -189,26 +188,27 @@ aodv_v6_rreq(const union aodv *ap _U_, const u_char *dat 
_U_, u_int length)
-               return;
-       }
-       i = min(length, (u_int)(snapend - dat));
--      if (i < sizeof(ap->rreq6)) {
-+      if (i < sizeof(*ap)) {
-               printf(" [|rreq6]");
-               return;
-       }
--      i -= sizeof(ap->rreq6);
-+      i -= sizeof(*ap);
-       printf(" v6 rreq %u %s%s%s%s%shops %u id 0x%08lx\n"
-           "\tdst %s seq %lu src %s seq %lu", length,
--          ap->rreq6.rreq_type & RREQ_JOIN ? "[J]" : "",
--          ap->rreq6.rreq_type & RREQ_REPAIR ? "[R]" : "",
--          ap->rreq6.rreq_type & RREQ_GRAT ? "[G]" : "",
--          ap->rreq6.rreq_type & RREQ_DEST ? "[D]" : "",
--          ap->rreq6.rreq_type & RREQ_UNKNOWN ? "[U] " : " ",
--          ap->rreq6.rreq_hops,
--          (unsigned long)EXTRACT_32BITS(&ap->rreq6.rreq_id),
--          ip6addr_string(&ap->rreq6.rreq_da),
--          (unsigned long)EXTRACT_32BITS(&ap->rreq6.rreq_ds),
--          ip6addr_string(&ap->rreq6.rreq_oa),
--          (unsigned long)EXTRACT_32BITS(&ap->rreq6.rreq_os));
-+               ap->rreq_type & RREQ_JOIN ? "[J]" : "",
-+               ap->rreq_type & RREQ_REPAIR ? "[R]" : "",
-+               ap->rreq_type & RREQ_GRAT ? "[G]" : "",
-+               ap->rreq_type & RREQ_DEST ? "[D]" : "",
-+               ap->rreq_type & RREQ_UNKNOWN ? "[U] " : " ",
-+               ap->rreq_hops,
-+               (unsigned long)EXTRACT_32BITS(&ap->rreq_id),
-+               ip6addr_string(&ap->rreq_da),
-+               (unsigned long)EXTRACT_32BITS(&ap->rreq_ds),
-+               ip6addr_string(&ap->rreq_oa),
-+               (unsigned long)EXTRACT_32BITS(&ap->rreq_os));
-+
-       if (i >= sizeof(struct aodv_ext))
--              aodv_extension((void *)(&ap->rreq6 + 1), i);
-+              aodv_extension((void *)(ap + 1), i);
- #else
-       printf(" v6 rreq %u", length);
- #endif
-@@ -216,9 +216,9 @@ aodv_v6_rreq(const union aodv *ap _U_, const u_char *dat 
_U_, u_int length)
-
- static void
- #ifdef INET6
--aodv_v6_rrep(const union aodv *ap, const u_char *dat, u_int length)
-+aodv_v6_rrep(const struct aodv_rrep6 *ap, const u_char *dat, u_int length)
- #else
--aodv_v6_rrep(const union aodv *ap _U_, const u_char *dat _U_, u_int length)
-+aodv_v6_rrep(const struct aodv_rrep6 *ap _U_, const u_char *dat _U_, u_int 
length)
- #endif
- {
- #ifdef INET6
-@@ -229,23 +229,24 @@ aodv_v6_rrep(const union aodv *ap _U_, const u_char *dat 
_U_, u_int length)
-               return;
-       }
-       i = min(length, (u_int)(snapend - dat));
--      if (i < sizeof(ap->rrep6)) {
-+      if (i < sizeof(*ap)) {
-               printf(" [|rrep6]");
-               return;
-       }
--      i -= sizeof(ap->rrep6);
-+      i -= sizeof(*ap);
-       printf(" rrep %u %s%sprefix %u hops %u\n"
-          "\tdst %s dseq %lu src %s %lu ms", length,
--          ap->rrep6.rrep_type & RREP_REPAIR ? "[R]" : "",
--          ap->rrep6.rrep_type & RREP_ACK ? "[A] " : " ",
--          ap->rrep6.rrep_ps & RREP_PREFIX_MASK,
--          ap->rrep6.rrep_hops,
--          ip6addr_string(&ap->rrep6.rrep_da),
--          (unsigned long)EXTRACT_32BITS(&ap->rrep6.rrep_ds),
--          ip6addr_string(&ap->rrep6.rrep_oa),
--          (unsigned long)EXTRACT_32BITS(&ap->rrep6.rrep_life));
-+               ap->rrep_type & RREP_REPAIR ? "[R]" : "",
-+               ap->rrep_type & RREP_ACK ? "[A] " : " ",
-+               ap->rrep_ps & RREP_PREFIX_MASK,
-+               ap->rrep_hops,
-+               ip6addr_string(&ap->rrep_da),
-+               (unsigned long)EXTRACT_32BITS(&ap->rrep_ds),
-+               ip6addr_string(&ap->rrep_oa),
-+               (unsigned long)EXTRACT_32BITS(&ap->rrep_life));
-+
-       if (i >= sizeof(struct aodv_ext))
--              aodv_extension((void *)(&ap->rrep6 + 1), i);
-+              aodv_extension((void *)(ap + 1), i);
- #else
-       printf(" rrep %u", length);
- #endif
-@@ -253,28 +254,36 @@ aodv_v6_rrep(const union aodv *ap _U_, const u_char *dat 
_U_, u_int length)
-
- static void
- #ifdef INET6
--aodv_v6_rerr(const union aodv *ap, u_int length)
-+aodv_v6_rerr(const struct aodv_rerr *ap, const u_char *dat, u_int length)
- #else
--aodv_v6_rerr(const union aodv *ap _U_, u_int length)
-+aodv_v6_rerr(const struct aodv_rerr *ap _U_, const u_char *dat, u_int length)
- #endif
- {
- #ifdef INET6
--      const struct rerr_unreach6 *dp6 = NULL;
--      int i, j, n, trunc;
-+      u_int i, dc;
-+      const struct rerr_unreach6 *dp6;
-+
-+      if (snapend < dat) {
-+              printf(" [|aodv]");
-+              return;
-+      }
-+      i = min(length, (u_int)(snapend - dat));
-+        if (i < sizeof(*ap)) {
-+              printf(" [|rerr]");
-+              return;
-+      }
-+      i -= sizeof(*ap);
-
--      i = length - offsetof(struct aodv_rerr, r);
--      j = sizeof(ap->rerr.r.dest6[0]);
--      dp6 = &ap->rerr.r.dest6[0];
--      n = ap->rerr.rerr_dc * j;
-       printf(" rerr %s [items %u] [%u]:",
--          ap->rerr.rerr_flags & RERR_NODELETE ? "[D]" : "",
--          ap->rerr.rerr_dc, length);
--      trunc = n - (i/j);
--      for (; i -= j >= 0; ++dp6) {
-+          ap->rerr_flags & RERR_NODELETE ? "[D]" : "",
-+          ap->rerr_dc, length);
-+      dp6 = (struct rerr_unreach6 *)(void *)(ap + 1);
-+      for (dc = ap->rerr_dc; dc != 0 && i >= sizeof(*dp6);
-+          ++dp6, --dc, i -= sizeof(*dp6)) {
-               printf(" {%s}(%ld)", ip6addr_string(&dp6->u_da),
-                   (unsigned long)EXTRACT_32BITS(&dp6->u_ds));
-       }
--      if (trunc)
-+      if ((i % sizeof(*dp6)) != 0)
-               printf("[|rerr]");
- #else
-       printf(" rerr %u", length);
-@@ -283,9 +292,9 @@ aodv_v6_rerr(const union aodv *ap _U_, u_int length)
-
- static void
- #ifdef INET6
--aodv_v6_draft_01_rreq(const union aodv *ap, const u_char *dat, u_int length)
-+aodv_v6_draft_01_rreq(const struct aodv_rreq6_draft_01 *ap, const u_char 
*dat, u_int length)
- #else
--aodv_v6_draft_01_rreq(const union aodv *ap _U_, const u_char *dat _U_,
-+aodv_v6_draft_01_rreq(const struct aodv_rreq6_draft_01 *ap _U_, const u_char 
*dat _U_,
-     u_int length)
- #endif
- {
-@@ -297,26 +306,27 @@ aodv_v6_draft_01_rreq(const union aodv *ap _U_, const 
u_char *dat _U_,
-               return;
-       }
-       i = min(length, (u_int)(snapend - dat));
--      if (i < sizeof(ap->rreq6_draft_01)) {
-+      if (i < sizeof(*ap)) {
-               printf(" [|rreq6]");
-               return;
-       }
--      i -= sizeof(ap->rreq6_draft_01);
-+      i -= sizeof(*ap);
-       printf(" rreq %u %s%s%s%s%shops %u id 0x%08lx\n"
-           "\tdst %s seq %lu src %s seq %lu", length,
--          ap->rreq6_draft_01.rreq_type & RREQ_JOIN ? "[J]" : "",
--          ap->rreq6_draft_01.rreq_type & RREQ_REPAIR ? "[R]" : "",
--          ap->rreq6_draft_01.rreq_type & RREQ_GRAT ? "[G]" : "",
--          ap->rreq6_draft_01.rreq_type & RREQ_DEST ? "[D]" : "",
--          ap->rreq6_draft_01.rreq_type & RREQ_UNKNOWN ? "[U] " : " ",
--          ap->rreq6_draft_01.rreq_hops,
--          (unsigned long)EXTRACT_32BITS(&ap->rreq6_draft_01.rreq_id),
--          ip6addr_string(&ap->rreq6_draft_01.rreq_da),
--          (unsigned long)EXTRACT_32BITS(&ap->rreq6_draft_01.rreq_ds),
--          ip6addr_string(&ap->rreq6_draft_01.rreq_oa),
--          (unsigned long)EXTRACT_32BITS(&ap->rreq6_draft_01.rreq_os));
-+               ap->rreq_type & RREQ_JOIN ? "[J]" : "",
-+               ap->rreq_type & RREQ_REPAIR ? "[R]" : "",
-+               ap->rreq_type & RREQ_GRAT ? "[G]" : "",
-+               ap->rreq_type & RREQ_DEST ? "[D]" : "",
-+               ap->rreq_type & RREQ_UNKNOWN ? "[U] " : " ",
-+               ap->rreq_hops,
-+               (unsigned long)EXTRACT_32BITS(&ap->rreq_id),
-+               ip6addr_string(&ap->rreq_da),
-+               (unsigned long)EXTRACT_32BITS(&ap->rreq_ds),
-+               ip6addr_string(&ap->rreq_oa),
-+               (unsigned long)EXTRACT_32BITS(&ap->rreq_os));
-+
-       if (i >= sizeof(struct aodv_ext))
--              aodv_extension((void *)(&ap->rreq6_draft_01 + 1), i);
-+              aodv_extension((void *)(ap + 1), i);
- #else
-       printf(" rreq %u", length);
- #endif
-@@ -324,9 +334,9 @@ aodv_v6_draft_01_rreq(const union aodv *ap _U_, const 
u_char *dat _U_,
-
- static void
- #ifdef INET6
--aodv_v6_draft_01_rrep(const union aodv *ap, const u_char *dat, u_int length)
-+aodv_v6_draft_01_rrep(const struct aodv_rrep6_draft_01 *ap, const u_char 
*dat, u_int length)
- #else
--aodv_v6_draft_01_rrep(const union aodv *ap _U_, const u_char *dat _U_,
-+aodv_v6_draft_01_rrep(const struct aodv_rrep6_draft_01 *ap _U_, const u_char 
*dat _U_,
-     u_int length)
- #endif
- {
-@@ -338,23 +348,24 @@ aodv_v6_draft_01_rrep(const union aodv *ap _U_, const 
u_char *dat _U_,
-               return;
-       }
-       i = min(length, (u_int)(snapend - dat));
--      if (i < sizeof(ap->rrep6_draft_01)) {
-+      if (i < sizeof(*ap)) {
-               printf(" [|rrep6]");
-               return;
-       }
--      i -= sizeof(ap->rrep6_draft_01);
-+      i -= sizeof(*ap);
-       printf(" rrep %u %s%sprefix %u hops %u\n"
-          "\tdst %s dseq %lu src %s %lu ms", length,
--          ap->rrep6_draft_01.rrep_type & RREP_REPAIR ? "[R]" : "",
--          ap->rrep6_draft_01.rrep_type & RREP_ACK ? "[A] " : " ",
--          ap->rrep6_draft_01.rrep_ps & RREP_PREFIX_MASK,
--          ap->rrep6_draft_01.rrep_hops,
--          ip6addr_string(&ap->rrep6_draft_01.rrep_da),
--          (unsigned long)EXTRACT_32BITS(&ap->rrep6_draft_01.rrep_ds),
--          ip6addr_string(&ap->rrep6_draft_01.rrep_oa),
--          (unsigned long)EXTRACT_32BITS(&ap->rrep6_draft_01.rrep_life));
-+               ap->rrep_type & RREP_REPAIR ? "[R]" : "",
-+               ap->rrep_type & RREP_ACK ? "[A] " : " ",
-+               ap->rrep_ps & RREP_PREFIX_MASK,
-+               ap->rrep_hops,
-+               ip6addr_string(&ap->rrep_da),
-+               (unsigned long)EXTRACT_32BITS(&ap->rrep_ds),
-+               ip6addr_string(&ap->rrep_oa),
-+               (unsigned long)EXTRACT_32BITS(&ap->rrep_life));
-+
-       if (i >= sizeof(struct aodv_ext))
--              aodv_extension((void *)(&ap->rrep6_draft_01 + 1), i);
-+              aodv_extension((void *)(ap + 1), i);
- #else
-       printf(" rrep %u", length);
- #endif
-@@ -362,28 +373,36 @@ aodv_v6_draft_01_rrep(const union aodv *ap _U_, const 
u_char *dat _U_,
-
- static void
- #ifdef INET6
--aodv_v6_draft_01_rerr(const union aodv *ap, u_int length)
-+aodv_v6_draft_01_rerr(const struct aodv_rerr *ap, const u_char *dat, u_int 
length)
- #else
--aodv_v6_draft_01_rerr(const union aodv *ap _U_, u_int length)
-+aodv_v6_draft_01_rerr(const struct aodv_rerr *ap _U_, const u_char *dat, 
u_int length)
- #endif
- {
- #ifdef INET6
--      const struct rerr_unreach6_draft_01 *dp6 = NULL;
--      int i, j, n, trunc;
-+        u_int i, dc;
-+      const struct rerr_unreach6_draft_01 *dp6;
-+
-+        if (snapend < dat) {
-+              printf(" [|aodv]");
-+              return;
-+      }
-+      i = min(length, (u_int)(snapend - dat));
-+      if (i < sizeof(*ap)) {
-+              printf(" [|rerr]");
-+              return;
-+      }
-+      i -= sizeof(*ap);
-
--      i = length - offsetof(struct aodv_rerr, r);
--      j = sizeof(ap->rerr.r.dest6_draft_01[0]);
--      dp6 = &ap->rerr.r.dest6_draft_01[0];
--      n = ap->rerr.rerr_dc * j;
-       printf(" rerr %s [items %u] [%u]:",
--          ap->rerr.rerr_flags & RERR_NODELETE ? "[D]" : "",
--          ap->rerr.rerr_dc, length);
--      trunc = n - (i/j);
--      for (; i -= j >= 0; ++dp6) {
-+          ap->rerr_flags & RERR_NODELETE ? "[D]" : "",
-+          ap->rerr_dc, length);
-+        dp6 = (struct rerr_unreach6_draft_01 *)(void *)(ap + 1);
-+      for (dc = ap->rerr_dc; dc != 0 && i >= sizeof(*dp6);
-+          ++dp6, --dc, i -= sizeof(*dp6)) {
-               printf(" {%s}(%ld)", ip6addr_string(&dp6->u_da),
-                   (unsigned long)EXTRACT_32BITS(&dp6->u_ds));
-       }
--      if (trunc)
-+        if ((i % sizeof(*dp6)) != 0)
-               printf("[|rerr]");
- #else
-       printf(" rerr %u", length);
-@@ -393,40 +412,38 @@ aodv_v6_draft_01_rerr(const union aodv *ap _U_, u_int 
length)
- void
- aodv_print(const u_char *dat, u_int length, int is_ip6)
- {
--      const union aodv *ap;
-+        uint8_t msg_type;
-+
-+      /*
-+       * The message type is the first byte; make sure we have it
-+       * and then fetch it.
-+       */
-+      TCHECK(*dat);
-+      msg_type = *dat;
-
--      ap = (union aodv *)dat;
--      if (snapend < dat) {
--              printf(" [|aodv]");
--              return;
--      }
--      if (min(length, (u_int)(snapend - dat)) < sizeof(ap->rrep_ack)) {
--              printf(" [|aodv]");
--              return;
--      }
-       printf(" aodv");
-
--      switch (ap->rerr.rerr_type) {
-+      switch (msg_type) {
-
-       case AODV_RREQ:
-               if (is_ip6)
--                      aodv_v6_rreq(ap, dat, length);
-+                      aodv_v6_rreq((const struct aodv_rreq6 *) dat, dat, 
length);
-               else
--                      aodv_rreq(ap, dat, length);
-+                      aodv_rreq((const struct aodv_rreq *) dat, dat, length);
-               break;
-
-       case AODV_RREP:
-               if (is_ip6)
--                      aodv_v6_rrep(ap, dat, length);
-+                      aodv_v6_rrep((const struct aodv_rrep6 *) dat, dat, 
length);
-               else
--                      aodv_rrep(ap, dat, length);
-+                      aodv_rrep((const struct aodv_rrep *) dat, dat, length);
-               break;
-
-       case AODV_RERR:
-               if (is_ip6)
--                      aodv_v6_rerr(ap, length);
-+                      aodv_v6_rerr((const struct aodv_rerr *) dat, dat, 
length);
-               else
--                      aodv_rerr(ap, dat, length);
-+                      aodv_rerr((const struct aodv_rerr *) dat, dat, length);
-               break;
-
-       case AODV_RREP_ACK:
-@@ -434,15 +451,15 @@ aodv_print(const u_char *dat, u_int length, int is_ip6)
-               break;
-
-       case AODV_V6_DRAFT_01_RREQ:
--              aodv_v6_draft_01_rreq(ap, dat, length);
-+              aodv_v6_draft_01_rreq((const struct aodv_rreq6_draft_01 *) dat, 
dat, length);
-               break;
-
-       case AODV_V6_DRAFT_01_RREP:
--              aodv_v6_draft_01_rrep(ap, dat, length);
-+              aodv_v6_draft_01_rrep((const struct aodv_rrep6_draft_01 *) dat, 
dat, length);
-               break;
-
-       case AODV_V6_DRAFT_01_RERR:
--              aodv_v6_draft_01_rerr(ap, length);
-+              aodv_v6_draft_01_rerr((const struct aodv_rerr *) dat, dat, 
length);
-               break;
-
-       case AODV_V6_DRAFT_01_RREP_ACK:
-@@ -450,6 +467,10 @@ aodv_print(const u_char *dat, u_int length, int is_ip6)
-               break;
-
-       default:
--              printf(" %u %u", ap->rreq.rreq_type, length);
-+              printf(" %u %u", msg_type, length);
-       }
-+        return;
-+
-+trunc:
-+        printf(" [|aodv]");
- }
---
-1.8.3.1
-
diff --git a/source/network-extra/tcpdump/CVE-2014-9140.patch 
b/source/network-extra/tcpdump/CVE-2014-9140.patch
deleted file mode 100644
index e32e34b..0000000
--- a/source/network-extra/tcpdump/CVE-2014-9140.patch
+++ /dev/null
@@ -1,40 +0,0 @@
---- a/print-ppp.c
-+++ b/print-ppp.c
-@@ -1266,11 +1266,15 @@ trunc:
- static void
- ppp_hdlc(const u_char *p, int length)
- {
--      u_char *b, *s, *t, c;
-+      u_char *b, *t, c;
-+      const u_char *s;
-       int i, proto;
-       const void *se;
-
--      b = (u_int8_t *)malloc(length);
-+        if (length <= 0)
-+                return;
-+
-+      b = (u_char *)malloc(length);
-       if (b == NULL)
-               return;
-
-@@ -1279,14 +1283,13 @@ ppp_hdlc(const u_char *p, int length)
-        * Do this so that we dont overwrite the original packet
-        * contents.
-        */
--      for (s = (u_char *)p, t = b, i = length; i > 0; i--) {
-+      for (s = p, t = b, i = length; i > 0 && TTEST(*s); i--) {
-               c = *s++;
-               if (c == 0x7d) {
--                      if (i > 1) {
--                              i--;
--                              c = *s++ ^ 0x20;
--                      } else
--                              continue;
-+                      if (i <= 1 || !TTEST(*s))
-+                              break;
-+                      i--;
-+                      c = *s++ ^ 0x20;
-               }
-               *t++ = c;
-       }
diff --git a/source/network-extra/tcpdump/FrugalBuild 
b/source/network-extra/tcpdump/FrugalBuild
index e419171..f61c746 100644
--- a/source/network-extra/tcpdump/FrugalBuild
+++ b/source/network-extra/tcpdump/FrugalBuild
@@ -5,8 +5,8 @@
options+=('asneeded')

pkgname=tcpdump
-pkgver=4.5.1
-pkgrel=3
+pkgver=4.7.4
+pkgrel=1
pkgdesc="Tcpdump is for dumping traffic on a network"
url="http://www.tcpdump.org";
depends=('openssl' 'libpcap>=1.2.0')
@@ -15,15 +15,6 @@ archs=('i686' 'x86_64')
source=($url/release/$pkgname-$pkgver.tar.gz)
up2date="lynx -dump $url/release/|grep 'tcpdump-\(.*\).tar.gz'|Flasttar"
Fconfopts+=" --enable-ipv6"
-sha1sums=('46d5ec107c6a1b262ad8da799f74c5d01cce8815')
-
-# FSA fix ***
-source=(${source[@]} CVE-2014-8767.patch CVE-2014-8768.patch 
CVE-2014-8769.patch
-                     CVE-2014-9140.patch)
-sha1sums=(${sha1sums[@]} '30dd3775306db5c2c6aca958997e37ec002cfe32' \
-                         'cc27d8dc1967013ed33cd49e6a83da2cc0f9b6d1' \
-                         'c0ce0f81c300fd3f94f014d9eb9b52528d374e67' \
-                         'a3e69e24164c1f53704ccc2b70e417a7cc089628')
-# ***********
+sha1sums=('a18c9dbc4b5c4983af9cb52d8e473f5504546f4a')

# optimization OK
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to