diff options
-rw-r--r-- | src/network/lookup_name.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/network/lookup_name.c b/src/network/lookup_name.c index 8d41627a..02920930 100644 --- a/src/network/lookup_name.c +++ b/src/network/lookup_name.c @@ -151,7 +151,10 @@ static int name_from_dns(struct address buf[static MAXADDRS], char canon[static for (i=0; i<nq; i++) __dns_parse(abuf[i], alens[i], dns_parse_callback, &ctx); - return ctx.cnt; + if (ctx.cnt) return ctx.cnt; + if (alens[0] < 4 || (abuf[0][3] & 15) == 2) return EAI_AGAIN; + if ((abuf[0][3] & 15) == 3) return EAI_NONAME; + return EAI_FAIL; } int __lookup_name(struct address buf[static MAXADDRS], char canon[static 256], const char *name, int family, int flags) |