chiark / gitweb /
+ * Understand and sort of check OpenBSD `lookup' resolv.conf directive.
[adns.git] / src / reply.c
index f1dabe1e52527fa31b9a2d591096e5252e5f5e6c..2691f679d31cce4ac4b77be2ec8a05bea1e75f95 100644 (file)
@@ -4,11 +4,11 @@
  */
 /*
  *  This file is
- *    Copyright (C) 1997-1999 Ian Jackson <ian@davenant.greenend.org.uk>
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
  *
  *  It is part of adns, which is
- *    Copyright (C) 1997-1999 Ian Jackson <ian@davenant.greenend.org.uk>
- *    Copyright (C) 1999 Tony Finch <dot@dotat.at>
+ *    Copyright (C) 1997-2000 Ian Jackson <ian@davenant.greenend.org.uk>
+ *    Copyright (C) 1999-2000 Tony Finch <dot@dotat.at>
  *  
  *  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
@@ -126,7 +126,7 @@ void adns__procdgram(adns_state ads, const byte *dgram, int dglen,
     if (qu) adns__query_fail(qu,adns_s_rcodenotimplemented);
     return;
   case rcode_refused:
-    adns__warn(ads,serv,qu,"server refused our query");
+    adns__debug(ads,serv,qu,"server refused our query");
     if (qu) adns__query_fail(qu,adns_s_rcoderefused);
     return;
   default:
@@ -198,7 +198,8 @@ void adns__procdgram(adns_state ads, const byte *dgram, int dglen,
        qu->cname_begin= rdstart;
        qu->cname_dglen= dglen;
        st= adns__parse_domain(ads,serv,qu, &qu->vb,
-                              qu->flags & adns_qf_quotefail_cname ? 0 : pdf_quoteok,
+                              qu->flags & adns_qf_quotefail_cname
+                              ? 0 : pdf_quoteok,
                               dgram,dglen, &rdstart,rdstart+rdlength);
        if (!qu->vb.used) goto x_truncated;
        if (st) { adns__query_fail(qu,st); return; }
@@ -257,7 +258,7 @@ void adns__procdgram(adns_state ads, const byte *dgram, int dglen,
       /* We still wanted to look for the SOA so we could find the TTL. */
       adns__update_expires(qu,soattl,now);
 
-      if (qu->flags & adns_qf_search) {
+      if (qu->flags & adns_qf_search && !qu->cname_dgram) {
        adns__search_next(ads,qu,now);
       } else {
        adns__query_fail(qu,adns_s_nxdomain);
@@ -280,14 +281,14 @@ void adns__procdgram(adns_state ads, const byte *dgram, int dglen,
     if (cname_here) goto x_restartquery;
 
     /* Bloody hell, I thought we asked for recursion ? */
-    if (flg_rd) {
-      adns__diag(ads,serv,qu,"server thinks we didn't ask for recursive lookup");
-    }
     if (!flg_ra) {
       adns__diag(ads,serv,qu,"server is not willing to do recursive lookups for us");
       adns__query_fail(qu,adns_s_norecurse);
     } else {
-      adns__diag(ads,serv,qu,"server claims to do recursion, but gave us a referral");
+      if (!flg_rd)
+       adns__diag(ads,serv,qu,"server thinks we didn't ask for recursive lookup");
+      else
+       adns__debug(ads,serv,qu,"server claims to do recursion, but gave us a referral");
       adns__query_fail(qu,adns_s_invalidresponse);
     }
     return;