Bug #18165
closedresolv: IPv6 link local addresses do not accept dash as a valid zone_id character
Description
The support for IPv6 link local addresses was added to resolv here.
However, it does not take into account a zone_id
with a dash (-
) in it, just digits and letters (uppercase and lowercase). One could use the name of the network interface as zone_id
and this one might contain a dash. For instance, in my system running Ubuntu I have tap-5f507d638e8
and bridges like br-dd8d2dfaa7eb
, those could be used as zone_id
.
According to the RFC it is not mandatory to accept dash as a valid zone_id
character but I believe this is a valid use case and resolv should support it. I found this out trying to build version 3.0.2
in Debian, and since my system contains some network interfaces with dash, the TestResolvAddr::test_valid_socket_ip_address_list
was failing:
Expected /(?:(?-mix:\A((?x-mi:0
|1(?:[0-9][0-9]?)?
|2(?:[0-4][0-9]?|5[0-5]?|[6-9])?
|[3-9][0-9]?))\.((?x-mi:0
|1(?:[0-9][0-9]?)?
|2(?:[0-4][0-9]?|5[0-5]?|[6-9])?
|[3-9][0-9]?))\.((?x-mi:0
|1(?:[0-9][0-9]?)?
|2(?:[0-4][0-9]?|5[0-5]?|[6-9])?
|[3-9][0-9]?))\.((?x-mi:0
|1(?:[0-9][0-9]?)?
|2(?:[0-4][0-9]?|5[0-5]?|[6-9])?
|[3-9][0-9]?))\z))|(?:(?x-mi:
(?:(?x-mi:\A
(?:[0-9A-Fa-f]{1,4}:){7}
[0-9A-Fa-f]{1,4}
\z)) |
(?:(?x-mi:\A
((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?) ::
((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)
\z)) |
(?:(?x-mi:\A
((?:[0-9A-Fa-f]{1,4}:){6,6})
(\d+)\.(\d+)\.(\d+)\.(\d+)
\z)) |
(?:(?x-mi:\A
((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?) ::
((?:[0-9A-Fa-f]{1,4}:)*)
(\d+)\.(\d+)\.(\d+)\.(\d+)
\z)) |
(?:(?x-mi:\A
[Ff][Ee]80
(?::[0-9A-Fa-f]{1,4}){7}
%[0-9A-Za-z]+
\z)) |
(?:(?x-mi:\A
[Ff][Ee]80:
(?:
((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?) ::
((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)
|
:((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)
)?
:[0-9A-Fa-f]{1,4}%[0-9A-Za-z.]+
\z))
))/ to match "fe80::4cd3:c6ff:fed2:9529%tap-4845bb4a54b".
Applying the patch below fixed the issue for me:
diff --git a/lib/resolv.rb b/lib/resolv.rb
index b69c704..5de6a1f 100644
--- a/lib/resolv.rb
+++ b/lib/resolv.rb
@@ -2464,7 +2464,7 @@ class Resolv
Regex_8HexLinkLocal = /\A
[Ff][Ee]80
(?::[0-9A-Fa-f]{1,4}){7}
- %[0-9A-Za-z]+
+ %[0-9A-Za-z\-]+
\z/x
##
@@ -2478,7 +2478,7 @@ class Resolv
|
:((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)
)?
- :[0-9A-Fa-f]{1,4}%[0-9A-Za-z.]+
+ :[0-9A-Fa-f]{1,4}%[0-9A-Za-z.\-]+
\z/x
##
Files
Updated by kanashiro (Lucas Kanashiro) over 2 years ago
- File 0001-Make-resolv-accept-dash-in-zone_id-of-IPv6-link-loca.patch 0001-Make-resolv-accept-dash-in-zone_id-of-IPv6-link-loca.patch added
The mentioned patch is attached.
Updated by mame (Yusuke Endoh) over 2 years ago
- Status changed from Open to Assigned
- Assignee set to akr (Akira Tanaka)
Updated by jeremyevans0 (Jeremy Evans) over 2 years ago
This issue should be fixed by https://github.com/ruby/resolv/pull/2, which is still waiting for review.
Updated by kanashiro (Lucas Kanashiro) over 2 years ago
jeremyevans0 (Jeremy Evans) wrote in #note-3:
This issue should be fixed by https://github.com/ruby/resolv/pull/2, which is still waiting for review.
Thanks for the link Jeremy. I tried to find a similar bug here but I did not look for any PR on Github, sorry for that, I thought this was the right venue to submit the patch.
I am happy if we can get this fixed soon, no matter which patch the maintainer wants to apply.
Updated by jeremyevans0 (Jeremy Evans) over 2 years ago
- Status changed from Assigned to Closed