aboutsummaryrefslogtreecommitdiffstats
path: root/dirmngr/dns-stuff.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2017-01-12 20:09:42 +0000
committerWerner Koch <[email protected]>2017-01-16 18:12:03 +0000
commit82646bbf1a5a7d745da81b239a12667a51703dc1 (patch)
treebd25864eaed8b809c77a858fa21e44c09ecc4fdb /dirmngr/dns-stuff.c
parenttests: Improve GPGHOME handling. (diff)
downloadgnupg-82646bbf1a5a7d745da81b239a12667a51703dc1.tar.gz
gnupg-82646bbf1a5a7d745da81b239a12667a51703dc1.zip
dirmngr: Fix URL creation for literal IPv6 addresses in HKP.
* dirmngr/dns-stuff.c (is_ip_address): Make the return value depend on the address family. * dirmngr/ks-engine-hkp.c (map_host): Rename arg R_POOLNAME to R_HTTPHOST because that is its purpose. Note that the former behaviour of storing a NULL to indicate that it is not a pool has not been used. (make_host_part): Ditto. (make_host_part): Make sure that literal v6 addresses are correclty marked in the constructed URL. Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'dirmngr/dns-stuff.c')
-rw-r--r--dirmngr/dns-stuff.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/dirmngr/dns-stuff.c b/dirmngr/dns-stuff.c
index a8713eb44..1b30c2cab 100644
--- a/dirmngr/dns-stuff.c
+++ b/dirmngr/dns-stuff.c
@@ -993,8 +993,10 @@ resolve_dns_addr (const struct sockaddr *addr, int addrlen,
}
-/* Check whether NAME is an IP address. Returns true if it is either
- an IPv6 or IPv4 numerical address. */
+/* Check whether NAME is an IP address. Returns a true if it is
+ * either an IPv6 or a IPv4 numerical address. The actual return
+ * values can also be used to identify whether it is v4 or v6: The
+ * true value will surprisingly be 4 for IPv4 and 6 for IPv6. */
int
is_ip_address (const char *name)
{
@@ -1002,7 +1004,7 @@ is_ip_address (const char *name)
int ndots, dblcol, n;
if (*name == '[')
- return 1; /* yes: A legal DNS name may not contain this character;
+ return 6; /* yes: A legal DNS name may not contain this character;
this mut be bracketed v6 address. */
if (*name == '.')
return 0; /* No. A leading dot is not a valid IP address. */
@@ -1035,7 +1037,7 @@ is_ip_address (const char *name)
if (ndots > 7)
return 0; /* No: Too many colons. */
else if (ndots > 1)
- return 1; /* Yes: At least 2 colons indicate an v6 address. */
+ return 6; /* Yes: At least 2 colons indicate an v6 address. */
legacy:
/* Check whether it is legacy IP address. */
@@ -1056,7 +1058,7 @@ is_ip_address (const char *name)
else if (++n > 3)
return 0; /* No: More than 3 digits. */
}
- return !!(ndots == 3);
+ return (ndots == 3)? 4 : 0;
}