X-Git-Url: https://git.distorted.org.uk/~mdw/secnet/blobdiff_plain/90a39563035b70196da9c5bdc7c17a63b64449b0..1b4ca45e628241eb21bd6f8fbc5ba3c647454db4:/resolver.c diff --git a/resolver.c b/resolver.c index f60b112..15b8e76 100644 --- a/resolver.c +++ b/resolver.c @@ -6,6 +6,8 @@ #error secnet requires ADNS version 1.0 or above #endif #include +#include +#include struct adns { @@ -28,14 +30,35 @@ static bool_t resolve_request(void *sst, cstring_t name, struct adns *st=sst; struct query *q; int rv; + const int maxlitlen=50; + + ssize_t l=strlen(name); + if (name[0]=='[' && l2 && name[l-1]==']') { + char trimmed[maxlitlen+1]; + memcpy(trimmed,name+1,l-2); + trimmed[l-2]=0; + struct in_addr ia; + if (inet_aton(trimmed,&ia)) + cb(cst,&ia); + else + cb(cst,0); + return True; + } q=safe_malloc(sizeof *q,"resolve_request"); q->cst=cst; 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,