X-Git-Url: https://git.distorted.org.uk/~mdw/adns/blobdiff_plain/c84b735597e27c7be9f23ac28e3f3c70b5a505ce..f1e1153f0bde945c95a7269568e58bbe11685c01:/src/reply.c diff --git a/src/reply.c b/src/reply.c index 8da0bf2..4b3d74f 100644 --- a/src/reply.c +++ b/src/reply.c @@ -3,7 +3,12 @@ * - main handling and parsing routine for received datagrams */ /* - * This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson + * This file is + * Copyright (C) 1997-1999 Ian Jackson + * + * It is part of adns, which is + * Copyright (C) 1997-1999 Ian Jackson + * Copyright (C) 1999 Tony Finch * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,7 +26,6 @@ */ #include -#include #include "internal.h" @@ -167,7 +171,16 @@ void adns__procdgram(adns_state ads, const byte *dgram, int dglen, 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 */ + } else if (qu->cname_dgram) { /* Ignore second and subsequent CNAME(s) */ + adns__debug(ads,serv,qu,"allegedly canonical name %s is actually alias for %s", + qu->answer->cname, + adns__diag_domain(ads,serv,qu, &qu->vb, dgram,dglen,rdstart)); + adns__query_fail(qu,adns_s_prohibitedcname); + return; + } else if (wantedrrs) { /* Ignore CNAME(s) after RR(s). */ + adns__debug(ads,serv,qu,"ignoring CNAME (to %s) coexisting with RR", + adns__diag_domain(ads,serv,qu, &qu->vb, dgram,dglen,rdstart)); + } else { qu->cname_begin= rdstart; qu->cname_dglen= dglen; st= adns__parse_domain(ads,serv,qu, &qu->vb, @@ -190,10 +203,6 @@ void adns__procdgram(adns_state ads, const byte *dgram, int dglen, * TCP. If there is no truncation we can use the whole answer if * it contains the relevant info. */ - } else { - adns__debug(ads,serv,qu,"ignoring duplicate CNAME (%s, as well as %s)", - adns__diag_domain(ads,serv,qu, &qu->vb, dgram,dglen,rdstart), - qu->answer->cname); } } else if (rrtype == (qu->typei->type & adns__rrt_typemask)) { wantedrrs++;