aboutgitcodebugslistschat
diff options
context:
space:
mode:
authorStefano Brivio <sbrivio@redhat.com>2024-07-24 23:43:14 +0200
committerStefano Brivio <sbrivio@redhat.com>2024-07-25 12:30:56 +0200
commit4a333c88d7fcec8764c2b485f983a86fec534821 (patch)
tree4bf5793a5c50d1e286f4352e5351ff94bc5259f9
parent6ff702f3257bbaf2979f95bf4906285621206007 (diff)
downloadpasst-4a333c88d7fcec8764c2b485f983a86fec534821.tar
passt-4a333c88d7fcec8764c2b485f983a86fec534821.tar.gz
passt-4a333c88d7fcec8764c2b485f983a86fec534821.tar.bz2
passt-4a333c88d7fcec8764c2b485f983a86fec534821.tar.lz
passt-4a333c88d7fcec8764c2b485f983a86fec534821.tar.xz
passt-4a333c88d7fcec8764c2b485f983a86fec534821.tar.zst
passt-4a333c88d7fcec8764c2b485f983a86fec534821.zip
conf: Accept addresses enclosed by square brackets in port forwarding specifiers
Even though we don't use : as delimiter for the port, making square brackets unneeded, RFC 3986, section 3.2.2, mandates them for IPv6 literals. We want IPv6 addresses there, but some users might still specify them out of habit. Same for IPv4 addresses: RFC 3986 doesn't specify square brackets for IPv4 literals, but I had reports of users actually trying to use them (they're accepted by many tools). Allow square brackets for both IPv4 and IPv6 addresses, correct or not, they're harmless anyway. Signed-off-by: Stefano Brivio <sbrivio@redhat.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
-rw-r--r--conf.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/conf.c b/conf.c
index 3cf9ed8..46fcd91 100644
--- a/conf.c
+++ b/conf.c
@@ -209,14 +209,24 @@ static void conf_ports(const struct ctx *c, char optname, const char *optarg,
}
- if (ifname == buf + 1) /* Interface without address */
+ if (ifname == buf + 1) { /* Interface without address */
addr = NULL;
- else if (inet_pton(AF_INET, buf, addr))
- af = AF_INET;
- else if (inet_pton(AF_INET6, buf, addr))
- af = AF_INET6;
- else
- goto bad;
+ } else {
+ p = buf;
+
+ /* Allow square brackets for IPv4 too for convenience */
+ if (*p == '[' && p[strlen(p) - 1] == ']') {
+ p[strlen(p) - 1] = '\0';
+ p++;
+ }
+
+ if (inet_pton(AF_INET, p, addr))
+ af = AF_INET;
+ else if (inet_pton(AF_INET6, p, addr))
+ af = AF_INET6;
+ else
+ goto bad;
+ }
} else {
spec = buf;