From: Ian Jackson Date: Tue, 13 May 2014 20:08:03 +0000 (+0100) Subject: site: Fix bugs when resolver request submission fails X-Git-Tag: debian/0.3.2_beta1~7 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=secnet.git;a=commitdiff_plain;h=75829536d59e3efdb592aee1effcedb72d9a8cc6 site: Fix bugs when resolver request submission fails Previously, if adns_submit failed: - the struct query in resolver.c was leaked - nothing was logged - the return value from resolver->request was ignored so the site state machine would hang Signed-off-by: Ian Jackson --- Changes in v2: * Fixed typo in commit message. --- diff --git a/resolver.c b/resolver.c index 033ddc1..15b8e76 100644 --- a/resolver.c +++ b/resolver.c @@ -50,8 +50,15 @@ static bool_t resolve_request(void *sst, cstring_t name, q->answer=cb; rv=adns_submit(st->ast, name, adns_r_a, 0, q, &q->query); + if (rv) { + Message(M_WARNING, + "resolver: failed to submit lookup for %s: %s",name, + adns_strerror(rv)); + free(q); + return False; + } - return rv==0; + return True; } static int resolver_beforepoll(void *sst, struct pollfd *fds, int *nfds_io, diff --git a/site.c b/site.c index 1169052..b6d05af 100644 --- a/site.c +++ b/site.c @@ -1291,9 +1291,8 @@ static bool_t enter_state_resolve(struct site *st) state_assert(st,st->state==SITE_RUN); slog(st,LOG_STATE,"entering state RESOLVE"); st->state=SITE_RESOLVE; - st->resolver->request(st->resolver->st,st->address, - site_resolve_callback,st); - return True; + return st->resolver->request(st->resolver->st,st->address, + site_resolve_callback,st); } static bool_t enter_new_state(struct site *st, uint32_t next)