dirmngr: Properly handle SRV records.
authorJustus Winter <justus@g10code.com>
Tue, 20 Jun 2017 14:27:59 +0000 (16:27 +0200)
committerJustus Winter <justus@g10code.com>
Tue, 20 Jun 2017 14:38:54 +0000 (16:38 +0200)
commit48aae8167dcae80d43b08167a88d9eb170781a04
tree0b3dd748a3ef73805d6c75db65b3055c021c5cda
parentfc4834d213af031b456c49c1ba5b5ef8873d1f18
dirmngr: Properly handle SRV records.

* dirmngr/ks-engine-hkp.c (enum ks_protocol): New type.
(struct hostinfo_s): New flags indicating whether we already did a
A lookup, or a SRV lookup per protocol.  Turn 'port' into an array.
(create_new_hostinfo): Initialize new fields.
(add_host): Update the port for the given protocol.
(map_host): Simplify hosttable lookup misses.  Check the SRV records
for both protocols on demand, do the A lookup just once.  Return the
correct port.
--

Previously, if a host had both a SRV record for hkp and hkps, the
wrong port was used for the protocol that was used second, because the
hostinfo did not store a port per protocol, and the hosttable does not
discriminate between hosts using the protocol.

Fix this by querying the SRV records on demand, storing a port per
protocol, and returning the right port.

GnuPG-bug-id: 3033
Signed-off-by: Justus Winter <justus@g10code.com>
dirmngr/ks-engine-hkp.c