=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/dig/dig.c,v retrieving revision 1.12 retrieving revision 1.13 diff -c -r1.12 -r1.13 *** src/usr.bin/dig/dig.c 2020/02/24 13:49:38 1.12 --- src/usr.bin/dig/dig.c 2020/09/13 09:33:39 1.13 *************** *** 14,24 **** * PERFORMANCE OF THIS SOFTWARE. */ ! /* $Id: dig.c,v 1.12 2020/02/24 13:49:38 jsg Exp $ */ /*! \file */ #include #include #include #include --- 14,25 ---- * PERFORMANCE OF THIS SOFTWARE. */ ! /* $Id: dig.c,v 1.13 2020/09/13 09:33:39 florian Exp $ */ /*! \file */ #include + #include #include #include #include *************** *** 633,639 **** { isc_result_t result; char option_store[256]; ! char *cmd, *value, *ptr, *code; uint32_t num; isc_boolean_t state = ISC_TRUE; size_t n; --- 634,642 ---- { isc_result_t result; char option_store[256]; ! char *cmd, *value, *ptr, *code, *ep; ! const char *errstr; ! long lval; uint32_t num; isc_boolean_t state = ISC_TRUE; size_t n; *************** *** 721,730 **** goto need_value; if (!state) goto invalid_option; ! result = parse_uint(&num, value, COMMSIZE, ! "buffer size"); ! if (result != ISC_R_SUCCESS) ! fatal("Couldn't parse buffer size"); lookup->udpsize = num; break; default: --- 724,732 ---- goto need_value; if (!state) goto invalid_option; ! num = strtonum(value, 0, COMMSIZE, &errstr); ! if (errstr != NULL) ! fatal("buffer size is %s: '%s'", errstr, value); lookup->udpsize = num; break; default: *************** *** 820,832 **** lookup->edns = 0; break; } ! result = parse_uint(&num, ! value, ! 255, ! "edns"); ! if (result != ISC_R_SUCCESS) ! fatal("Couldn't parse " ! "edns"); lookup->edns = num; break; case 'f': --- 822,833 ---- lookup->edns = 0; break; } ! num = strtonum(value, 0, 255, ! &errstr); ! if (errstr != NULL) ! fatal("edns is %s: " ! "'%s'", errstr, ! value); lookup->edns = num; break; case 'f': *************** *** 839,852 **** lookup->ednsflags = 0; break; } ! result = parse_xint(&num, ! value, ! 0xffff, ! "ednsflags"); ! if (result != ISC_R_SUCCESS) fatal("Couldn't parse " "ednsflags"); ! lookup->ednsflags = num; break; case 'n': FULLCHECK("ednsnegotiation"); --- 840,853 ---- lookup->ednsflags = 0; break; } ! errno = 0; ! lval = strtol(value, &ep, 0); ! if (value[0] == '\0' || *ep != ! '\0' || lval < 0 || lval > ! 0xffff || errno != 0) fatal("Couldn't parse " "ednsflags"); ! lookup->ednsflags = lval; break; case 'n': FULLCHECK("ednsnegotiation"); *************** *** 929,937 **** goto need_value; if (!state) goto invalid_option; ! result = parse_uint(&num, value, MAXNDOTS, "ndots"); ! if (result != ISC_R_SUCCESS) ! fatal("Couldn't parse ndots"); ndots = num; break; case 's': --- 930,938 ---- goto need_value; if (!state) goto invalid_option; ! num = strtonum(value, 0, MAXNDOTS, &errstr); ! if (errstr != NULL) ! fatal("ndots is %s: '%s'", errstr, value); ndots = num; break; case 's': *************** *** 992,1000 **** lookup->opcode = (dns_opcode_t)num; break; } ! result = parse_uint(&num, value, 15, "opcode"); ! if (result != ISC_R_SUCCESS) ! fatal("Couldn't parse opcode"); lookup->opcode = (dns_opcode_t)num; break; default: --- 993,1001 ---- lookup->opcode = (dns_opcode_t)num; break; } ! num = strtonum(value, 0, 15, &errstr); ! if (errstr != NULL) ! fatal("opcode is %s: '%s'", errstr, value); lookup->opcode = (dns_opcode_t)num; break; default: *************** *** 1035,1044 **** goto need_value; if (!state) goto invalid_option; ! result = parse_uint(&lookup->retries, value, ! MAXTRIES - 1, "retries"); ! if (result != ISC_R_SUCCESS) ! fatal("Couldn't parse retries"); lookup->retries++; break; default: --- 1036,1046 ---- goto need_value; if (!state) goto invalid_option; ! lookup->retries = strtonum(value, 0, ! MAXTRIES - 1, &errstr); ! if (errstr != NULL) ! fatal("retries is %s: '%s'", errstr, ! value); lookup->retries++; break; default: *************** *** 1121,1128 **** } else if (value == NULL) break; ! result = parse_uint(&splitwidth, value, ! 1023, "split"); if ((splitwidth % 4) != 0U) { splitwidth = ((splitwidth + 3) / 4) * 4; fprintf(stderr, ";; Warning, split must be " --- 1123,1131 ---- } else if (value == NULL) break; ! splitwidth = strtonum(value, 0, 1023, &errstr); ! if (errstr != NULL) ! fatal("split is %s: '%s'", errstr, value); if ((splitwidth % 4) != 0U) { splitwidth = ((splitwidth + 3) / 4) * 4; fprintf(stderr, ";; Warning, split must be " *************** *** 1138,1145 **** */ if (splitwidth) splitwidth += 3; - if (result != ISC_R_SUCCESS) - fatal("Couldn't parse split"); break; case 't': /* stats */ FULLCHECK("stats"); --- 1141,1146 ---- *************** *** 1185,1194 **** goto need_value; if (!state) goto invalid_option; ! result = parse_uint(&timeout, value, MAXTIMEOUT, ! "timeout"); ! if (result != ISC_R_SUCCESS) ! fatal("Couldn't parse timeout"); if (timeout == 0) timeout = 1; break; --- 1186,1194 ---- goto need_value; if (!state) goto invalid_option; ! timeout = strtonum(value, 0, MAXTIMEOUT, &errstr); ! if (errstr != NULL) ! fatal("timeout is %s: '%s'", errstr, value); if (timeout == 0) timeout = 1; break; *************** *** 1217,1226 **** goto need_value; if (!state) goto invalid_option; ! result = parse_uint(&lookup->retries, value, ! MAXTRIES, "tries"); ! if (result != ISC_R_SUCCESS) ! fatal("Couldn't parse tries"); if (lookup->retries == 0) lookup->retries = 1; break; --- 1217,1227 ---- goto need_value; if (!state) goto invalid_option; ! lookup->retries = strtonum(value, 0, MAXTRIES, ! &errstr); ! if (errstr != NULL) ! fatal("tries is %s: '%s'", errstr, ! value); if (lookup->retries == 0) lookup->retries = 1; break; *************** *** 1276,1281 **** --- 1277,1283 ---- in_port_t srcport; char *hash, *cmd; uint32_t num; + const char *errstr; while (strpbrk(option, single_dash_opts) == &option[0]) { /* *************** *** 1352,1361 **** case 'b': hash = strchr(value, '#'); if (hash != NULL) { ! result = parse_uint(&num, hash + 1, MAXPORT, ! "port number"); ! if (result != ISC_R_SUCCESS) ! fatal("Couldn't parse port number"); srcport = num; *hash = '\0'; } else --- 1354,1363 ---- case 'b': hash = strchr(value, '#'); if (hash != NULL) { ! num = strtonum(hash + 1, 0, MAXPORT, &errstr); ! if (errstr != NULL) ! fatal("port number is %s: '%s'", errstr, ! hash + 1); srcport = num; *hash = '\0'; } else *************** *** 1399,1407 **** strlcpy(keyfile, value, sizeof(keyfile)); return (value_from_next); case 'p': ! result = parse_uint(&num, value, MAXPORT, "port number"); ! if (result != ISC_R_SUCCESS) ! fatal("Couldn't parse port number"); port = num; return (value_from_next); case 'q': --- 1401,1409 ---- strlcpy(keyfile, value, sizeof(keyfile)); return (value_from_next); case 'p': ! num = strtonum(value, 0, MAXPORT, &errstr); ! if (errstr != NULL) ! fatal("port number is %s: '%s'", errstr, value); port = num; return (value_from_next); case 'q': *************** *** 1447,1456 **** uint32_t serial; (*lookup)->rdtype = dns_rdatatype_ixfr; (*lookup)->rdtypeset = ISC_TRUE; ! result = parse_uint(&serial, &value[5], ! MAXSERIAL, "serial number"); ! if (result != ISC_R_SUCCESS) ! fatal("Couldn't parse serial number"); (*lookup)->ixfr_serial = serial; (*lookup)->section_question = plusquest; (*lookup)->comments = pluscomm; --- 1449,1459 ---- uint32_t serial; (*lookup)->rdtype = dns_rdatatype_ixfr; (*lookup)->rdtypeset = ISC_TRUE; ! serial = strtonum(&value[5], 0, MAXSERIAL, ! &errstr); ! if (errstr != NULL) ! fatal("serial number is %s: '%s'", ! errstr, &value[5]); (*lookup)->ixfr_serial = serial; (*lookup)->section_question = plusquest; (*lookup)->comments = pluscomm; *************** *** 1585,1590 **** --- 1588,1594 ---- char *input; int i; isc_boolean_t need_clone = ISC_TRUE; + const char *errstr; /* * The semantics for parsing the args is a bit complex; if *************** *** 1690,1702 **** lookup->rdtype = dns_rdatatype_ixfr; lookup->rdtypeset = ISC_TRUE; ! result = parse_uint(&serial, ! &rv[0][5], ! MAXSERIAL, ! "serial number"); ! if (result != ISC_R_SUCCESS) ! fatal("Couldn't parse " ! "serial number"); lookup->ixfr_serial = serial; lookup->section_question = plusquest; --- 1694,1705 ---- lookup->rdtype = dns_rdatatype_ixfr; lookup->rdtypeset = ISC_TRUE; ! serial = strtonum(&rv[0][5], 0, ! MAXSERIAL, &errstr); ! if (errstr != NULL) ! fatal("serial number " ! "is %s: '%s'", ! errstr, &rv[0][5]); lookup->ixfr_serial = serial; lookup->section_question = plusquest;