summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoritojun <>2001-11-15 04:56:15 +0000
committeritojun <>2001-11-15 04:56:15 +0000
commitbde591bfd444438b37f64648fb8691fd705f8088 (patch)
tree8d25f7930ce21551cdeef7243d0d4b9203eafb04
parente67e7aab2d9624df4bd4c559984450972fd68d03 (diff)
downloadopenbsd-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.c44
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}