mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-29 13:38:26 +00:00
969. [func] dig now supports the undocumented dig 8 feature
of allowing arbitrary labels, not just dotted decimal quads, with the -x option. This can be used to conveniently look up RFC2317 names as in "dig -x 10.0.0.0-127". [RT #827, #1576, #1598]
This commit is contained in:
parent
f462b9aed2
commit
cad3210bb9
9
CHANGES
9
CHANGES
@ -1,3 +1,12 @@
|
|||||||
|
|
||||||
|
969. [func] dig now supports the undocumented dig 8 feature
|
||||||
|
of allowing arbitrary labels, not just dotted
|
||||||
|
decimal quads, with the -x option. This can be
|
||||||
|
used to conveniently look up RFC2317 names as in
|
||||||
|
"dig -x 10.0.0.0-127". [RT #827, #1576, #1598]
|
||||||
|
|
||||||
|
calling strtime(). [RT #1671]
|
||||||
|
|
||||||
968. [bug] On win32, the isc_time_now() function was unnecessarily
|
968. [bug] On win32, the isc_time_now() function was unnecessarily
|
||||||
calling strtime(). [RT #1671]
|
calling strtime(). [RT #1671]
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* $Id: dig.c,v 1.157 2001/08/23 04:39:31 marka Exp $ */
|
/* $Id: dig.c,v 1.158 2001/08/29 18:57:06 gson Exp $ */
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -1027,7 +1027,9 @@ dash_option(char *option, char *next, dig_lookup_t **lookup,
|
|||||||
return (value_from_next);
|
return (value_from_next);
|
||||||
case 'x':
|
case 'x':
|
||||||
*lookup = clone_lookup(default_lookup, ISC_TRUE);
|
*lookup = clone_lookup(default_lookup, ISC_TRUE);
|
||||||
if (get_reverse(textname, value, nibble) == ISC_R_SUCCESS) {
|
if (get_reverse(textname, value, nibble, ISC_FALSE)
|
||||||
|
== ISC_R_SUCCESS)
|
||||||
|
{
|
||||||
strncpy((*lookup)->textname, textname,
|
strncpy((*lookup)->textname, textname,
|
||||||
sizeof((*lookup)->textname));
|
sizeof((*lookup)->textname));
|
||||||
debug("looking up %s", (*lookup)->textname);
|
debug("looking up %s", (*lookup)->textname);
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* $Id: dighost.c,v 1.221 2001/08/08 22:54:14 gson Exp $ */
|
/* $Id: dighost.c,v 1.222 2001/08/29 18:57:08 gson Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Notice to programmers: Do not use this code as an example of how to
|
* Notice to programmers: Do not use this code as an example of how to
|
||||||
@ -203,54 +203,90 @@ hex_dump(isc_buffer_t *b) {
|
|||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Append 'len' bytes of 'text' at '*p', failing with
|
||||||
|
* ISC_R_NOSPACE if that would advance p past 'end'.
|
||||||
|
*/
|
||||||
|
static isc_result_t
|
||||||
|
append(const char *text, int len, char **p, char *end) {
|
||||||
|
if (len > end - *p)
|
||||||
|
return (ISC_R_NOSPACE);
|
||||||
|
memcpy(*p, text, len);
|
||||||
|
*p += len;
|
||||||
|
return (ISC_R_SUCCESS);
|
||||||
|
}
|
||||||
|
|
||||||
|
static isc_result_t
|
||||||
|
reverse_octets(const char *in, char **p, char *end) {
|
||||||
|
char *dot = strchr(in, '.');
|
||||||
|
int len;
|
||||||
|
if (dot != NULL) {
|
||||||
|
isc_result_t result;
|
||||||
|
result = reverse_octets(dot + 1, p, end);
|
||||||
|
if (result != ISC_R_SUCCESS)
|
||||||
|
return (result);
|
||||||
|
result = append(".", 1, p, end);
|
||||||
|
if (result != ISC_R_SUCCESS)
|
||||||
|
return (result);
|
||||||
|
len = dot - in;
|
||||||
|
} else {
|
||||||
|
len = strlen(in);
|
||||||
|
}
|
||||||
|
return (append(in, len, p, end));
|
||||||
|
}
|
||||||
|
|
||||||
isc_result_t
|
isc_result_t
|
||||||
get_reverse(char *reverse, char *value, isc_boolean_t nibble) {
|
get_reverse(char *reverse, char *value, isc_boolean_t nibble,
|
||||||
int adrs[4];
|
isc_boolean_t strict)
|
||||||
char working[MXNAME];
|
{
|
||||||
int remaining;
|
int r;
|
||||||
int i, n;
|
|
||||||
isc_result_t result;
|
isc_result_t result;
|
||||||
|
isc_netaddr_t addr;
|
||||||
|
|
||||||
result = DNS_R_BADDOTTEDQUAD;
|
addr.family = AF_INET6;
|
||||||
reverse[0] = 0;
|
r= inet_pton(AF_INET6, value, &addr.type.in6);
|
||||||
|
if (r > 0) {
|
||||||
debug("get_reverse(%s)", value);
|
/* This is a valid IPv6 address. */
|
||||||
if (strspn(value, "0123456789.") == strlen(value)) {
|
|
||||||
n = sscanf(value, "%d.%d.%d.%d",
|
|
||||||
&adrs[0], &adrs[1],
|
|
||||||
&adrs[2], &adrs[3]);
|
|
||||||
if (n == 0) {
|
|
||||||
return (DNS_R_BADDOTTEDQUAD);
|
|
||||||
}
|
|
||||||
reverse[MXNAME - 1] = 0;
|
|
||||||
for (i = n - 1; i >= 0; i--) {
|
|
||||||
snprintf(working, sizeof(working), "%d.",
|
|
||||||
adrs[i]);
|
|
||||||
remaining = MXNAME - strlen(reverse) - 1;
|
|
||||||
strncat(reverse, working, remaining);
|
|
||||||
}
|
|
||||||
remaining = MXNAME - strlen(reverse) - 1;
|
|
||||||
strncat(reverse, "in-addr.arpa.", remaining);
|
|
||||||
result = ISC_R_SUCCESS;
|
|
||||||
} else if (strspn(value, "0123456789abcdefABCDEF:")
|
|
||||||
== strlen(value)) {
|
|
||||||
isc_netaddr_t addr;
|
|
||||||
dns_fixedname_t fname;
|
dns_fixedname_t fname;
|
||||||
dns_name_t *name;
|
dns_name_t *name;
|
||||||
|
|
||||||
addr.family = AF_INET6;
|
|
||||||
n = inet_pton(AF_INET6, value, &addr.type.in6);
|
|
||||||
if (n <= 0)
|
|
||||||
return (DNS_R_BADDOTTEDQUAD);
|
|
||||||
dns_fixedname_init(&fname);
|
dns_fixedname_init(&fname);
|
||||||
name = dns_fixedname_name(&fname);
|
name = dns_fixedname_name(&fname);
|
||||||
result = dns_byaddr_createptrname(&addr, nibble, name);
|
result = dns_byaddr_createptrname(&addr, nibble, name);
|
||||||
if (result != ISC_R_SUCCESS)
|
if (result != ISC_R_SUCCESS)
|
||||||
return (result);
|
return (result);
|
||||||
dns_name_format(name, reverse, MXNAME);
|
dns_name_format(name, reverse, MXNAME);
|
||||||
|
return (ISC_R_SUCCESS);
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* Not a valid IPv6 address. Assume IPv4.
|
||||||
|
* If 'strict' is not set, construct the
|
||||||
|
* in-addr.arpa name by blindly reversing
|
||||||
|
* octets whether or not they look like integers,
|
||||||
|
* so that this can be used for RFC2317 names
|
||||||
|
* and such.
|
||||||
|
*/
|
||||||
|
char *p = reverse;
|
||||||
|
char *end = reverse + MXNAME;
|
||||||
|
if (strict) {
|
||||||
|
int adrs[4];
|
||||||
|
int n;
|
||||||
|
if (strspn(value, "0123456789.") != strlen(value))
|
||||||
|
return (DNS_R_BADDOTTEDQUAD);
|
||||||
|
n = sscanf(value, "%d.%d.%d.%d",
|
||||||
|
&adrs[0], &adrs[1],
|
||||||
|
&adrs[2], &adrs[3]);
|
||||||
|
if (n == 0)
|
||||||
|
return (DNS_R_BADDOTTEDQUAD);
|
||||||
|
}
|
||||||
|
result = reverse_octets(value, &p, end);
|
||||||
|
if (result != ISC_R_SUCCESS)
|
||||||
|
return (result);
|
||||||
|
/* Append .in-addr.arpa. and a terminating NUL. */
|
||||||
|
result = append(".in-addr.arpa.", 15, &p, end);
|
||||||
|
if (result != ISC_R_SUCCESS)
|
||||||
|
return (result);
|
||||||
|
return (ISC_R_SUCCESS);
|
||||||
}
|
}
|
||||||
return (result);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* $Id: host.c,v 1.76 2001/08/27 21:31:29 gson Exp $ */
|
/* $Id: host.c,v 1.77 2001/08/29 18:57:09 gson Exp $ */
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -654,7 +654,9 @@ parse_args(isc_boolean_t is_batchfile, int argc, char **argv) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
lookup->pending = ISC_FALSE;
|
lookup->pending = ISC_FALSE;
|
||||||
if (get_reverse(store, hostname, lookup->nibble) == ISC_R_SUCCESS) {
|
if (get_reverse(store, hostname, lookup->nibble, ISC_TRUE)
|
||||||
|
== ISC_R_SUCCESS)
|
||||||
|
{
|
||||||
strncpy(lookup->textname, store, sizeof(lookup->textname));
|
strncpy(lookup->textname, store, sizeof(lookup->textname));
|
||||||
lookup->textname[sizeof(lookup->textname)-1] = 0;
|
lookup->textname[sizeof(lookup->textname)-1] = 0;
|
||||||
lookup->rdtype = dns_rdatatype_ptr;
|
lookup->rdtype = dns_rdatatype_ptr;
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* $Id: dig.h,v 1.71 2001/08/08 22:54:15 gson Exp $ */
|
/* $Id: dig.h,v 1.72 2001/08/29 18:57:12 gson Exp $ */
|
||||||
|
|
||||||
#ifndef DIG_H
|
#ifndef DIG_H
|
||||||
#define DIG_H
|
#define DIG_H
|
||||||
@ -191,7 +191,8 @@ void
|
|||||||
get_address(char *host, in_port_t port, isc_sockaddr_t *sockaddr);
|
get_address(char *host, in_port_t port, isc_sockaddr_t *sockaddr);
|
||||||
|
|
||||||
isc_result_t
|
isc_result_t
|
||||||
get_reverse(char reverse[MXNAME], char *value, isc_boolean_t nibble);
|
get_reverse(char reverse[MXNAME], char *value, isc_boolean_t nibble,
|
||||||
|
isc_boolean_t strict);
|
||||||
|
|
||||||
void
|
void
|
||||||
fatal(const char *format, ...) ISC_FORMAT_PRINTF(1, 2);
|
fatal(const char *format, ...) ISC_FORMAT_PRINTF(1, 2);
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* $Id: nslookup.c,v 1.90 2001/07/30 01:09:14 marka Exp $ */
|
/* $Id: nslookup.c,v 1.91 2001/08/29 18:57:10 gson Exp $ */
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
|
|
||||||
@ -624,7 +624,9 @@ addlookup(char *opt) {
|
|||||||
rdclass = dns_rdataclass_in;
|
rdclass = dns_rdataclass_in;
|
||||||
}
|
}
|
||||||
lookup = make_empty_lookup();
|
lookup = make_empty_lookup();
|
||||||
if (get_reverse(store, opt, lookup->nibble) == ISC_R_SUCCESS) {
|
if (get_reverse(store, opt, lookup->nibble, ISC_TRUE)
|
||||||
|
== ISC_R_SUCCESS)
|
||||||
|
{
|
||||||
safecpy(lookup->textname, store, sizeof(lookup->textname));
|
safecpy(lookup->textname, store, sizeof(lookup->textname));
|
||||||
lookup->rdtype = dns_rdatatype_ptr;
|
lookup->rdtype = dns_rdatatype_ptr;
|
||||||
lookup->rdtypeset = ISC_TRUE;
|
lookup->rdtypeset = ISC_TRUE;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user