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

📄 res_debug.c

📁 一个C源代码分析器
💻 C
📖 第 1 页 / 共 2 页
字号:
	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(cp, msg, file)	const u_char *cp, *msg;	FILE *file;{	return (p_cdnname(cp, msg, PACKETSZ, file));}/* XXX:	the rest of these functions need to become length-limited, too. (vix) */const u_char *__p_fqname(cp, msg, file)	const u_char *cp, *msg;	FILE *file;{	char name[MAXDNAME];	int n, len;	if ((n = dn_expand(msg, cp + MAXCDNAME, cp, name, sizeof name)) < 0)		return (NULL);	if (name[0] == '\0') {		putc('.', file);	} else {		fputs(name, file);		if (name[strlen(name) - 1] != '.')			putc('.', file);	}	return (cp + n);}/* * Print resource record fields in human readable form. */const u_char *__p_rr(cp, msg, file)	const u_char *cp, *msg;	FILE *file;{	int type, class, dlen, n, c;	struct in_addr inaddr;	const u_char *cp1, *cp2;	u_int32_t tmpttl, t;	int lcnt;	if ((cp = p_fqname(cp, msg, file)) == NULL)		return (NULL);			/* compression error */	type = _getshort((u_char*)cp);	cp += INT16SZ;	class = _getshort((u_char*)cp);	cp += INT16SZ;	tmpttl = _getlong((u_char*)cp);	cp += INT32SZ;	dlen = _getshort((u_char*)cp);	cp += INT16SZ;	cp1 = cp;	if ((!_res.pfcode) || (_res.pfcode & RES_PRF_TTLID))		fprintf(file, "\t%lu", tmpttl);	if ((!_res.pfcode) || (_res.pfcode & RES_PRF_CLASS))		fprintf(file, "\t%s", __p_class(class));	fprintf(file, "\t%s", __p_type(type));	/*	 * Print type specific data, if appropriate	 */	switch (type) {	case T_A:		switch (class) {		case C_IN:		case C_HS:			bcopy(cp, (char *)&inaddr, INADDRSZ);			if (dlen == 4) {				fprintf(file,"\t%s", inet_ntoa(inaddr));				cp += dlen;			} else if (dlen == 7) {				char *address;				u_char protocol;				u_short port;				address = inet_ntoa(inaddr);				cp += INADDRSZ;				protocol = *(u_char*)cp;				cp += sizeof(u_char);				port = _getshort((u_char*)cp);				cp += INT16SZ;				fprintf(file, "\t%s\t; proto %d, port %d",					address, protocol, port);			}			break;		default:			cp += dlen;		}		break;	case T_CNAME:	case T_MB:	case T_MG:	case T_MR:	case T_NS:	case T_PTR:		putc('\t', file);		cp = p_fqname(cp, msg, file);		break;	case T_HINFO:	case T_ISDN:		if (n = *cp++) {			fprintf(file,"\t%.*s", n, cp);			cp += n;		}		if (n = *cp++) {			fprintf(file,"\t%.*s", n, cp);			cp += n;		}		break;	case T_SOA:		putc('\t', file);		cp = p_fqname(cp, msg, file);	/* origin */		putc(' ', file);		cp = p_fqname(cp, msg, file);	/* mail addr */		fputs(" (\n", file);		t = _getlong((u_char*)cp);  cp += INT32SZ;		fprintf(file,"\t\t\t%lu\t; serial\n", t);		t = _getlong((u_char*)cp);  cp += INT32SZ;		fprintf(file,"\t\t\t%lu\t; refresh (%s)\n", t, __p_time(t));		t = _getlong((u_char*)cp);  cp += INT32SZ;		fprintf(file,"\t\t\t%lu\t; retry (%s)\n", t, __p_time(t));		t = _getlong((u_char*)cp);  cp += INT32SZ;		fprintf(file,"\t\t\t%lu\t; expire (%s)\n", t, __p_time(t));		t = _getlong((u_char*)cp);  cp += INT32SZ;		fprintf(file,"\t\t\t%lu )\t; minimum (%s)", t, __p_time(t));		break;	case T_MX:	case T_AFSDB:	case T_RT:		fprintf(file,"\t%d ", _getshort((u_char*)cp));		cp += INT16SZ;		cp = p_fqname(cp, msg, file);		break;  	case T_TXT:	case T_X25:		(void) fputs("\t\"", file);		cp2 = cp1 + dlen;		while (cp < cp2) {			if (n = (unsigned char) *cp++) {				for (c = n; c > 0 && cp < cp2; c--)					if (*cp == '\n') {					    (void) putc('\\', file);					    (void) putc(*cp++, file);					} else					    (void) putc(*cp++, file);			}		}		putc('"', file);  		break;  	case T_NSAP:		(void) fprintf(file, "\t%s", inet_nsap_ntoa(dlen, cp, NULL));		cp += dlen;  		break;	case T_MINFO:	case T_RP:		putc('\t', file);		cp = p_fqname(cp, msg, file);		putc(' ', file);		cp = p_fqname(cp, msg, file);		break;	case T_UINFO:		putc('\t', file);		fputs((char *)cp, file);		cp += dlen;		break;	case T_UID:	case T_GID:		if (dlen == 4) {			fprintf(file,"\t%u", _getlong((u_char*)cp));			cp += INT32SZ;		}		break;	case T_WKS:		if (dlen < INT32SZ + 1)			break;		bcopy(cp, (char *)&inaddr, INADDRSZ);		cp += INT32SZ;		fprintf(file, "\t%s %s ( ",			inet_ntoa(inaddr),			deproto((int) *cp));		cp += sizeof(u_char);		n = 0;		lcnt = 0;		while (cp < cp1 + dlen) {			c = *cp++;			do { 				if (c & 0200) {					if (lcnt == 0) {						fputs("\n\t\t\t", file);						lcnt = 5;					}					fputs(dewks(n), file);					putc(' ', file);					lcnt--;				} 				c <<= 1;			} while (++n & 07);		}		putc(')', file);		break;#ifdef ALLOW_T_UNSPEC	case T_UNSPEC:		{			int NumBytes = 8;			u_char *DataPtr;			int i;			if (dlen < NumBytes) NumBytes = dlen;			fprintf(file, "\tFirst %d bytes of hex data:",				NumBytes);			for (i = 0, DataPtr = cp; i < NumBytes; i++, DataPtr++)				fprintf(file, " %x", *DataPtr);			cp += dlen;		}		break;#endif /* ALLOW_T_UNSPEC */	default:		fprintf(file,"\t?%d?", type);		cp += dlen;	}#if 0	fprintf(file, "\t; dlen=%d, ttl %s\n", dlen, __p_time(tmpttl));#else	putc('\n', file);#endif	if (cp - cp1 != dlen) {		fprintf(file,";; packet size error (found %d, dlen was %d)\n",			cp - cp1, dlen);		cp = NULL;	}	return (cp);}static	char nbuf[40];/* * Return a string for the type */const char *__p_type(type)	int type;{	switch (type) {	case T_A:	return "A";	case T_NS:	return "NS";	case T_CNAME:	return "CNAME";	case T_SOA:	return "SOA";	case T_MB:	return "MB";	case T_MG:	return "MG";	case T_MR:	return "MR";	case T_NULL:	return "NULL";	case T_WKS:	return "WKS";	case T_PTR:	return "PTR";	case T_HINFO:	return "HINFO";	case T_MINFO:	return "MINFO";	case T_MX:	return "MX";	case T_TXT:	return "TXT";	case T_NSAP:	return "NSAP";	case T_RP:	return "RP";	case T_AFSDB:	return "AFSDB";	case T_X25:	return "X25";	case T_ISDN:	return "ISDN";	case T_RT:	return "RT";	case T_AXFR:	return "AXFR";	case T_MAILB:	return "MAILB";	case T_MAILA:	return "MAILA";	case T_ANY:	return "ANY";	case T_UINFO:	return "UINFO";	case T_UID:	return "UID";	case T_GID:	return "GID";#ifdef ALLOW_T_UNSPEC	case T_UNSPEC:	return "UNSPEC";#endif /* ALLOW_T_UNSPEC */	default:	(void)sprintf(nbuf, "%d", type); return (nbuf);	}}/* * Return a mnemonic for class */const char *__p_class(class)	int class;{	switch (class) {	case C_IN:	return("IN");	case C_HS:	return("HS");	case C_ANY:	return("ANY");	default:	(void)sprintf(nbuf, "%d", class); return (nbuf);	}}/* * Return a mnemonic for an option */const char *__p_option(option)	u_long option;{	switch (option) {	case RES_INIT:		return "init";	case RES_DEBUG:		return "debug";	case RES_AAONLY:	return "aaonly";	case RES_USEVC:		return "usevc";	case RES_PRIMARY:	return "primry";	case RES_IGNTC:		return "igntc";	case RES_RECURSE:	return "recurs";	case RES_DEFNAMES:	return "defnam";	case RES_STAYOPEN:	return "styopn";	case RES_DNSRCH:	return "dnsrch";	case RES_INSECURE1:	return "insecure1";	case RES_INSECURE2:	return "insecure2";	default:		sprintf(nbuf, "?0x%x?", option); return nbuf;	}}/* * Return a mnemonic for a time to live */char *__p_time(value)	u_int32_t value;{	int secs, mins, hours, days;	register char *p;	if (value == 0) {		strcpy(nbuf, "0 secs");		return (nbuf);	}	secs = value % 60;	value /= 60;	mins = value % 60;	value /= 60;	hours = value % 24;	value /= 24;	days = value;	value = 0;#define	PLURALIZE(x)	x, (x == 1) ? "" : "s"	p = nbuf;	if (days) {		(void)sprintf(p, "%d day%s", PLURALIZE(days));		while (*++p);	}	if (hours) {		if (days)			*p++ = ' ';		(void)sprintf(p, "%d hour%s", PLURALIZE(hours));		while (*++p);	}	if (mins) {		if (days || hours)			*p++ = ' ';		(void)sprintf(p, "%d min%s", PLURALIZE(mins));		while (*++p);	}	if (secs || ! (days || hours || mins)) {		if (days || hours || mins)			*p++ = ' ';		(void)sprintf(p, "%d sec%s", PLURALIZE(secs));	}	return (nbuf);}

⌨️ 快捷键说明

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