From: Mark Andrews Date: Thu, 5 Sep 2013 02:22:34 +0000 (+1000) Subject: 3645. [protocol] Use case sensitive compression when responding to X-Git-Tag: v9.10.0a1~128 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=cb69994ff89179166d5e21ccc7a34223b51676c0;p=thirdparty%2Fbind9.git 3645. [protocol] Use case sensitive compression when responding to queries. [RT #34737] --- diff --git a/CHANGES b/CHANGES index 5c015501b2a..27abb40387e 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,8 @@ --- 9.10.0a1 released -- +3645. [protocol] Use case sensitive compression when responding to + queries. [RT #34737] + 3644. [protocol] Check that EDNS subnet client options are well formed. [RT #34718] diff --git a/bin/named/client.c b/bin/named/client.c index 3a999cdab06..1af60a62501 100644 --- a/bin/named/client.c +++ b/bin/named/client.c @@ -994,6 +994,7 @@ client_send(ns_client_t *client) { result = dns_compress_init(&cctx, -1, client->mctx); if (result != ISC_R_SUCCESS) goto done; + dns_compress_setsensitive(&cctx, ISC_TRUE); cleanup_cctx = ISC_TRUE; result = dns_message_renderbegin(client->message, &cctx, &buffer); diff --git a/bin/tests/system/cacheclean/tests.sh b/bin/tests/system/cacheclean/tests.sh index 3a4ae1fda25..6eaee3d7857 100644 --- a/bin/tests/system/cacheclean/tests.sh +++ b/bin/tests/system/cacheclean/tests.sh @@ -88,7 +88,7 @@ echo "I:check correctness of routine cache cleaning" $DIG $DIGOPTS -f dig.batch > dig.out.ns2 || status=1 grep ";" dig.out.ns2 -$PERL ../digcomp.pl dig.out.ns2 knowngood.dig.out || status=1 +$PERL ../digcomp.pl --lc dig.out.ns2 knowngood.dig.out || status=1 echo "I:reset and check that records are correctly cached initially" ret=0 diff --git a/bin/tests/system/case/clean.sh b/bin/tests/system/case/clean.sh new file mode 100644 index 00000000000..40fc4029b37 --- /dev/null +++ b/bin/tests/system/case/clean.sh @@ -0,0 +1,17 @@ +#!/bin/sh +# +# Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC") +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH +# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, +# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +rm -f dig.n1.test1 diff --git a/bin/tests/system/case/ns1/example.db b/bin/tests/system/case/ns1/example.db new file mode 100644 index 00000000000..961315eabe7 --- /dev/null +++ b/bin/tests/system/case/ns1/example.db @@ -0,0 +1,27 @@ +; Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC") +; +; Permission to use, copy, modify, and/or distribute this software for any +; purpose with or without fee is hereby granted, provided that the above +; copyright notice and this permission notice appear in all copies. +; +; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH +; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +; AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, +; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +; PERFORMANCE OF THIS SOFTWARE. + + +$TTL 300 ; 5 minutes +@ IN SOA mname1. . ( + 2000042407 ; serial + 20 ; refresh (20 seconds) + 20 ; retry (20 seconds) + 1814400 ; expire (3 weeks) + 3600 ; minimum (1 hour) + ) + NS ns1 +ns1 A 10.53.0.1 +@ MX 0 mail.eXaMpLe. +mAiL A 10.53.0.1 diff --git a/bin/tests/system/case/ns1/named.conf b/bin/tests/system/case/ns1/named.conf new file mode 100644 index 00000000000..2fcc608d69f --- /dev/null +++ b/bin/tests/system/case/ns1/named.conf @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC") + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH + * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, + * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE + * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +controls { /* empty */ }; + +options { + query-source address 10.53.0.1; + notify-source 10.53.0.1; + transfer-source 10.53.0.1; + port 5300; + pid-file "named.pid"; + listen-on { 10.53.0.1; }; + listen-on-v6 { none; }; + recursion no; + notify yes; + ixfr-from-differences yes; + check-integrity no; +}; + +zone "example" { + type master; + file "example.db"; +}; diff --git a/bin/tests/system/case/tests.sh b/bin/tests/system/case/tests.sh new file mode 100644 index 00000000000..d9c159bffc1 --- /dev/null +++ b/bin/tests/system/case/tests.sh @@ -0,0 +1,35 @@ +#!/bin/sh +# +# Copyright (C) 2013 Internet Systems Consortium, Inc. ("ISC") +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH +# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, +# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +SYSTEMTESTTOP=.. +. $SYSTEMTESTTOP/conf.sh + +DIGOPTS="+tcp +nosea +nostat +noquest +nocomm +nocmd" + +status=0 +n=0 + +n=`expr $n + 1` +echo "I:testing case sensitive responses ($n)" +ret=0 +$DIG $DIGOPTS mx example. @10.53.0.1 -p 5300 > dig.n1.test$n +grep "0.mail.eXaMpLe" dig.n1.test$n > /dev/null || ret=1 +grep "mAiL.example" dig.n1.test$n > /dev/null || ret=1 +test $ret -eq 0 || echo "I:failed" +status=`expr $status + $ret` + +echo "I:exit status: $status" +exit $status diff --git a/bin/tests/system/conf.sh.in b/bin/tests/system/conf.sh.in index b15853d7686..f2fb98caa70 100644 --- a/bin/tests/system/conf.sh.in +++ b/bin/tests/system/conf.sh.in @@ -60,7 +60,7 @@ RESOLVE=$TOP/lib/samples/resolve # load on the machine to make it unusable to other users. # v6synth SUBDIRS="acl additional allow_query addzone autosign builtin - cacheclean checkconf @CHECKDS@ checknames checkzone @COVERAGE@ + cacheclean case checkconf @CHECKDS@ checknames checkzone @COVERAGE@ database dlv dlvauto dlz dlzexternal dlzredir dname dns64 dnssec dsdigest dscp ecdsa formerr forward glue gost ixfr inline limits logfileconfig lwresd masterfile masterformat metadata diff --git a/bin/tests/system/digcomp.pl b/bin/tests/system/digcomp.pl index 28ee067d332..e2ff72e9bf6 100644 --- a/bin/tests/system/digcomp.pl +++ b/bin/tests/system/digcomp.pl @@ -21,6 +21,11 @@ # Ignore "unimportant" differences, like ordering of NS lines, TTL's, # etc... +$lc = 0; +if ($ARGV[0] eq "--lc") { + $lc = 1; + shift; +} $file1 = $ARGV[0]; $file2 = $ARGV[1]; @@ -42,6 +47,10 @@ while () { $class = $2; $type = $3; $value = $4; + if ($lc) { + $name = lc($name); + $value = lc($value); + } if ($type eq "SOA") { $firstname = $name if ($firstname eq ""); if ($name eq $firstname) { @@ -73,6 +82,10 @@ while () { $class = $2; $type = $3; $value = $4; + if ($lc) { + $name = lc($name); + $value = lc($value); + } if (($name eq $firstname) && ($type eq "SOA")) { $count--; $name = "$name$count"; diff --git a/bin/tests/system/glue/tests.sh b/bin/tests/system/glue/tests.sh index 32181ec9e0c..b6cbd7e40bd 100644 --- a/bin/tests/system/glue/tests.sh +++ b/bin/tests/system/glue/tests.sh @@ -28,7 +28,7 @@ status=0 echo "I:testing that a ccTLD referral gets a full glue set from the root zone" $DIG +norec @10.53.0.1 -p 5300 foo.bar.fi. A >dig.out || status=1 -$PERL ../digcomp.pl fi.good dig.out || status=1 +$PERL ../digcomp.pl --lc fi.good dig.out || status=1 echo "I:testing that we find glue A RRs we are authoritative for" $DIG +norec @10.53.0.1 -p 5300 foo.bar.xx. a >dig.out || status=1