r2992 - in udns/trunk: . debian

mikma at minisip.org mikma at minisip.org
Wed Dec 6 15:33:00 CET 2006


Author: mikma
Date: 2006-12-06 15:32:59 +0100 (Wed, 06 Dec 2006)
New Revision: 2992

Added:
   udns/trunk/NOTES
Modified:
   udns/trunk/Makefile
   udns/trunk/TODO
   udns/trunk/debian/changelog
   udns/trunk/debian/rules
   udns/trunk/dnsget.c
   udns/trunk/udns.3
   udns/trunk/udns.h
   udns/trunk/udns_dn.c
   udns/trunk/udns_resolver.c
   udns/trunk/udns_rr_naptr.c
   udns/trunk/udns_rr_txt.c
Log:
Merge udns upstream 0.0.9pre
svn merge ../tags/upstream/0.0.8 at 2991 ../tags/upstream/0.0.9pre at 2991 .


Modified: udns/trunk/Makefile
===================================================================
--- udns/trunk/Makefile	2006-12-06 12:57:21 UTC (rev 2991)
+++ udns/trunk/Makefile	2006-12-06 14:32:59 UTC (rev 2992)
@@ -1,5 +1,5 @@
 #! /usr/bin/make -rf
-# $Id: Makefile,v 1.38 2005/09/12 12:09:10 mjt Exp $
+# $Id: Makefile,v 1.42 2006/11/29 21:27:01 mjt Exp $
 # libudns Makefile
 #
 # Copyright (C) 2005  Michael Tokarev <mjt at corpit.ru>
@@ -20,13 +20,14 @@
 # write to the Free Software Foundation, Inc., 59 Temple Place,
 # Suite 330, Boston, MA  02111-1307  USA
 
-VERS   = 0.0.8
+VERS   = 0.0.9pre
 SRCS   = udns_dn.c udns_dntosp.c udns_parse.c udns_resolver.c udns_misc.c \
 	udns_rr_a.c udns_rr_ptr.c udns_rr_mx.c udns_rr_txt.c udns_bl.c \
-	udns_rr_srv.c udns_codes.c
+	udns_rr_srv.c udns_rr_naptr.c udns_codes.c
 USRCS  = dnsget.c rblcheck.c ex-rdns.c
+DEB    = debian/copyright debian/changelog debian/control debian/rules
 DIST   = COPYING.LGPL udns.h udns.3 dnsget.1 rblcheck.1 $(SRCS) $(USRCS) \
-	Makefile TODO
+	Makefile TODO NOTES
 
 OBJS   = $(SRCS:.c=.o) $(GEN:.c=.o)
 LIB    = libudns.a
@@ -114,9 +115,10 @@
 	mv $@.tmp $@
 
 dist: $(NAMEPFX).tar.gz
-$(NAMEPFX).tar.gz: $(DIST)
-	mkdir $(NAMEPFX)
+$(NAMEPFX).tar.gz: $(DIST) $(DEB)
+	mkdir $(NAMEPFX) $(NAMEPFX)/debian
 	ln $(DIST) $(NAMEPFX)
+	ln $(DEB) $(NAMEPFX)/debian
 	tar cvfz $@ $(NAMEPFX)
 	rm -rf $(NAMEPFX)
 subdist:

Copied: udns/trunk/NOTES (from rev 2991, udns/tags/upstream/0.0.9pre/NOTES)

Modified: udns/trunk/TODO
===================================================================
--- udns/trunk/TODO	2006-12-06 12:57:21 UTC (rev 2991)
+++ udns/trunk/TODO	2006-12-06 14:32:59 UTC (rev 2992)
@@ -2,6 +2,15 @@
 
 The following is mostly an internal, not user-visible stuff.
 
+* rearrange an API to make dns_query object owned by application,
+  so that it'll look like this:
+   struct dns_query *q;
+   q = udns_query_alloc(ctx);
+   udns_query_set(q, options, domain_name, flags, ...);
+   udns_query_submit(ctx, q);
+ or
+   udns_query_resolve(ctx, q);
+
 * allow NULL callbacks?  Or provide separate resolver
   context list of queries which are done but wich did not
   have callback, and dns_pick() routine to retrieve results
@@ -26,6 +35,23 @@
 * dns_init(do_open) - make the parameter opposite, aka
   dns_init(skip_open) ?
 
+* for the above.  Use separate routine for initializing the context
+  from system files, to not link stuff reading resolv.conf if it's
+  not needed.  So that automatic init will not be possible.
+
+* allow TCP queue?
+
+* detect servers which don't understand EDNS0 (returning FORMERR),
+  and fall back to pre-EDNS0 for them.
+
+* for the above to work, we have to be able to find query object by
+  only ID, not ID + qdn.
+
+* And oh, qID should really be random.
+
+* more accurate error reporting.  Currently, udns always returns TEMPFAIL,
+  but don't specify why it happened (ENOMEM, timeout, etc).
+
 * check the error value returned by recvfrom() and
   sendto() and determine which errors to ignore.
 

Modified: udns/trunk/debian/changelog
===================================================================
--- udns/trunk/debian/changelog	2006-12-06 12:57:21 UTC (rev 2991)
+++ udns/trunk/debian/changelog	2006-12-06 14:32:59 UTC (rev 2992)
@@ -1,3 +1,25 @@
+udns (0.0.9pre) unstable; urgency=low
+
+  * s/EOVERFLOW/ENFILE, partly to make win32 happy
+
+  * several win32 fixes
+
+  * don't use `class' in udns.h, to make C++ happy
+    (thanks Markus Koetter for pointing this out)
+
+  * fixed CNAME handling in dnsget tool.  Another Thank You! goes
+    to Markus Koetter.
+
+  * NAPTR (RFC3403) support, thanks to Mikael Magnusson
+    <mikma at users.sourceforge.net> for this.
+
+  * more Win32 fixes from Mikael Magnusson.  I have to admit
+    I never tried to compile it on Win32.
+
+  * added NOTES file
+
+ -- Michael Tokarev <mjt at corpit.ru>  Wed, 29 Nov 2006 04:16:21 +0300
+
 udns (0.0.8) unstable; urgency=low
 
   * don't compare sockaddr_in's, but individual parts only

Modified: udns/trunk/debian/rules
===================================================================
--- udns/trunk/debian/rules	2006-12-06 12:57:21 UTC (rev 2991)
+++ udns/trunk/debian/rules	2006-12-06 14:32:59 UTC (rev 2992)
@@ -62,7 +62,7 @@
 	dh_install -plibudns-dev libudns.a libudns.so usr/lib
 	dh_install -plibudns-dev udns.h usr/include
 	dh_installman -plibudns-dev udns.3
-	dh_installdocs -plibudns-dev TODO
+	dh_installdocs -plibudns-dev TODO NOTES
 	dh_installexamples -plibudns-dev ex-rdns.c
 
 # udns-utils

Modified: udns/trunk/dnsget.c
===================================================================
--- udns/trunk/dnsget.c	2006-12-06 12:57:21 UTC (rev 2991)
+++ udns/trunk/dnsget.c	2006-12-06 14:32:59 UTC (rev 2992)
@@ -1,4 +1,4 @@
-/* $Id: dnsget.c,v 1.18 2005/05/16 12:43:26 mjt Exp $
+/* $Id: dnsget.c,v 1.22 2006/11/29 21:28:49 mjt Exp $
    simple host/dig-like application using UDNS library
 
    Copyright (C) 2005  Michael Tokarev <mjt at corpit.ru>
@@ -203,7 +203,7 @@
 
   case DNS_T_AAAA:
     if (rr->dnsrr_dsz != 16) goto xperr;
-    printf("%s", inet_ntop(AF_INET6, dptr, dn, DNS_MAXDN));
+    printf("%s", inet_ntop(AF_INET6, dptr, (char*)dn, DNS_MAXDN));
     break;
 
   case DNS_T_MX:
@@ -262,6 +262,25 @@
            dns_dntosp(dn));
     break;
 
+  case DNS_T_NAPTR:	/* order pref flags serv regexp repl */
+    c = dptr;
+    c += 4;	/* order, pref */
+    for (n = 0; n < 3; ++n)
+      if (c >= dend) goto xperr;
+      else c += *c + 1;
+    if (dns_getdn(pkt, &c, end, dn, DNS_MAXDN) <= 0 || c != dend) goto xperr;
+    c = dptr;
+    printf("%u %u", dns_get16(c+0), dns_get16(c+2));
+    c += 4;
+    for(n = 0; n < 3; ++n) {
+      putchar(' ');
+      if (verbose > 0) putchar('"');
+      c = printtxt(c);
+      if (verbose > 0) putchar('"');
+    } 
+    printf(" %s.", dns_dntosp(dn));
+    break;
+
   case DNS_T_KEY: /* flags(2) proto(1) algo(1) pubkey */
     c = dptr;
     if (c + 2 + 1 + 1 > dend) goto xperr;
@@ -466,7 +485,7 @@
   struct dns_rr rr;
   unsigned nrr;
   unsigned char dn[DNS_MAXDN];
-  const unsigned char *pkt, *cur, *end, *qdn;
+  const unsigned char *pkt, *cur, *end;
   if (!result) {
     dnserror(q, r);
     return;
@@ -475,10 +494,9 @@
   dns_getdn(pkt, &cur, end, dn, sizeof(dn));
   dns_initparse(&p, NULL, pkt, cur, end);
   p.dnsp_qcls = p.dnsp_qtyp = 0;
-  qdn = dn;
   nrr = 0;
   while((r = dns_nextrr(&p, &rr)) > 0) {
-    if (!dns_dnequal(qdn, rr.dnsrr_dn)) continue;
+    if (!dns_dnequal(dn, rr.dnsrr_dn)) continue;
     if ((qcls == DNS_C_ANY || qcls == rr.dnsrr_cls) &&
         (q->qtyp == DNS_T_ANY || q->qtyp == rr.dnsrr_typ))
       ++nrr;
@@ -491,10 +509,10 @@
       }
       else {
         if (verbose == 1) {
-          printf("%s.", dns_dntosp(qdn));
+          printf("%s.", dns_dntosp(dn));
           printf(" CNAME %s.\n", dns_dntosp(p.dnsp_dnbuf));
         }
-        qdn = p.dnsp_dnbuf;
+	dns_dntodn(p.dnsp_dnbuf, dn, sizeof(dn));
       }
     }
   }

Modified: udns/trunk/udns.3
===================================================================
--- udns/trunk/udns.3	2006-12-06 12:57:21 UTC (rev 2991)
+++ udns/trunk/udns.3	2006-12-06 14:32:59 UTC (rev 2992)
@@ -1,4 +1,4 @@
-.\" $Id: udns.3,v 1.25 2005/09/12 12:05:12 mjt Exp $
+.\" $Id: udns.3,v 1.26 2006/11/28 22:58:04 mjt Exp $
 .\" udns library manpage
 .\"
 .\" Copyright (C) 2005  Michael Tokarev <mjt at corpit.ru>
@@ -810,6 +810,48 @@
 interest (if the \fIname\fR is absolute, that is, it ends up with a dot,
 DNS_NOSRCH flag will be set automatically).
 
+.SS "NAPTR Queries"
+.PP
+.nf
+struct \fBdns_naptr\fR {        /* single NAPTR record */
+  int \fBorder\fR;              /* record order */
+  int \fBpreference\fR;         /* preference of this record */
+  char *\fBflags\fR;            /* application-specific flags */
+  char *\fBservices\fR;         /* service parameters */
+  char *\fBregexp\fR;           /* substitutional regular expression */
+  char *\fBreplacement\fR;      /* replacement string */
+};
+struct \fBdns_rr_naptr\fR {     /* NAPTR RRset */
+  char *\fBdnsnaptr_qname\fR;   /* original query name */
+  char *\fBdnsnaptr_cname\fR;   /* canonical name */
+  unsigned \fBdnsnaptr_ttl\fR;  /* Time-To-Live (TTL) value */
+  int \fBdnsnaptr_nrr\fR;       /* number of text records in the set */
+  struct dns_naptr \fBdnsnaptr_naptr\fR[]; /* array of NAPTR records */
+};
+typedef void
+  \fBdns_query_naptr_fn\fR(\fIctx\fR, struct dns_rr_naptr *\fIresult\fR, \fIdata\fR)
+dns_parse_fn \fBdns_parse_naptr\fB;
+struct dns_query *
+\fBdns_submit_naptr\fB(\fIctx\fR, const char *\fIname\fR, int \fIflags\fR,
+   dns_query_txt_fn *\fIcbck\fR, \fIdata\fR);
+struct dns_rr_naptr *
+\fBdns_resolve_naptr\fB(\fIctx\fR, const char *\fIname\fR, int \fIflags\fR);
+.fi
+.PP
+The \fBdns_rr_naptr\fR structure holds a result of an IN NAPTR (rfc3403) query.
+Callback routine for IN NAPTR queries expected to be of type
+\fBdns_query_naptr_fn\fR, expects pointer to \fBdns_rr_naptr\fR
+structure as query result instead of raw DNS packet.
+The \fBdns_parse_naptr\fR() is used to convert raw DNS reply packet into
+\fBdns_rr_naptr\fR structure (it is used
+internally and may be used directly too with generic query interface).
+Routines \fBdns_submit_naptr\fR() and \fBdns_resolve_naptr\fR() are used to
+perform IN NAPTR queries in a type-safe manner.  The \fIname\fR parameter
+is the domain name in question, and \fIflags\fR is query flags bitmask,
+with one bit, DNS_NOSRCH, of practical interest (if the \fIname\fR is
+absolute, that is, it ends up with a dot, DNS_NOSRCH flag will be set
+automatically).
+
 .SS "DNSBL Interface"
 .PP
 A DNS-based blocklists, or a DNSBLs, are in wide use nowadays, especially

Modified: udns/trunk/udns.h
===================================================================
--- udns/trunk/udns.h	2006-12-06 12:57:21 UTC (rev 2991)
+++ udns/trunk/udns.h	2006-12-06 14:32:59 UTC (rev 2992)
@@ -1,4 +1,4 @@
-/* $Id: udns.h,v 1.37 2005/09/12 12:09:10 mjt Exp $
+/* $Id: udns.h,v 1.41 2006/11/29 01:20:30 mjt Exp $
    header file for the UDNS library.
 
    Copyright (C) 2005  Michael Tokarev <mjt at corpit.ru>
@@ -23,7 +23,7 @@
 
 #ifndef UDNS_VERSION	/* include guard */
 
-#define UDNS_VERSION "0.0.8"
+#define UDNS_VERSION "0.0.9pre"
 
 #ifdef WIN32
 # ifdef UDNS_DYNAMIC_LIBRARY
@@ -479,8 +479,7 @@
 UDNS_API int
 dns_cancel(struct dns_ctx *ctx, struct dns_query *q);
 
-/* immediately resolve a generic query, return the answer
- * and place completion status into *statusp */
+/* resolve a generic query, return the answer */
 UDNS_API void *
 dns_resolve_dn(struct dns_ctx *ctx,
                dnscc_t *qdn, int qcls, int qtyp, int flags,
@@ -636,7 +635,7 @@
                 const char *name, const char *srv, const char *proto,
                 int flags);
 
-
+/* NAPTR (RFC3403) RR type */
 struct dns_naptr {	/* single NAPTR RR */
   int order;		/* NAPTR order */
   int preference;	/* NAPTR preference */
@@ -645,17 +644,19 @@
   char *regexp;		/* NAPTR regexp */
   char *replacement;	/* NAPTR replacement */
 };
+
 struct dns_rr_naptr {		/* the NAPTR RRset */
   dns_rr_common(dnsnaptr);
   struct dns_naptr *dnsnaptr_naptr;	/* array of NAPTRes */
 };
 UDNS_API dns_parse_fn dns_parse_naptr;	/* NAPTR RR parsing routine */
 typedef void				/* NAPTR RR callback */
-dns_query_naptr_fn(struct dns_ctx *ctx, struct dns_rr_naptr *result, void *data);
+dns_query_naptr_fn(struct dns_ctx *ctx,
+                   struct dns_rr_naptr *result, void *data);
 /* submit NAPTR IN query */
 UDNS_API struct dns_query *
 dns_submit_naptr(struct dns_ctx *ctx, const char *name, int flags,
-		 dns_query_naptr_fn *cbck, void *data);
+                 dns_query_naptr_fn *cbck, void *data);
 /* resolve NAPTR IN query */
 UDNS_API struct dns_rr_naptr *
 dns_resolve_naptr(struct dns_ctx *ctx, const char *name, int flags);

Modified: udns/trunk/udns_dn.c
===================================================================
--- udns/trunk/udns_dn.c	2006-12-06 12:57:21 UTC (rev 2991)
+++ udns/trunk/udns_dn.c	2006-12-06 14:32:59 UTC (rev 2992)
@@ -1,4 +1,4 @@
-/* $Id: udns_dn.c,v 1.6 2005/09/12 10:55:21 mjt Exp $
+/* $Id: udns_dn.c,v 1.7 2006/11/28 22:45:20 mjt Exp $
    domain names manipulation routines
 
    Copyright (C) 2005  Michael Tokarev <mjt at corpit.ru>
@@ -71,7 +71,7 @@
   dnsc_t *const de	/* end of dn: last byte that can be filled up */
       = dn + (dnsiz >= DNS_MAXDN ? DNS_MAXDN : dnsiz) - 1;
   dnscc_t *np = (dnscc_t *)name;
-  dnscc_t *ne = np + (namelen ? namelen : strlen(np));
+  dnscc_t *ne = np + (namelen ? namelen : strlen((char*)np));
   dnsc_t *llab;		/* start of last label (llab[-1] will be length) */
   unsigned c;		/* next input character, or length of last label */
 

Modified: udns/trunk/udns_resolver.c
===================================================================
--- udns/trunk/udns_resolver.c	2006-12-06 12:57:21 UTC (rev 2991)
+++ udns/trunk/udns_resolver.c	2006-12-06 14:32:59 UTC (rev 2992)
@@ -1,4 +1,4 @@
-/* $Id: udns_resolver.c,v 1.53 2005/09/12 10:23:08 mjt Exp $
+/* $Id: udns_resolver.c,v 1.57 2006/11/29 01:17:43 mjt Exp $
    resolver stuff (main module)
 
    Copyright (C) 2005  Michael Tokarev <mjt at corpit.ru>
@@ -24,7 +24,7 @@
 #ifdef WIN32
 # include <winsock2.h>          /* includes <windows.h> */
 # include <ws2tcpip.h>          /* needed for struct in6_addr */
-# include <iphlpapi.h>
+# include <iphlpapi.h>		/* for dns server addresses etc */
 # undef HAVE_POLL
 # define inet_aton(cp, inp) inet_pton(AF_INET, (cp), (inp))
 #else
@@ -258,7 +258,7 @@
   if (!serv)
     return (ctx->dnsc_nserv = 0);
   if (ctx->dnsc_nserv >= DNS_MAXSERV)
-    return errno = EOVERFLOW, -1;
+    return errno = ENFILE, -1;
   sns = &ctx->dnsc_serv[ctx->dnsc_nserv];
   memset(sns, 0, sizeof(*sns));
 #if HAVE_INET6
@@ -304,7 +304,7 @@
   if (!sa)
     return (ctx->dnsc_nserv = 0);
   if (ctx->dnsc_nserv >= DNS_MAXSERV)
-    return errno = EOVERFLOW, -1;
+    return errno = ENFILE, -1;
 #if HAVE_INET6
   else if (sa->sa_family == AF_INET6)
     ctx->dnsc_serv[ctx->dnsc_nserv].sin6 = *(struct sockaddr_in6*)sa;
@@ -383,7 +383,7 @@
   if (!srch)
     return (ctx->dnsc_nsrch = 0);
   else if (ctx->dnsc_nsrch >= DNS_MAXSRCH)
-    return errno = EOVERFLOW, -1;
+    return errno = ENFILE, -1;
   else if (dns_sptodn(srch, ctx->dnsc_srch[ctx->dnsc_nsrch], DNS_MAXDN) <= 0)
     return errno = EINVAL, -1;
   else
@@ -475,7 +475,7 @@
   int ret = -1;
 
   h_iphlpapi = LoadLibrary("iphlpapi.dll");
-  if (h_iphlpapi == HANDLE_ERROR)
+  if (!h_iphlpapi)
     return -1;
   pfnGetAdAddrs = (GetAdaptersAddressesFunc)
     GetProcAddress(h_iphlpapi, "GetAdaptersAddresses");
@@ -771,7 +771,7 @@
 void dns_close(struct dns_ctx *ctx) {
   SETCTXINITED(ctx);
   if (ctx->dnsc_udpsock < 0) return;
-  close(ctx->dnsc_udpsock);
+  closesocket(ctx->dnsc_udpsock);
   ctx->dnsc_udpsock = -1;
   free(ctx->dnsc_pbuf);
   ctx->dnsc_pbuf = NULL;
@@ -1270,9 +1270,6 @@
 
 void *dns_resolve(struct dns_ctx *ctx, struct dns_query *q) {
   time_t now;
-#ifdef WIN32
-# warning fixme: poll()/select() on WIN32 (WaitForMultipleObjects?)
-#endif
 #ifdef HAVE_POLL
   struct pollfd pfd;
 #else

Modified: udns/trunk/udns_rr_naptr.c
===================================================================
--- udns/trunk/udns_rr_naptr.c	2006-12-06 12:57:21 UTC (rev 2991)
+++ udns/trunk/udns_rr_naptr.c	2006-12-06 14:32:59 UTC (rev 2992)
@@ -1,4 +1,4 @@
-/* $Id: udns_rr_mx.c,v 1.13 2005/04/20 06:44:34 mjt Exp $
+/* $Id: udns_rr_naptr.c,v 1.1 2006/11/28 22:58:04 mjt Exp $
    parse/query NAPTR IN records
 
    Copyright (C) 2005  Michael Tokarev <mjt at corpit.ru>
@@ -27,40 +27,30 @@
 #include <assert.h>
 #include "udns.h"
 
-static int dns_str_len(dnscc_t **cur, dnscc_t *ep)
+/* Get a single string for NAPTR record, pretty much like a DN label.
+ * String length is in first byte in *cur, so it can't be >255.
+ */
+static int dns_getstr(dnscc_t **cur, dnscc_t *ep, char *buf)
 {
-  int l;
+  unsigned l;
   dnscc_t *cp = *cur;
 
   l = *cp++;
   if (cp + l > ep)
     return DNS_E_PROTOCOL;
+  if (buf) {
+    memcpy(buf, cp, l);
+    buf[l] = '\0';
+  }
   cp += l;
 
   *cur = cp;
   return l + 1;
 }
 
-static int dns_getstr(dnscc_t **cur, dnscc_t *ep, char *buf, size_t size)
-{
-  int l;
-  dnscc_t *cp = *cur;
-
-  l = *cp++;
-  if (l >= size)
-    return DNS_E_PROTOCOL;
-  memcpy(buf, cp, l);
-  cp += l;
-  buf[l] = '\0';
-
-  *cur = cp;
-  return l + 1;
-}
-
-
 int
 dns_parse_naptr(dnscc_t *qdn, dnscc_t *pkt, dnscc_t *cur, dnscc_t *end,
-             void **result) {
+                void **result) {
   struct dns_rr_naptr *ret;
   struct dns_parse p;
   struct dns_rr rr;
@@ -76,13 +66,15 @@
   while((r = dns_nextrr(&p, &rr)) > 0) {
     int i;
     dnscc_t *ep = rr.dnsrr_dend;
+
+    /* first 4 bytes: order & preference */
     cur = rr.dnsrr_dptr + 4;
 
     /* flags, services and regexp */
-    for (i=0; i<3; i++) {
-      r = dns_str_len(&cur, ep);
+    for (i = 0; i < 3; i++) {
+      r = dns_getstr(&cur, ep, NULL);
       if (r < 0)
-	return r;
+        return r;
       l += r;
     }
     /* replacement */
@@ -108,26 +100,13 @@
   sp = (char*)(&ret->dnsnaptr_naptr[p.dnsp_nrr]);
   for (dns_rewind(&p, qdn), r = 0; dns_nextrr(&p, &rr); ++r) {
     cur = rr.dnsrr_dptr;
-
-    /* order */
-    ret->dnsnaptr_naptr[r].order = dns_get16(cur);
-    cur += 2;
-    /* preference */
-    ret->dnsnaptr_naptr[r].preference = dns_get16(cur);
-    cur += 2;
-    /* flags */
-    ret->dnsnaptr_naptr[r].flags = sp;
-    sp += dns_getstr(&cur, end, sp, DNS_MAXDN);
-    /* service */
-    ret->dnsnaptr_naptr[r].service = sp;
-    sp += dns_getstr(&cur, end, sp, DNS_MAXDN);
-    /* regexp */
-    ret->dnsnaptr_naptr[r].regexp = sp;
-    sp += dns_getstr(&cur, end, sp, DNS_MAXDN);
-    /* replacement */
-    ret->dnsnaptr_naptr[r].replacement = sp;
+    ret->dnsnaptr_naptr[r].order = dns_get16(cur); cur += 2;
+    ret->dnsnaptr_naptr[r].preference = dns_get16(cur); cur += 2;
+    sp += dns_getstr(&cur, end, (ret->dnsnaptr_naptr[r].flags = sp));
+    sp += dns_getstr(&cur, end, (ret->dnsnaptr_naptr[r].service = sp));
+    sp += dns_getstr(&cur, end, (ret->dnsnaptr_naptr[r].regexp = sp));
     dns_getdn(pkt, &cur, end, dn, sizeof(dn));
-    sp += dns_dntop(dn, sp, DNS_MAXNAME);
+    sp += dns_dntop(dn, (ret->dnsnaptr_naptr[r].replacement = sp), DNS_MAXNAME);
   }
   dns_stdrr_finish((struct dns_rr_null *)ret, sp, &p);
   *result = ret;
@@ -136,7 +115,7 @@
 
 struct dns_query *
 dns_submit_naptr(struct dns_ctx *ctx, const char *name, int flags,
-		 dns_query_naptr_fn *cbck, void *data) {
+                 dns_query_naptr_fn *cbck, void *data) {
   return
     dns_submit_p(ctx, name, DNS_C_IN, DNS_T_NAPTR, flags,
                  dns_parse_naptr, (dns_query_fn *)cbck, data);

Modified: udns/trunk/udns_rr_txt.c
===================================================================
--- udns/trunk/udns_rr_txt.c	2006-12-06 12:57:21 UTC (rev 2991)
+++ udns/trunk/udns_rr_txt.c	2006-12-06 14:32:59 UTC (rev 2992)
@@ -1,4 +1,4 @@
-/* $Id: udns_rr_txt.c,v 1.14 2005/04/20 06:44:34 mjt Exp $
+/* $Id: udns_rr_txt.c,v 1.15 2006/11/28 22:45:20 mjt Exp $
    parse/query TXT records
 
    Copyright (C) 2005  Michael Tokarev <mjt at corpit.ru>
@@ -78,7 +78,7 @@
     ret->dnstxt_txt[r].len = sp - ret->dnstxt_txt[r].txt;
     *sp++ = '\0';
   }
-  dns_stdrr_finish((struct dns_rr_null *)ret, sp, &p);
+  dns_stdrr_finish((struct dns_rr_null *)ret, (char*)sp, &p);
   *result = ret;
   return 0;
 }



More information about the Minisip-devel mailing list