aboutsummaryrefslogtreecommitdiff
path: root/src/org/xbill/DNS/tests/xfrin.java
blob: 066c70e9d5bdc361b5140f7a8dea22af0146533d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
// Copyright (c) 1999-2004 Brian Wellington (bwelling@xbill.org)

package org.xbill.DNS.tests;

import java.util.*;
import org.xbill.DNS.*;

public class xfrin {

private static void
usage(String s) {
	System.out.println("Error: " + s);
	System.out.println("usage: xfrin [-i serial] [-k keyname/secret] " +
			   "[-s server] [-p port] [-f] zone");
	System.exit(1);
}

public static void
main(String [] args) throws Exception {
	ZoneTransferIn xfrin;
	TSIG key = null;
	int ixfr_serial = -1;
	String server = null;
	int port = SimpleResolver.DEFAULT_PORT;
	boolean fallback = false;
	Name zname;

	int arg = 0;
	while (arg < args.length) {
		if (args[arg].equals("-i")) {
			ixfr_serial = Integer.parseInt(args[++arg]);
			if (ixfr_serial < 0)
				usage("invalid serial number");
		} else if (args[arg].equals("-k")) {
			String s = args[++arg];
			int index = s.indexOf('/');
			if (index < 0)
				usage("invalid key");
			key = new TSIG(s.substring(0, index),
				       s.substring(index+1));
		} else if (args[arg].equals("-s")) {
			server = args[++arg];
		} else if (args[arg].equals("-p")) {
			port = Integer.parseInt(args[++arg]);
			if (port < 0 || port > 0xFFFF)
				usage("invalid port");
		} else if (args[arg].equals("-f")) {
			fallback = true;
		} else if (args[arg].startsWith("-")) {
			usage("invalid option");
		} else {
			break;
		}
		arg++;
	}
	if (arg >= args.length)
		usage("no zone name specified");
	zname = Name.fromString(args[arg]);

	if (server == null) {
		Lookup l = new Lookup(zname, Type.NS);
		Record [] ns = l.run();
		if (ns == null) {
			System.out.println("failed to look up NS record: " +
					   l.getErrorString());
			System.exit(1);
		}
		server = ns[0].rdataToString();
		System.out.println("sending to server '" + server + "'");
	}

	if (ixfr_serial >= 0)
		xfrin = ZoneTransferIn.newIXFR(zname, ixfr_serial, fallback,
					       server, port, key);
	else
		xfrin = ZoneTransferIn.newAXFR(zname, server, port, key);

	List response = xfrin.run();
	if (xfrin.isAXFR()) {
		if (ixfr_serial >= 0)
			System.out.println("AXFR-like IXFR response");
		else
			System.out.println("AXFR response");
		Iterator it = response.iterator();
		while (it.hasNext())
			System.out.println(it.next());
	} else if (xfrin.isIXFR()) {
		System.out.println("IXFR response");
		Iterator it = response.iterator();
		while (it.hasNext()) {
			ZoneTransferIn.Delta delta;
			delta = (ZoneTransferIn.Delta) it.next();
			System.out.println("delta from " + delta.start +
					   " to " + delta.end);
			System.out.println("deletes");
			Iterator it2 = delta.deletes.iterator();
			while (it2.hasNext())
				System.out.println(it2.next());
			System.out.println("adds");
			it2 = delta.adds.iterator();
			while (it2.hasNext())
				System.out.println(it2.next());
		}
	} else if (xfrin.isCurrent()) {
		System.out.println("up to date");
	}
}

}