fix: populate ldns submodule and add autotools to LDNS build stage

- Re-cloned zonemaster-ldns with --recurse-submodules so the bundled
  ldns C library source (including Changelog and configure.ac) is present
- Added autoconf, automake, libtool to Dockerfile.backend ldns-build stage
  so libtoolize + autoreconf can generate ldns/configure during make

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-21 08:33:38 +02:00
parent 8d4eaa1489
commit eaaa8f6a11
541 changed files with 138189 additions and 0 deletions

View File

@@ -0,0 +1,47 @@
# Standard installation pathnames
# See the file LICENSE for the license
SHELL = @SHELL@
VERSION = @PACKAGE_VERSION@
basesrcdir = $(shell basename `pwd`)
srcdir = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
mandir = @mandir@
datarootdir = @datarootdir@
CC = @CC@
CFLAGS = @CFLAGS@
CPPFLAGS = @CPPFLAGS@ @LIBSSL_CPPFLAGS@ -I../..
LDFLAGS = @LDFLAGS@ @LIBSSL_LDFLAGS@ -L../../.libs
LIBS = @LIBS@ @LIBSSL_SSL_LIBS@ -lldns
# Hmmm gcc 4.6.1 expects $(LIBS) as the last argument
COMPILE = $(CC) $(CPPFLAGS) $(CFLAGS)
LINK = $(CC) $(CFLAGS) $(LDFLAGS)
HEADER = config.h
TESTS = 12-unit-tests-dnssec
.PHONY: all clean realclean
%.o:
$(COMPILE) -c $(srcdir)/$*.c
all: $(TESTS)
12-unit-tests-dnssec: 12-unit-tests-dnssec.o
$(LINK) -o $@ $+ $(LIBS)
clean:
rm -f *.o
rm -f $(TESTS)
rm -f lua-rns
realclean: clean
rm -rf autom4te.cache/
rm -f config.log config.status aclocal.m4 config.h.in configure Makefile
rm -f config.h
confclean: clean
rm -rf config.log config.status config.h Makefile

View File

@@ -0,0 +1,133 @@
/*
*/
#include "config.h"
#include <ldns/ldns.h>
ldns_status
check_ldns_calc_keytag_part(const char *key_str, uint16_t expected_keytag)
{
ldns_rr *key_rr = NULL;
uint16_t keytag;
ldns_status result = LDNS_STATUS_OK;
if (ldns_rr_new_frm_str(&key_rr, key_str, 0, NULL, NULL) !=
LDNS_STATUS_OK) {
printf("Key creation failed.");
printf("Key: %s\n", key_str);
result = LDNS_STATUS_ERR;
} else {
keytag = ldns_calc_keytag(key_rr);
if (keytag == expected_keytag) {
printf("Keytag 1 correct.");
} else {
printf("Bad keytag, should be %u (got %u)for:\n", expected_keytag, keytag);
printf("%s\n", key_str);
result = LDNS_STATUS_ERR;
}
}
if (key_rr)
ldns_rr_free(key_rr);
return result;
}
ldns_status
check_ldns_calc_keytag(void)
{
const char *key_str;
uint16_t expected_keytag;
ldns_status result = LDNS_STATUS_OK;
key_str = "jelte.nlnetlabs.nl. IN DNSKEY 256 3 5 AQOraLfzarHAlFskVGwAGnX0LRjlcOiO6y5WM4Kz+QvZ9vX28h4lOvnf d5tkxnZm7ERLTAJoFq+1w/wl7VXs2Isz75BSZ7LQh3OT2xXnS6VT5ZxX ko/UCOdoGiKZZ63jHZ0jNSTCYy8+5rfvwRD8s3gGuErp5KcHg3V8VLUK SDNNEQ==";
expected_keytag = 42860;
if (check_ldns_calc_keytag_part(key_str, expected_keytag) != LDNS_STATUS_OK) {
result = LDNS_STATUS_ERR;
}
key_str = "sub.jelte.nlnetlabs.nl. IN DNSKEY 256 3 3 CI4CujZjrw4hjpAP8zMyntKEQJBV96M0OhZ5HCeZ5K46eGHEJUG6RglQ M2OVYY/qRqALDs/Ptzk+Hdb0oV3RF0+fUA5+R5gX1avgbhsEPhvIInYB OPsNaXWKMJarpH2b8xHkF4XQT4TdqAf8maQcKk/RujeKR6VnXbadZUNK +SZsNWSbaDuCHbT0rWpO9nVbfoQUnNWpk1hmOh4oIlFdBtBTPck3ND+g dQrj5eJcSx0zwqjJBJIC+JxWt2rFtIEztfHxmmjbeddC2TL41O/AFPJM vUh85dnd3b1gZRc5UvA7Z2I2+ZD16FjNrmuNkNEjnlet7oiJAC0fezzX sZYCjwHfEyeaS2YXGzzZCeQpMBzeBRh3eq8pVn8r4AaRcNt1gnXbVdjd TQvp5deIGoaAHMl3yy4n0QmXgRscSIsyfK9Gn7NrlGRlCxs9rfVwcWCD Nj2MuIComXGIUYJW+ck0Rhk9Sq6M3onhSjITY9/y/SpwBna6SLpFdpEm bLYKES4gShTxjtmhJSytH0pooq9qxJ8kyH+I";
expected_keytag = 13026;
if (check_ldns_calc_keytag_part(key_str, expected_keytag) != LDNS_STATUS_OK) {
result = LDNS_STATUS_ERR;
}
key_str = "sub.sub.jelte.nlnetlabs.nl. IN DNSKEY 256 3 1 AQPIQ2SNclMqdHu8afxVdbIVR/20vlDp2ZcEK5xFxDKVTunuq8BLAPr4 FvnbBQ4AkNYchecNcmQvKi/jJ7xwWqyqMAU1l+d6mZUTF6sC0ug9WQ/Q zG93nOBVLwGbmGTTXhrE/pRhS/o16Ab20zsbcdAb7PChQXSgByJKvT8W XumJ3FdOLhwmqQAnFuMnZC71/HAc4WjA+2zG1SNXnbTnC8Q/4/Fg/ygh 2GjT9Cj0hhFR+A2Hf+RXvkKsDwhdxWwJfW+IhAHUtwNKydsEvZM5UR2I PSytfzZ/fWKEx5BlxLZZNKzoeBtFHjHSeZU5Lb5DFnQJx5lcsd5MP2e8 +ppjVlg3";
expected_keytag = 22104;
if (check_ldns_calc_keytag_part(key_str, expected_keytag) != LDNS_STATUS_OK) {
result = LDNS_STATUS_ERR;
}
/* template for adding extra keys
key_str = "";
expected_keytag = ;
if (check_ldns_calc_keytag_part(key_str, expected_keytag) != LDNS_STATUS_OK) {
result = LDNS_STATUS_ERR;
}
*/
return result;
}
ldns_status
check_ldns_canonicalization(void)
{
const char rr_str1[] = "bla.nl. 1000 IN NS ns1.bla.nl.";
const char rr_str2[] = "BLA.NL. 1000 IN NS NS1.BlA.Nl.";
ldns_rr *rr1 = NULL, *rr2 = NULL;
ldns_status status = LDNS_STATUS_ERR;
int diff;
status = ldns_rr_new_frm_str(&rr1, rr_str1, 0, NULL, NULL);
if (status != LDNS_STATUS_OK) {
fprintf(stdout, "Error constructing rr: %s\n", rr_str1);
}
status = ldns_rr_new_frm_str(&rr2, rr_str2, 0, NULL, NULL);
if (status != LDNS_STATUS_OK) {
fprintf(stdout, "Error constructing rr: %s\n", rr_str2);
}
ldns_rr2canonical(rr1);
ldns_rr2canonical(rr2);
diff = ldns_rr_compare(rr1, rr2);
if (diff != 0) {
printf("Error, canonicalization does not work\n");
status = LDNS_STATUS_ERR;
} else {
status = LDNS_STATUS_OK;
}
if (rr1)
ldns_rr_free(rr1);
if (rr2)
ldns_rr_free(rr2);
return status;
}
int main(void)
{
int result = EXIT_SUCCESS;
if (check_ldns_calc_keytag() != LDNS_STATUS_OK) {
printf("ldns_calc_keytag() failed.\n");
result = EXIT_FAILURE;
}
if (check_ldns_canonicalization() != LDNS_STATUS_OK) {
printf("ldns_rr2canonical() failed.\n");
result = EXIT_FAILURE;
}
exit(result);
}

View File

@@ -0,0 +1,260 @@
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.57)
AC_INIT(libdns, 1.1.0, dns-team@nlnetlabs.nl,libdns)
AC_CONFIG_SRCDIR([12-unit-tests-dnssec.c])
OURCPPFLAGS=''
CPPFLAGS=${CPPFLAGS:-${OURCPPFLAGS}}
OURCFLAGS='-g'
CFLAGS=${CFLAGS:-${OURCFLAGS}}
AC_AIX
# Checks for programs.
AC_PROG_CC
AC_PROG_MAKE_SET
AC_CHECK_PROGS(libtool, [glibtool libtool15 libtool], [../libtool])
dnl routine to help check for compiler flags.
AC_DEFUN([CHECK_COMPILER_FLAG],
[
AC_REQUIRE([AC_PROG_CC])
AC_MSG_CHECKING(whether $CC supports -$1)
cache=`echo $1 | sed 'y%.=/+-%___p_%'`
AC_CACHE_VAL(cv_prog_cc_flag_$cache,
[
echo 'void f(){}' >conftest.c
if test -z "`$CC -$1 -c conftest.c 2>&1`"; then
eval "cv_prog_cc_flag_$cache=yes"
else
eval "cv_prog_cc_flag_$cache=no"
fi
rm -f conftest*
])
if eval "test \"`echo '$cv_prog_cc_flag_'$cache`\" = yes"; then
AC_MSG_RESULT(yes)
:
$2
else
AC_MSG_RESULT(no)
:
$3
fi
])
dnl routine to help check for needed compiler flags.
# if the given code compiles without the flag, execute argument 4
# if the given code only compiles with the flag, execute argument 3
# otherwise fail
AC_DEFUN([CHECK_COMPILER_FLAG_NEEDED],
[
AC_REQUIRE([AC_PROG_CC])
AC_MSG_CHECKING(whether we need -$1 as a flag for $CC)
cache=`echo $1 | sed 'y%.=/+-%___p_%'`
AC_CACHE_VAL(cv_prog_cc_flag_needed_$cache,
[
echo '$2' > conftest.c
echo 'void f(){}' >>conftest.c
if test -z "`$CC $CFLAGS -Werror -Wall -c conftest.c 2>&1`"; then
eval "cv_prog_cc_flag_needed_$cache=no"
else
[
if test -z "`$CC $CFLAGS $1 -Werror -Wall -c conftest.c 2>&1`"; then
eval "cv_prog_cc_flag_needed_$cache=yes"
else
echo 'Test with flag fails too!'
cat conftest.c
echo "$CC $CFLAGS $1 -Werror -Wall -c conftest.c 2>&1"
echo `$CC $CFLAGS $1 -Werror -Wall -c conftest.c`
exit 1
fi
]
fi
rm -f conftest*
])
if eval "test \"`echo '$cv_prog_cc_flag_needed_'$cache`\" = yes"; then
AC_MSG_RESULT(yes)
:
$3
else
AC_MSG_RESULT(no)
:
$4
fi
])
AC_TYPE_SIZE_T
CHECK_COMPILER_FLAG(O2, [CFLAGS="$CFLAGS -O2"])
CHECK_COMPILER_FLAG(std=c99, [C99FLAG="-std=c99"])
CHECK_COMPILER_FLAG(xc99, [C99FLAG="-xc99"])
AC_C_INLINE
AC_CHECK_TYPE(int8_t, char)
AC_CHECK_TYPE(int16_t, short)
AC_CHECK_TYPE(int32_t, int)
AC_CHECK_TYPE(int64_t, long long)
AC_CHECK_TYPE(uint8_t, unsigned char)
AC_CHECK_TYPE(uint16_t, unsigned short)
AC_CHECK_TYPE(uint32_t, unsigned int)
AC_CHECK_TYPE(uint64_t, unsigned long long)
AC_HEADER_STDBOOL
AC_CHECK_HEADERS([sys/types.h getopt.h stdlib.h stdio.h assert.h netinet/in.h ctype.h time.h pcap.h arpa/inet.h sys/time.h sys/socket.h sys/select.h],,, [AC_INCLUDES_DEFAULT])
AC_CHECK_HEADERS([netinet/in_systm.h net/if.h netinet/ip.h netinet/udp.h netinet/if_ether.h netinet/ip6.h],,, [
AC_INCLUDES_DEFAULT
#ifdef HAVE_NETINET_IN_SYSTM_H
#include <netinet/in_systm.h>
#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_NET_IF_H
#include <net/if.h>
#endif])
AC_CHECK_HEADERS([sys/param.h sys/mount.h],,,
[AC_INCLUDES_DEFAULT]
[
[
#if HAVE_SYS_PARAM_H
# include <sys/param.h>
#endif
]
])
# check to see if libraries are needed for these functions.
AC_CHECK_LIB(socket, socket)
AC_CHECK_LIB(nsl, inet_pton)
# ssl dir if needed
AC_ARG_WITH(ssl, AC_HELP_STRING([--with-ssl=PATH], [set ssl library directory]),
[
CPPFLAGS="$CPPFLAGS -I$withval/include"
LDFLAGS="$LDFLAGS -L$withval -L$withval/lib"
])
# check for ldns
AC_ARG_WITH(ldns,
AC_HELP_STRING([--with-ldns=PATH specify prefix of path of ldns library to use])
,
[
specialldnsdir="$withval"
CPPFLAGS="$CPPFLAGS -I$withval/include"
LDFLAGS="$LDFLAGS -L$withval -L$withval/lib"
LDNSDIR="$withval"
]
)
# check for ldns development source tree
AC_MSG_CHECKING([for ldns devel source])
ldns_dev_dir=..
if test -f $ldns_dev_dir/ldns/util.h && \
grep LDNS_VERSION $ldns_dev_dir/ldns/util.h >/dev/null; then
ldns_version=`grep LDNS_VERSION $ldns_dev_dir/ldns/util.h | sed -e 's/^.*"\(.*\)".*$/\1/'`
AC_MSG_RESULT([using $ldns_dev_dir with $ldns_version])
CPPFLAGS="$CPPFLAGS -I$ldns_dev_dir/include"
LDFLAGS="$LDFLAGS -L$ldns_dev_dir -L$ldns_dev_dir/lib"
LIBS="$LIBS -lldns"
AC_DEFINE(HAVE_LIBLDNS, 1, [If the ldns library is available.])
LDNSDIR="$ldns_dev_dir"
else
AC_MSG_RESULT([no])
AC_CHECK_LIB(ldns, ldns_rr_new,, [
AC_MSG_ERROR([Can't find ldns library])
]
)
fi
AC_SUBST(LDNSDIR)
#AC_CHECK_HEADER(ldns/ldns.h,, [
# AC_MSG_ERROR([Can't find ldns headers (make copy-headers in devel source.)])
# ], [AC_INCLUDES_DEFAULT]
#)
AC_CHECK_LIB(pcap, pcap_open_offline,, [
AC_MSG_WARN([Can't find pcap library (needed for ldns-dpa, will not build dpa now.)])
]
)
AC_CHECK_FUNCS(isblank)
AH_BOTTOM([
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <assert.h>
#if STDC_HEADERS
#include <stdlib.h>
#include <stddef.h>
#endif
#ifdef HAVE_STDINT_H
#include <stdint.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
#ifdef HAVE_NETINET_UDP_H
#include <netinet/udp.h>
#endif
#ifdef HAVE_TIME_H
#include <time.h>
#endif
#ifdef HAVE_PCAP_H
#include <pcap.h>
#endif
#ifdef HAVE_NETINET_IN_SYSTM_H
#include <netinet/in_systm.h>
#endif
#ifdef HAVE_NETINET_IP_H
#include <netinet/ip.h>
#endif
#ifdef HAVE_NET_IF_H
#include <net/if.h>
#endif
#ifdef HAVE_NETINET_IF_ETHER_H
#include <netinet/if_ether.h>
#endif
extern char *optarg;
extern int optind, opterr;
#ifndef EXIT_FAILURE
#define EXIT_FAILURE 1
#endif
#ifndef EXIT_SUCCESS
#define EXIT_SUCCESS 0
#endif
#ifdef S_SPLINT_S
#define FD_ZERO(a) /* a */
#define FD_SET(a,b) /* a, b */
#endif
])
AC_CONFIG_FILES([12-unit-tests-dnssec.Makefile])
AC_CONFIG_HEADER([config.h])
AC_OUTPUT

View File

@@ -0,0 +1,16 @@
BaseName: 12-unit-tests-dnssec
Version: 1.0
Description: Run unit tests on dnssec.c
CreationDate: Wed Apr 24 15:48:07 CEST 2013
Maintainer: Jelte Jansen
Category:
Component:
CmdDepends:
Depends:
Help: 12-unit-tests-dnssec.help
Pre: 12-unit-tests-dnssec.pre
Post:
Test: 12-unit-tests-dnssec.test
AuxFiles: 12-unit-tests-dnssec.Makefile.in 12-unit-tests-dnssec.configure.ac 12-unit-tests-dnssec.c
Passed:
Failure:

View File

@@ -0,0 +1,4 @@
TODO :p
Please describe how to use this test.
i.e. tpkg -a ARG exe testname:
ARG is used to ...

View File

@@ -0,0 +1,40 @@
# #-- 10-older-test.pre--#
# source the master var file when it's there
[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
# use .tpkg.var.test for in test variable passing
[ -f .tpkg.var.test ] && source .tpkg.var.test
# svnserve resets the path, you may need to adjust it, like this:
export PATH=$PATH:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin:.
conf=`which autoconf` ||\
conf=`which autoconf-2.59` ||\
conf=`which autoconf-2.61` ||\
conf=`which autoconf259`
hdr=`which autoheader` ||\
hdr=`which autoheader-2.59` ||\
hdr=`which autoheader-2.61` ||\
hdr=`which autoheader259`
mk=`which gmake` ||\
mk=`which make`
echo "autoconf: $conf"
echo "autoheader: $hdr"
echo "make: $mk"
if [ ! $mk ] || [ ! $conf ] || [ ! $hdr ] ; then
echo "Error, one or more build tools not found, aborting"
exit 1
fi;
opts=`../../config.status --config`
echo options: $opts
#$conf 12-unit-tests-dnssec.configure.ac > configure && \
#chmod +x configure && \
#$hdr 12-unit-tests-dnssec.configure.ac &&\
#eval ./configure --with-ldns=../.. "$opts" && \
../../config.status --file 12-unit-tests-dnssec.Makefile
$mk -f 12-unit-tests-dnssec.Makefile

View File

@@ -0,0 +1,13 @@
# #-- 10-older-test.test --#
# source the master var file when it's there
[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
# use .tpkg.var.test for in test variable passing
[ -f .tpkg.var.test ] && source .tpkg.var.test
# svnserve resets the path, you may need to adjust it, like this:
#PATH=$PATH:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin:.
export LD_LIBRARY_PATH="../../.libs:$LD_LIBRARY_PATH"
export DYLD_LIBRARY_PATH="../../.libs:$DYLD_LIBRARY_PATH"
# run the test
./12-unit-tests-dnssec