📄 res_debug.c
字号:
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 + -