summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2017-08-13 17:51:52 +0200
committerDaniel Stenberg <daniel@haxx.se>2017-08-13 17:52:15 +0200
commitb748d7af7ea4bb9baf5517cc53756f8d4d7be1ca (patch)
treeaaed19bec8e85542f9056415b51fc599fc70e551
parent10b3df10596adb68f9014331a6bf5f3c660f383d (diff)
downloadgnurl-b748d7af7ea4bb9baf5517cc53756f8d4d7be1ca.tar.gz
gnurl-b748d7af7ea4bb9baf5517cc53756f8d4d7be1ca.tar.bz2
gnurl-b748d7af7ea4bb9baf5517cc53756f8d4d7be1ca.zip
ipv6_scope: support unique local addresses
Fixes #1764 Closes #1773 Reported-by: James Slaughter
-rw-r--r--lib/if2ip.c4
-rw-r--r--lib/if2ip.h5
2 files changed, 6 insertions, 3 deletions
diff --git a/lib/if2ip.c b/lib/if2ip.c
index 3e74cc687..a91b6d2ab 100644
--- a/lib/if2ip.c
+++ b/lib/if2ip.c
@@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -71,6 +71,8 @@ unsigned int Curl_ipv6_scope(const struct sockaddr *sa)
const unsigned char *b = sa6->sin6_addr.s6_addr;
unsigned short w = (unsigned short) ((b[0] << 8) | b[1]);
+ if((b[0] & 0xFE) == 0xFC) /* Handle ULAs */
+ return IPV6_SCOPE_UNIQUELOCAL;
switch(w & 0xFFC0) {
case 0xFE80:
return IPV6_SCOPE_LINKLOCAL;
diff --git a/lib/if2ip.h b/lib/if2ip.h
index f3a7ff0b2..a90e66216 100644
--- a/lib/if2ip.h
+++ b/lib/if2ip.h
@@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@@ -27,7 +27,8 @@
#define IPV6_SCOPE_GLOBAL 0 /* Global scope. */
#define IPV6_SCOPE_LINKLOCAL 1 /* Link-local scope. */
#define IPV6_SCOPE_SITELOCAL 2 /* Site-local scope (deprecated). */
-#define IPV6_SCOPE_NODELOCAL 3 /* Loopback. */
+#define IPV6_SCOPE_UNIQUELOCAL 3 /* Unique local */
+#define IPV6_SCOPE_NODELOCAL 4 /* Loopback. */
unsigned int Curl_ipv6_scope(const struct sockaddr *sa);