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