diff options
author | itojun <> | 2001-11-15 04:56:15 +0000 |
---|---|---|
committer | itojun <> | 2001-11-15 04:56:15 +0000 |
commit | bde591bfd444438b37f64648fb8691fd705f8088 (patch) | |
tree | 8d25f7930ce21551cdeef7243d0d4b9203eafb04 | |
parent | e67e7aab2d9624df4bd4c559984450972fd68d03 (diff) | |
download | openbsd-bde591bfd444438b37f64648fb8691fd705f8088.tar.gz openbsd-bde591bfd444438b37f64648fb8691fd705f8088.tar.bz2 openbsd-bde591bfd444438b37f64648fb8691fd705f8088.zip |
make NI_WITHSCOPEID a default (always on), to synchronize with recent 2553bis.
sync with kame.
-rw-r--r-- | src/lib/libc/net/getnameinfo.c | 44 |
1 files changed, 20 insertions, 24 deletions
diff --git a/src/lib/libc/net/getnameinfo.c b/src/lib/libc/net/getnameinfo.c index 9f2da6720c..0ae09ca30f 100644 --- a/src/lib/libc/net/getnameinfo.c +++ b/src/lib/libc/net/getnameinfo.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: getnameinfo.c,v 1.20 2001/11/14 02:31:57 itojun Exp $ */ | 1 | /* $OpenBSD: getnameinfo.c,v 1.21 2001/11/15 04:56:15 itojun Exp $ */ |
2 | /* $KAME: getnameinfo.c,v 1.45 2000/09/25 22:43:56 itojun Exp $ */ | 2 | /* $KAME: getnameinfo.c,v 1.45 2000/09/25 22:43:56 itojun Exp $ */ |
3 | 3 | ||
4 | /* | 4 | /* |
@@ -38,8 +38,10 @@ | |||
38 | * modified). ipngwg rough consensus seems to follow RFC2553. | 38 | * modified). ipngwg rough consensus seems to follow RFC2553. |
39 | * - What is "local" in NI_FQDN? | 39 | * - What is "local" in NI_FQDN? |
40 | * - NI_NAMEREQD and NI_NUMERICHOST conflict with each other. | 40 | * - NI_NAMEREQD and NI_NUMERICHOST conflict with each other. |
41 | * - (KAME extension) NI_WITHSCOPEID when called with global address, | 41 | * - (KAME extension) always attach textual scopeid (fe80::1%lo0), if |
42 | * and sin6_scope_id filled | 42 | * sin6_scope_id is filled - standardization status? |
43 | * XXX breaks backward compat for code that expects no scopeid. | ||
44 | * beware on merge. | ||
43 | */ | 45 | */ |
44 | 46 | ||
45 | #ifndef INET6 | 47 | #ifndef INET6 |
@@ -293,30 +295,24 @@ ip6_parsenumeric(sa, addr, host, hostlen, flags) | |||
293 | return EAI_MEMORY; | 295 | return EAI_MEMORY; |
294 | strcpy(host, numaddr); | 296 | strcpy(host, numaddr); |
295 | 297 | ||
296 | #ifdef NI_WITHSCOPEID | ||
297 | if (((const struct sockaddr_in6 *)sa)->sin6_scope_id) { | 298 | if (((const struct sockaddr_in6 *)sa)->sin6_scope_id) { |
298 | if (flags & NI_WITHSCOPEID) | 299 | char zonebuf[MAXHOSTNAMELEN]; |
299 | { | 300 | int zonelen; |
300 | char scopebuf[MAXHOSTNAMELEN]; | ||
301 | int scopelen; | ||
302 | 301 | ||
303 | scopelen = ip6_sa2str( | 302 | zonelen = ip6_sa2str( |
304 | (const struct sockaddr_in6 *)(const void *)sa, | 303 | (const struct sockaddr_in6 *)(const void *)sa, |
305 | scopebuf, sizeof(scopebuf), 0); | 304 | zonebuf, sizeof(zonebuf), flags); |
306 | if (scopelen < 0) | 305 | if (zonelen < 0) |
307 | return EAI_MEMORY; | 306 | return EAI_MEMORY; |
308 | if (scopelen + 1 + numaddrlen + 1 > hostlen) | 307 | if (zonelen + 1 + numaddrlen + 1 > hostlen) |
309 | return EAI_MEMORY; | 308 | return EAI_MEMORY; |
310 | /* | 309 | |
311 | * construct <numeric-addr><delim><scopeid> | 310 | /* construct <numeric-addr><delim><zoneid> */ |
312 | */ | 311 | memcpy(host + numaddrlen + 1, zonebuf, |
313 | memcpy(host + numaddrlen + 1, scopebuf, | 312 | (size_t)zonelen); |
314 | (size_t)scopelen); | 313 | host[numaddrlen] = SCOPE_DELIMITER; |
315 | host[numaddrlen] = SCOPE_DELIMITER; | 314 | host[numaddrlen + 1 + zonelen] = '\0'; |
316 | host[numaddrlen + 1 + scopelen] = '\0'; | ||
317 | } | ||
318 | } | 315 | } |
319 | #endif /* NI_WITHSCOPEID */ | ||
320 | 316 | ||
321 | return 0; | 317 | return 0; |
322 | } | 318 | } |