Пример #1
0
  private void fromXFR(ZoneTransferIn xfrin) throws IOException, ZoneTransferException {
    data = new HashMap();
    type = SECONDARY;

    if (!xfrin.isAXFR())
      throw new IllegalArgumentException("zones can only be " + "created from AXFRs");
    origin = xfrin.getName();
    List records = xfrin.run();
    for (Iterator it = records.iterator(); it.hasNext(); ) {
      Record record = (Record) it.next();
      maybeAddRecord(record);
    }
    validate();
  }
Пример #2
0
 private Message sendAXFR(Message query) throws IOException {
   Name qname = query.getQuestion().getName();
   ZoneTransferIn xfrin = ZoneTransferIn.newAXFR(qname, address, tsig);
   xfrin.setTimeout((int) (getTimeout() / 1000));
   xfrin.setLocalAddress(localAddress);
   try {
     xfrin.run();
   } catch (ZoneTransferException e) {
     throw new WireParseException(e.getMessage());
   }
   List records = xfrin.getAXFR();
   Message response = new Message(query.getHeader().getID());
   response.getHeader().setFlag(Flags.AA);
   response.getHeader().setFlag(Flags.QR);
   response.addRecord(query.getQuestion(), Section.QUESTION);
   Iterator it = records.iterator();
   while (it.hasNext()) response.addRecord((Record) it.next(), Section.ANSWER);
   return response;
 }
Пример #3
0
  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");
    }
  }
Пример #4
0
 /**
  * Creates a Zone by performing a zone transfer to the specified host.
  *
  * @see ZoneTransferIn
  */
 public Zone(Name zone, int dclass, String remote) throws IOException, ZoneTransferException {
   ZoneTransferIn xfrin = ZoneTransferIn.newAXFR(zone, remote, null);
   xfrin.setDClass(dclass);
   fromXFR(xfrin);
 }