diff options
author | dm <dm@cvs.openbsd.org> | 1996-02-19 19:54:44 +0000 |
---|---|---|
committer | dm <dm@cvs.openbsd.org> | 1996-02-19 19:54:44 +0000 |
commit | 34dfcd3c571a64de57872aa758d1b228d7b22a02 (patch) | |
tree | 22b14dd50dff4fc41ec5c5f2ee3e20f4b7f1d141 /lib/libc/net/res_debug.c | |
parent | d134390523f594c4e7f1b453b8026b993a1aeebb (diff) |
netbsd: bind 4.9.3
Diffstat (limited to 'lib/libc/net/res_debug.c')
-rw-r--r-- | lib/libc/net/res_debug.c | 513 |
1 files changed, 297 insertions, 216 deletions
diff --git a/lib/libc/net/res_debug.c b/lib/libc/net/res_debug.c index d841293f18d..14e5ddf790d 100644 --- a/lib/libc/net/res_debug.c +++ b/lib/libc/net/res_debug.c @@ -1,4 +1,4 @@ -/* $NetBSD: res_debug.c,v 1.7 1995/02/25 06:20:56 cgd Exp $ */ +/* $NetBSD: res_debug.c,v 1.8 1996/02/02 15:22:27 mrg Exp $ */ /*- * Copyright (c) 1985, 1990, 1993 @@ -56,8 +56,9 @@ #if defined(LIBC_SCCS) && !defined(lint) #if 0 static char sccsid[] = "@(#)res_debug.c 8.1 (Berkeley) 6/4/93"; +static char rcsid[] = "$Id: res_debug.c,v 8.7 1995/12/22 10:20:39 vixie Exp "; #else -static char rcsid[] = "$NetBSD: res_debug.c,v 1.7 1995/02/25 06:20:56 cgd Exp $"; +static char rcsid[] = "$NetBSD: res_debug.c,v 1.8 1996/02/02 15:22:27 mrg Exp $"; #endif #endif /* LIBC_SCCS and not lint */ @@ -68,18 +69,16 @@ static char rcsid[] = "$NetBSD: res_debug.c,v 1.7 1995/02/25 06:20:56 cgd Exp $" #include <resolv.h> #include <stdio.h> #include <string.h> +#include <netdb.h> void __fp_query(); -char *__p_class(), *__p_time(), *__p_type(); -char *p_cdname(), *p_fqname(), *p_rr(); -static char *p_option __P((u_int32_t)); char *_res_opcodes[] = { "QUERY", "IQUERY", "CQUERYM", - "CQUERYU", - "4", + "CQUERYU", /* experimental */ + "NOTIFY", /* experimental */ "5", "6", "7", @@ -112,102 +111,118 @@ char *_res_resultcodes[] = { "NOCHANGE", }; -static char retbuf[16]; - static char * dewks(wks) int wks; { + static char nbuf[20]; + switch (wks) { - case 5: return("rje"); - case 7: return("echo"); - case 9: return("discard"); - case 11: return("systat"); - case 13: return("daytime"); - case 15: return("netstat"); - case 17: return("qotd"); - case 19: return("chargen"); - case 20: return("ftp-data"); - case 21: return("ftp"); - case 23: return("telnet"); - case 25: return("smtp"); - case 37: return("time"); - case 39: return("rlp"); - case 42: return("name"); - case 43: return("whois"); - case 53: return("domain"); - case 57: return("apts"); - case 59: return("apfs"); - case 67: return("bootps"); - case 68: return("bootpc"); - case 69: return("tftp"); - case 77: return("rje"); - case 79: return("finger"); - case 87: return("link"); - case 95: return("supdup"); - case 100: return("newacct"); - case 101: return("hostnames"); - case 102: return("iso-tsap"); - case 103: return("x400"); - case 104: return("x400-snd"); - case 105: return("csnet-ns"); - case 109: return("pop-2"); - case 111: return("sunrpc"); - case 113: return("auth"); - case 115: return("sftp"); - case 117: return("uucp-path"); - case 119: return("nntp"); - case 121: return("erpc"); - case 123: return("ntp"); - case 133: return("statsrv"); - case 136: return("profile"); - case 144: return("NeWS"); - case 161: return("snmp"); - case 162: return("snmp-trap"); - case 170: return("print-srv"); - default: (void) sprintf(retbuf, "%d", wks); return(retbuf); + case 5: return "rje"; + case 7: return "echo"; + case 9: return "discard"; + case 11: return "systat"; + case 13: return "daytime"; + case 15: return "netstat"; + case 17: return "qotd"; + case 19: return "chargen"; + case 20: return "ftp-data"; + case 21: return "ftp"; + case 23: return "telnet"; + case 25: return "smtp"; + case 37: return "time"; + case 39: return "rlp"; + case 42: return "name"; + case 43: return "whois"; + case 53: return "domain"; + case 57: return "apts"; + case 59: return "apfs"; + case 67: return "bootps"; + case 68: return "bootpc"; + case 69: return "tftp"; + case 77: return "rje"; + case 79: return "finger"; + case 87: return "link"; + case 95: return "supdup"; + case 100: return "newacct"; + case 101: return "hostnames"; + case 102: return "iso-tsap"; + case 103: return "x400"; + case 104: return "x400-snd"; + case 105: return "csnet-ns"; + case 109: return "pop-2"; + case 111: return "sunrpc"; + case 113: return "auth"; + case 115: return "sftp"; + case 117: return "uucp-path"; + case 119: return "nntp"; + case 121: return "erpc"; + case 123: return "ntp"; + case 133: return "statsrv"; + case 136: return "profile"; + case 144: return "NeWS"; + case 161: return "snmp"; + case 162: return "snmp-trap"; + case 170: return "print-srv"; + default: (void) sprintf(nbuf, "%d", wks); return (nbuf); } } -static char * +/* XXX: we should use getprotobynumber() instead. */ +static const char * deproto(protonum) int protonum; { + static char nbuf[20]; + switch (protonum) { - case 1: return("icmp"); - case 2: return("igmp"); - case 3: return("ggp"); - case 5: return("st"); - case 6: return("tcp"); - case 7: return("ucl"); - case 8: return("egp"); - case 9: return("igp"); - case 11: return("nvp-II"); - case 12: return("pup"); - case 16: return("chaos"); - case 17: return("udp"); - default: (void) sprintf(retbuf, "%d", protonum); return(retbuf); + case 1: return "icmp"; + case 2: return "igmp"; + case 3: return "ggp"; + case 5: return "st"; + case 6: return "tcp"; + case 7: return "ucl"; + case 8: return "egp"; + case 9: return "igp"; + case 11: return "nvp-II"; + case 12: return "pup"; + case 16: return "chaos"; + case 17: return "udp"; + default: (void) sprintf(nbuf, "%d", protonum); return (nbuf); } } -static char * -do_rrset(msg, cp, cnt, pflag, file, hs) - int cnt, pflag; - char *cp,*msg, *hs; +static const u_char * +do_rrset(msg, len, cp, cnt, pflag, file, hs) + int cnt, pflag, len; + const u_char *cp, *msg; + const char *hs; FILE *file; { int n; int sflag; + /* - * Print answer records + * Print answer records. */ sflag = (_res.pfcode & pflag); if (n = ntohs(cnt)) { if ((!_res.pfcode) || ((sflag) && (_res.pfcode & RES_PRF_HEAD1))) fprintf(file, hs); while (--n >= 0) { - cp = p_rr(cp, msg, file); - if ((cp-msg) > PACKETSZ) + if ((!_res.pfcode) || sflag) { + cp = p_rr(cp, msg, file); + } else { + unsigned int dlen; + cp += __dn_skipname(cp, cp + MAXCDNAME); + cp += sizeof(u_int16_t); + cp += sizeof(u_int16_t); + cp += sizeof(u_int32_t); + dlen = _getshort((u_char*)cp); + cp += sizeof(u_int16_t); + cp += dlen; + } + if ((cp - msg) > len) return (NULL); } if ((!_res.pfcode) || ((sflag) && (_res.pfcode & RES_PRF_HEAD1))) @@ -216,8 +231,9 @@ do_rrset(msg, cp, cnt, pflag, file, hs) return(cp); } +void __p_query(msg) - char *msg; + const u_char *msg; { __fp_query(msg, stdout); } @@ -231,15 +247,14 @@ __fp_resstat(statp, file) struct __res_state *statp; FILE *file; { - int bit; + register u_long mask; fprintf(file, ";; res options:"); if (!statp) statp = &_res; - for (bit = 0; bit < 32; bit++) { /* XXX 32 - bad assumption! */ - if (statp->options & (1<<bit)) - fprintf(file, " %s", p_option(1<<bit)); - } + for (mask = 1; mask != 0; mask <<= 1) + if (statp->options & mask) + fprintf(file, " %s", p_option(mask)); putc('\n', file); } @@ -248,19 +263,27 @@ __fp_resstat(statp, file) * This is intended to be primarily a debugging routine. */ void -__fp_query(msg,file) - char *msg; +__fp_nquery(msg, len, file) + const u_char *msg; + int len; FILE *file; { - register char *cp; - register HEADER *hp; + register const u_char *cp, *endMark; + register const HEADER *hp; register int n; + if ((_res.options & RES_INIT) == 0 && res_init() == -1) + return; + +#define TruncTest(x) if (x >= endMark) goto trunc +#define ErrorTest(x) if (x == NULL) goto error + /* * Print header fields. */ hp = (HEADER *)msg; - cp = msg + sizeof(HEADER); + cp = msg + HFIXEDSZ; + endMark = cp + len; if ((!_res.pfcode) || (_res.pfcode & RES_PRF_HEADX) || hp->rcode) { fprintf(file,";; ->>HEADER<<- opcode: %s, status: %s, id: %d", _res_opcodes[hp->opcode], @@ -268,7 +291,8 @@ __fp_query(msg,file) ntohs(hp->id)); putc('\n', file); } - putc(';', file); + if ((!_res.pfcode) || (_res.pfcode & RES_PRF_HEADX)) + putc(';', file); if ((!_res.pfcode) || (_res.pfcode & RES_PRF_HEAD2)) { fprintf(file,"; flags:"); if (hp->qr) @@ -281,20 +305,17 @@ __fp_query(msg,file) fprintf(file," rd"); if (hp->ra) fprintf(file," ra"); - if (hp->pr) - fprintf(file," pr"); } if ((!_res.pfcode) || (_res.pfcode & RES_PRF_HEAD1)) { fprintf(file,"; Ques: %d", ntohs(hp->qdcount)); fprintf(file,", Ans: %d", ntohs(hp->ancount)); fprintf(file,", Auth: %d", ntohs(hp->nscount)); - fprintf(file,", Addit: %d\n", ntohs(hp->arcount)); + fprintf(file, ", Addit: %d", ntohs(hp->arcount)); } -#if 0 - if (_res.pfcode & (RES_PRF_HEADX | RES_PRF_HEAD2 | RES_PRF_HEAD1)) { + if ((!_res.pfcode) || (_res.pfcode & + (RES_PRF_HEADX | RES_PRF_HEAD2 | RES_PRF_HEAD1))) { putc('\n',file); } -#endif /* * Print question records. */ @@ -302,55 +323,85 @@ __fp_query(msg,file) if ((!_res.pfcode) || (_res.pfcode & RES_PRF_QUES)) fprintf(file,";; QUESTIONS:\n"); while (--n >= 0) { + if ((!_res.pfcode) || (_res.pfcode & RES_PRF_QUES)) fprintf(file,";;\t"); - cp = p_cdname(cp, msg, file); - if (cp == NULL) - return; + TruncTest(cp); + if ((!_res.pfcode) || (_res.pfcode & RES_PRF_QUES)) + cp = p_cdnname(cp, msg, len, file); + else { + int n; + char name[MAXDNAME]; + + if ((n = dn_expand(msg, msg+len, cp, name, + sizeof name)) < 0) + cp = NULL; + else + cp += n; + } + ErrorTest(cp); + TruncTest(cp); if ((!_res.pfcode) || (_res.pfcode & RES_PRF_QUES)) fprintf(file, ", type = %s", - __p_type(_getshort(cp))); - cp += sizeof(u_int16_t); + __p_type(_getshort((u_char*)cp))); + cp += INT16SZ; + TruncTest(cp); if ((!_res.pfcode) || (_res.pfcode & RES_PRF_QUES)) - fprintf(file, ", class = %s\n\n", - __p_class(_getshort(cp))); - cp += sizeof(u_int16_t); + fprintf(file, ", class = %s\n", + __p_class(_getshort((u_char*)cp))); + cp += INT16SZ; + if ((!_res.pfcode) || (_res.pfcode & RES_PRF_QUES)) + putc('\n', file); } } /* * Print authoritative answer records */ - cp = do_rrset(msg, cp, hp->ancount, RES_PRF_ANS, file, + TruncTest(cp); + cp = do_rrset(msg, len, cp, hp->ancount, RES_PRF_ANS, file, ";; ANSWERS:\n"); - if (cp == NULL) - return; + ErrorTest(cp); /* * print name server records */ - cp = do_rrset(msg, cp, hp->nscount, RES_PRF_AUTH, file, + TruncTest(cp); + cp = do_rrset(msg, len, cp, hp->nscount, RES_PRF_AUTH, file, ";; AUTHORITY RECORDS:\n"); - if (!cp) - return; + ErrorTest(cp); + TruncTest(cp); /* * print additional records */ - cp = do_rrset(msg, cp, hp->arcount, RES_PRF_ADD, file, + cp = do_rrset(msg, len, cp, hp->arcount, RES_PRF_ADD, file, ";; ADDITIONAL RECORDS:\n"); - if (!cp) + ErrorTest(cp); + return; + trunc: + fprintf(file, "\n;; ...truncated\n"); return; + error: + fprintf(file, "\n;; ...malformed\n"); } -char * -p_cdname(cp, msg, file) - char *cp, *msg; +void +__fp_query(msg, file) + const u_char *msg; + FILE *file; +{ + fp_nquery(msg, PACKETSZ, file); +} + +const u_char * +__p_cdnname(cp, msg, len, file) + const u_char *cp, *msg; + int len; FILE *file; { char name[MAXDNAME]; int n; - if ((n = dn_expand((u_char *)msg, (u_char *)cp + MAXCDNAME, - (u_char *)cp, (u_char *)name, sizeof(name))) < 0) + if ((n = dn_expand(msg, msg + len, cp, name, sizeof name)) < 0) return (NULL); if (name[0] == '\0') putc('.', file); @@ -359,16 +410,26 @@ p_cdname(cp, msg, file) return (cp + n); } -char * -p_fqname(cp, msg, file) - char *cp, *msg; +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; + int n; - if ((n = dn_expand((u_char *)msg, (u_char *)cp + MAXCDNAME, - (u_char *)cp, (u_char *)name, sizeof(name))) < 0) + if ((n = dn_expand(msg, cp + MAXCDNAME, cp, name, sizeof name)) < 0) return (NULL); if (name[0] == '\0') { putc('.', file); @@ -383,17 +444,21 @@ p_fqname(cp, msg, file) /* * Print resource record fields in human readable form. */ -char * -p_rr(cp, msg, file) - char *cp, *msg; +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; - char *cp1, *cp2; + const u_char *cp1, *cp2; u_int32_t tmpttl, t; int lcnt; + if ((_res.options & RES_INIT) == 0 && res_init() == -1) { + h_errno = NETDB_INTERNAL; + return (NULL); + } if ((cp = p_fqname(cp, msg, file)) == NULL) return (NULL); /* compression error */ type = _getshort(cp); @@ -406,7 +471,7 @@ p_rr(cp, msg, file) cp += sizeof(u_int16_t); cp1 = cp; if ((!_res.pfcode) || (_res.pfcode & RES_PRF_TTLID)) - fprintf(file, "\t%lu", tmpttl); + fprintf(file, "\t%lu", (u_long)tmpttl); if ((!_res.pfcode) || (_res.pfcode & RES_PRF_CLASS)) fprintf(file, "\t%s", __p_class(class)); fprintf(file, "\t%s", __p_type(type)); @@ -429,7 +494,7 @@ p_rr(cp, msg, file) address = inet_ntoa(inaddr); cp += sizeof(inaddr); - protocol = *(u_char*)cp; + protocol = *cp; cp += sizeof(u_char); port = _getshort(cp); cp += sizeof(u_int16_t); @@ -448,52 +513,75 @@ p_rr(cp, msg, file) case T_NS: case T_PTR: putc('\t', file); - cp = p_fqname(cp, msg, file); + if ((cp = p_fqname(cp, msg, file)) == NULL) + return (NULL); break; case T_HINFO: + case T_ISDN: + cp2 = cp + dlen; if (n = *cp++) { fprintf(file,"\t%.*s", n, cp); cp += n; } - if (n = *cp++) { + if ((cp < cp2) && (n = *cp++)) { fprintf(file,"\t%.*s", n, cp); cp += n; - } + } else if (type == T_HINFO) + fprintf(file, "\n;; *** Warning *** OS-type missing"); break; case T_SOA: putc('\t', file); - cp = p_fqname(cp, msg, file); /* origin */ + if ((cp = p_fqname(cp, msg, file)) == NULL) + return (NULL); putc(' ', file); - cp = p_fqname(cp, msg, file); /* mail addr */ + if ((cp = p_fqname(cp, msg, file)) == NULL) + return (NULL); fputs(" (\n", file); t = _getlong(cp); cp += sizeof(u_int32_t); - fprintf(file,"\t\t\t%lu\t; serial\n", t); + fprintf(file, "\t\t\t%lu\t; serial\n", (u_long)t); t = _getlong(cp); cp += sizeof(u_int32_t); - fprintf(file,"\t\t\t%lu\t; refresh (%s)\n", t, __p_time(t)); + fprintf(file, "\t\t\t%lu\t; refresh (%s)\n", + (u_long)t, __p_time(t)); t = _getlong(cp); cp += sizeof(u_int32_t); - fprintf(file,"\t\t\t%lu\t; retry (%s)\n", t, __p_time(t)); + fprintf(file, "\t\t\t%lu\t; retry (%s)\n", + (u_long)t, __p_time(t)); t = _getlong(cp); cp += sizeof(u_int32_t); - fprintf(file,"\t\t\t%lu\t; expire (%s)\n", t, __p_time(t)); + fprintf(file, "\t\t\t%lu\t; expire (%s)\n", + (u_long)t, __p_time(t)); t = _getlong(cp); cp += sizeof(u_int32_t); - fprintf(file,"\t\t\t%lu )\t; minimum (%s)", t, __p_time(t)); + fprintf(file, "\t\t\t%lu )\t; minimum (%s)", + (u_long)t, __p_time(t)); break; case T_MX: case T_AFSDB: - fprintf(file,"\t%d ", _getshort(cp)); - cp += sizeof(u_int16_t); - cp = p_fqname(cp, msg, file); + case T_RT: + fprintf(file, "\t%d ", _getshort(cp)); + cp += INT16SZ; + if ((cp = p_fqname(cp, msg, file)) == NULL) + return (NULL); + break; + + case T_PX: + fprintf(file, "\t%d ", _getshort(cp)); + cp += INT16SZ; + if ((cp = p_fqname(cp, msg, file)) == NULL) + return (NULL); + putc(' ', file); + if ((cp = p_fqname(cp, msg, file)) == NULL) + return (NULL); 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') { + if ((*cp == '\n') || (*cp == '"')) { (void) putc('\\', file); (void) putc(*cp++, file); } else @@ -503,12 +591,19 @@ p_rr(cp, msg, 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); + if ((cp = p_fqname(cp, msg, file)) == NULL) + return (NULL); putc(' ', file); - cp = p_fqname(cp, msg, file); + if ((cp = p_fqname(cp, msg, file)) == NULL) + return (NULL); break; case T_UINFO: @@ -558,7 +653,7 @@ p_rr(cp, msg, file) case T_UNSPEC: { int NumBytes = 8; - char *DataPtr; + u_char *DataPtr; int i; if (dlen < NumBytes) NumBytes = dlen; @@ -588,113 +683,98 @@ p_rr(cp, msg, file) return (cp); } -static char nbuf[40]; - /* * Return a string for the type */ -char * +const char * __p_type(type) int type; { + static char nbuf[20]; + 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: /* 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"); + 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_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_NSAP: return "NSAP"; + case T_NSAP_PTR: return "NSAP_PTR"; + case T_SIG: return "SIG"; + case T_KEY: return "KEY"; + case T_PX: return "PX"; + case T_GPOS: return "GPOS"; + case T_AAAA: return "AAAA"; + case T_LOC: return "LOC"; + 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"); + case T_UNSPEC: return "UNSPEC"; #endif /* ALLOW_T_UNSPEC */ - - default: - (void)sprintf(nbuf, "%d", type); - return(nbuf); + default: (void)sprintf(nbuf, "%d", type); return (nbuf); } } /* * Return a mnemonic for class */ -char * +const char * __p_class(class) int class; { + static char nbuf[20]; 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); + 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 */ -static char * -p_option(option) - u_int32_t option; +const char * +__p_option(option) + u_long option; { + static char nbuf[40]; + switch (option) { case RES_INIT: return "init"; case RES_DEBUG: return "debug"; - case RES_AAONLY: return "aaonly"; + case RES_AAONLY: return "aaonly(unimpl)"; case RES_USEVC: return "usevc"; - case RES_PRIMARY: return "primry"; + case RES_PRIMARY: return "primry(unimpl)"; 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%x?", option); return nbuf; + case RES_INSECURE1: return "insecure1"; + case RES_INSECURE2: return "insecure2"; + default: sprintf(nbuf, "?0x%lx?", (u_long)option); + return (nbuf); } } @@ -705,6 +785,7 @@ char * __p_time(value) u_int32_t value; { + static char nbuf[40]; int secs, mins, hours, days; register char *p; |