diff options
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libc/net/res_debug.c | 61 |
1 files changed, 48 insertions, 13 deletions
diff --git a/src/lib/libc/net/res_debug.c b/src/lib/libc/net/res_debug.c index a1c88e24b3..2ea9173fe9 100644 --- a/src/lib/libc/net/res_debug.c +++ b/src/lib/libc/net/res_debug.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: res_debug.c,v 1.13 2002/06/27 10:14:02 itojun Exp $ */ | 1 | /* $OpenBSD: res_debug.c,v 1.14 2002/07/25 21:55:30 deraadt Exp $ */ |
| 2 | 2 | ||
| 3 | /* | 3 | /* |
| 4 | * ++Copyright++ 1985, 1990, 1993 | 4 | * ++Copyright++ 1985, 1990, 1993 |
| @@ -82,7 +82,7 @@ | |||
| 82 | static char sccsid[] = "@(#)res_debug.c 8.1 (Berkeley) 6/4/93"; | 82 | static char sccsid[] = "@(#)res_debug.c 8.1 (Berkeley) 6/4/93"; |
| 83 | static char rcsid[] = "$From: res_debug.c,v 8.19 1996/11/26 10:11:23 vixie Exp $"; | 83 | static char rcsid[] = "$From: res_debug.c,v 8.19 1996/11/26 10:11:23 vixie Exp $"; |
| 84 | #else | 84 | #else |
| 85 | static char rcsid[] = "$OpenBSD: res_debug.c,v 1.13 2002/06/27 10:14:02 itojun Exp $"; | 85 | static char rcsid[] = "$OpenBSD: res_debug.c,v 1.14 2002/07/25 21:55:30 deraadt Exp $"; |
| 86 | #endif | 86 | #endif |
| 87 | #endif /* LIBC_SCCS and not lint */ | 87 | #endif /* LIBC_SCCS and not lint */ |
| 88 | 88 | ||
| @@ -105,6 +105,8 @@ static char rcsid[] = "$OpenBSD: res_debug.c,v 1.13 2002/06/27 10:14:02 itojun E | |||
| 105 | extern const char *_res_opcodes[]; | 105 | extern const char *_res_opcodes[]; |
| 106 | extern const char *_res_resultcodes[]; | 106 | extern const char *_res_resultcodes[]; |
| 107 | 107 | ||
| 108 | static const char *loc_ntoal(const u_char *binary, char *ascii, int ascii_len); | ||
| 109 | |||
| 108 | /* XXX: we should use getservbyport() instead. */ | 110 | /* XXX: we should use getservbyport() instead. */ |
| 109 | static const char * | 111 | static const char * |
| 110 | dewks(wks) | 112 | dewks(wks) |
| @@ -666,7 +668,7 @@ __p_rr(cp, msg, file) | |||
| 666 | case T_LOC: { | 668 | case T_LOC: { |
| 667 | char t[255]; | 669 | char t[255]; |
| 668 | 670 | ||
| 669 | fprintf(file, "\t%s", loc_ntoa(cp, t)); | 671 | fprintf(file, "\t%s", loc_ntoal(cp, t, sizeof t)); |
| 670 | cp += dlen; | 672 | cp += dlen; |
| 671 | break; | 673 | break; |
| 672 | } | 674 | } |
| @@ -1048,8 +1050,10 @@ p_time(value) | |||
| 1048 | u_int32_t value; | 1050 | u_int32_t value; |
| 1049 | { | 1051 | { |
| 1050 | static char nbuf[40]; | 1052 | static char nbuf[40]; |
| 1053 | char *ebuf; | ||
| 1051 | int secs, mins, hours, days; | 1054 | int secs, mins, hours, days; |
| 1052 | register char *p; | 1055 | register char *p; |
| 1056 | int tmp; | ||
| 1053 | 1057 | ||
| 1054 | if (value == 0) { | 1058 | if (value == 0) { |
| 1055 | strlcpy(nbuf, "0 secs", sizeof nbuf); | 1059 | strlcpy(nbuf, "0 secs", sizeof nbuf); |
| @@ -1067,28 +1071,50 @@ p_time(value) | |||
| 1067 | 1071 | ||
| 1068 | #define PLURALIZE(x) x, (x == 1) ? "" : "s" | 1072 | #define PLURALIZE(x) x, (x == 1) ? "" : "s" |
| 1069 | p = nbuf; | 1073 | p = nbuf; |
| 1074 | ebuf = nbuf + sizeof(nbuf); | ||
| 1070 | if (days) { | 1075 | if (days) { |
| 1071 | (void)sprintf(p, "%d day%s", PLURALIZE(days)); | 1076 | if ((tmp = snprintf(p, ebuf - p, "%d day%s", |
| 1072 | while (*++p); | 1077 | PLURALIZE(days))) >= ebuf - nbuf || tmp < 0) |
| 1078 | goto full; | ||
| 1079 | p += tmp; | ||
| 1073 | } | 1080 | } |
| 1074 | if (hours) { | 1081 | if (hours) { |
| 1075 | if (days) | 1082 | if (days) |
| 1076 | *p++ = ' '; | 1083 | *p++ = ' '; |
| 1077 | (void)sprintf(p, "%d hour%s", PLURALIZE(hours)); | 1084 | if (p >= ebuf) |
| 1078 | while (*++p); | 1085 | goto full; |
| 1086 | if ((tmp = snprintf(p, ebuf - p, "%d hour%s", | ||
| 1087 | PLURALIZE(hours))) >= ebuf - nbuf || tmp < 0) | ||
| 1088 | goto full; | ||
| 1089 | p += tmp; | ||
| 1079 | } | 1090 | } |
| 1080 | if (mins) { | 1091 | if (mins) { |
| 1081 | if (days || hours) | 1092 | if (days || hours) |
| 1082 | *p++ = ' '; | 1093 | *p++ = ' '; |
| 1083 | (void)sprintf(p, "%d min%s", PLURALIZE(mins)); | 1094 | if (p >= ebuf) |
| 1084 | while (*++p); | 1095 | goto full; |
| 1096 | if ((tmp = snprintf(p, ebuf - p, "%d min%s", | ||
| 1097 | PLURALIZE(mins))) >= ebuf - nbuf || tmp < 0) | ||
| 1098 | goto full; | ||
| 1099 | p += tmp; | ||
| 1085 | } | 1100 | } |
| 1086 | if (secs || ! (days || hours || mins)) { | 1101 | if (secs || ! (days || hours || mins)) { |
| 1087 | if (days || hours || mins) | 1102 | if (days || hours || mins) |
| 1088 | *p++ = ' '; | 1103 | *p++ = ' '; |
| 1089 | (void)sprintf(p, "%d sec%s", PLURALIZE(secs)); | 1104 | if (p >= ebuf) |
| 1105 | goto full; | ||
| 1106 | if ((tmp = snprintf(p, ebuf - p, "%d sec%s", | ||
| 1107 | PLURALIZE(secs))) >= ebuf - nbuf || tmp < 0) | ||
| 1108 | goto full; | ||
| 1090 | } | 1109 | } |
| 1091 | return (nbuf); | 1110 | return (nbuf); |
| 1111 | full: | ||
| 1112 | p = nbuf + sizeof(nbuf) - 4; | ||
| 1113 | *p++ = '.'; | ||
| 1114 | *p++ = '.'; | ||
| 1115 | *p++ = '.'; | ||
| 1116 | *p++ = '\0'; | ||
| 1117 | return (nbuf); | ||
| 1092 | } | 1118 | } |
| 1093 | 1119 | ||
| 1094 | /* | 1120 | /* |
| @@ -1371,12 +1397,21 @@ loc_aton(ascii, binary) | |||
| 1371 | return (16); /* size of RR in octets */ | 1397 | return (16); /* size of RR in octets */ |
| 1372 | } | 1398 | } |
| 1373 | 1399 | ||
| 1374 | /* takes an on-the-wire LOC RR and formats it in a human readable format. */ | ||
| 1375 | const char * | 1400 | const char * |
| 1376 | loc_ntoa(binary, ascii) | 1401 | loc_ntoa(binary, ascii) |
| 1377 | const u_char *binary; | 1402 | const u_char *binary; |
| 1378 | char *ascii; | 1403 | char *ascii; |
| 1379 | { | 1404 | { |
| 1405 | return loc_ntoal(binary, ascii, 255); | ||
| 1406 | } | ||
| 1407 | |||
| 1408 | /* takes an on-the-wire LOC RR and formats it in a human readable format. */ | ||
| 1409 | static const char * | ||
| 1410 | loc_ntoal(binary, ascii, ascii_len) | ||
| 1411 | const u_char *binary; | ||
| 1412 | char *ascii; | ||
| 1413 | int ascii_len; | ||
| 1414 | { | ||
| 1380 | static char *error = "?"; | 1415 | static char *error = "?"; |
| 1381 | register const u_char *cp = binary; | 1416 | register const u_char *cp = binary; |
| 1382 | 1417 | ||
| @@ -1396,7 +1431,7 @@ loc_ntoa(binary, ascii) | |||
| 1396 | versionval = *cp++; | 1431 | versionval = *cp++; |
| 1397 | 1432 | ||
| 1398 | if (versionval) { | 1433 | if (versionval) { |
| 1399 | sprintf(ascii, "; error: unknown LOC RR version"); | 1434 | snprintf(ascii, ascii_len, "; error: unknown LOC RR version"); |
| 1400 | return (ascii); | 1435 | return (ascii); |
| 1401 | } | 1436 | } |
| 1402 | 1437 | ||
| @@ -1458,7 +1493,7 @@ loc_ntoa(binary, ascii) | |||
| 1458 | if ((vpstr = strdup(precsize_ntoa(vpval))) == NULL) | 1493 | if ((vpstr = strdup(precsize_ntoa(vpval))) == NULL) |
| 1459 | vpstr = error; | 1494 | vpstr = error; |
| 1460 | 1495 | ||
| 1461 | sprintf(ascii, | 1496 | snprintf(ascii, ascii_len, |
| 1462 | "%d %.2d %.2d.%.3d %c %d %.2d %.2d.%.3d %c %d.%.2dm %sm %sm %sm", | 1497 | "%d %.2d %.2d.%.3d %c %d %.2d %.2d.%.3d %c %d.%.2dm %sm %sm %sm", |
| 1463 | latdeg, latmin, latsec, latsecfrac, northsouth, | 1498 | latdeg, latmin, latsec, latsecfrac, northsouth, |
| 1464 | longdeg, longmin, longsec, longsecfrac, eastwest, | 1499 | longdeg, longmin, longsec, longsecfrac, eastwest, |
