diff options
Diffstat (limited to 'src/lib/libc')
| -rw-r--r-- | src/lib/libc/net/getnameinfo.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/src/lib/libc/net/getnameinfo.c b/src/lib/libc/net/getnameinfo.c index 1cabee6b97..0906686fa6 100644 --- a/src/lib/libc/net/getnameinfo.c +++ b/src/lib/libc/net/getnameinfo.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* $OpenBSD: getnameinfo.c,v 1.17 2000/06/12 04:28:22 itojun Exp $ */ | 1 | /* $OpenBSD: getnameinfo.c,v 1.18 2000/09/25 22:52:57 itojun Exp $ */ |
| 2 | /* $KAME: getnameinfo.c,v 1.43 2000/06/12 04:27:03 itojun Exp $ */ | 2 | /* $KAME: getnameinfo.c,v 1.45 2000/09/25 22:43:56 itojun Exp $ */ |
| 3 | 3 | ||
| 4 | /* | 4 | /* |
| 5 | * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. | 5 | * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. |
| @@ -33,11 +33,9 @@ | |||
| 33 | /* | 33 | /* |
| 34 | * Issues to be discussed: | 34 | * Issues to be discussed: |
| 35 | * - Thread safe-ness must be checked | 35 | * - Thread safe-ness must be checked |
| 36 | * - Return values. There seems to be no standard for return value (RFC2553) | ||
| 37 | * but INRIA implementation returns EAI_xxx defined for getaddrinfo(). | ||
| 38 | * - RFC2553 says that we should raise error on short buffer. X/Open says | 36 | * - RFC2553 says that we should raise error on short buffer. X/Open says |
| 39 | * we need to truncate the result. We obey RFC2553 (and X/Open should be | 37 | * we need to truncate the result. We obey RFC2553 (and X/Open should be |
| 40 | * modified). | 38 | * modified). ipngwg rough consensus seems to follow RFC2553. |
| 41 | * - What is "local" in NI_FQDN? | 39 | * - What is "local" in NI_FQDN? |
| 42 | * - NI_NAMEREQD and NI_NUMERICHOST conflict with each other. | 40 | * - NI_NAMEREQD and NI_NUMERICHOST conflict with each other. |
| 43 | * - (KAME extension) NI_WITHSCOPEID when called with global address, | 41 | * - (KAME extension) NI_WITHSCOPEID when called with global address, |
| @@ -91,6 +89,7 @@ static int ip6_parsenumeric __P((const struct sockaddr *, const char *, char *, | |||
| 91 | static int ip6_sa2str __P((const struct sockaddr_in6 *, char *, size_t, int)); | 89 | static int ip6_sa2str __P((const struct sockaddr_in6 *, char *, size_t, int)); |
| 92 | #endif | 90 | #endif |
| 93 | 91 | ||
| 92 | /* 2553bis: use EAI_xx for getnameinfo */ | ||
| 94 | #define ENI_NOSOCKET EAI_FAIL /*XXX*/ | 93 | #define ENI_NOSOCKET EAI_FAIL /*XXX*/ |
| 95 | #define ENI_NOSERVNAME EAI_NONAME | 94 | #define ENI_NOSERVNAME EAI_NONAME |
| 96 | #define ENI_NOHOSTNAME EAI_NONAME | 95 | #define ENI_NOHOSTNAME EAI_NONAME |
| @@ -157,12 +156,12 @@ getnameinfo(sa, salen, host, hostlen, serv, servlen, flags) | |||
| 157 | (flags & NI_DGRAM) ? "udp" : "tcp"); | 156 | (flags & NI_DGRAM) ? "udp" : "tcp"); |
| 158 | } | 157 | } |
| 159 | if (sp) { | 158 | if (sp) { |
| 160 | if (strlen(sp->s_name) > servlen) | 159 | if (strlen(sp->s_name) + 1 > servlen) |
| 161 | return ENI_MEMORY; | 160 | return ENI_MEMORY; |
| 162 | strcpy(serv, sp->s_name); | 161 | strcpy(serv, sp->s_name); |
| 163 | } else { | 162 | } else { |
| 164 | snprintf(numserv, sizeof(numserv), "%d", ntohs(port)); | 163 | snprintf(numserv, sizeof(numserv), "%d", ntohs(port)); |
| 165 | if (strlen(numserv) > servlen) | 164 | if (strlen(numserv) + 1 > servlen) |
| 166 | return ENI_MEMORY; | 165 | return ENI_MEMORY; |
| 167 | strcpy(serv, numserv); | 166 | strcpy(serv, numserv); |
| 168 | } | 167 | } |
| @@ -257,7 +256,7 @@ getnameinfo(sa, salen, host, hostlen, serv, servlen, flags) | |||
| 257 | *p = '\0'; | 256 | *p = '\0'; |
| 258 | } | 257 | } |
| 259 | #endif | 258 | #endif |
| 260 | if (strlen(hp->h_name) > hostlen) { | 259 | if (strlen(hp->h_name) + 1 > hostlen) { |
| 261 | return ENI_MEMORY; | 260 | return ENI_MEMORY; |
| 262 | } | 261 | } |
| 263 | strcpy(host, hp->h_name); | 262 | strcpy(host, hp->h_name); |
| @@ -319,7 +318,7 @@ ip6_parsenumeric(sa, addr, host, hostlen, flags) | |||
| 319 | /* ip6_sa2str never fails */ | 318 | /* ip6_sa2str never fails */ |
| 320 | scopelen = ip6_sa2str((const struct sockaddr_in6 *)sa, | 319 | scopelen = ip6_sa2str((const struct sockaddr_in6 *)sa, |
| 321 | scopebuf, sizeof(scopebuf), | 320 | scopebuf, sizeof(scopebuf), |
| 322 | 0); | 321 | flags); |
| 323 | if (scopelen + 1 + numaddrlen + 1 > hostlen) | 322 | if (scopelen + 1 + numaddrlen + 1 > hostlen) |
| 324 | return ENI_MEMORY; | 323 | return ENI_MEMORY; |
| 325 | /* | 324 | /* |
