From 16078f3deea5b82ea26e2f01dbd3ef3a5ce25410 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Sun, 8 Jan 2017 18:04:59 +0100 Subject: dirmngr: Change internal SRV lookup API. * dirmngr/dns-stuff.c (get_dns_srv): Add args SERVICE and PROTO. * dirmngr/http.c (connect_server): Simplify SRV lookup. * dirmngr/ks-engine-hkp.c (map_host): Ditto. * dirmngr/t-dns-stuff.c (main): Adjust for changed get_dns_srv. -- This new API is more convenient because it includes commonly used code. Note that right now http.c's SRV record code is not used. Signed-off-by: Werner Koch --- dirmngr/dns-stuff.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 'dirmngr/dns-stuff.c') diff --git a/dirmngr/dns-stuff.c b/dirmngr/dns-stuff.c index 028b065ab..a8713eb44 100644 --- a/dirmngr/dns-stuff.c +++ b/dirmngr/dns-stuff.c @@ -1740,17 +1740,37 @@ getsrv_standard (const char *name, } -/* Note that we do not return NONAME but simply store 0 at R_COUNT. */ +/* Query a SRV record for SERVICE and PROTO for NAME. If SERVICE is + * NULL, NAME is expected to contain the full query name. Note that + * we do not return NONAME but simply store 0 at R_COUNT. On error an + * error code is returned and 0 stored at R_COUNT. */ gpg_error_t -get_dns_srv (const char *name, struct srventry **list, unsigned int *r_count) +get_dns_srv (const char *name, const char *service, const char *proto, + struct srventry **list, unsigned int *r_count) { gpg_error_t err; + char *namebuffer = NULL; unsigned int srvcount; int i; *list = NULL; *r_count = 0; srvcount = 0; + + /* If SERVICE is given construct the query from it and PROTO. */ + if (service) + { + namebuffer = xtryasprintf ("_%s._%s.%s", + service, proto? proto:"tcp", name); + if (!namebuffer) + { + err = gpg_error_from_syserror (); + goto leave; + } + name = namebuffer; + } + + #ifdef USE_LIBDNS if (!standard_resolver) { @@ -1852,6 +1872,7 @@ get_dns_srv (const char *name, struct srventry **list, unsigned int *r_count) } if (!err) *r_count = srvcount; + xfree (namebuffer); return err; } -- cgit v1.2.3