// 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");
}
}
}