]> The Tcpdump Group git mirrors - tcpdump/commitdiff
avoid use of sa_len for Linux/Solaris platform.
authoritojun <itojun>
Sat, 30 Oct 1999 05:37:35 +0000 (05:37 +0000)
committeritojun <itojun>
Sat, 30 Oct 1999 05:37:35 +0000 (05:37 +0000)
XXX not really tested

print-isakmp.c

index 58c7344cf07adbb79d129f387972904750b4f9f4..f82ae0ab3f527a6563e7b49061378bf47680a954 100644 (file)
@@ -30,7 +30,7 @@
 
 #ifndef lint
 static const char rcsid[] =
-    "@(#) $Header: /tcpdump/master/tcpdump/print-isakmp.c,v 1.4 1999-10-30 05:30:20 itojun Exp $ (LBL)";
+    "@(#) $Header: /tcpdump/master/tcpdump/print-isakmp.c,v 1.5 1999-10-30 05:37:35 itojun Exp $ (LBL)";
 #endif
 
 #include <string.h>
@@ -252,6 +252,7 @@ cookie_sidecheck(int i, const u_char *bp2, int initiator)
        struct ip6_hdr *ip6;
        struct sockaddr_in6 *sin6;
 #endif
+       int salen;
 
        memset(&ss, 0, sizeof(ss));
        ip = (struct ip *)bp2;
@@ -279,16 +280,36 @@ cookie_sidecheck(int i, const u_char *bp2, int initiator)
        if (initiator) {
                if (sa->sa_family != ((struct sockaddr *)&cookiecache[i].iaddr)->sa_family)
                        return 0;
-               if (sa->sa_len != ((struct sockaddr *)&cookiecache[i].iaddr)->sa_len)
-                       return 0;
-               if (memcmp(&ss, &cookiecache[i].iaddr, sa->sa_len) == 0)
+#ifdef HAVE_SOCKADDR_SA_LEN
+               salen = sa->sa_len;
+#else
+#ifdef INET6
+               if (sa->sa_family == AF_INET6)
+                       salen = sizeof(struct sockaddr_in6);
+               else
+                       salen = sizeof(struct sockaddr);
+#else
+               salen = sizeof(struct sockaddr);
+#endif
+#endif
+               if (memcmp(&ss, &cookiecache[i].iaddr, salen) == 0)
                        return 1;
        } else {
                if (sa->sa_family != ((struct sockaddr *)&cookiecache[i].raddr)->sa_family)
                        return 0;
-               if (sa->sa_len != ((struct sockaddr *)&cookiecache[i].raddr)->sa_len)
-                       return 0;
-               if (memcmp(&ss, &cookiecache[i].raddr, sa->sa_len) == 0)
+#ifdef HAVE_SOCKADDR_SA_LEN
+               salen = sa->sa_len;
+#else
+#ifdef INET6
+               if (sa->sa_family == AF_INET6)
+                       salen = sizeof(struct sockaddr_in6);
+               else
+                       salen = sizeof(struct sockaddr);
+#else
+               salen = sizeof(struct sockaddr);
+#endif
+#endif
+               if (memcmp(&ss, &cookiecache[i].raddr, salen) == 0)
                        return 1;
        }
        return 0;