1// Copyright (c) 1999-2004 Brian Wellington (bwelling@xbill.org)
2
3package org.xbill.DNS.tests;
4
5import java.util.*;
6import org.xbill.DNS.*;
7
8public class xfrin {
9
10private static void
11usage(String s) {
12	System.out.println("Error: " + s);
13	System.out.println("usage: xfrin [-i serial] [-k keyname/secret] " +
14			   "[-s server] [-p port] [-f] zone");
15	System.exit(1);
16}
17
18public static void
19main(String [] args) throws Exception {
20	ZoneTransferIn xfrin;
21	TSIG key = null;
22	int ixfr_serial = -1;
23	String server = null;
24	int port = SimpleResolver.DEFAULT_PORT;
25	boolean fallback = false;
26	Name zname;
27
28	int arg = 0;
29	while (arg < args.length) {
30		if (args[arg].equals("-i")) {
31			ixfr_serial = Integer.parseInt(args[++arg]);
32			if (ixfr_serial < 0)
33				usage("invalid serial number");
34		} else if (args[arg].equals("-k")) {
35			String s = args[++arg];
36			int index = s.indexOf('/');
37			if (index < 0)
38				usage("invalid key");
39			key = new TSIG(s.substring(0, index),
40				       s.substring(index+1));
41		} else if (args[arg].equals("-s")) {
42			server = args[++arg];
43		} else if (args[arg].equals("-p")) {
44			port = Integer.parseInt(args[++arg]);
45			if (port < 0 || port > 0xFFFF)
46				usage("invalid port");
47		} else if (args[arg].equals("-f")) {
48			fallback = true;
49		} else if (args[arg].startsWith("-")) {
50			usage("invalid option");
51		} else {
52			break;
53		}
54		arg++;
55	}
56	if (arg >= args.length)
57		usage("no zone name specified");
58	zname = Name.fromString(args[arg]);
59
60	if (server == null) {
61		Lookup l = new Lookup(zname, Type.NS);
62		Record [] ns = l.run();
63		if (ns == null) {
64			System.out.println("failed to look up NS record: " +
65					   l.getErrorString());
66			System.exit(1);
67		}
68		server = ns[0].rdataToString();
69		System.out.println("sending to server '" + server + "'");
70	}
71
72	if (ixfr_serial >= 0)
73		xfrin = ZoneTransferIn.newIXFR(zname, ixfr_serial, fallback,
74					       server, port, key);
75	else
76		xfrin = ZoneTransferIn.newAXFR(zname, server, port, key);
77
78	List response = xfrin.run();
79	if (xfrin.isAXFR()) {
80		if (ixfr_serial >= 0)
81			System.out.println("AXFR-like IXFR response");
82		else
83			System.out.println("AXFR response");
84		Iterator it = response.iterator();
85		while (it.hasNext())
86			System.out.println(it.next());
87	} else if (xfrin.isIXFR()) {
88		System.out.println("IXFR response");
89		Iterator it = response.iterator();
90		while (it.hasNext()) {
91			ZoneTransferIn.Delta delta;
92			delta = (ZoneTransferIn.Delta) it.next();
93			System.out.println("delta from " + delta.start +
94					   " to " + delta.end);
95			System.out.println("deletes");
96			Iterator it2 = delta.deletes.iterator();
97			while (it2.hasNext())
98				System.out.println(it2.next());
99			System.out.println("adds");
100			it2 = delta.adds.iterator();
101			while (it2.hasNext())
102				System.out.println(it2.next());
103		}
104	} else if (xfrin.isCurrent()) {
105		System.out.println("up to date");
106	}
107}
108
109}
110