From 4b707d8b1701aec2cec7431d4656f771b96a9f00 Mon Sep 17 00:00:00 2001 From: ian Date: Sat, 5 Dec 1998 18:51:37 +0000 Subject: [PATCH] cname_loose/cname_forbid implemented; production timeout --- src/adns.h | 2 -- src/event.c | 1 - src/internal.h | 2 +- src/reply.c | 5 ++++- src/types.c | 8 ++++++-- 5 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/adns.h b/src/adns.h index d4ca0df..3c06ff6 100644 --- a/src/adns.h +++ b/src/adns.h @@ -135,8 +135,6 @@ typedef enum { adns_s_max_misconfig= 199, - /* fixme: implement _s_cname */ - /* permanent problems with the query */ adns_s_querydomainwrong, adns_s_querydomaininvalid, diff --git a/src/event.c b/src/event.c index d42afbd..19fa620 100644 --- a/src/event.c +++ b/src/event.c @@ -76,7 +76,6 @@ void adns__tcp_tryconnect(adns_state ads, struct timeval now) { int r, fd, tries; struct sockaddr_in addr; struct protoent *proto; - /* fixme: single TCP timeout, not once per server */ for (tries=0; triesnservers; tries++) { if (ads->tcpstate == server_connecting || ads->tcpstate == server_ok) return; diff --git a/src/internal.h b/src/internal.h index 92debfd..62f3e69 100644 --- a/src/internal.h +++ b/src/internal.h @@ -40,7 +40,7 @@ typedef unsigned char byte; #define MAXSERVERS 5 #define MAXSORTLIST 15 -#define UDPMAXRETRIES /*15 fixme*/5 +#define UDPMAXRETRIES 15 #define UDPRETRYMS 2000 #define TCPMS 30000 #define LOCALRESOURCEMS 20 diff --git a/src/reply.c b/src/reply.c index 6198d07..9031476 100644 --- a/src/reply.c +++ b/src/reply.c @@ -157,7 +157,10 @@ void adns__procdgram(adns_state ads, const byte *dgram, int dglen, } if (rrtype == adns_r_cname && /* fixme - implement adns_qf_nocname */ (qu->typei->type & adns__rrt_typemask) != adns_r_cname) { - if (!qu->cname_dgram) { /* Ignore second and subsequent CNAMEs */ + if (qu->flags & adns_qf_cname_forbid) { + adns__query_fail(qu,adns_s_prohibitedcname); + return; + } else if (!qu->cname_dgram) { /* Ignore second and subsequent CNAMEs */ qu->cname_begin= rdstart; qu->cname_dglen= dglen; st= adns__parse_domain(ads,serv,qu, &qu->vb, diff --git a/src/types.c b/src/types.c index 32db284..9f7dbd3 100644 --- a/src/types.c +++ b/src/types.c @@ -432,6 +432,7 @@ static adns_status pap_hostaddr(const parseinfo *pai, int *cbyte_io, qcontext ctx; int id; adns_query nqu; + adns_queryflags nflags; dmstart= cbyte= *cbyte_io; st= pap_domain(pai, &cbyte, max, &rrp->host, @@ -461,9 +462,12 @@ static adns_status pap_hostaddr(const parseinfo *pai, int *cbyte_io, ctx.ext= 0; ctx.callback= icb_hostaddr; ctx.info.hostaddr= rrp; + + nflags= adns_qf_quoteok_query; + if (!(pai->qu->flags & adns_qf_cname_loose)) nflags |= adns_qf_cname_forbid; + st= adns__internal_submit(pai->ads, &nqu, adns__findtype(adns_r_addr), - &pai->qu->vb, id, - adns_qf_quoteok_query, pai->now, 0, &ctx); + &pai->qu->vb, id, nflags, pai->now, 0, &ctx); if (st) return st; nqu->parent= pai->qu; -- 2.30.2