summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoritojun <>2003-03-04 00:29:17 +0000
committeritojun <>2003-03-04 00:29:17 +0000
commit81f5994daeaee763274ed3a99805c77e55b46a6d (patch)
treef9be9b5430f88e19b76736abb4020b24219b9dff
parent9464e28cab6e9f9e7df083a4bcef97ec8b721535 (diff)
downloadopenbsd-81f5994daeaee763274ed3a99805c77e55b46a6d.tar.gz
openbsd-81f5994daeaee763274ed3a99805c77e55b46a6d.tar.bz2
openbsd-81f5994daeaee763274ed3a99805c77e55b46a6d.zip
strlcpy, check retval from sprintf
-rw-r--r--src/lib/libc/net/getaddrinfo.c4
-rw-r--r--src/lib/libc/net/gethostnamadr.c17
-rw-r--r--src/lib/libc/net/res_debug.c8
3 files changed, 18 insertions, 11 deletions
diff --git a/src/lib/libc/net/getaddrinfo.c b/src/lib/libc/net/getaddrinfo.c
index 7406f10714..241c5b17ae 100644
--- a/src/lib/libc/net/getaddrinfo.c
+++ b/src/lib/libc/net/getaddrinfo.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: getaddrinfo.c,v 1.44 2003/01/28 04:58:00 marc Exp $ */ 1/* $OpenBSD: getaddrinfo.c,v 1.45 2003/03/04 00:29:17 itojun Exp $ */
2/* $KAME: getaddrinfo.c,v 1.31 2000/08/31 17:36:43 itojun Exp $ */ 2/* $KAME: getaddrinfo.c,v 1.31 2000/08/31 17:36:43 itojun Exp $ */
3 3
4/* 4/*
@@ -1137,7 +1137,7 @@ getanswer(answer, anslen, qname, qtype, pai)
1137 had_error++; 1137 had_error++;
1138 continue; 1138 continue;
1139 } 1139 }
1140 strcpy(bp, tbuf); 1140 strlcpy(bp, tbuf, ep - bp);
1141 canonname = bp; 1141 canonname = bp;
1142 bp += n; 1142 bp += n;
1143 continue; 1143 continue;
diff --git a/src/lib/libc/net/gethostnamadr.c b/src/lib/libc/net/gethostnamadr.c
index 5211f423c6..7cf419fdb1 100644
--- a/src/lib/libc/net/gethostnamadr.c
+++ b/src/lib/libc/net/gethostnamadr.c
@@ -52,7 +52,7 @@
52 */ 52 */
53 53
54#if defined(LIBC_SCCS) && !defined(lint) 54#if defined(LIBC_SCCS) && !defined(lint)
55static char rcsid[] = "$OpenBSD: gethostnamadr.c,v 1.54 2003/01/28 04:58:00 marc Exp $"; 55static char rcsid[] = "$OpenBSD: gethostnamadr.c,v 1.55 2003/03/04 00:29:17 itojun Exp $";
56#endif /* LIBC_SCCS and not lint */ 56#endif /* LIBC_SCCS and not lint */
57 57
58#include <sys/param.h> 58#include <sys/param.h>
@@ -664,7 +664,7 @@ gethostbyaddr(addr, len, af)
664 int n, size, i; 664 int n, size, i;
665 querybuf *buf; 665 querybuf *buf;
666 register struct hostent *hp; 666 register struct hostent *hp;
667 char qbuf[MAXDNAME+1], *qp; 667 char qbuf[MAXDNAME+1], *qp, *ep;
668 extern struct hostent *_gethtbyaddr(), *_yp_gethtbyaddr(); 668 extern struct hostent *_gethtbyaddr(), *_yp_gethtbyaddr();
669 char lookups[MAXDNSLUS]; 669 char lookups[MAXDNSLUS];
670 struct hostent *res; 670 struct hostent *res;
@@ -706,6 +706,7 @@ gethostbyaddr(addr, len, af)
706 h_errno = NETDB_INTERNAL; 706 h_errno = NETDB_INTERNAL;
707 return (NULL); 707 return (NULL);
708 } 708 }
709 ep = qbuf + sizeof(qbuf);
709 switch (af) { 710 switch (af) {
710 case AF_INET: 711 case AF_INET:
711 (void) snprintf(qbuf, sizeof qbuf, "%u.%u.%u.%u.in-addr.arpa", 712 (void) snprintf(qbuf, sizeof qbuf, "%u.%u.%u.%u.in-addr.arpa",
@@ -715,8 +716,14 @@ gethostbyaddr(addr, len, af)
715 case AF_INET6: 716 case AF_INET6:
716 qp = qbuf; 717 qp = qbuf;
717 for (n = IN6ADDRSZ - 1; n >= 0; n--) { 718 for (n = IN6ADDRSZ - 1; n >= 0; n--) {
718 qp += sprintf(qp, "%x.%x.", 719 i = snprintf(qp, ep - qp, "%x.%x.",
719 uaddr[n] & 0xf, (uaddr[n] >> 4) & 0xf); 720 uaddr[n] & 0xf, (uaddr[n] >> 4) & 0xf);
721 if (i <= 0) {
722 errno = EINVAL;
723 h_errno = NETDB_INTERNAL;
724 return (NULL);
725 }
726 qp += i;
720 } 727 }
721 break; 728 break;
722 } 729 }
@@ -737,14 +744,14 @@ gethostbyaddr(addr, len, af)
737#endif 744#endif
738 case 'b': 745 case 'b':
739 if (af == AF_INET6) 746 if (af == AF_INET6)
740 strcpy(qp, "ip6.arpa"); 747 strlcpy(qp, "ip6.arpa", ep - qp);
741 buf = malloc(sizeof(*buf)); 748 buf = malloc(sizeof(*buf));
742 if (!buf) 749 if (!buf)
743 break; 750 break;
744 n = res_query(qbuf, C_IN, T_PTR, buf->buf, 751 n = res_query(qbuf, C_IN, T_PTR, buf->buf,
745 sizeof(buf->buf)); 752 sizeof(buf->buf));
746 if (n < 0 && af == AF_INET6) { 753 if (n < 0 && af == AF_INET6) {
747 strcpy(qp, "ip6.int"); 754 strlcpy(qp, "ip6.int", ep - qp);
748 n = res_query(qbuf, C_IN, T_PTR, 755 n = res_query(qbuf, C_IN, T_PTR,
749 buf->buf, sizeof(buf->buf)); 756 buf->buf, sizeof(buf->buf));
750 } 757 }
diff --git a/src/lib/libc/net/res_debug.c b/src/lib/libc/net/res_debug.c
index f4e4c271ed..b39e9a3b14 100644
--- a/src/lib/libc/net/res_debug.c
+++ b/src/lib/libc/net/res_debug.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: res_debug.c,v 1.15 2003/01/28 04:58:00 marc Exp $ */ 1/* $OpenBSD: res_debug.c,v 1.16 2003/03/04 00:29:17 itojun Exp $ */
2 2
3/* 3/*
4 * ++Copyright++ 1985, 1990, 1993 4 * ++Copyright++ 1985, 1990, 1993
@@ -82,7 +82,7 @@
82static char sccsid[] = "@(#)res_debug.c 8.1 (Berkeley) 6/4/93"; 82static char sccsid[] = "@(#)res_debug.c 8.1 (Berkeley) 6/4/93";
83static char rcsid[] = "$From: res_debug.c,v 8.19 1996/11/26 10:11:23 vixie Exp $"; 83static char rcsid[] = "$From: res_debug.c,v 8.19 1996/11/26 10:11:23 vixie Exp $";
84#else 84#else
85static char rcsid[] = "$OpenBSD: res_debug.c,v 1.15 2003/01/28 04:58:00 marc Exp $"; 85static char rcsid[] = "$OpenBSD: res_debug.c,v 1.16 2003/03/04 00:29:17 itojun Exp $";
86#endif 86#endif
87#endif /* LIBC_SCCS and not lint */ 87#endif /* LIBC_SCCS and not lint */
88 88
@@ -448,10 +448,10 @@ __p_fqnname(cp, msg, msglen, name, namelen)
448 return (NULL); 448 return (NULL);
449 newlen = strlen(name); 449 newlen = strlen(name);
450 if (newlen == 0 || name[newlen - 1] != '.') { 450 if (newlen == 0 || name[newlen - 1] != '.') {
451 if (newlen+1 >= namelen) /* Lack space for final dot */ 451 if (newlen + 1 >= namelen) /* Lack space for final dot */
452 return (NULL); 452 return (NULL);
453 else 453 else
454 strcpy(name + newlen, "."); 454 strlcpy(name + newlen, ".", namelen - newlen);
455 } 455 }
456 return (cp + n); 456 return (cp + n);
457} 457}