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 | } |
