IPv[46] parsing

Federico Schwindt fgsch at lodoss.net
Wed Oct 28 14:38:56 CET 2015


Hi,

Current functionality
----------------------------

1. If the string starts with "[" we take everything up to "]" as the host,
excluding the "[]".  If there is a ":" following the "]" we
take

everything after it as the port.

2. If the string has a space, take everything up to the space (but excluding
it) as the host.  Anything after the space is the port.

3. If the string doesn't have a space, but has a ":" take everything up to
the ":" (but excluding it) as a host, and anything after as the port.

My proposal
-----------------

Change 3 as follows:

3. If the string doesn't have a space, but has a single ":" take
everything up to the ":" (but excluding it) as a host, and anything
after as the port.  If the string has 2 or more ":", take the whole
string as a host without port.

Examples
--------------

1.2.3.4       => host = 1.2.3.4     port =
1.2.3.4:80  => host = 1.2.3.4     port = 80
1.2.3.4 80  => host = 1.2.3.4     port = 80
foo.bar       => host = foobar      port =
foo.bar:80  => host = foobar      port = 80
foo.bar 80  => host = foobar      port = 80
[::1]             => host = ::1         port =
[::1]:80        => host = ::1         port = 80
::1               => host = ::1         port =
::1::2           => host = ::1::2      port =
1.2.3.4::80 => host = 1.2.3.4::80 port =

With the current implementation ::1 would fail. It works with my patch.
The last 2 would fail at getaddrinfo(), with or without my proposal.

f.-

On Wed, Oct 28, 2015 at 8:58 AM, Poul-Henning Kamp <phk at phk.freebsd.dk>
wrote:

> --------
> In message <CAJV_h0axHvroOtMPM83q=
> dCFHBtDL_XMzmGLu0q8mwWnCbSEZw at mail.gmail.com>
> , Federico Schwindt writes:
>
> >While moving from 4.0.x to 4.1 I noticed that std.ip(..., "::1") doesn't
> >work anymore.
>
> I agree this is very far from optimal, but adding special-casing
> IPv6 address by IPv6 address is certainly *not* the way forward.
>
> The real question is, what does "::1:8080" mean ?
>
> Please propose the exact algorithm you prose for turning strings
> into IP numbers, and bear in mind that we need to be able to
> include port numbers.
>
> --
> Poul-Henning Kamp       | UNIX since Zilog Zeus 3.20
> phk at FreeBSD.ORG         | TCP/IP since RFC 956
> FreeBSD committer       | BSD since 4.3-tahoe
> Never attribute to malice what can adequately be explained by incompetence.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.varnish-cache.org/lists/pipermail/varnish-dev/attachments/20151028/5ea01aaf/attachment.html>


More information about the varnish-dev mailing list