+4281. [bug] Teach dns_message_totext about BADCOOKIE. [RT #41257]
+
4280. [performance] Use optimal message sizes to improve compression
in AXFRs. This reduces network traffic. [RT #40996]
inc_stats(client,
dns_nsstatscounter_rateslipped);
if (WANTCOOKIE(client)) {
+ client->message->flags &=
+ ~DNS_MESSAGEFLAG_AA;
client->message->flags &=
~DNS_MESSAGEFLAG_AD;
client->message->rcode =
}
} else if (!TCP(client) && client->view->requireservercookie &&
WANTCOOKIE(client) && !HAVECOOKIE(client)) {
+ client->message->flags &= ~DNS_MESSAGEFLAG_AA;
+ client->message->flags &= ~DNS_MESSAGEFLAG_AD;
client->message->rcode = dns_rcode_badcookie;
goto cleanup;
}
echo "I:checking require-server-cookie yes ($n)"
ret=0
$DIG +qr +cookie +nobadcookie soa @10.53.0.3 -p 5300 > dig.out.test$n
+grep "flags: qr[^;]* aa[ ;]" dig.out.test$n > /dev/null && ret=1
+grep "flags: qr[^;]* ad[ ;]" dig.out.test$n > /dev/null && ret=1
grep BADCOOKIE dig.out.test$n > /dev/null || ret=1
linecount=`getcookie dig.out.test$n | wc -l`
if [ $linecount != 2 ]; then ret=1; fi
#include <dns/masterdump.h>
#include <dns/message.h>
#include <dns/opcode.h>
+#include <dns/rcode.h>
#include <dns/rdata.h>
#include <dns/rdatalist.h>
#include <dns/rdataset.h>
"RESERVED15"
};
-static const char *rcodetext[] = {
- "NOERROR",
- "FORMERR",
- "SERVFAIL",
- "NXDOMAIN",
- "NOTIMP",
- "REFUSED",
- "YXDOMAIN",
- "YXRRSET",
- "NXRRSET",
- "NOTAUTH",
- "NOTZONE",
- "RESERVED11",
- "RESERVED12",
- "RESERVED13",
- "RESERVED14",
- "RESERVED15",
- "BADVERS"
-};
-
-
/*%
* "helper" type, which consists of a block of some type, and is linkable.
* For it to work, sizeof(dns_msgblock_t) must be a multiple of the pointer
isc_result_t
dns_message_totext(dns_message_t *msg, const dns_master_style_t *style,
- dns_messagetextflag_t flags, isc_buffer_t *target) {
+ dns_messagetextflag_t flags, isc_buffer_t *target)
+{
unsigned int sflags = dns_master_styleflags(style);
char buf[sizeof("1234567890")];
isc_result_t result;
ADD_STRING(target, ";; ->>HEADER<<- opcode: ");
ADD_STRING(target, opcodetext[msg->opcode]);
ADD_STRING(target, ", status: ");
- if (msg->rcode < (sizeof(rcodetext)/sizeof(rcodetext[0]))) {
- ADD_STRING(target, rcodetext[msg->rcode]);
- } else {
- snprintf(buf, sizeof(buf), "%4u", msg->rcode);
- ADD_STRING(target, buf);
- }
+ result = dns_rcode_totext(msg->rcode, target);
+ if (result != ISC_R_SUCCESS)
+ return (result);
ADD_STRING(target, ", id: ");
snprintf(buf, sizeof(buf), "%6u", msg->id);
ADD_STRING(target, buf);
#define NUMBERSIZE sizeof("037777777777") /* 2^32-1 octal + NUL */
+#define TOTEXTONLY 0x01
+
#define RCODENAMES \
/* standard rcodes */ \
{ dns_rcode_noerror, "NOERROR", 0}, \
{ dns_rcode_yxrrset, "YXRRSET", 0}, \
{ dns_rcode_nxrrset, "NXRRSET", 0}, \
{ dns_rcode_notauth, "NOTAUTH", 0}, \
- { dns_rcode_notzone, "NOTZONE", 0},
+ { dns_rcode_notzone, "NOTZONE", 0}, \
+ { 11, "RESERVED11", TOTEXTONLY}, \
+ { 12, "RESERVED12", TOTEXTONLY}, \
+ { 13, "RESERVED13", TOTEXTONLY}, \
+ { 14, "RESERVED14", TOTEXTONLY}, \
+ { 15, "RESERVED15", TOTEXTONLY},
#define ERCODENAMES \
/* extended rcodes */ \
unsigned int n;
n = strlen(table[i].name);
if (n == source->length &&
+ (table[i].flags & TOTEXTONLY) == 0 &&
strncasecmp(source->base, table[i].name, n) == 0) {
*valuep = table[i].value;
return (ISC_R_SUCCESS);