static int ns_inuse = 0;
static int master_inuse = 0;
static int ns_total = 0;
+static int ns_alloc = 0;
static int master_total = 0;
+static int master_alloc = 0;
static isc_sockaddr_t *localaddr4 = NULL;
static isc_sockaddr_t *localaddr6 = NULL;
static const char *keyfile = NULL;
if (master_servers != NULL && master_servers != servers)
isc_mem_put(gmctx, master_servers,
- master_total * sizeof(isc_sockaddr_t));
+ master_alloc * sizeof(isc_sockaddr_t));
master_servers = servers;
master_total = ns_total;
+ master_alloc = ns_alloc;
master_inuse = ns_inuse;
}
*/
if (master_servers != NULL && master_servers != servers)
isc_mem_put(gmctx, master_servers,
- master_total * sizeof(isc_sockaddr_t));
+ master_alloc * sizeof(isc_sockaddr_t));
if (servers != NULL)
- isc_mem_put(gmctx, servers, ns_total * sizeof(isc_sockaddr_t));
+ isc_mem_put(gmctx, servers, ns_alloc * sizeof(isc_sockaddr_t));
if (localaddr4 != NULL)
isc_mem_put(gmctx, localaddr4, sizeof(isc_sockaddr_t));
if (servers != NULL) {
if (master_servers == servers)
master_servers = NULL;
- isc_mem_put(gmctx, servers, ns_total * sizeof(isc_sockaddr_t));
+ isc_mem_put(gmctx, servers, ns_alloc * sizeof(isc_sockaddr_t));
}
ns_inuse = 0;
default_servers = !local_only;
- ns_total = (have_ipv4 ? 1 : 0) + (have_ipv6 ? 1 : 0);
- servers = isc_mem_get(gmctx, ns_total * sizeof(isc_sockaddr_t));
+ ns_total = ns_alloc = (have_ipv4 ? 1 : 0) + (have_ipv6 ? 1 : 0);
+ servers = isc_mem_get(gmctx, ns_alloc * sizeof(isc_sockaddr_t));
if (servers == NULL)
fatal("out of memory");
&in6, dnsport);
}
} else {
- ns_total = lwconf->nsnext;
- servers = isc_mem_get(gmctx, ns_total * sizeof(isc_sockaddr_t));
+ ns_total = ns_alloc = lwconf->nsnext;
+ servers = isc_mem_get(gmctx, ns_alloc * sizeof(isc_sockaddr_t));
if (servers == NULL)
fatal("out of memory");
for (i = 0; i < ns_total; i++) {
setup_keyfile(gmctx, glctx);
}
-static void
+static int
get_addresses(char *host, in_port_t port,
isc_sockaddr_t *sockaddr, int naddrs)
{
if (result != ISC_R_SUCCESS)
fatal("couldn't get address for '%s': %s",
host, isc_result_totext(result));
+ return (count);
}
static void
if (servers != NULL) {
if (master_servers == servers)
master_servers = NULL;
- isc_mem_put(gmctx, servers, ns_total * sizeof(isc_sockaddr_t));
+ isc_mem_put(gmctx, servers, ns_alloc * sizeof(isc_sockaddr_t));
}
default_servers = ISC_FALSE;
- ns_total = MAX_SERVERADDRS;
+ ns_alloc = MAX_SERVERADDRS;
ns_inuse = 0;
- servers = isc_mem_get(gmctx, ns_total * sizeof(isc_sockaddr_t));
+ servers = isc_mem_get(gmctx, ns_alloc * sizeof(isc_sockaddr_t));
if (servers == NULL)
fatal("out of memory");
- memset(servers, 0, ns_total * sizeof(isc_sockaddr_t));
- get_addresses(server, (in_port_t)port, servers, ns_total);
+ memset(servers, 0, ns_alloc * sizeof(isc_sockaddr_t));
+ ns_total = get_addresses(server, (in_port_t)port, servers, ns_alloc);
return (STATUS_MORE);
}
FIND_TIMEOUT, 3,
global_task, recvsoa, reqinfo,
&request);
- check_result(result, "dns_request_createvia");
+ check_result(result, "dns_request_createvia3");
requests++;
return;
}
if (master_servers != NULL && master_servers != servers)
isc_mem_put(gmctx, master_servers,
- master_total * sizeof(isc_sockaddr_t));
- master_total = MAX_SERVERADDRS;
- size = master_total * sizeof(isc_sockaddr_t);
+ master_alloc * sizeof(isc_sockaddr_t));
+ master_alloc = MAX_SERVERADDRS;
+ size = master_alloc * sizeof(isc_sockaddr_t);
master_servers = isc_mem_get(gmctx, size);
if (master_servers == NULL)
fatal("out of memory");
memset(master_servers, 0, size);
- get_addresses(serverstr, dnsport, master_servers, master_total);
+ master_total = get_addresses(serverstr, dnsport,
+ master_servers, master_alloc);
master_inuse = 0;
} else
master_from_servers();
default_servers ? NULL : tsigkey,
FIND_TIMEOUT * 20, FIND_TIMEOUT, 3,
global_task, recvsoa, reqinfo, request);
- check_result(result, "dns_request_createvia");
+ check_result(result, "dns_request_createvia3");
requests++;
}
[ $ret = 0 ] || { echo I:failed; status=1; }
n=`expr $n + 1`
+ret=0
echo "I:check that TYPE=0 additional data is handled ($n)"
echo "a0e4280000010000000000010000060001c00c000000fe000000000000" |
$PERL ../packet.pl -a 10.53.0.1 -p 5300 -t tcp > /dev/null
[ $ret = 0 ] || { echo I:failed; status=1; }
n=`expr $n + 1`
+ret=0
echo "I:check that update to undefined class is handled ($n)"
echo "a0e4280000010001000000000000060101c00c000000fe000000000000" |
$PERL ../packet.pl -a 10.53.0.1 -p 5300 -t tcp > /dev/null
[ $ret = 0 ] || { echo I:failed; status=1; }
n=`expr $n + 1`
+ret=0
echo "I:check that address family mismatch is handled ($n)"
$NSUPDATE <<END > /dev/null 2>&1 && ret=1
server ::1
n=`expr $n + 1`
+ret=0
echo "I:check that unixtime serial number is correctly generated ($n)"
oldserial=`$DIG +short unixtime.nil. soa @10.53.0.1 -p 5300 | awk '{print $3}'` || ret=1
$NSUPDATE <<END > /dev/null 2>&1 || ret=1
@10.53.0.1 axfr -p 5300 > dig.out.ns1 || ret=1
[ $ret = 0 ] || { echo I:failed; status=1; }
+ret=0
echo "I:fetching second copy of test zone"
$DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd example.nil.\
@10.53.0.2 axfr -p 5300 > dig.out.ns2 || ret=1
+ret=0
echo "I:testing that rndc stop updates the master file"
$NSUPDATE -k ns1/ddns.key <<END > /dev/null || ret=1
server 10.53.0.1 5300
grep "records in zone (4) exceeds max-records (3)" ns3/named.run > /dev/null || ret=1
[ $ret = 0 ] || { echo I:failed; status=1; }
+n=`expr $n + 1`
+ret=0
+echo "I:check whether valid addresses are used for master failover ($n)"
+$NSUPDATE -t 1 <<END > nsupdate.out-$n 2>&1 && ret=1
+server 10.53.0.4 5300
+zone unreachable.
+update add unreachable. 600 A 192.0.2.1
+send
+END
+grep "; Communication with 10.53.0.4#5300 failed: timed out" nsupdate.out-$n > /dev/null 2>&1 || ret=1
+grep "not implemented" nsupdate.out-$n > /dev/null 2>&1 && ret=1
+[ $ret = 0 ] || { echo I:failed; status=1; }
+
#
# Add client library tests here
#
n=`expr $n + 1`
+ret=0
echo "I:check that dns_client_update handles prerequisite NXDOMAIN failure ($n)"
$SAMPLEUPDATE -P 5300 -a 10.53.0.1 -a 10.53.0.2 -p "nxdomain exists.sample" \
add "nxdomain-exists.sample 0 in a 1.2.3.4" > update.out.test$n 2>&1
[ $ret = 0 ] || { echo I:failed; status=1; }
n=`expr $n + 1`
+ret=0
echo "I:check that dns_client_update handles prerequisite YXDOMAIN failure ($n)"
$SAMPLEUPDATE -P 5300 -a 10.53.0.1 -a 10.53.0.2 -p "yxdomain nxdomain.sample" \
add "yxdomain-nxdomain.sample 0 in a 1.2.3.4" > update.out.test$n 2>&1
[ $ret = 0 ] || { echo I:failed; status=1; }
n=`expr $n + 1`
+ret=0
echo "I:check that dns_client_update handles prerequisite NXRRSET failure ($n)"
$SAMPLEUPDATE -P 5300 -a 10.53.0.1 -a 10.53.0.2 -p "nxrrset exists.sample TXT This RRset exists." \
add "nxrrset-exists.sample 0 in a 1.2.3.4" > update.out.test$n 2>&1
[ $ret = 0 ] || { echo I:failed; status=1; }
n=`expr $n + 1`
+ret=0
echo "I:check that dns_client_update handles prerequisite YXRRSET failure ($n)"
$SAMPLEUPDATE -s -P 5300 -a 10.53.0.1 -a 10.53.0.2 \
-p "yxrrset no-txt.sample TXT" \