* Copyright (c) 1986, 1989 Regents of the University of California.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
"@(#) Copyright (c) 1986 Regents of the University of California.\n\
static char sccsid
[] = "@(#)nstest.c 4.15 (Berkeley) 3/21/91";
#include <arpa/nameser.h>
extern char *inet_ntoa();
#define MAXDATA 256 /* really should get definition from named/db.h */
u_short port
= htons(NAMESERVER_PORT
);
NewRR
.r_data
= (char *) malloc(MAXDATA
);
NewRR
.r_data
= (char *) malloc(MAXDATA
);
_res
.options
|= RES_DEBUG
|RES_RECURSE
;
while (argc
> 1 && argv
[1][0] == '-') {
port
= htons(atoi(*++argv
));
_res
.options
|= RES_IGNTC
;
_res
.options
|= RES_USEVC
|RES_STAYOPEN
;
_res
.options
&= ~RES_RECURSE
;
_res
.nsaddr
.sin_family
= AF_INET
;
_res
.nsaddr
.sin_addr
.s_addr
= INADDR_ANY
;
_res
.nsaddr
.sin_port
= port
;
_res
.nsaddr
.sin_addr
.s_addr
= inet_addr(argv
[1]);
if (_res
.nsaddr
.sin_addr
.s_addr
== (u_long
) -1)
log
= fopen(argv
[2],"w");
if (log
== NULL
) perror(argv
[2]);
if ((cp
= (char *)gets(buf
)) == NULL
)
n
= res_mkquery(QUERY
, cp
, C_IN
, T_A
, (char *)0, 0,
NULL
, packet
, sizeof(packet
));
n
= ntohl(inet_addr(cp
));
putlong((u_long
)n
, (u_char
*)cp
);
n
= res_mkquery(IQUERY
, "", C_IN
, T_A
, cp
, sizeof(long),
NULL
, packet
, sizeof(packet
));
n
= res_mkquery(QUERY
, cp
, C_ANY
, T_UINFO
, (char *)0, 0,
NULL
, packet
, sizeof(packet
));
n
= res_mkquery(QUERY
, cp
, C_ANY
, T_GID
, (char *)0, 0,
NULL
, packet
, sizeof(packet
));
*(int *)cp
= htonl(atoi(cp
));
n
= res_mkquery(IQUERY
, "", C_ANY
, T_GID
, cp
,
sizeof(int), NULL
, packet
, sizeof(packet
));
n
= res_mkquery(QUERY
, cp
, C_IN
, T_CNAME
, (char *)0, 0,
NULL
, packet
, sizeof(packet
));
n
= res_mkquery(QUERY
, cp
, C_IN
, T_HINFO
, (char *)0, 0,
NULL
, packet
, sizeof(packet
));
n
= res_mkquery(QUERY
, cp
, C_IN
, T_MX
, (char *)0, 0,
NULL
, packet
, sizeof(packet
));
n
= res_mkquery(QUERY
, cp
, C_IN
, T_MAILB
, (char *)0, 0,
NULL
, packet
, sizeof(packet
));
n
= res_mkquery(QUERY
, cp
, C_IN
, T_NS
, (char *)0, 0,
NULL
, packet
, sizeof(packet
));
n
= res_mkquery(QUERY
, cp
, C_IN
, T_PTR
, (char *)0, 0,
NULL
, packet
, sizeof(packet
));
n
= res_mkquery(QUERY
, cp
, C_IN
, T_SOA
, (char *)0, 0,
NULL
, packet
, sizeof(packet
));
n
= res_mkquery(QUERY
, cp
, C_IN
, T_TXT
, (char *)0, 0,
NULL
, packet
, sizeof(packet
));
n
= res_mkquery(QUERY
, cp
, C_ANY
, T_UID
, (char *)0, 0,
NULL
, packet
, sizeof(packet
));
*(int *)cp
= htonl(atoi(cp
));
n
= res_mkquery(IQUERY
, "", C_ANY
, T_UID
, cp
,
sizeof(int), NULL
, packet
, sizeof(packet
));
n
= res_mkquery(QUERY
, cp
, C_IN
, T_AXFR
, (char *)0, 0,
NULL
, packet
, sizeof(packet
));
n
= res_mkquery(QUERY
, cp
, C_IN
, T_WKS
, (char *)0, 0,
NULL
, packet
, sizeof(packet
));
n
= res_mkquery(QUERY
, cp
, C_IN
, T_MB
, (char *)0, 0,
NULL
, packet
, sizeof(packet
));
n
= res_mkquery(QUERY
, cp
, C_IN
, T_MG
, (char *)0, 0,
NULL
, packet
, sizeof(packet
));
n
= res_mkquery(QUERY
, cp
, C_IN
, T_MINFO
, (char *)0, 0,
NULL
, packet
, sizeof(packet
));
n
= res_mkquery(QUERY
, cp
, C_IN
, T_MR
, (char *)0, 0,
NULL
, packet
, sizeof(packet
));
n
= res_mkquery(QUERY
, cp
, C_IN
, T_ANY
, (char *)0, 0,
NULL
, packet
, sizeof(packet
));
char IType
[10], TempStr
[50];
int Type
, oldnbytes
, nbytes
, i
;
printf("Data type (a = T_A, u = T_UNSPEC): ");
printf("How many data bytes? ");
gets(TempStr
); /* Throw away CR */
sscanf(TempStr
, "%d", &nbytes
);
for (i
= 0; i
< nbytes
; i
++) {
(NewRR
.r_data
)[i
] = (char) i
;
printf("Inet addr for new dname (e.g., 192.4.3.2): ");
putlong(ntohl(inet_addr(TempStr
)),
printf("Add, modify, or modify all (a/m/M)? ");
n
= res_mkquery(UPDATEA
, cp
, C_IN
, Type
,
printf("How many data bytes in old RR? ");
gets(TempStr
); /* Throw away CR */
sscanf(TempStr
, "%d", &oldnbytes
);
for (i
= 0; i
< oldnbytes
; i
++) {
n
= res_mkquery(UPDATEM
, cp
, C_IN
, Type
,
} else { /* Modify all */
n
= res_mkquery(UPDATEMA
, cp
,
n
= res_mkquery(UPDATEDA
, cp
, C_IN
, T_UNSPEC
, (char *)0,
0, NULL
, packet
, sizeof(packet
));
printf("How many data bytes in oldrr data? ");
gets(TempStr
); /* Throw away CR */
sscanf(TempStr
, "%d", &nbytes
);
for (i
= 0; i
< nbytes
; i
++) {
n
= res_mkquery(UPDATED
, cp
, C_IN
, T_UNSPEC
,
OldRRData
, nbytes
, NULL
, packet
,
printf("a{host} - query T_A\n");
printf("A{addr} - iquery T_A\n");
printf("b{user} - query T_MB\n");
printf("B{user} - query T_MG\n");
printf("f{host} - query T_UINFO\n");
printf("g{host} - query T_GID\n");
printf("G{gid} - iquery T_GID\n");
printf("h{host} - query T_HINFO\n");
printf("i{host} - query T_MINFO\n");
printf("p{host} - query T_PTR\n");
printf("m{host} - query T_MX\n");
printf("M{host} - query T_MAILB\n");
printf("n{host} - query T_NS\n");
printf("r{host} - query T_MR\n");
printf("s{host} - query T_SOA\n");
printf("T{host} - query T_TXT\n");
printf("u{host} - query T_UID\n");
printf("U{uid} - iquery T_UID\n");
printf("x{host} - query T_AXFR\n");
printf("w{host} - query T_WKS\n");
printf("c{host} - query T_CNAME\n");
printf("*{host} - query T_ANY\n");
printf("^{host} - add/mod/moda (T_A/T_UNSPEC)\n");
printf("D{host} - deletea T_UNSPEC\n");
printf("d{host} - delete T_UNSPEC\n");
printf("res_mkquery: buffer too small\n");
fprintf(log
,"SEND QUERY\n");
n
= res_send(packet
, n
, answer
, sizeof(answer
));
printf("res_send: send error\n");
if (log
) fprintf(log
, "res_send: send error\n");
f
= creat("ns_packet.dump", 0644);
fprintf(log
, "GOT ANSWER\n");
fprintf(stderr
, "Usage: %s [-v] [-i] [-r] [-d] [-p port] hostaddr\n",