Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sbin/ping6 sync with latest kame.
details: https://anonhg.NetBSD.org/src/rev/287b781db018
branches: trunk
changeset: 499929:287b781db018
user: itojun <itojun%NetBSD.org@localhost>
date: Sat Dec 02 02:54:21 2000 +0000
description:
sync with latest kame.
- validate strdup() error on argument parsing.
- use strlcat on complex string manipulation.
diffstat:
sbin/ping6/ping6.c | 50 ++++++++++++++++++++++++--------------------------
1 files changed, 24 insertions(+), 26 deletions(-)
diffs (133 lines):
diff -r 645ca66480e2 -r 287b781db018 sbin/ping6/ping6.c
--- a/sbin/ping6/ping6.c Sat Dec 02 02:15:34 2000 +0000
+++ b/sbin/ping6/ping6.c Sat Dec 02 02:54:21 2000 +0000
@@ -1,5 +1,5 @@
-/* $NetBSD: ping6.c,v 1.24 2000/11/11 00:46:36 itojun Exp $ */
-/* $KAME: ping6.c,v 1.99 2000/11/08 09:55:45 itojun Exp $ */
+/* $NetBSD: ping6.c,v 1.25 2000/12/02 02:54:21 itojun Exp $ */
+/* $KAME: ping6.c,v 1.105 2000/12/02 02:48:41 itojun Exp $ */
/*
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -81,7 +81,7 @@
#else
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: ping6.c,v 1.24 2000/11/11 00:46:36 itojun Exp $");
+__RCSID("$NetBSD: ping6.c,v 1.25 2000/12/02 02:54:21 itojun Exp $");
#endif
#endif
@@ -491,11 +491,13 @@
#ifdef IPSEC_POLICY_IPSEC
case 'P':
options |= F_POLICY;
- if (!strncmp("in", optarg, 2))
- policy_in = strdup(optarg);
- else if (!strncmp("out", optarg, 3))
- policy_out = strdup(optarg);
- else
+ if (!strncmp("in", optarg, 2)) {
+ if ((policy_in = strdup(optarg)) == NULL)
+ errx(1, "strdup");
+ } else if (!strncmp("out", optarg, 3)) {
+ if ((policy_out = strdup(optarg)) == NULL)
+ errx(1, "strdup");
+ } else
errx(1, "invalid security policy");
break;
#else
@@ -1160,25 +1162,21 @@
u_char *buf;
size_t bufsiz;
{
- int i, l;
+ int i;
const u_char *cp;
- char *q;
- const char *eq;
char cresult[MAXDNAME + 1];
const u_char *comp;
cp = *sp;
- q = buf;
- eq = buf + bufsiz;
+ *buf = '\0';
if (cp >= ep)
return NULL;
while (cp < ep) {
i = *cp;
if (i == 0 || cp != *sp) {
- if (q >= eq - 1)
+ if (strlcat(buf, ".", bufsiz) >= bufsiz)
return NULL; /*result overrun*/
- *q++ = '.';
}
if (i == 0)
break;
@@ -1193,31 +1191,25 @@
if (dnsdecode(&comp, cp, base, cresult,
sizeof(cresult)) == NULL)
return NULL;
- if (eq - q < strlen(cresult) + 1)
+ if (strlcat(buf, cresult, bufsiz) >= bufsiz)
return NULL; /*result overrun*/
- strcpy(q, cresult); /*XXX should be strlcpy*/
- q += strlen(q);
break;
} else if ((i & 0x3f) == i) {
if (i > ep - cp)
return NULL; /*source overrun*/
while (i-- > 0 && cp < ep) {
- if (eq - q < (isprint(*cp) ? 2 : 5))
+ (void)snprintf(cresult, sizeof(cresult),
+ isprint(*cp) ? "%c" : "\\%03o", *cp & 0xff);
+ if (strlcat(buf, cresult, bufsiz) >= bufsiz)
return NULL; /*result overrun*/
- l = snprintf(q, eq - q,
- isprint(*cp) ? "%c" : "\\%03o", *cp & 0xff);
cp++;
- q += l;
}
} else
return NULL; /*invalid label*/
}
- if (q >= eq)
- return NULL; /*result overrun*/
if (i != 0)
return NULL; /*not terminated*/
cp++;
- *q = '\0';
*sp = cp;
return buf;
}
@@ -1809,6 +1801,9 @@
for (cm = (struct cmsghdr *)CMSG_FIRSTHDR(mhdr); cm;
cm = (struct cmsghdr *)CMSG_NXTHDR(mhdr, cm)) {
+ if (cm->cmsg_len == 0)
+ return(-1);
+
if (cm->cmsg_level == IPPROTO_IPV6 &&
cm->cmsg_type == IPV6_HOPLIMIT &&
cm->cmsg_len == CMSG_LEN(sizeof(int)))
@@ -1826,6 +1821,9 @@
for (cm = (struct cmsghdr *)CMSG_FIRSTHDR(mhdr); cm;
cm = (struct cmsghdr *)CMSG_NXTHDR(mhdr, cm)) {
+ if (cm->cmsg_len == 0)
+ return(NULL);
+
if (cm->cmsg_level == IPPROTO_IPV6 &&
cm->cmsg_type == IPV6_PKTINFO &&
cm->cmsg_len == CMSG_LEN(sizeof(struct in6_pktinfo)))
@@ -2057,7 +2055,7 @@
if (!inet_ntop(AF_INET6, &red->nd_rd_target, ntop_buf,
sizeof(ntop_buf)))
strncpy(ntop_buf, "?", sizeof(ntop_buf));
- (void)printf("New Target: %s", ntop_buf);
+ (void)printf(" New Target: %s", ntop_buf);
break;
case ICMP6_NI_QUERY:
(void)printf("Node Information Query");
Home |
Main Index |
Thread Index |
Old Index