⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 res_debug.c

📁 bind 9.3结合mysql数据库
💻 C
📖 第 1 页 / 共 3 页
字号:
/* * Copyright (c) 1985 *    The Regents of the University of California.  All rights reserved. *  * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: * 	This product includes software developed by the University of * 	California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. *  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. *//* * Portions Copyright (c) 1993 by Digital Equipment Corporation. *  * Permission to use, copy, modify, and 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, and that * the name of Digital Equipment Corporation not be used in advertising or * publicity pertaining to distribution of the document or software without * specific, written prior permission. *  * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT * CORPORATION 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. *//* * Portions Copyright (c) 1995 by International Business Machines, Inc. * * International Business Machines, Inc. (hereinafter called IBM) grants * permission under its copyrights to use, copy, modify, and distribute this * Software with or without fee, provided that the above copyright notice and * all paragraphs of this notice appear in all copies, and that the name of IBM * not be used in connection with the marketing of any product incorporating * the Software or modifications thereof, without specific, written prior * permission. * * To the extent it has a right to do so, IBM grants an immunity from suit * under its patents, if any, for the use, sale or manufacture of products to * the extent that such products are used for performing Domain Name System * dynamic updates in TCP/IP networks by means of the Software.  No immunity is * granted for any product per se or for any other function of any product. * * THE SOFTWARE IS PROVIDED "AS IS", AND IBM DISCLAIMS ALL WARRANTIES, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE.  IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, * DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE, EVEN * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES. *//* * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") * Portions Copyright (c) 1996-1999 by Internet Software Consortium. * * Permission to use, copy, modify, and 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. */#if defined(LIBC_SCCS) && !defined(lint)static const char sccsid[] = "@(#)res_debug.c	8.1 (Berkeley) 6/4/93";static const char rcsid[] = "$Id: res_debug.c,v 1.3.2.5.4.5 2004/07/28 20:16:46 marka Exp $";#endif /* LIBC_SCCS and not lint */#include "port_before.h"#include <sys/types.h>#include <sys/param.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <arpa/nameser.h>#include <ctype.h>#include <errno.h>#include <math.h>#include <netdb.h>#include <resolv.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#include "port_after.h"#ifdef SPRINTF_CHAR# define SPRINTF(x) strlen(sprintf/**/x)#else# define SPRINTF(x) sprintf x#endifextern const char *_res_opcodes[];extern const char *_res_sectioncodes[];/* * Print the current options. */voidfp_resstat(const res_state statp, FILE *file) {	u_long mask;	fprintf(file, ";; res options:");	for (mask = 1;  mask != 0U;  mask <<= 1)		if (statp->options & mask)			fprintf(file, " %s", p_option(mask));	putc('\n', file);}static voiddo_section(const res_state statp,	   ns_msg *handle, ns_sect section,	   int pflag, FILE *file){	int n, sflag, rrnum;	static int buflen = 2048;	char *buf;	ns_opcode opcode;	ns_rr rr;	/*	 * Print answer records.	 */	sflag = (statp->pfcode & pflag);	if (statp->pfcode && !sflag)		return;	buf = malloc(buflen);	if (buf == NULL) {		fprintf(file, ";; memory allocation failure\n");		return;	}	opcode = (ns_opcode) ns_msg_getflag(*handle, ns_f_opcode);	rrnum = 0;	for (;;) {		if (ns_parserr(handle, section, rrnum, &rr)) {			if (errno != ENODEV)				fprintf(file, ";; ns_parserr: %s\n",					strerror(errno));			else if (rrnum > 0 && sflag != 0 &&				 (statp->pfcode & RES_PRF_HEAD1))				putc('\n', file);			goto cleanup;		}		if (rrnum == 0 && sflag != 0 && (statp->pfcode & RES_PRF_HEAD1))			fprintf(file, ";; %s SECTION:\n",				p_section(section, opcode));		if (section == ns_s_qd)			fprintf(file, ";;\t%s, type = %s, class = %s\n",				ns_rr_name(rr),				p_type(ns_rr_type(rr)),				p_class(ns_rr_class(rr)));		else if (section == ns_s_ar && ns_rr_type(rr) == ns_t_opt) {			u_int32_t ttl = ns_rr_ttl(rr);			fprintf(file,				"; EDNS: version: %u, udp=%u, flags=%04x\n",				(ttl>>16)&0xff, ns_rr_class(rr), ttl&0xffff);		} else {			n = ns_sprintrr(handle, &rr, NULL, NULL,					buf, buflen);			if (n < 0) {				if (errno == ENOSPC) {					free(buf);					buf = NULL;					if (buflen < 131072)						buf = malloc(buflen += 1024);					if (buf == NULL) {						fprintf(file,				              ";; memory allocation failure\n");					      return;					}					continue;				}				fprintf(file, ";; ns_sprintrr: %s\n",					strerror(errno));				goto cleanup;			}			fputs(buf, file);			fputc('\n', file);		}		rrnum++;	} cleanup:	if (buf != NULL)		free(buf);}/* * Print the contents of a query. * This is intended to be primarily a debugging routine. */voidres_pquery(const res_state statp, const u_char *msg, int len, FILE *file) {	ns_msg handle;	int qdcount, ancount, nscount, arcount;	u_int opcode, rcode, id;	if (ns_initparse(msg, len, &handle) < 0) {		fprintf(file, ";; ns_initparse: %s\n", strerror(errno));		return;	}	opcode = ns_msg_getflag(handle, ns_f_opcode);	rcode = ns_msg_getflag(handle, ns_f_rcode);	id = ns_msg_id(handle);	qdcount = ns_msg_count(handle, ns_s_qd);	ancount = ns_msg_count(handle, ns_s_an);	nscount = ns_msg_count(handle, ns_s_ns);	arcount = ns_msg_count(handle, ns_s_ar);	/*	 * Print header fields.	 */	if ((!statp->pfcode) || (statp->pfcode & RES_PRF_HEADX) || rcode)		fprintf(file,			";; ->>HEADER<<- opcode: %s, status: %s, id: %d\n",			_res_opcodes[opcode], p_rcode(rcode), id);	if ((!statp->pfcode) || (statp->pfcode & RES_PRF_HEADX))		putc(';', file);	if ((!statp->pfcode) || (statp->pfcode & RES_PRF_HEAD2)) {		fprintf(file, "; flags:");		if (ns_msg_getflag(handle, ns_f_qr))			fprintf(file, " qr");		if (ns_msg_getflag(handle, ns_f_aa))			fprintf(file, " aa");		if (ns_msg_getflag(handle, ns_f_tc))			fprintf(file, " tc");		if (ns_msg_getflag(handle, ns_f_rd))			fprintf(file, " rd");		if (ns_msg_getflag(handle, ns_f_ra))			fprintf(file, " ra");		if (ns_msg_getflag(handle, ns_f_z))			fprintf(file, " ??");		if (ns_msg_getflag(handle, ns_f_ad))			fprintf(file, " ad");		if (ns_msg_getflag(handle, ns_f_cd))			fprintf(file, " cd");	}	if ((!statp->pfcode) || (statp->pfcode & RES_PRF_HEAD1)) {		fprintf(file, "; %s: %d",			p_section(ns_s_qd, opcode), qdcount);		fprintf(file, ", %s: %d",			p_section(ns_s_an, opcode), ancount);		fprintf(file, ", %s: %d",			p_section(ns_s_ns, opcode), nscount);		fprintf(file, ", %s: %d",			p_section(ns_s_ar, opcode), arcount);	}	if ((!statp->pfcode) || (statp->pfcode & 		(RES_PRF_HEADX | RES_PRF_HEAD2 | RES_PRF_HEAD1))) {		putc('\n',file);	}	/*	 * Print the various sections.	 */	do_section(statp, &handle, ns_s_qd, RES_PRF_QUES, file);	do_section(statp, &handle, ns_s_an, RES_PRF_ANS, file);	do_section(statp, &handle, ns_s_ns, RES_PRF_AUTH, file);	do_section(statp, &handle, ns_s_ar, RES_PRF_ADD, file);	if (qdcount == 0 && ancount == 0 &&	    nscount == 0 && arcount == 0)		putc('\n', file);}const u_char *p_cdnname(const u_char *cp, const u_char *msg, int len, FILE *file) {	char name[MAXDNAME];	int n;	if ((n = dn_expand(msg, msg + len, cp, name, sizeof name)) < 0)		return (NULL);	if (name[0] == '\0')		putc('.', file);	else		fputs(name, file);	return (cp + n);}const u_char *p_cdname(const u_char *cp, const u_char *msg, FILE *file) {	return (p_cdnname(cp, msg, PACKETSZ, file));}/* Return a fully-qualified domain name from a compressed name (with   length supplied).  */const u_char *p_fqnname(cp, msg, msglen, name, namelen)	const u_char *cp, *msg;	int msglen;	char *name;	int namelen;{	int n, newlen;	if ((n = dn_expand(msg, cp + msglen, cp, name, namelen)) < 0)		return (NULL);	newlen = strlen(name);	if (newlen == 0 || name[newlen - 1] != '.') {		if (newlen + 1 >= namelen)	/* Lack space for final dot */			return (NULL);		else			strcpy(name + newlen, ".");	}	return (cp + n);}/* XXX:	the rest of these functions need to become length-limited, too. */const u_char *p_fqname(const u_char *cp, const u_char *msg, FILE *file) {	char name[MAXDNAME];	const u_char *n;	n = p_fqnname(cp, msg, MAXCDNAME, name, sizeof name);	if (n == NULL)		return (NULL);	fputs(name, file);	return (n);}/* * Names of RR classes and qclasses.  Classes and qclasses are the same, except * that C_ANY is a qclass but not a class.  (You can ask for records of class * C_ANY, but you can't have any records of that class in the database.) */const struct res_sym __p_class_syms[] = {	{C_IN,		"IN",		(char *)0},	{C_CHAOS,	"CH",		(char *)0},	{C_CHAOS,	"CHAOS",	(char *)0},	{C_HS,		"HS",		(char *)0},	{C_HS,		"HESIOD",	(char *)0},	{C_ANY,		"ANY",		(char *)0},	{C_NONE,	"NONE",		(char *)0},	{C_IN, 		(char *)0,	(char *)0}};/* * Names of message sections. */const struct res_sym __p_default_section_syms[] = {	{ns_s_qd,	"QUERY",	(char *)0},	{ns_s_an,	"ANSWER",	(char *)0},	{ns_s_ns,	"AUTHORITY",	(char *)0},	{ns_s_ar,	"ADDITIONAL",	(char *)0},	{0,             (char *)0,	(char *)0}};const struct res_sym __p_update_section_syms[] = {	{S_ZONE,	"ZONE",		(char *)0},	{S_PREREQ,	"PREREQUISITE",	(char *)0},	{S_UPDATE,	"UPDATE",	(char *)0},

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -