?? res_debug.c
字號:
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. */char *p_rr(cp, msg, file) char *cp, *msg; FILE *file;{ int type, class, dlen, n, c; struct in_addr inaddr; char *cp1, *cp2; uint32_t tmpttl, t; int lcnt; if ((cp = p_fqname(cp, msg, file)) == NULL) return (NULL); /* compression error */ type = _getshort(cp); cp += sizeof(uint16_t); class = _getshort(cp); cp += sizeof(uint16_t); tmpttl = _getlong(cp); cp += sizeof(uint32_t); dlen = _getshort(cp); cp += sizeof(uint16_t); 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, sizeof(inaddr)); 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 += sizeof(inaddr); protocol = *(u_char*)cp; cp += sizeof(u_char); port = _getshort(cp); cp += sizeof(uint16_t); 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: 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(cp); cp += sizeof(uint32_t); fprintf(file,"\t\t\t%lu\t; serial\n", t); t = _getlong(cp); cp += sizeof(uint32_t); fprintf(file,"\t\t\t%lu\t; refresh (%s)\n", t, __p_time(t)); t = _getlong(cp); cp += sizeof(uint32_t); fprintf(file,"\t\t\t%lu\t; retry (%s)\n", t, __p_time(t)); t = _getlong(cp); cp += sizeof(uint32_t); fprintf(file,"\t\t\t%lu\t; expire (%s)\n", t, __p_time(t)); t = _getlong(cp); cp += sizeof(uint32_t); fprintf(file,"\t\t\t%lu )\t; minimum (%s)", t, __p_time(t)); break; case T_MX: case T_AFSDB: fprintf(file,"\t%d ", _getshort(cp)); cp += sizeof(uint16_t); cp = p_fqname(cp, msg, file); break; case T_TXT: (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_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(cp, file); cp += dlen; break; case T_UID: case T_GID: if (dlen == 4) { fprintf(file,"\t%lu", _getlong(cp)); cp += sizeof(uint32_t); } break; case T_WKS: if (dlen < sizeof(uint32_t) + 1) break; bcopy(cp, (char *)&inaddr, sizeof(inaddr)); cp += sizeof(uint32_t); 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; 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", (int) (cp - cp1), dlen); cp = NULL; } return (cp);}static char nbuf[40];/* * Return a string for the type */char *__p_type(type) int type;{ switch (type) { case T_A: return("A"); case T_NS: /* authoritative server */ return("NS"); case T_CNAME: /* canonical name */ return("CNAME"); case T_SOA: /* start of authority zone */ return("SOA"); case T_MB: /* mailbox domain name */ return("MB"); case T_MG: /* mail group member */ return("MG"); case T_MR: /* mail rename name */ return("MR"); case T_NULL_RR: /* null resource record */ return("NULL"); case T_WKS: /* well known service */ return("WKS"); case T_PTR: /* domain name pointer */ return("PTR"); case T_HINFO: /* host information */ return("HINFO"); case T_MINFO: /* mailbox information */ return("MINFO"); case T_MX: /* mail routing info */ return("MX"); case T_TXT: /* text */ return("TXT"); case T_RP: /* responsible person */ return("RP"); case T_AFSDB: /* AFS cell database */ return("AFSDB"); case T_AXFR: /* zone transfer */ return("AXFR"); case T_MAILB: /* mail box */ return("MAILB"); case T_MAILA: /* mail address */ return("MAILA"); case T_ANY: /* matches any type */ 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 */char *__p_class(class) int class;{ switch (class) { case C_IN: /* internet class */ return("IN"); case C_HS: /* hesiod class */ return("HS"); case C_ANY: /* matches any class */ return("ANY"); default: (void)sprintf(nbuf, "%d", class); return(nbuf); }}/* * Return a mnemonic for an option */#ifdef ORG_RESOLVER /* used only if ORG_RESOLVER defined */static 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"; default: sprintf(nbuf, "?0x%lx?", option); return nbuf; }}#endif/* * Return a mnemonic for a time to live */char *__p_time(value) uint32_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 + -