--resolve doesn't work with IPv6 addresses in bracket notation #2087

Closed
demonbane opened this Issue Nov 16, 2017 · 4 comments

Comments

Projects
None yet
2 participants
@demonbane

I did this (host/ip are intentionally obfuscated)

curl -v --resolve 'myhost.domain.com:443:[dead:beef:1234:5678:8765:4321:feed:daed]' https://myhost.domain.com

I expected the following

For myhost.domain.com to resolve to [dead:beef:1234:5678:8765:4321:feed:daed], but what I got was:

curl -v --resolve 'myhost.domain.com:443:dead:beef:1234:5678:8765:4321:feeb:daed' https://myhost.domain.com
* Address in 'myhost.domain.com:443:[dead:beef:1234:5678:8765:4321:feed:daed]' found illegal!

If I specify the IPv6 address incorrectly, that is without the brackets, then it works as expected:

curl -v --resolve 'myhost.domain.com:443:dead:beef:1234:5678:8765:4321:feeb:daed' https://myhost.domain.com
* Added myhost.domain.com:443:dead:beef:1234:5678:8765:4321:feeb:daed to DNS cache
* Rebuilt URL to: https://myhost.domain.com/
* Hostname myhost.domain.com was found in DNS cache
*   Trying dead:beef:1234:5678:8765:4321:feeb:daed...

curl/libcurl version

curl 7.55.1 (x86_64-pc-linux-gnu) libcurl/7.55.1 OpenSSL/1.0.2g zlib/1.2.11 libidn2/2.0.2 libpsl/0.18.0 (+libidn2/2.0.2) librtmp/2.3
Release-Date: 2017-08-14
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP UnixSockets HTTPS-proxy PSL

operating system

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 17.10
Release:        17.10
Codename:       artful
@bagder

This comment has been minimized.

Show comment
Hide comment
@bagder

bagder Nov 16, 2017

Member

An IPv6 address is not generally written with brackets outside of URLs, see RFC 5952 "A Recommendation for IPv6 Address Text Representation". Can you explain why you think you should do it in --resolve ?

I also don't see it mentioned in the documentation.

Member

bagder commented Nov 16, 2017

An IPv6 address is not generally written with brackets outside of URLs, see RFC 5952 "A Recommendation for IPv6 Address Text Representation". Can you explain why you think you should do it in --resolve ?

I also don't see it mentioned in the documentation.

@demonbane

This comment has been minimized.

Show comment
Hide comment
@demonbane

demonbane Nov 16, 2017

There are three reasons I thought it should be used with brackets in --resolve:

  1. The only example of an IPv6 URL used in the man page lists it as http://[fe80::3%25eth0]/, so it seemed logical that the brackets would be expected and handled properly
  2. The documentation for --resolve shows <host:port:address>. Since an IPv6 address contains the colon (:) character, it seemed logical that including it without some sort of separator character would be incorrect.
  3. When I couldn't get --resolve to work, I tried using --connect-to instead, again with the bracket notation, and it worked just fine:
curl -v --connect-to 'myhost.domain.com:443:[dead:beef:1234:5678:8765:4321:feeb:daed]:443' https://myhost.domain.com
* Rebuilt URL to: https://myhost.domain.com/
* Connecting to hostname: dead:beef:1234:5678:8765:4321:feeb:daed
* Connecting to port: 443
*   Trying dead:beef:1234:5678:8765:4321:feeb:daed...

There are three reasons I thought it should be used with brackets in --resolve:

  1. The only example of an IPv6 URL used in the man page lists it as http://[fe80::3%25eth0]/, so it seemed logical that the brackets would be expected and handled properly
  2. The documentation for --resolve shows <host:port:address>. Since an IPv6 address contains the colon (:) character, it seemed logical that including it without some sort of separator character would be incorrect.
  3. When I couldn't get --resolve to work, I tried using --connect-to instead, again with the bracket notation, and it worked just fine:
curl -v --connect-to 'myhost.domain.com:443:[dead:beef:1234:5678:8765:4321:feeb:daed]:443' https://myhost.domain.com
* Rebuilt URL to: https://myhost.domain.com/
* Connecting to hostname: dead:beef:1234:5678:8765:4321:feeb:daed
* Connecting to port: 443
*   Trying dead:beef:1234:5678:8765:4321:feeb:daed...

bagder added a commit that referenced this issue Nov 17, 2017

resolve: allow IP address within [] brackets
... so that IPv6 addresses can be passed like they can for connect-to
and how they're used in URLs.

Added test 1324 to verify
Reported-by: Alex Malinovich

Fixes #2087
@bagder

This comment has been minimized.

Show comment
Hide comment
@bagder

bagder Nov 17, 2017

Member

You convinced me. Thanks! PR for adding support for brackets is in #2091 !

Member

bagder commented Nov 17, 2017

You convinced me. Thanks! PR for adding support for brackets is in #2091 !

@bagder

This comment has been minimized.

Show comment
Hide comment
@bagder

bagder Nov 17, 2017

Member

Thanks!

Member

bagder commented Nov 17, 2017

Thanks!

@bagder bagder closed this in 715f1f5 Nov 17, 2017

@lock lock bot locked as resolved and limited conversation to collaborators May 6, 2018

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.