chiark / gitweb /
+ Bugfixes:
[adns.git] / src / query.c
index ec545625310c11cbb46535e37a7dd0dde1a7b60b..7eb322d996ba87e85e61815175a087672f0128c3 100644 (file)
@@ -5,7 +5,12 @@
  * - query submission and cancellation (user-visible and internal)
  */
 /*
- *  This file is part of adns, which is Copyright (C) 1997-1999 Ian Jackson
+ *  This file is
+ *    Copyright (C) 1997-1999 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>
  *  
  *  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
@@ -100,7 +105,6 @@ static void query_submit(adns_state ads, adns_query qu,
   memcpy(qu->query_dgram,qu->vb.buf,qu->vb.used);
   
   adns__query_send(qu,now);
-  adns__autosys(ads,now);
 }
 
 adns_status adns__internal_submit(adns_state ads, adns_query *query_r,
@@ -191,7 +195,7 @@ static int save_owner(adns_query qu, const char *owner, int ol) {
 int adns_submit(adns_state ads,
                const char *owner,
                adns_rrtype type,
-               adns_queryflags flags,
+               int flags,
                void *context,
                adns_query *query_r) {
   int r, ol, ndots;
@@ -221,6 +225,7 @@ int adns_submit(adns_state ads,
                                 
   if (ol>=1 && owner[ol-1]=='.' && (ol<2 || owner[ol-2]!='\\')) {
     flags &= ~adns_qf_search;
+    qu->flags= flags;
     ol--;
   }
 
@@ -238,6 +243,7 @@ int adns_submit(adns_state ads,
     }
     query_simple(ads,qu, owner,ol, typei,flags, now);
   }
+  adns__autosys(ads,now);
   adns__consistency(ads,qu,cc_entex);
   return 0;
 
@@ -253,10 +259,31 @@ int adns_submit(adns_state ads,
   return r;
 }
 
+int adns_submit_reverse(adns_state ads,
+                       const struct sockaddr *addr,
+                       adns_rrtype type,
+                       int flags,
+                       void *context,
+                       adns_query *query_r) {
+  const unsigned char *iaddr;
+  char buf[30];
+
+  if (type != adns_r_ptr && type != adns_r_ptr_raw) return EINVAL;
+  flags &= ~adns_qf_search;
+
+  if (addr->sa_family != AF_INET) return ENOSYS;
+  iaddr= (const unsigned char*) &(((const struct sockaddr_in*)addr) -> sin_addr);
+
+  sprintf(buf, "%d.%d.%d.%d.in-addr.arpa",
+         iaddr[3], iaddr[2], iaddr[1], iaddr[0]);
+
+  return adns_submit(ads,buf,type,flags,context,query_r);
+}
+
 int adns_synchronous(adns_state ads,
                     const char *owner,
                     adns_rrtype type,
-                    adns_queryflags flags,
+                    int flags,
                     adns_answer **answer_r) {
   adns_query qu;
   int r;