Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ISC Open Source Projects
Kea
Commits
952124e0
Commit
952124e0
authored
Jan 28, 2011
by
Michal 'vorner' Vaner
Browse files
Merge remote-tracking branch 'origin/trac526'
Conflicts: src/bin/auth/query.cc
parents
c5d416a0
af4b2361
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/bin/auth/query.cc
View file @
952124e0
...
...
@@ -148,6 +148,15 @@ Query::process() const {
result
.
zone
->
find
(
qname_
,
qtype_
,
target
.
get
());
switch
(
db_result
.
code
)
{
case
Zone
::
CNAME
:
/*
* We don't do chaining yet. Therefore handling a CNAME is
* mostly the same as handling SUCCESS, but we didn't get
* what we expected. It means no exceptions in ANY or NS
* on the origin (though CNAME in origin is probably
* forbidden anyway).
*/
// No break; here, fall trough.
case
Zone
::
SUCCESS
:
response_
.
setRcode
(
Rcode
::
NOERROR
());
if
(
qtype_is_any
)
{
...
...
@@ -167,6 +176,7 @@ Query::process() const {
// and AAAA/A RRS of each of the NS RDATA into the additional
// section.
if
(
qname_
!=
result
.
zone
->
getOrigin
()
||
db_result
.
code
!=
Zone
::
SUCCESS
||
(
qtype_
!=
RRType
::
NS
()
&&
!
qtype_is_any
))
{
getAuthAdditional
(
*
result
.
zone
);
...
...
@@ -189,7 +199,6 @@ Query::process() const {
response_
.
setRcode
(
Rcode
::
NOERROR
());
putSOA
(
*
result
.
zone
);
break
;
case
Zone
::
CNAME
:
case
Zone
::
DNAME
:
// TODO : replace qname, continue lookup
break
;
...
...
src/bin/auth/tests/query_unittest.cc
View file @
952124e0
...
...
@@ -68,9 +68,15 @@ const char* const mx_txt =
"mx.example.com. 3600 IN MX 20 mailer.example.org.
\n
"
"mx.example.com. 3600 IN MX 30 mx.delegation.example.com.
\n
"
;
const
char
*
const
www_a_txt
=
"www.example.com. 3600 IN A 192.0.2.80
\n
"
;
const
char
*
const
cname_txt
=
"cname.example.com. 3600 IN CNAME www.example.com.
\n
"
;
const
char
*
const
cname_nxdom_txt
=
"cnamenxdom.example.com. 3600 IN CNAME nxdomain.example.com.
\n
"
;
// CNAME Leading out of zone
const
char
*
const
cname_out_txt
=
"cnameout.example.com. 3600 IN CNAME www.example.org.
\n
"
;
// The rest of data won't be referenced from the test cases.
const
char
*
const
other_zone_rrs
=
"cname.example.com. 3600 IN CNAME www.example.com.
\n
"
"cnamemailer.example.com. 3600 IN CNAME www.example.com.
\n
"
"cnamemx.example.com. 3600 IN MX 10 cnamemailer.example.com.
\n
"
"mx.delegation.example.com. 3600 IN A 192.0.2.100
\n
"
;
...
...
@@ -95,7 +101,8 @@ public:
{
stringstream
zone_stream
;
zone_stream
<<
soa_txt
<<
zone_ns_txt
<<
ns_addrs_txt
<<
delegation_txt
<<
mx_txt
<<
www_a_txt
<<
other_zone_rrs
;
delegation_txt
<<
mx_txt
<<
www_a_txt
<<
cname_txt
<<
cname_nxdom_txt
<<
cname_out_txt
<<
other_zone_rrs
;
masterLoad
(
zone_stream
,
origin_
,
rrclass_
,
boost
::
bind
(
&
MockZone
::
loadRRset
,
this
,
_1
));
...
...
@@ -422,4 +429,101 @@ TEST_F(QueryTest, MXAlias) {
responseCheck
(
response
,
Rcode
::
NOERROR
(),
AA_FLAG
,
1
,
3
,
3
,
NULL
,
NULL
,
ns_addrs_txt
);
}
/*
* Tests encountering a cname.
*
* There are tests leading to successful answers, NXRRSET, NXDOMAIN and
* out of the zone.
*
* TODO: We currently don't do chaining, so only the CNAME itself should be
* returned.
*/
TEST_F
(
QueryTest
,
CNAME
)
{
Query
(
memory_datasrc
,
Name
(
"cname.example.com"
),
RRType
::
A
(),
response
).
process
();
responseCheck
(
response
,
Rcode
::
NOERROR
(),
AA_FLAG
,
1
,
3
,
3
,
cname_txt
,
zone_ns_txt
,
ns_addrs_txt
);
}
TEST_F
(
QueryTest
,
explicitCNAME
)
{
// same owner name as the CNAME test but explicitly query for CNAME RR.
// expect the same response as we don't provide a full chain yet.
Query
(
memory_datasrc
,
Name
(
"cname.example.com"
),
RRType
::
CNAME
(),
response
).
process
();
responseCheck
(
response
,
Rcode
::
NOERROR
(),
AA_FLAG
,
1
,
3
,
3
,
cname_txt
,
zone_ns_txt
,
ns_addrs_txt
);
}
TEST_F
(
QueryTest
,
CNAME_NX_RRSET
)
{
// Leads to www.example.com, it doesn't have TXT
// note: with chaining, what should be expected is not trivial:
// BIND 9 returns the CNAME in answer and SOA in authority, no additional.
// NSD returns the CNAME, NS in authority, A/AAAA for NS in additional.
Query
(
memory_datasrc
,
Name
(
"cname.example.com"
),
RRType
::
TXT
(),
response
).
process
();
responseCheck
(
response
,
Rcode
::
NOERROR
(),
AA_FLAG
,
1
,
3
,
3
,
cname_txt
,
zone_ns_txt
,
ns_addrs_txt
);
}
TEST_F
(
QueryTest
,
explicitCNAME_NX_RRSET
)
{
// same owner name as the NXRRSET test but explicitly query for CNAME RR.
Query
(
memory_datasrc
,
Name
(
"cname.example.com"
),
RRType
::
CNAME
(),
response
).
process
();
responseCheck
(
response
,
Rcode
::
NOERROR
(),
AA_FLAG
,
1
,
3
,
3
,
cname_txt
,
zone_ns_txt
,
ns_addrs_txt
);
}
TEST_F
(
QueryTest
,
CNAME_NX_DOMAIN
)
{
// Leads to nxdomain.example.com
// note: with chaining, what should be expected is not trivial:
// BIND 9 returns the CNAME in answer and SOA in authority, no additional,
// RCODE being NXDOMAIN.
// NSD returns the CNAME, NS in authority, A/AAAA for NS in additional,
// RCODE being NOERROR.
Query
(
memory_datasrc
,
Name
(
"cnamenxdom.example.com"
),
RRType
::
A
(),
response
).
process
();
responseCheck
(
response
,
Rcode
::
NOERROR
(),
AA_FLAG
,
1
,
3
,
3
,
cname_nxdom_txt
,
zone_ns_txt
,
ns_addrs_txt
);
}
TEST_F
(
QueryTest
,
explicitCNAME_NX_DOMAIN
)
{
// same owner name as the NXDOMAIN test but explicitly query for CNAME RR.
Query
(
memory_datasrc
,
Name
(
"cnamenxdom.example.com"
),
RRType
::
CNAME
(),
response
).
process
();
responseCheck
(
response
,
Rcode
::
NOERROR
(),
AA_FLAG
,
1
,
3
,
3
,
cname_nxdom_txt
,
zone_ns_txt
,
ns_addrs_txt
);
}
TEST_F
(
QueryTest
,
CNAME_OUT
)
{
/*
* This leads out of zone. This should have only the CNAME even
* when we do chaining.
*
* TODO: We should be able to have two zones in the mock data source.
* Then the same test should be done with .org included there and
* see what it does (depends on what we want to do)
*/
Query
(
memory_datasrc
,
Name
(
"cnameout.example.com"
),
RRType
::
A
(),
response
).
process
();
responseCheck
(
response
,
Rcode
::
NOERROR
(),
AA_FLAG
,
1
,
3
,
3
,
cname_out_txt
,
zone_ns_txt
,
ns_addrs_txt
);
}
TEST_F
(
QueryTest
,
explicitCNAME_OUT
)
{
// same owner name as the OUT test but explicitly query for CNAME RR.
Query
(
memory_datasrc
,
Name
(
"cnameout.example.com"
),
RRType
::
CNAME
(),
response
).
process
();
responseCheck
(
response
,
Rcode
::
NOERROR
(),
AA_FLAG
,
1
,
3
,
3
,
cname_out_txt
,
zone_ns_txt
,
ns_addrs_txt
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment