mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-09-03 16:15:27 +00:00
[master] use dns_message_totext() in wire_data
This commit is contained in:
@@ -119,7 +119,6 @@ XSRCS = adb_test.c \
|
|||||||
mempool_test.c \
|
mempool_test.c \
|
||||||
name_test.c \
|
name_test.c \
|
||||||
nsecify.c \
|
nsecify.c \
|
||||||
printmsg.c \
|
|
||||||
ratelimiter_test.c \
|
ratelimiter_test.c \
|
||||||
rbt_test.c \
|
rbt_test.c \
|
||||||
rdata_test.c \
|
rdata_test.c \
|
||||||
@@ -248,8 +247,8 @@ rwlock_test@EXEEXT@: rwlock_test.@O@ ${ISCDEPLIBS}
|
|||||||
${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ rwlock_test.@O@ \
|
${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ rwlock_test.@O@ \
|
||||||
${ISCLIBS} ${LIBS}
|
${ISCLIBS} ${LIBS}
|
||||||
|
|
||||||
wire_test@EXEEXT@: wire_test.@O@ printmsg.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS}
|
wire_test@EXEEXT@: wire_test.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS}
|
||||||
${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ wire_test.@O@ printmsg.@O@ \
|
${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ wire_test.@O@ \
|
||||||
${DNSLIBS} ${ISCLIBS} ${LIBS}
|
${DNSLIBS} ${ISCLIBS} ${LIBS}
|
||||||
|
|
||||||
master_test@EXEEXT@: master_test.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS}
|
master_test@EXEEXT@: master_test.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS}
|
||||||
|
@@ -1,212 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2004, 2007, 2011, 2015 Internet Systems Consortium, Inc. ("ISC")
|
|
||||||
* Copyright (C) 1998-2001 Internet Software Consortium.
|
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <config.h>
|
|
||||||
|
|
||||||
#include <isc/buffer.h>
|
|
||||||
#include <isc/print.h>
|
|
||||||
#include <isc/util.h>
|
|
||||||
|
|
||||||
#include <dns/name.h>
|
|
||||||
#include <dns/opcode.h>
|
|
||||||
#include <dns/rcode.h>
|
|
||||||
#include <dns/rdataset.h>
|
|
||||||
|
|
||||||
#include "printmsg.h"
|
|
||||||
|
|
||||||
static isc_result_t
|
|
||||||
printsection(dns_message_t *msg, dns_section_t sectionid,
|
|
||||||
const char *section_name)
|
|
||||||
{
|
|
||||||
dns_name_t *name, *print_name;
|
|
||||||
dns_rdataset_t *rdataset;
|
|
||||||
isc_buffer_t target;
|
|
||||||
isc_result_t result;
|
|
||||||
isc_region_t r;
|
|
||||||
dns_name_t empty_name;
|
|
||||||
char t[65536];
|
|
||||||
#ifdef USEINITALWS
|
|
||||||
isc_boolean_t first;
|
|
||||||
#endif
|
|
||||||
isc_boolean_t no_rdata;
|
|
||||||
|
|
||||||
if (sectionid == DNS_SECTION_QUESTION)
|
|
||||||
no_rdata = ISC_TRUE;
|
|
||||||
else
|
|
||||||
no_rdata = ISC_FALSE;
|
|
||||||
|
|
||||||
printf(";; %s SECTION:\n", section_name);
|
|
||||||
|
|
||||||
dns_name_init(&empty_name, NULL);
|
|
||||||
|
|
||||||
result = dns_message_firstname(msg, sectionid);
|
|
||||||
if (result == ISC_R_NOMORE)
|
|
||||||
return (ISC_R_SUCCESS);
|
|
||||||
else if (result != ISC_R_SUCCESS)
|
|
||||||
return (result);
|
|
||||||
|
|
||||||
for (;;) {
|
|
||||||
name = NULL;
|
|
||||||
dns_message_currentname(msg, sectionid, &name);
|
|
||||||
|
|
||||||
isc_buffer_init(&target, t, sizeof(t));
|
|
||||||
#ifdef USEINITALWS
|
|
||||||
first = ISC_TRUE;
|
|
||||||
#endif
|
|
||||||
print_name = name;
|
|
||||||
|
|
||||||
for (rdataset = ISC_LIST_HEAD(name->list);
|
|
||||||
rdataset != NULL;
|
|
||||||
rdataset = ISC_LIST_NEXT(rdataset, link)) {
|
|
||||||
result = dns_rdataset_totext(rdataset,
|
|
||||||
print_name,
|
|
||||||
ISC_FALSE,
|
|
||||||
no_rdata,
|
|
||||||
&target);
|
|
||||||
if (result != ISC_R_SUCCESS)
|
|
||||||
return (result);
|
|
||||||
#ifdef USEINITALWS
|
|
||||||
if (first) {
|
|
||||||
print_name = &empty_name;
|
|
||||||
first = ISC_FALSE;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
isc_buffer_usedregion(&target, &r);
|
|
||||||
printf("%.*s", (int)r.length, (char *)r.base);
|
|
||||||
|
|
||||||
result = dns_message_nextname(msg, sectionid);
|
|
||||||
if (result == ISC_R_NOMORE)
|
|
||||||
break;
|
|
||||||
else if (result != ISC_R_SUCCESS)
|
|
||||||
return (result);
|
|
||||||
}
|
|
||||||
|
|
||||||
return (ISC_R_SUCCESS);
|
|
||||||
}
|
|
||||||
|
|
||||||
static isc_result_t
|
|
||||||
printrdata(dns_message_t *msg, dns_rdataset_t *rdataset, dns_name_t *owner,
|
|
||||||
const char *set_name)
|
|
||||||
{
|
|
||||||
isc_buffer_t target;
|
|
||||||
isc_result_t result;
|
|
||||||
isc_region_t r;
|
|
||||||
char t[65536];
|
|
||||||
|
|
||||||
UNUSED(msg);
|
|
||||||
printf(";; %s SECTION:\n", set_name);
|
|
||||||
|
|
||||||
isc_buffer_init(&target, t, sizeof(t));
|
|
||||||
|
|
||||||
result = dns_rdataset_totext(rdataset, owner, ISC_FALSE, ISC_FALSE,
|
|
||||||
&target);
|
|
||||||
if (result != ISC_R_SUCCESS)
|
|
||||||
return (result);
|
|
||||||
isc_buffer_usedregion(&target, &r);
|
|
||||||
printf("%.*s", (int)r.length, (char *)r.base);
|
|
||||||
|
|
||||||
return (ISC_R_SUCCESS);
|
|
||||||
}
|
|
||||||
|
|
||||||
isc_result_t
|
|
||||||
printmessage(dns_message_t *msg) {
|
|
||||||
isc_result_t result;
|
|
||||||
dns_rdataset_t *opt, *tsig;
|
|
||||||
dns_name_t *tsigname;
|
|
||||||
char opcode[64], rcode[64];
|
|
||||||
isc_buffer_t b;
|
|
||||||
|
|
||||||
result = ISC_R_SUCCESS;
|
|
||||||
|
|
||||||
isc_buffer_init(&b, opcode, sizeof(opcode));
|
|
||||||
dns_opcode_totext(msg->opcode, &b);
|
|
||||||
isc_buffer_putuint8(&b, 0);
|
|
||||||
|
|
||||||
isc_buffer_init(&b, rcode, sizeof(rcode));
|
|
||||||
dns_rcode_totext(msg->rcode, &b);
|
|
||||||
isc_buffer_putuint8(&b, 0);
|
|
||||||
|
|
||||||
printf(";; ->>HEADER<<- opcode: %s, status: %s, id: %u\n",
|
|
||||||
opcode, rcode, msg->id);
|
|
||||||
|
|
||||||
printf(";; flags:");
|
|
||||||
if ((msg->flags & DNS_MESSAGEFLAG_QR) != 0)
|
|
||||||
printf(" qr");
|
|
||||||
if ((msg->flags & DNS_MESSAGEFLAG_AA) != 0)
|
|
||||||
printf(" aa");
|
|
||||||
if ((msg->flags & DNS_MESSAGEFLAG_TC) != 0)
|
|
||||||
printf(" tc");
|
|
||||||
if ((msg->flags & DNS_MESSAGEFLAG_RD) != 0)
|
|
||||||
printf(" rd");
|
|
||||||
if ((msg->flags & DNS_MESSAGEFLAG_RA) != 0)
|
|
||||||
printf(" ra");
|
|
||||||
if ((msg->flags & DNS_MESSAGEFLAG_AD) != 0)
|
|
||||||
printf(" ad");
|
|
||||||
if ((msg->flags & DNS_MESSAGEFLAG_CD) != 0)
|
|
||||||
printf(" cd");
|
|
||||||
printf("; QUERY: %u, ANSWER: %u, AUTHORITY: %u, ADDITIONAL: %u\n",
|
|
||||||
msg->counts[DNS_SECTION_QUESTION],
|
|
||||||
msg->counts[DNS_SECTION_ANSWER],
|
|
||||||
msg->counts[DNS_SECTION_AUTHORITY],
|
|
||||||
msg->counts[DNS_SECTION_ADDITIONAL]);
|
|
||||||
opt = dns_message_getopt(msg);
|
|
||||||
if (opt != NULL)
|
|
||||||
printf(";; EDNS: version: %u, udp=%u\n",
|
|
||||||
(unsigned int)((opt->ttl & 0x00ff0000) >> 16),
|
|
||||||
(unsigned int)opt->rdclass);
|
|
||||||
|
|
||||||
tsigname = NULL;
|
|
||||||
tsig = dns_message_gettsig(msg, &tsigname);
|
|
||||||
if (tsig != NULL)
|
|
||||||
printf(";; PSEUDOSECTIONS: TSIG\n");
|
|
||||||
if (! ISC_LIST_EMPTY(msg->sections[DNS_SECTION_QUESTION])) {
|
|
||||||
printf("\n");
|
|
||||||
result = printsection(msg, DNS_SECTION_QUESTION, "QUESTION");
|
|
||||||
if (result != ISC_R_SUCCESS)
|
|
||||||
return (result);
|
|
||||||
}
|
|
||||||
if (! ISC_LIST_EMPTY(msg->sections[DNS_SECTION_ANSWER])) {
|
|
||||||
printf("\n");
|
|
||||||
result = printsection(msg, DNS_SECTION_ANSWER, "ANSWER");
|
|
||||||
if (result != ISC_R_SUCCESS)
|
|
||||||
return (result);
|
|
||||||
}
|
|
||||||
if (! ISC_LIST_EMPTY(msg->sections[DNS_SECTION_AUTHORITY])) {
|
|
||||||
printf("\n");
|
|
||||||
result = printsection(msg, DNS_SECTION_AUTHORITY, "AUTHORITY");
|
|
||||||
if (result != ISC_R_SUCCESS)
|
|
||||||
return (result);
|
|
||||||
}
|
|
||||||
if (! ISC_LIST_EMPTY(msg->sections[DNS_SECTION_ADDITIONAL])) {
|
|
||||||
printf("\n");
|
|
||||||
result = printsection(msg, DNS_SECTION_ADDITIONAL,
|
|
||||||
"ADDITIONAL");
|
|
||||||
if (result != ISC_R_SUCCESS)
|
|
||||||
return (result);
|
|
||||||
}
|
|
||||||
if (tsig != NULL) {
|
|
||||||
printf("\n");
|
|
||||||
result = printrdata(msg, tsig, tsigname,
|
|
||||||
"PSEUDOSECTION TSIG");
|
|
||||||
if (result != ISC_R_SUCCESS)
|
|
||||||
return (result);
|
|
||||||
}
|
|
||||||
printf("\n");
|
|
||||||
|
|
||||||
return (result);
|
|
||||||
}
|
|
@@ -1,27 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC")
|
|
||||||
* Copyright (C) 1998-2001 Internet Software Consortium.
|
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* $Id: printmsg.h,v 1.12 2007/06/19 23:46:59 tbox Exp $ */
|
|
||||||
|
|
||||||
#ifndef TEST_PRINTMSG_H
|
|
||||||
#define TEST_PRINTMSG_H
|
|
||||||
|
|
||||||
#include <dns/message.h>
|
|
||||||
|
|
||||||
isc_result_t printmessage(dns_message_t *message);
|
|
||||||
|
|
||||||
#endif /* TEST_PRINTMSG_H */
|
|
@@ -15,8 +15,6 @@
|
|||||||
* PERFORMANCE OF THIS SOFTWARE.
|
* PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* $Id: wire_test.c,v 1.67 2007/06/19 23:46:59 tbox Exp $ */
|
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -28,10 +26,9 @@
|
|||||||
#include <isc/string.h>
|
#include <isc/string.h>
|
||||||
#include <isc/util.h>
|
#include <isc/util.h>
|
||||||
|
|
||||||
|
#include <dns/message.h>
|
||||||
#include <dns/result.h>
|
#include <dns/result.h>
|
||||||
|
|
||||||
#include "printmsg.h"
|
|
||||||
|
|
||||||
int parseflags = 0;
|
int parseflags = 0;
|
||||||
isc_mem_t *mctx;
|
isc_mem_t *mctx;
|
||||||
isc_boolean_t printmemstats = ISC_FALSE;
|
isc_boolean_t printmemstats = ISC_FALSE;
|
||||||
@@ -40,6 +37,9 @@ isc_boolean_t dorender = ISC_FALSE;
|
|||||||
static void
|
static void
|
||||||
process_message(isc_buffer_t *source);
|
process_message(isc_buffer_t *source);
|
||||||
|
|
||||||
|
static isc_result_t
|
||||||
|
printmessage(dns_message_t *msg);
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
CHECKRESULT(isc_result_t result, const char *msg) {
|
CHECKRESULT(isc_result_t result, const char *msg) {
|
||||||
if (result != ISC_R_SUCCESS) {
|
if (result != ISC_R_SUCCESS) {
|
||||||
@@ -74,6 +74,36 @@ usage(void) {
|
|||||||
fprintf(stderr, "\t-t\tTCP mode - ignore the first 2 bytes\n");
|
fprintf(stderr, "\t-t\tTCP mode - ignore the first 2 bytes\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static isc_result_t
|
||||||
|
printmessage(dns_message_t *msg) {
|
||||||
|
isc_buffer_t b;
|
||||||
|
char *buf = NULL;
|
||||||
|
int len = 1024;
|
||||||
|
isc_result_t result = ISC_R_SUCCESS;
|
||||||
|
|
||||||
|
do {
|
||||||
|
buf = isc_mem_get(mctx, len);
|
||||||
|
if (buf == NULL) {
|
||||||
|
result = ISC_R_NOMEMORY;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
isc_buffer_init(&b, buf, len);
|
||||||
|
result = dns_message_totext(msg, &dns_master_style_debug,
|
||||||
|
0, &b);
|
||||||
|
if (result == ISC_R_NOSPACE) {
|
||||||
|
isc_mem_put(mctx, buf, len);
|
||||||
|
len *= 2;
|
||||||
|
} else if (result == ISC_R_SUCCESS)
|
||||||
|
printf("%.*s\n", (int) isc_buffer_usedlength(&b), buf);
|
||||||
|
} while (result == ISC_R_NOSPACE);
|
||||||
|
|
||||||
|
if (buf != NULL)
|
||||||
|
isc_mem_put(mctx, buf, len);
|
||||||
|
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char *argv[]) {
|
main(int argc, char *argv[]) {
|
||||||
char *rp, *wp;
|
char *rp, *wp;
|
||||||
|
Reference in New Issue
Block a user