Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Sebastian Schrader
Kea
Commits
cc48c3a8
Commit
cc48c3a8
authored
Dec 22, 2011
by
JINMEI Tatuya
Browse files
[1502] made sure comparing RRSIG type covered in compact() to avoid incorrect
compaction of non compatible RRSIGs.
parent
0b0d1a0d
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/lib/python/isc/xfrin/diff.py
View file @
cc48c3a8
...
...
@@ -162,12 +162,26 @@ class Diff:
and do more merging, but such diffs should be rare in practice anyway,
so we don't bother and do it this simple way.
"""
def
same_type
(
rrset1
,
rrset2
):
'''A helper routine to identify whether two RRsets are of the
same 'type'. For RRSIGs we should consider type covered, too.
'''
if
rrset1
.
get_type
()
!=
rrset2
.
get_type
():
return
False
if
rrset1
.
get_type
()
!=
isc
.
dns
.
RRType
.
RRSIG
():
return
rrset1
.
get_type
()
==
rrset2
.
get_type
()
# RR type of the both RRsets is RRSIG. Compare type covered.
# We know they have exactly one RDATA.
sigdata1
=
rrset1
.
get_rdata
()[
0
].
to_text
().
split
()[
0
]
sigdata2
=
rrset2
.
get_rdata
()[
0
].
to_text
().
split
()[
0
]
return
sigdata1
==
sigdata2
buf
=
[]
for
(
op
,
rrset
)
in
self
.
__buffer
:
old
=
buf
[
-
1
][
1
]
if
len
(
buf
)
>
0
else
None
if
old
is
None
or
op
!=
buf
[
-
1
][
0
]
or
\
rrset
.
get_name
()
!=
old
.
get_name
()
or
\
rrset
.
get_type
()
!=
old
.
get_type
(
):
(
not
same_type
(
rrset
,
old
)
):
buf
.
append
((
op
,
isc
.
dns
.
RRset
(
rrset
.
get_name
(),
rrset
.
get_class
(),
rrset
.
get_type
(),
...
...
src/lib/python/isc/xfrin/tests/diff_tests.py
View file @
cc48c3a8
...
...
@@ -99,6 +99,8 @@ class DiffTest(unittest.TestCase):
in the tested module.
"""
self
.
__warn_called
=
True
# Also log the message so we can check the log format (manually)
self
.
orig_logger
.
warn
(
*
args
)
def
commit
(
self
):
"""
...
...
@@ -430,7 +432,7 @@ class DiffTest(unittest.TestCase):
Test the TTL handling. A warn function should have been called if they
differ, but that's all, it should not crash or raise.
"""
orig_logger
=
isc
.
xfrin
.
diff
.
logger
self
.
orig_logger
=
isc
.
xfrin
.
diff
.
logger
try
:
isc
.
xfrin
.
diff
.
logger
=
self
diff
=
Diff
(
self
,
Name
(
'example.org.'
))
...
...
@@ -451,7 +453,30 @@ class DiffTest(unittest.TestCase):
self
.
assertEqual
(
self
.
__ttl
,
diff
.
get_buffer
()[
0
][
1
].
get_ttl
())
self
.
assertTrue
(
self
.
__warn_called
)
finally
:
isc
.
xfrin
.
diff
.
logger
=
orig_logger
isc
.
xfrin
.
diff
.
logger
=
self
.
orig_logger
def
test_rrsig_ttl
(
self
):
'''Similar to the previous test, but for RRSIGs of different covered
types.
They shouldn't be compacted.
'''
diff
=
Diff
(
self
,
Name
(
'example.org.'
))
rrsig1
=
RRset
(
Name
(
'example.org'
),
self
.
__rrclass
,
RRType
.
RRSIG
(),
RRTTL
(
3600
))
rrsig1
.
add_rdata
(
Rdata
(
RRType
.
RRSIG
(),
self
.
__rrclass
,
'A 5 3 3600 20000101000000 20000201000000 '
+
'0 example.org. FAKEFAKEFAKE'
))
diff
.
add_data
(
rrsig1
)
rrsig2
=
RRset
(
Name
(
'example.org'
),
self
.
__rrclass
,
RRType
.
RRSIG
(),
RRTTL
(
1800
))
rrsig2
.
add_rdata
(
Rdata
(
RRType
.
RRSIG
(),
self
.
__rrclass
,
'AAAA 5 3 3600 20000101000000 20000201000000 '
+
'1 example.org. FAKEFAKEFAKE'
))
diff
.
add_data
(
rrsig2
)
diff
.
compact
()
self
.
assertEqual
(
2
,
len
(
diff
.
get_buffer
()))
def
test_relpace
(
self
):
"""
...
...
@@ -463,4 +488,5 @@ class DiffTest(unittest.TestCase):
if
__name__
==
"__main__"
:
isc
.
log
.
init
(
"bind10"
)
isc
.
log
.
resetUnitTestRootLogger
()
unittest
.
main
()
Write
Preview
Supports
Markdown
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