Fix BIND to serve large HTTP responses
This commit makes NM code to report HTTP as a stream protocol. This makes it possible to handle large responses properly. Like: dig +https @127.0.0.1 A cmts1-dhcp.longlines.com
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -13,5 +13,16 @@
|
||||
|
||||
$SHELL ${TOP_SRCDIR}/bin/tests/system/genzone.sh 2 >ns1/example.db
|
||||
|
||||
echo '; huge answer' >> ns1/example.db
|
||||
x=1
|
||||
while [ $x -le 50 ]; do
|
||||
y=1
|
||||
while [ $y -le 50 ]; do
|
||||
printf 'biganswer\t\tA\t\t10.10.%d.%d\n' $x $y >> ns1/example.db
|
||||
y=$((y+1))
|
||||
done
|
||||
x=$((x+1))
|
||||
done
|
||||
|
||||
copy_setports ns1/named.conf.in ns1/named.conf
|
||||
copy_setports ns2/named.conf.in ns2/named.conf
|
||||
|
||||
@@ -182,5 +182,41 @@ grep "status: FORMERR" dig.out.test$n > /dev/null || ret=1
|
||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||
status=$((status + ret))
|
||||
|
||||
n=$((n + 1))
|
||||
echo_i "checking DoH query for a large answer (POST) ($n)"
|
||||
ret=0
|
||||
dig_with_https_opts @10.53.0.1 biganswer.example A > dig.out.test$n
|
||||
grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
|
||||
grep "ANSWER: 2500" dig.out.test$n > /dev/null || ret=1
|
||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||
status=$((status + ret))
|
||||
|
||||
n=$((n + 1))
|
||||
echo_i "checking DoH query for a large answer (GET) ($n)"
|
||||
ret=0
|
||||
dig_with_https_opts +https-get @10.53.0.1 biganswer.example A > dig.out.test$n
|
||||
grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
|
||||
grep "ANSWER: 2500" dig.out.test$n > /dev/null || ret=1
|
||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||
status=$((status + ret))
|
||||
|
||||
n=$((n + 1))
|
||||
echo_i "checking unencrypted DoH query for a large answer (POST) ($n)"
|
||||
ret=0
|
||||
dig_with_http_opts @10.53.0.1 biganswer.example A > dig.out.test$n
|
||||
grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
|
||||
grep "ANSWER: 2500" dig.out.test$n > /dev/null || ret=1
|
||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||
status=$((status + ret))
|
||||
|
||||
n=$((n + 1))
|
||||
echo_i "checking unencrypted DoH query for a large answer (POST) ($n)"
|
||||
ret=0
|
||||
dig_with_http_opts +http-plain-get @10.53.0.1 biganswer.example A > dig.out.test$n
|
||||
grep "status: NOERROR" dig.out.test$n > /dev/null || ret=1
|
||||
grep "ANSWER: 2500" dig.out.test$n > /dev/null || ret=1
|
||||
if [ $ret != 0 ]; then echo_i "failed"; fi
|
||||
status=$((status + ret))
|
||||
|
||||
echo_i "exit status: $status"
|
||||
[ $status -eq 0 ] || exit 1
|
||||
|
||||
@@ -1727,7 +1727,8 @@ isc_nmhandle_is_stream(isc_nmhandle_t *handle) {
|
||||
return (handle->sock->type == isc_nm_tcpsocket ||
|
||||
handle->sock->type == isc_nm_tcpdnssocket ||
|
||||
handle->sock->type == isc_nm_tlssocket ||
|
||||
handle->sock->type == isc_nm_tlsdnssocket);
|
||||
handle->sock->type == isc_nm_tlsdnssocket ||
|
||||
handle->sock->type == isc_nm_httpsocket);
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
Reference in New Issue
Block a user