[Buildroot] [PATCH] new package: adns

Arnout Vandecappelle arnout at mind.be
Sat Feb 23 17:48:16 UTC 2013


On 15/02/13 21:16, Stefan Fröberg wrote:
> GNU adns
>
> Advanced, easy to use, asynchronous-capable DNS client library and utilities.

  It's not really necessary to repeat the help text in the commit message.

>
> adns is a resolver library for C (and C++) programs, and a collection of
> useful DNS resolver utilities.

  Isn't this just repeating the above?

>
> Signed-off-by: Stefan Fröberg <stefan.froberg at petroprogram.com>
[snip]
> diff --git a/package/adns/adns-1.4-cnamechain.patch b/package/adns/adns-1.4-cnamechain.patch
> new file mode 100644
> index 0000000..1eadf54
> --- /dev/null
> +++ b/package/adns/adns-1.4-cnamechain.patch
> @@ -0,0 +1,1275 @@
> +[ADNS] Re: CNAME chains

  Could you start the patch with a link to the place where you found it, 
and your Signed-off-by?

> +Brad Spencer spencer at infointeractive.com
> +Mon, 28 Aug 2006 14:43:00 -0300
[snip]
> +diff -Naur adns-1.4.org/src/internal.h adns-1.4/src/internal.h
> +--- adns-1.4.org/src/internal.h	2013-01-02 19:55:38.935194976 +0200
> ++++ adns-1.4/src/internal.h	2013-01-02 19:55:47.129330386 +0200
> +@@ -231,6 +231,9 @@
> +   int cname_dglen, cname_begin;
> +   /* If non-0, has been allocated using . */
> +
> ++  int cname_alias_hops_left;
> ++  /* The number of cname alias hops we will allow */
> ++
> +   vbuf search_vb;
> +   int search_origlen, search_pos, search_doneabs;
> +   /* Used by the searching algorithm.  The query domain in textual form
> +diff -Naur adns-1.4.org/src/internal.h.orig adns-1.4/src/internal.h.orig
> +--- adns-1.4.org/src/internal.h.orig	1970-01-01 02:00:00.000000000 +0200
> ++++ adns-1.4/src/internal.h.orig	2006-04-08 17:36:57.000000000 +0300

  This file is redundant.

[snip]
> +diff -Naur adns-1.4.org/src/query.c adns-1.4/src/query.c
> +--- adns-1.4.org/src/query.c	2013-01-02 19:55:38.931192468 +0200
> ++++ adns-1.4/src/query.c	2013-01-02 19:55:47.131331642 +0200
> +@@ -63,6 +63,8 @@
> +
> +   qu->cname_dgram= 0;
> +   qu->cname_dglen= qu->cname_begin= 0;
> ++  /* Allow CNAME chains up to some sane limit */
> ++  qu->cname_alias_hops_left = 10;
> +
> +   adns__vbuf_init(&qu->search_vb);
> +   qu->search_origlen= qu->search_pos= qu->search_doneabs= 0;
> +diff -Naur adns-1.4.org/src/reply.c adns-1.4/src/reply.c
> +--- adns-1.4.org/src/reply.c	2013-01-02 19:55:38.936195603 +0200
> ++++ adns-1.4/src/reply.c	2013-01-02 19:55:47.134333524 +0200
> +@@ -190,12 +190,13 @@
> +       if (qu->flags & adns_qf_cname_forbid) {
> + 	adns__query_fail(qu,adns_s_prohibitedcname);
> + 	return;
> +-      } else if (qu->cname_dgram) { /* Ignore second and subsequent CNAME(s) */
> ++      } else if (qu->cname_dgram && --(qu->cname_alias_hops_left) <= 0) { /* Don't follow "too long" CNAME chains */
> + 	adns__debug(ads,serv,qu,"allegedly canonical name %s"
> +-		    " is actually alias for %s", qu->answer->cname,
> ++		    " is actually alias for %s and aliases too deep",
> ++                    qu->answer->cname,
> + 		    adns__diag_domain(ads,serv,qu, &qu->vb,
> + 				      dgram,dglen,rdstart));
> +-	adns__query_fail(qu,adns_s_prohibitedcname);
> ++	adns__query_fail(qu,adns_s_norecurse);
> + 	return;
> +       } else if (wantedrrs) { /* Ignore CNAME(s) after RR(s). */
> + 	adns__debug(ads,serv,qu,"ignoring CNAME (to %s) coexisting with RR",
> +diff -Naur adns-1.4.org/src/reply.c.orig adns-1.4/src/reply.c.orig
> +--- adns-1.4.org/src/reply.c.orig	1970-01-01 02:00:00.000000000 +0200
> ++++ adns-1.4/src/reply.c.orig	2006-04-08 17:36:57.000000000 +0300

  This file is redundant.

[snip]
> diff --git a/package/adns/adns-1.4-destdir.patch b/package/adns/adns-1.4-destdir.patch
> new file mode 100644
> index 0000000..3270ed4
> --- /dev/null
> +++ b/package/adns/adns-1.4-destdir.patch
> @@ -0,0 +1,54 @@
> +Fix installation directory
> +Upstream-Status: Pending

  Is this a patch you wrote yourself or a patch from somewhere else? In 
either case, it requires your Signed-off-by.

[snip]

> diff --git a/package/adns/adns-1.4-ipv6.patch b/package/adns/adns-1.4-ipv6.patch
> new file mode 100644
> index 0000000..8d02257
> --- /dev/null
> +++ b/package/adns/adns-1.4-ipv6.patch
> @@ -0,0 +1,2725 @@
> +Add IPv6 support
> +Upstream-Status: Pending

  Ditto.

  Also, this looks like a feature patch, not a cross-build patch, so we 
normally would not include it in buildroot...

> +
> +diff --git a/Makefile b/Makefile
> +index 5ba3e19..a87bc87 100644
> +--- a/Makefile
> ++++ b/Makefile
> +@@ -56,9 +56,9 @@ dist_tmp=dist_tmp/adns-$(DISTVERSION)
> + dist:			distprep
> + 	rm -rf dist_tmp*
> + 	mkdir dist_tmp $(dist_tmp)
> +-	find \( -name CVS -o -name dist_tmp* \) -prune -o -type d -print | \
> ++	find . \( -name CVS -o -name dist_tmp* \) -prune -o -type d -print | \
> + 		sed -e 's#.*#mkdir -p $(dist_tmp)/&#' | sh
> +-	find \( -name CVS -o -name dist_tmp* \) -prune -o -type f -print | \
> ++	find . \( -name CVS -o -name dist_tmp* \) -prune -o -type f -print | \

  These have nothing to do with IPv6, and anyway pointless.

> + 		sed -e 's#.*#ln & $(dist_tmp)/&#' | sh
> + 	$(MAKE) -C dist_tmp/adns-$(DISTVERSION) distclean
> + 	cd dist_tmp && tar cf ../$(dist_tmp).tar `basename $(dist_tmp)`
> +diff --git a/Makefile.in b/Makefile.in
> +index 6e2e449..0babf0e 100644
> +--- a/Makefile.in
> ++++ b/Makefile.in
> +@@ -56,9 +56,9 @@ dist_tmp=dist_tmp/adns-$(DISTVERSION)
> + dist:			distprep
> + 	rm -rf dist_tmp*
> + 	mkdir dist_tmp $(dist_tmp)
> +-	find \( -name CVS -o -name dist_tmp* \) -prune -o -type d -print | \
> ++	find . \( -name CVS -o -name dist_tmp* \) -prune -o -type d -print | \
> + 		sed -e 's#.*#mkdir -p $(dist_tmp)/&#' | sh
> +-	find \( -name CVS -o -name dist_tmp* \) -prune -o -type f -print | \
> ++	find . \( -name CVS -o -name dist_tmp* \) -prune -o -type f -print | \

  Ditto.

> + 		sed -e 's#.*#ln & $(dist_tmp)/&#' | sh
> + 	$(MAKE) -C dist_tmp/adns-$(DISTVERSION) distclean
> + 	cd dist_tmp && tar cf ../$(dist_tmp).tar `basename $(dist_tmp)`
> +diff --git a/client/adh-main.c b/client/adh-main.c
> +index b6f3bd4..f2032ec 100644
> +--- a/client/adh-main.c
> ++++ b/client/adh-main.c
> +@@ -91,6 +91,7 @@ void of_type(const struct optioninfo *oi, const char *arg, const char *arg2) {
> +     { adns_r_rp,     "rp"     },
> +     { adns_r_srv,    "srv"    },
> +     { adns_r_addr,   "addr"   },
> ++    { adns_r_srv,    "srv"    },
> +
> +     /* types with only one version */
> +     { adns_r_cname,  "cname"  },
> +@@ -99,6 +100,7 @@ void of_type(const struct optioninfo *oi, const char *arg, const char *arg2) {
> +
> +     /* raw versions */
> +     { adns_r_a,        "a"    },
> ++    { adns_r_aaaa,     "aaaa" },
> +     { adns_r_ns_raw,   "ns-"  },
> +     { adns_r_soa_raw,  "soa-" },
> +     { adns_r_ptr_raw,  "ptr-" },
> +diff --git a/client/adh-opts.c b/client/adh-opts.c
> +index 08310e0..7b17c89 100644
> +--- a/client/adh-opts.c
> ++++ b/client/adh-opts.c
> +@@ -32,6 +32,8 @@ int ov_verbose= 0;
> + adns_rrtype ov_type= adns_r_none;
> + int ov_search=0, ov_qc_query=0, ov_qc_anshost=0, ov_qc_cname=1;
> + int ov_tcp=0, ov_cname=0, ov_format=fmt_default;
> ++int ov_ipflags=0;
> ++int ov_ip6mapped=0;
> + char *ov_id= 0;
> + struct perqueryflags_remember ov_pqfr = { 1,1,1, tm_none };
> +
> +@@ -114,6 +116,16 @@ static const struct optioninfo perquery_options[]= {
> +   { ot_value,            "CNAME ok for query domain, but not in RRs (default)",
> +     "Cs", "cname-ok",      &ov_cname, 0 },
> +
> ++  { ot_desconly, "per-query IPv6 mode:" },
> ++  { ot_value,            "Ask only for IPv6 addresses",
> ++    "I6", "ip6-only", &ov_ipflags, adns_qf_ip6 },
> ++  { ot_value,            "Ask only for IPv4 addresses",
> ++    "I4", "ip4-only", &ov_ipflags, adns_qf_ip4 },
> ++  { ot_value,            "Ask for both IPv4 and IPv6 addresses (default)",
> ++    "IX", "ipv6-mixed", &ov_ipflags, adns_qf_ip4|adns_qf_ip6 },
> ++  { ot_value,            "Ask for both IPv4 and IPv6 addresses, using IPv4-mapped IPv6 addresses",
> ++    "IM", "ipv6-mapped", &ov_ip6mapped, adns_qf_ip6mapped },
> ++
> +   { ot_desconly, "asynchronous/pipe mode options:" },
> +   { ot_funcarg,          "Set <id>, default is decimal sequence starting 0",
> +     0, "asynch-id",        0,0, &of_asynch_id, "id" },
> +diff --git a/client/adh-query.c b/client/adh-query.c
> +index 125bb33..2186004 100644
> +--- a/client/adh-query.c
> ++++ b/client/adh-query.c
> +@@ -92,24 +92,37 @@ static void prep_query(struct query_node **qun_r, int *quflags_r) {
> +     (ov_qc_query ? adns_qf_quoteok_query : 0) |
> +     (ov_qc_anshost ? adns_qf_quoteok_anshost : 0) |
> +     (ov_qc_cname ? 0 : adns_qf_quoteok_cname) |
> ++    ov_ipflags | ov_ip6mapped |
> +     ov_cname,
> +
> +   *qun_r= qun;
> + }
> +
> ++static int a2addr(adns_rr_addr *rr, const char *addr) {
> ++  char *p;
> ++  if (strchr(addr, ':')) {
> ++    memset(&rr->addr.inet6, 0, sizeof(rr->addr.inet6));

  Is addr.inet6 defined if the toolchain doesn't have IPv6 support? Same 
for AF_INET6.

> ++    rr->addr.sa.sa_family = AF_INET6;
> ++    p = (char *) &rr->addr.inet6.sin6_addr;
> ++  }
> ++  else {
> ++    memset(&rr->addr.inet, 0, sizeof(rr->addr.inet));
> ++    rr->addr.sa.sa_family = AF_INET;
> ++    p = (char *) &rr->addr.inet.sin_addr;
> ++  }
> ++  return inet_pton(rr->addr.sa.sa_family, addr, p) > 0;
> ++}
> ++
> + void of_ptr(const struct optioninfo *oi, const char *arg, const char *arg2) {
> +   struct query_node *qun;
> +   int quflags, r;
> +-  struct sockaddr_in sa;
> +-
> +-  memset(&sa,0,sizeof(sa));
> +-  sa.sin_family= AF_INET;
> +-  if (!inet_aton(arg,&sa.sin_addr)) usageerr("invalid IP address %s",arg);
> ++  adns_rr_addr rr;
> +
> ++  if (!a2addr(&rr, arg)) usageerr("invalid IP address %s",arg);
> +   prep_query(&qun,&quflags);
> +   qun->owner= xstrsave(arg);
> +   r= adns_submit_reverse(ads,
> +-			 (struct sockaddr*)&sa,
> ++			 &rr.addr.sa,
> + 			 ov_type == adns_r_none ? adns_r_ptr : ov_type,
> + 			 quflags,
> + 			 qun,
> +@@ -122,17 +135,14 @@ void of_ptr(const struct optioninfo *oi, const char *arg, const char *arg2) {
> + void of_reverse(const struct optioninfo *oi, const char *arg, const char *arg2) {
> +   struct query_node *qun;
> +   int quflags, r;
> +-  struct sockaddr_in sa;
> +-
> +-  memset(&sa,0,sizeof(sa));
> +-  sa.sin_family= AF_INET;
> +-  if (!inet_aton(arg,&sa.sin_addr)) usageerr("invalid IP address %s",arg);
> ++  adns_rr_addr rr;
> +
> ++  if (!a2addr(&rr, arg)) usageerr("invalid IP address %s",arg);
> +   prep_query(&qun,&quflags);
> +   qun->owner= xmalloc(strlen(arg) + strlen(arg2) + 2);
> +   sprintf(qun->owner, "%s %s", arg,arg2);
> +   r= adns_submit_reverse_any(ads,
> +-			     (struct sockaddr*)&sa, arg2,
> ++			     &rr.addr.sa, arg2,
> + 			     ov_type == adns_r_none ? adns_r_txt : ov_type,
> + 			     quflags,
> + 			     qun,
> +diff --git a/client/adnshost.h b/client/adnshost.h
> +index fcc96a3..7e2341a 100644
> +--- a/client/adnshost.h
> ++++ b/client/adnshost.h
> +@@ -81,6 +81,8 @@ extern int ov_verbose;
> + extern adns_rrtype ov_type;
> + extern int ov_search, ov_qc_query, ov_qc_anshost, ov_qc_cname;
> + extern int ov_tcp, ov_cname, ov_format;
> ++extern int ov_ipflags;
> ++extern int ov_ip6mapped;
> + extern char *ov_id;
> + extern struct perqueryflags_remember ov_pqfr;
> +
> +diff --git a/client/adnstest.c b/client/adnstest.c
> +index 550cf27..ae70285 100644
> +--- a/client/adnstest.c
> ++++ b/client/adnstest.c
> +@@ -119,13 +119,16 @@ static const adns_rrtype defaulttypes[]= {
> +   adns_r_ptr_raw,
> +   adns_r_hinfo,
> +   adns_r_mx_raw,
> ++  adns_r_srv_raw,
> +   adns_r_txt,
> +   adns_r_rp_raw,
> ++  adns_r_aaaa, /* Does the order matter? */
> +
> +   adns_r_addr,
> +   adns_r_ns,
> +   adns_r_ptr,
> +   adns_r_mx,
> ++  adns_r_srv,
> +
> +   adns_r_soa,
> +   adns_r_rp,
> +diff --git a/regress/case-connfail.sys b/regress/case-connfail.sys
> +index b62923b..2064368 100644
> +--- a/regress/case-connfail.sys
> ++++ b/regress/case-connfail.sys

  If we keep this patch in buildroot, I wouldn't include the regression 
test changes. We anyway don't run the tests.

[snip]
> +diff --git a/regress/case-flags10.sys b/regress/case-flags10.sys
[snip]
> +diff --git a/regress/case-longdom1.sys b/regress/case-longdom1.sys
[snip]
> +diff --git a/regress/case-longdomsrch0.sys b/regress/case-longdomsrch0.sys
[snip]
> +diff --git a/regress/case-longlab1.sys b/regress/case-longlab1.sys
[snip]
> +diff --git a/regress/case-tcpmultipart.sys b/regress/case-tcpmultipart.sys
[snip]
> +diff --git a/regress/case-timeout.sys b/regress/case-timeout.sys
[snip]
> +diff --git a/regress/case-unknownq.sys b/regress/case-unknownq.sys
[snip]
> +diff --git a/regress/hcommon.c b/regress/hcommon.c
[snip]
> +diff --git a/regress/hcommon.c.m4 b/regress/hcommon.c.m4
[snip]
> +diff --git a/regress/hplayback.c b/regress/hplayback.c
[snip]
> +diff --git a/regress/hplayback.c.m4 b/regress/hplayback.c.m4
[snip]
> +diff --git a/regress/hrecord.c b/regress/hrecord.c
[snip]
> +diff --git a/regress/hsyscalls.i4 b/regress/hsyscalls.i4
[snip]

  All of the above can be removed...

> +diff --git a/src/adns.h b/src/adns.h
> +index 34f9f49..aad05fd 100644
> +--- a/src/adns.h
> ++++ b/src/adns.h
> +@@ -71,6 +71,10 @@
> + extern "C" { /* I really dislike this - iwj. */
> + #endif
> +
> ++#ifndef AF_INET6
> ++#include "adns-in6fake.h"
> ++#endif

  Ah, I guess this answers my question about addr.inet6 being defined...

> ++
> + /* All struct in_addr anywhere in adns are in NETWORK byte order. */

[snip]

  Rest of the patch should stay (except for it being a feature-adding patch).

  BTW, is this patch really 4 years old? Does that imply that adns is in 
fact dead?


> diff --git a/package/adns/adns-1.4-rh514838.patch b/package/adns/adns-1.4-rh514838.patch
> new file mode 100644
> index 0000000..d0da303
> --- /dev/null
> +++ b/package/adns/adns-1.4-rh514838.patch
> @@ -0,0 +1,26 @@
> +Fixes Bug 514838

  A bit more explanation would be useful :-) And add your Sob.

> +
> +Upstream-Status: Pending
> +URL: https://bugzilla.redhat.com/show_bug.cgi?id=514838
> +
> +diff -up adns-1.4/src/general.c.rh514838 adns-1.4/src/general.c
> +--- adns-1.4/src/general.c.rh514838	2006-04-08 16:36:57.000000000 +0200
> ++++ adns-1.4/src/general.c	2009-08-06 13:55:06.752562767 +0200
> +@@ -267,6 +267,8 @@ static const struct sinfo {
> +   SINFO( nodata,              "No such data"                                 )
> + };
> +
> ++static const char *unknown_error_str = "unknown error code";
> ++
> + static int si_compar(const void *key, const void *elem) {
> +   const adns_status *st= key;
> +   const struct sinfo *si= elem;
> +@@ -283,7 +285,7 @@ const char *adns_strerror(adns_status st
> +   const struct sinfo *si;
> +
> +   si= findsinfo(st);
> +-  return si->string;
> ++  return (si == NULL) ? unknown_error_str : si->string;
> + }
> +
> + const char *adns_errabbrev(adns_status st) {
> diff --git a/package/adns/adns.mk b/package/adns/adns.mk
> new file mode 100644
> index 0000000..be4aefd
> --- /dev/null
> +++ b/package/adns/adns.mk
> @@ -0,0 +1,15 @@
> +#############################################################
> +#
> +# adns
> +#
> +#############################################################
> +
> +ADNS_VERSION = 1.4
> +ADNS_SOURCE = adns-$(ADNS_VERSION).tar.gz
> +ADNS_SITE = http://www.chiark.greenend.org.uk/~ian/adns/ftp/
> +ADNS_AUTORECONF = YES
> +ADNS_INSTALL_STAGING = YES
> +ADNS_CONF_OPT += --enable-dynamic=elf

  Shouldn't this be in an ifeq ($(BR2_PREFER_STATIC_LIB),)?

> +
> +$(eval $(autotools-package))
> +

  Redundant empty line at end of file.


-- 
Arnout Vandecappelle                          arnout at mind be
Senior Embedded Software Architect            +32-16-286500
Essensium/Mind                                http://www.mind.be
G.Geenslaan 9, 3001 Leuven, Belgium           BE 872 984 063 RPR Leuven
LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle
GPG fingerprint:  7CB5 E4CC 6C2E EFD4 6E3D A754 F963 ECAB 2450 2F1F


More information about the buildroot mailing list