File 2136-Use-nsd-instead-of-bind8-9-to-test-against.patch of Package erlang
From 47b2be55500578ca04e6799e2d689ce6cf8c69bc Mon Sep 17 00:00:00 2001
From: Raimo Niskanen <raimo@erlang.org>
Date: Fri, 13 Nov 2020 16:48:02 +0100
Subject: [PATCH 6/6] Use nsd instead of bind8/9 to test against
---
lib/kernel/test/inet_res_SUITE.erl | 153 +++++++++++-------
.../otptest/named_inc.conf | 12 --
.../inet_res_SUITE_data/otptest/nsd_inc.conf | 11 ++
.../inet_res_SUITE_data/otptest/otptest.zone | 53 ++++++
.../inet_res_SUITE_data/otptest/root.zone | 52 ------
.../inet_res_SUITE_data/{run-named => run-ns} | 143 +++++++---------
6 files changed, 215 insertions(+), 209 deletions(-)
delete mode 100644 lib/kernel/test/inet_res_SUITE_data/otptest/named_inc.conf
create mode 100644 lib/kernel/test/inet_res_SUITE_data/otptest/nsd_inc.conf
create mode 100644 lib/kernel/test/inet_res_SUITE_data/otptest/otptest.zone
delete mode 100644 lib/kernel/test/inet_res_SUITE_data/otptest/root.zone
rename lib/kernel/test/inet_res_SUITE_data/{run-named => run-ns} (52%)
diff --git a/lib/kernel/test/inet_res_SUITE.erl b/lib/kernel/test/inet_res_SUITE.erl
index 726c25b2fa..3279b2e5f9 100644
--- a/lib/kernel/test/inet_res_SUITE.erl
+++ b/lib/kernel/test/inet_res_SUITE.erl
@@ -40,9 +40,10 @@
host_and_addr/0, host_and_addr/1
]).
--define(RUN_NAMED, "run-named").
+-define(RUN_NS, "run-ns").
+-define(LOG_FILE, "ns.log").
-%% This test suite use a script ?RUN_NAMED that tries to start
+%% This test suite use a script ?RUN_NS that tries to start
%% a temporary local nameserver BIND 8 or 9 that must be installed
%% on your machine.
%%
@@ -152,7 +153,7 @@ ns_init(ZoneDir, PrivDir, DataDir) ->
PNum
end,
?P("ns_init -> use port number ~p", [PortNum]),
- RunNamed = filename:join(DataDir, ?RUN_NAMED),
+ RunNamed = filename:join(DataDir, ?RUN_NS),
?P("ns_init -> use named ~p", [RunNamed]),
NS = {{127,0,0,1},PortNum},
?P("ns_init -> try open port (exec)"),
@@ -174,7 +175,7 @@ ns_start(ZoneDir, PrivDir, NS, P) ->
"Error: "++Error ->
?P("ns_start -> error: "
"~n ~p", [Error]),
- ns_printlog(filename:join([PrivDir,ZoneDir,"named.log"])),
+ ns_printlog(filename:join([PrivDir,ZoneDir,?LOG_FILE])),
throw(Error);
_X ->
?P("ns_start -> retry"),
@@ -207,7 +208,7 @@ ns_end(undefined, _PrivDir) -> undefined;
ns_end({ZoneDir,_NS,P}, PrivDir) when is_port(P) ->
port_command(P, ["quit",io_lib:nl()]),
ns_stop(P),
- ns_printlog(filename:join([PrivDir,ZoneDir,"named.log"])),
+ ns_printlog(filename:join([PrivDir,ZoneDir,"ns.log"])),
ok;
ns_end({Tag,_NS,P}, _PrivDir) when is_pid(P) ->
Mref = erlang:monitor(process, P),
@@ -447,7 +448,9 @@ resolve(Config) when is_list(Config) ->
{cname,"cname."++Name,[{cname,Name}],undefined},
{a,"cname."++Name,[{cname,Name},{a,{127,0,0,28}}],undefined},
{ns,"ns."++Name,[],[{ns,Name}]},
- {soa,Domain,[],[{soa,{"ns.otptest","lsa.otptest",1,60,10,300,30}}]},
+ {soa,Domain,
+ undefined,
+ [{soa,{"ns.otptest","lsa\\.soa.otptest",1,60,10,300,30}}]},
%% WKS: protocol TCP (6), services (bits) TELNET (23) and SMTP (25)
{wks,"wks."++Name,[{wks,{{127,0,0,28},6,<<0,0,1,64>>}}],undefined},
{ptr,"28."++RDomain4,[{ptr,Name}],undefined},
@@ -462,10 +465,10 @@ resolve(Config) when is_list(Config) ->
[{txt,["Hej ","du ","glade "]},{txt,["ta ","en ","spade!"]}],
undefined},
{mb,"mb."++Name,[{mb,"mx."++Name}],undefined},
- {mg,"mg."++Name,[{mg,"Lsa."++Domain}],undefined},
- {mr,"mr."++Name,[{mr,"LSA."++Domain}],undefined},
+ {mg,"mg."++Name,[{mg,"lsa\\.mg."++Domain}],undefined},
+ {mr,"mr."++Name,[{mr,"lsa\\.mr."++Domain}],undefined},
{minfo,"minfo."++Name,
- [{minfo,{"minfo-OWNER."++Name,"MinfoBounce."++Name}}],
+ [{minfo,{"minfo-owner."++Name,"minfo-bounce."++Name}}],
undefined},
{uri,"uri."++Name,[{uri,{10,3,"http://erlang.org"}}],undefined},
{caa,"caa."++Name,
@@ -473,9 +476,9 @@ resolve(Config) when is_list(Config) ->
undefined},
{any,"cname."++Name,[{cname,Name}],undefined},
{any,Name,
- [{a,{127,0,0,28}},
- {aaaa,{0,0,0,0,0,0,32512,28}},
- {hinfo,{"BEAM","Erlang/OTP"}}],
+ #{ {a,{127,0,0,28}} => [],
+ {aaaa,{0,0,0,0,0,0,32512,28}} => [],
+ {hinfo,{"BEAM","Erlang/OTP"}} => [] },
undefined}
],
?P("resolve -> with edns 0"),
@@ -495,82 +498,107 @@ resolve(Class, Opts, [{Type,Nm,Answers,Authority}=Q|Qs]) ->
_ ->
{caseflip(Nm),Nm}
end,
- AnList =
- if
- Answers =/= undefined ->
- normalize_answers(Answers);
- true ->
- undefined
- end,
- NsList =
- if
- Authority =/= undefined ->
- normalize_answers(Authority);
- true ->
- undefined
- end,
+ NormAnswers = normalize_rrs(Answers),
+ NormNSs = normalize_rrs(Authority),
?P("resolve -> resolve with ~p", [Name]),
{ok,Msg} = inet_res:resolve(Name, Class, Type, Opts),
- check_msg(Class, Type, Msg, AnList, NsList),
+ check_msg(Class, Type, Msg, NormAnswers, NormNSs),
?P("resolve -> resolve with ~p", [NameC]),
{ok,MsgC} = inet_res:resolve(NameC, Class, Type, Opts),
- check_msg(Class, Type, MsgC, AnList, NsList),
+ check_msg(Class, Type, MsgC, NormAnswers, NormNSs),
?P("resolve -> next"),
resolve(Class, Opts, Qs).
-normalize_answers(AnList) ->
- lists:sort([normalize_answer(Answer) || Answer <- AnList]).
+normalize_rrs(undefined = RRs) -> RRs;
+normalize_rrs(RRList) when is_list(RRList) ->
+ lists:sort([normalize_rr(RR) || RR <- RRList]);
+normalize_rrs(RRs) when is_map(RRs) ->
+ maps:fold(
+ fun (RR, V, NormRRs) ->
+ NormRRs#{(normalize_rr(RR)) => V}
+ end, #{}, RRs).
-normalize_answer({soa,{NS,HM,Ser,Ref,Ret,Exp,Min}}) ->
+normalize_rr({soa,{NS,HM,Ser,Ref,Ret,Exp,Min}}) ->
{tolower(NS),tolower_email(HM),Ser,Ref,Ret,Exp,Min};
-normalize_answer({mx,{Prio,DN}}) ->
+normalize_rr({mx,{Prio,DN}}) ->
{Prio,tolower(DN)};
-normalize_answer({srv,{Prio,Weight,Port,DN}}) ->
+normalize_rr({srv,{Prio,Weight,Port,DN}}) ->
{Prio,Weight,Port,tolower(DN)};
-normalize_answer({naptr,{Order,Pref,Flags,Service,RE,Repl}}) ->
+normalize_rr({naptr,{Order,Pref,Flags,Service,RE,Repl}}) ->
{Order,Pref,Flags,Service,RE,tolower(Repl)};
-normalize_answer({minfo,{RespM,ErrM}}) ->
+normalize_rr({minfo,{RespM,ErrM}}) ->
{tolower_email(RespM),tolower_email(ErrM)};
-normalize_answer({T,MN}) when T =:= mg; T =:= mr ->
+normalize_rr({T,MN}) when T =:= mg; T =:= mr ->
tolower_email(MN);
-normalize_answer({T,DN}) when T =:= cname; T =:= ns; T =:= ptr; T =:= mb ->
+normalize_rr({T,DN}) when T =:= cname; T =:= ns; T =:= ptr; T =:= mb ->
tolower(DN);
-normalize_answer(Answer) ->
- Answer.
+normalize_rr(RR) ->
+ RR.
-check_msg(Class, Type, Msg, AnList, NsList) ->
+check_msg(Class, Type, Msg, ExpectedAnswers, ExpectedNSs) ->
?P("check_msg ->"
"~n Type: ~p"
"~n Msg: ~p", [Type,Msg]),
- case {normalize_answers(
- [begin
- Class = inet_dns:rr(RR, class),
- {inet_dns:rr(RR, type),inet_dns:rr(RR, data)}
- end || RR <- inet_dns:msg(Msg, anlist)]),
- normalize_answers(
- [begin
- Class = inet_dns:rr(RR, class),
- {inet_dns:rr(RR, type),inet_dns:rr(RR, data)}
- end || RR <- inet_dns:msg(Msg, nslist)])} of
- {AnList,NsList} ->
- ok;
- {NsList,AnList} when Type =:= ns ->
- %% This whole case statement is kind of inside out just
- %% to accept this case when some legacy DNS resolvers
- %% return the answer to a NS query in the answer section
- %% instead of in the authority section.
- ok;
- {AnList,_} when NsList =:= undefined ->
- ok;
- {_,NsList} when AnList =:= undefined ->
- ok
+ NormAnList =
+ normalize_rrs(
+ [begin
+ Class = inet_dns:rr(RR, class),
+ {inet_dns:rr(RR, type),inet_dns:rr(RR, data)}
+ end || RR <- inet_dns:msg(Msg, anlist)]),
+ NormNsList =
+ normalize_rrs(
+ [begin
+ Class = inet_dns:rr(RR, class),
+ {inet_dns:rr(RR, type),inet_dns:rr(RR, data)}
+ end || RR <- inet_dns:msg(Msg, nslist)]),
+ case
+ check_msg(ExpectedAnswers, NormAnList) andalso
+ check_msg(ExpectedNSs, NormNsList)
+ of
+ true ->
+ ok;
+ false
+ when Type =:= ns;
+ Type =:= soa ->
+ %% Some resolvers return the answer to a NS query
+ %% in the answer section instead of in the authority section,
+ %% and some do the same for a SOA query
+ case
+ check_msg(ExpectedAnswers, NormNsList) andalso
+ check_msg(ExpectedNSs, NormAnList)
+ of
+ true ->
+ ok;
+ false ->
+ error({Type,
+ {expected,ExpectedAnswers,ExpectedNSs},
+ {got,NormAnList,NormNsList}})
+ end;
+ false ->
+ error({Type,
+ {expected,ExpectedAnswers,ExpectedNSs},
+ {got,NormAnList,NormNsList}})
end,
+ %% Test the encoder against the decoder; the least we can do
Buf = inet_dns:encode(Msg),
{ok,Msg} = inet_dns:decode(Buf),
ok.
+check_msg(undefined, RRs) when is_list(RRs)-> true;
+check_msg(RRs1, RRs2) when is_list(RRs1), is_list(RRs2) ->
+ RRs1 =:= RRs2;
+check_msg(Expected, [RR|RRs]) when is_map(Expected) ->
+ case Expected of
+ #{RR := _} ->
+ case RRs of
+ [] -> true;
+ [_|_] -> check_msg(Expected, RRs)
+ end;
+ #{} -> false
+ end;
+check_msg(#{}, []) -> false. % At least one has to be ok
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/lib/kernel/test/inet_res_SUITE_data/otptest/named_inc.conf b/lib/kernel/test/inet_res_SUITE_data/otptest/named_inc.conf
deleted file mode 100644
index 2d68f6e59c..0000000000
--- a/lib/kernel/test/inet_res_SUITE_data/otptest/named_inc.conf
+++ /dev/null
@@ -1,12 +0,0 @@
-zone "." in {
- type master;
- file "root.zone";
-};
-zone "0.0.127.in-addr.arpa." in {
- type master;
- file "0.0.127.in-addr.arpa.zone";
-};
-zone "0.0.0.0.f.7.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa." in {
- type master;
- file "0.0.0.0.f.7.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa.zone";
-};
diff --git a/lib/kernel/test/inet_res_SUITE_data/otptest/nsd_inc.conf b/lib/kernel/test/inet_res_SUITE_data/otptest/nsd_inc.conf
new file mode 100644
index 0000000000..d4a434ff77
--- /dev/null
+++ b/lib/kernel/test/inet_res_SUITE_data/otptest/nsd_inc.conf
@@ -0,0 +1,11 @@
+zone:
+ name: otptest.
+ zonefile: otptest.zone
+
+zone:
+ name: 0.0.127.in-addr.arpa.
+ zonefile: 0.0.127.in-addr.arpa.zone
+
+zone:
+ name: 0.0.0.0.f.7.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa.
+ zonefile: 0.0.0.0.f.7.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa.zone
diff --git a/lib/kernel/test/inet_res_SUITE_data/otptest/otptest.zone b/lib/kernel/test/inet_res_SUITE_data/otptest/otptest.zone
new file mode 100644
index 0000000000..51268f49ae
--- /dev/null
+++ b/lib/kernel/test/inet_res_SUITE_data/otptest/otptest.zone
@@ -0,0 +1,53 @@
+$TTL 3600
+@ IN SOA ns lsa\.soa (
+ 1 ; serial
+ 60 ; refresh
+ 10 ; retry
+ 300 ; expiry
+ 30 ) ; minimum
+
+ IN NS ns
+ IN NS ns1-5678901234567890123456789012345678
+ IN NS ns2-5678901234567890123456789012345678
+ IN MX 10 mx
+ IN MX 20 mx1-5678901234567890123456789012345678
+ IN MX 20 mx2-5678901234567890123456789012345678
+ IN MX 20 mx3-5678901234567890123456789012345678
+ IN MX 20 mx4-5678901234567890123456789012345678
+ IN MX 20 mx5-5678901234567890123456789012345678
+ IN MX 20 mx6-5678901234567890123456789012345678
+ IN MX 20 mx7-5678901234567890123456789012345678
+
+test1-78901234567890123456789012345678 IN A 127.0.0.1
+test2-78901234567890123456789012345678 IN A 127.0.0.2
+ns1-5678901234567890123456789012345678 IN A 127.0.0.11
+ns2-5678901234567890123456789012345678 IN A 127.0.0.12
+mx IN A 127.0.0.10
+mx1-5678901234567890123456789012345678 IN A 127.0.0.21
+mx2-5678901234567890123456789012345678 IN A 127.0.0.22
+mx3-5678901234567890123456789012345678 IN A 127.0.0.23
+mx4-5678901234567890123456789012345678 IN A 127.0.0.24
+mx5-5678901234567890123456789012345678 IN A 127.0.0.25
+mx6-5678901234567890123456789012345678 IN A 127.0.0.26
+mx7-5678901234567890123456789012345678 IN A 127.0.0.27
+
+ns IN A 127.0.0.254
+resolve IN A 127.0.0.28
+resolve IN AAAA ::127.0.0.28
+cname.resolve IN CNAME resolve
+wks.resolve IN WKS 127.0.0.28 TCP ( telnet smtp )
+resolve IN HINFO "BEAM" "Erlang/OTP"
+ns.resolve IN NS resolve
+mx.resolve IN MX 10 resolve
+_srv._tcp.resolve IN SRV 10 3 4711 resolve
+naptr.resolve IN NAPTR 10 5 "S" "HTTP" "" _srv._tcp.resolve
+txt.resolve IN TXT "Hej " "du " "glade "
+txt.resolve IN TXT "ta " "en " "spade!"
+mb.resolve IN MB mx.resolve
+mg.resolve IN MG lsa\.mg
+mr.resolve IN MR lsa\.mr
+minfo.resolve IN MINFO minfo-owner.resolve minfo-bounce.resolve
+;uri.resolve IN URI 10 3 "http://erlang.org"
+uri.resolve IN TYPE256 \# 21 000a 0003 (68747470 3a2f2f 65726c616e67 2e 6f7267)
+;caa.resolve IN CAA 1 iodef "http://iodef.erlang.org"
+caa.resolve IN TYPE257 \# 30 01 (05 696f646566) (68747470 3a2f2f 696f646566 2e 65726c616e67 2e 6f7267)
diff --git a/lib/kernel/test/inet_res_SUITE_data/otptest/root.zone b/lib/kernel/test/inet_res_SUITE_data/otptest/root.zone
deleted file mode 100644
index 804b062ead..0000000000
--- a/lib/kernel/test/inet_res_SUITE_data/otptest/root.zone
+++ /dev/null
@@ -1,52 +0,0 @@
-$TTL 3600
-@ IN SOA ns.otptest lsa.otptest (
- 1 ; serial
- 60 ; refresh
- 10 ; retry
- 300 ; expiry
- 30 ) ; minimum
-
- IN NS ns.otptest
- IN NS ns1-5678901234567890123456789012345678.otptest
- IN NS ns2-5678901234567890123456789012345678.otptest
-otptest IN MX 10 mx.otptest
-otptest IN MX 20 mx1-5678901234567890123456789012345678.otptest
-otptest IN MX 20 mx2-5678901234567890123456789012345678.otptest
-otptest IN MX 20 mx3-5678901234567890123456789012345678.otptest
-otptest IN MX 20 mx4-5678901234567890123456789012345678.otptest
-otptest IN MX 20 mx5-5678901234567890123456789012345678.otptest
-otptest IN MX 20 mx6-5678901234567890123456789012345678.otptest
-otptest IN MX 20 mx7-5678901234567890123456789012345678.otptest
-
-test1-78901234567890123456789012345678.otptest IN A 127.0.0.1
-test2-78901234567890123456789012345678.otptest IN A 127.0.0.2
-ns1-5678901234567890123456789012345678.otptest IN A 127.0.0.11
-ns2-5678901234567890123456789012345678.otptest IN A 127.0.0.12
-mx.otptest IN A 127.0.0.10
-mx1-5678901234567890123456789012345678.otptest IN A 127.0.0.21
-mx2-5678901234567890123456789012345678.otptest IN A 127.0.0.22
-mx3-5678901234567890123456789012345678.otptest IN A 127.0.0.23
-mx4-5678901234567890123456789012345678.otptest IN A 127.0.0.24
-mx5-5678901234567890123456789012345678.otptest IN A 127.0.0.25
-mx6-5678901234567890123456789012345678.otptest IN A 127.0.0.26
-mx7-5678901234567890123456789012345678.otptest IN A 127.0.0.27
-
-resolve.otptest IN A 127.0.0.28
-resolve.otptest IN AAAA ::127.0.0.28
-cname.resolve.otptest IN CNAME resolve.otptest
-wks.resolve.otptest IN WKS 127.0.0.28 TCP ( telnet smtp )
-resolve.otptest IN HINFO "BEAM" "Erlang/OTP"
-ns.resolve.otptest IN NS resolve.otptest
-mx.resolve.otptest IN MX 10 resolve.otptest
-_srv._tcp.resolve.otptest IN SRV 10 3 4711 resolve.otptest
-naptr.resolve.otptest IN NAPTR 10 5 "S" "HTTP" "" _srv._tcp.resolve.otptest
-txt.resolve.otptest IN TXT "Hej " "du " "glade "
-txt.resolve.otptest IN TXT "ta " "en " "spade!"
-mb.resolve.otptest IN MB mx.resolve.otptest
-mg.resolve.otptest IN MG Lsa.otptest
-mr.resolve.otptest IN MR LSA.otptest
-minfo.resolve.otptest IN MINFO minfo-OWNER.resolve.otptest MinfoBounce.resolve.otptest
-uri.resolve.otptest IN URI 10 3 "http://erlang.org"
-caa.resolve.otptest IN CAA 1 iodef "http://iodef.erlang.org"
-
-ns.otptest IN A 127.0.0.254
diff --git a/lib/kernel/test/inet_res_SUITE_data/run-named b/lib/kernel/test/inet_res_SUITE_data/run-ns
similarity index 52%
rename from lib/kernel/test/inet_res_SUITE_data/run-named
rename to lib/kernel/test/inet_res_SUITE_data/run-ns
index d67295773a..36855216f8 100755
--- a/lib/kernel/test/inet_res_SUITE_data/run-named
+++ b/lib/kernel/test/inet_res_SUITE_data/run-ns
@@ -1,9 +1,9 @@
#! /bin/sh
##
## %CopyrightBegin%
-##
-## Copyright Ericsson AB 2009-2016. All Rights Reserved.
-##
+##
+## Copyright Ericsson AB 2009-2020. All Rights Reserved.
+##
## Licensed under the Apache License, Version 2.0 (the "License");
## you may not use this file except in compliance with the License.
## You may obtain a copy of the License at
@@ -15,20 +15,25 @@
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.
-##
+##
## %CopyrightEnd%
##
#
#
-## run-named
-##
+## run-ns
+##
## $0 IPAddress PortNum SubDir
##
-## * Create a work directory ./SubDir, create a named.conf there.
-## * Locate named and check its version.
-## * Zopy zone files from `dirname $0`/SubDir to ./SubDir.
-## * Start named in ./SubDir with logging to named.log there.
+## Helper script to run a very local name server for this test suite,
+## on a given port number, with a configuration
+## customized for the test suite.
+##
+## * Create a work directory ./SubDir, create a $CONF_FILE there
+## that includes $INC_FILE that refers to the zone files.
+## * Locate name server and check its version.
+## * Zopy zone files and $INC_FILE from `dirname $0`/SubDir to ./SubDir.
+## * Start name server in ./SubDir with logging to $LOG_FILE there.
## * Wait for "quit" on stdin.
## * Terminate named and wait for it.
##
@@ -44,10 +49,10 @@ PATH=/usr/sbin:/sbin:/usr/bin:/bin
SHELL=/bin/sh
export PATH SHELL
-CONF_FILE=named.conf
-INC_FILE=named_inc.conf
-PID_FILE=named.pid
-LOG_FILE=named.log
+LOG_FILE=ns.log
+
+CONF_FILE=nsd.conf
+INC_FILE=nsd_inc.conf
error () {
r=$?
@@ -75,76 +80,48 @@ test -f "$SRCDIR/$INC_FILE" || \
# Locate named and check version.
# The bind-named name is used for tricking Apparmor and such
# by copying/hardlinking the real named to that name.
-NAMED=named
-for n in /usr/local/bin/bind-named /usr/local/bin/named \
- /usr/sbin/bind-named /usr/sbin/named /usr/sbin/in.named
+NS=named
+for n in /usr/sbin/nsd /usr/bin/nsd /usr/local/sbin/nsd /usr/local/bin/nsd
do
- test -x "$n" && NAMED="$n" && break
+ test -x "$n" && NS="$n" && break
done
-NAMED_VER="`"$NAMED" -v 2>&1`" || \
+NS_VER="`"$NS" -v 2>&1`" || \
error "Name server not found!"
-NAMED_VER=`echo "$NAMED_VER" | ( read V1 V2 V3 IGNORED && \
- if test :"$V1" = :'in.named'; then
- echo "$V2 $V3"
- else
- echo "$V1 $V2"
- fi
-)`
-case :"$NAMED_VER" in
- :'BIND '8.*) NAMED_FG='-f';;
- :'BIND '9.*) NAMED_FG='-g';;
- :*) error "Name server version is unknown: $NAMED_VER";;
-esac
+NS_VER=$(echo "$NS_VER" |
+ ( read V1 V2 V3 IGNORED &&
+ echo "$V1 $V3" ) )
+NS_FG="-d"
# Create working directory and cd to it
mkdir "$3" >/dev/null 2>&1
cd "$3" >/dev/null 2>&1 || \
error "Can not cd: $3 !"
+DIR="$(pwd)"
# Create $CONF_FILE
-cat >"$CONF_FILE" <<-CONF_FILE
- #
- # $CONF_FILE for $NAMED_VER
- # Generated by $0.
- #
- # Copyright: see $0.
- #
- logging {
- category default {
- default_stderr;
- };
- };
- CONF_FILE
-case :"$NAMED_VER" in
- :'BIND '8.*|:'BIND '9.[012]|:'BIND '9.[012].*)
- cat >>"$CONF_FILE" <<-CONF_FILE
- controls {
- inet 127.0.0.1 port 0 allow { !0/32; };
- };
- options {
- pid-file "$PID_FILE";
- listen-on port $2 { $1; };
- recursion no;
- allow-query { $1; };
- };
- CONF_FILE
- ;;
- :*)
- cat >>"$CONF_FILE" <<-CONF_FILE
- controls {
- };
- options {
- pid-file none;
- listen-on port $2 { $1; };
- recursion no;
- allow-query { $1; };
- };
- CONF_FILE
- ;;
-esac
-cat >>"$CONF_FILE" <<-CONF_FILE
- include "$INC_FILE";
- CONF_FILE
+cat >"$CONF_FILE" <<CONF_FILE
+#
+# $CONF_FILE for $NS_VER
+# Generated by $0.
+#
+# Copyright: see $0.
+#
+server:
+ zonesdir: "$DIR"
+ port: $2
+ database: ""
+ zonelistfile: "zone.list"
+ pidfile: "nsd.pid"
+ xfrdfile: ""
+ xfrdir: "$DIR"
+ username: "$LOGNAME"
+ verbosity: 2
+
+remote-control:
+ control-enable: no
+
+include: "$DIR/$INC_FILE"
+CONF_FILE
# Copy all subdir files
( cd "$SRCDIR" && ls -1 ) | while read f; do
@@ -153,24 +130,24 @@ done
# Start nameserver
echo "Cwd: `pwd`"
-echo "Nameserver: $NAMED_VER"
+echo "Nameserver: $NS_VER"
echo "Port: $2"
echo "ZoneDir: $3"
-echo "Command: $NAMED $NAMED_FG -c $CONF_FILE"
-$NAMED $NAMED_FG -c "$CONF_FILE" >"$LOG_FILE" 2>&1 </dev/null &
-NAMED_PID=$!
-echo "Pid: $NAMED_PID"
-trap "kill $NAMED_PID >/dev/null 2>&1; wait $NAMED_PID >/dev/null 2>&1" \
+echo "Command: $NS $NS_FG -c $CONF_FILE" -t "$3"
+$NS $NS_FG -c "$CONF_FILE" >"$LOG_FILE" 2>&1 </dev/null &
+NS_PID=$!
+echo "Pid: $NS_PID"
+trap "kill $NS_PID >/dev/null 2>&1; wait $NS_PID >/dev/null 2>&1" \
0 1 2 3 15
sleep 5 # Give name server time to load its zone files
-if ps -p $NAMED_PID >/dev/null 2>&1 || ps p $NAMED_PID >/dev/null 2>&1; then
- echo "Running: Enter \`\`quit'' to terminate nameserver[$NAMED_PID]..."
+if ps -p $NS_PID >/dev/null 2>&1 || ps p $NS_PID >/dev/null 2>&1; then
+ echo "Running: Enter \`\`quit'' to terminate nameserver[$NS_PID]..."
while read LINE; do
test :"$LINE" = :'quit' && break
done
echo "Closing: Terminating nameserver..."
else
- error "$NAMED failed to start"
+ error "$NS failed to start"
fi
--
2.26.2