diff options
author | itojun <> | 2003-03-04 00:29:17 +0000 |
---|---|---|
committer | itojun <> | 2003-03-04 00:29:17 +0000 |
commit | 81f5994daeaee763274ed3a99805c77e55b46a6d (patch) | |
tree | f9be9b5430f88e19b76736abb4020b24219b9dff | |
parent | 9464e28cab6e9f9e7df083a4bcef97ec8b721535 (diff) | |
download | openbsd-81f5994daeaee763274ed3a99805c77e55b46a6d.tar.gz openbsd-81f5994daeaee763274ed3a99805c77e55b46a6d.tar.bz2 openbsd-81f5994daeaee763274ed3a99805c77e55b46a6d.zip |
strlcpy, check retval from sprintf
-rw-r--r-- | src/lib/libc/net/getaddrinfo.c | 4 | ||||
-rw-r--r-- | src/lib/libc/net/gethostnamadr.c | 17 | ||||
-rw-r--r-- | src/lib/libc/net/res_debug.c | 8 |
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) |
55 | static char rcsid[] = "$OpenBSD: gethostnamadr.c,v 1.54 2003/01/28 04:58:00 marc Exp $"; | 55 | static 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 @@ | |||
82 | static char sccsid[] = "@(#)res_debug.c 8.1 (Berkeley) 6/4/93"; | 82 | static char sccsid[] = "@(#)res_debug.c 8.1 (Berkeley) 6/4/93"; |
83 | static char rcsid[] = "$From: res_debug.c,v 8.19 1996/11/26 10:11:23 vixie Exp $"; | 83 | static char rcsid[] = "$From: res_debug.c,v 8.19 1996/11/26 10:11:23 vixie Exp $"; |
84 | #else | 84 | #else |
85 | static char rcsid[] = "$OpenBSD: res_debug.c,v 1.15 2003/01/28 04:58:00 marc Exp $"; | 85 | static 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 | } |