private void validate() throws IOException { RRset rrset = (RRset) findExactSet(origin, Type.SOA); if (rrset == null || rrset.size() != 1) throw new IOException(origin + ": exactly 1 SOA must be specified"); Iterator it = rrset.rrs(); SOA = (SOARecord) it.next(); NS = (RRset) findExactSet(origin, Type.NS); if (NS == null) throw new IOException(origin + ": no NS set specified"); }
/** * Removes a record from the Zone * * @param r The record to be removed * @see Record */ public void removeRecord(Record r) { Name name = r.getName(); short type = r.getRRsetType(); RRset rrset = (RRset) findExactSet(name, type); if (rrset != null) { rrset.deleteRR(r); if (rrset.size() == 0) removeSet(name, type, rrset); } }
/** * Removes a record from the Zone * * @param r The record to be removed * @see Record */ public void removeRecord(Record r) { Name name = r.getName(); int rtype = r.getRRsetType(); synchronized (this) { RRset rrset = findRRset(name, rtype); if (rrset == null) return; rrset.deleteRR(r); if (rrset.size() == 0) removeRRset(name, rtype); } }
private void validate() throws IOException { originNode = exactName(origin); if (originNode == null) throw new IOException(origin + ": no data specified"); RRset rrset = oneRRset(originNode, Type.SOA); if (rrset == null || rrset.size() != 1) throw new IOException(origin + ": exactly 1 SOA must be specified"); Iterator it = rrset.rrs(); SOA = (SOARecord) it.next(); NS = oneRRset(originNode, Type.NS); if (NS == null) throw new IOException(origin + ": no NS set specified"); }
/** * Creates an array containing fields of the SIG record and the RRsets to be signed/verified. * * @param sig The SIG record used to sign/verify the rrset. * @param rrset The data to be signed/verified. * @return The data to be cryptographically signed or verified. */ public static byte[] digestRRset(SIGRecord sig, RRset rrset) { DataByteOutputStream out = new DataByteOutputStream(); digestSIG(out, sig); int size = rrset.size(); byte[][] records = new byte[size][]; Iterator it = rrset.rrs(); Name name = rrset.getName(); Name wild = null; if (name.labels() > sig.getLabels()) wild = name.wild(name.labels() - sig.getLabels()); while (it.hasNext()) { Record rec = (Record) it.next(); if (wild != null) rec = rec.withName(wild); records[--size] = rec.toWireCanonical(); } Arrays.sort(records); for (int i = 0; i < records.length; i++) out.writeArray(records[i]); return out.toByteArray(); }
public static Record[] getRecords(String namestr, short type, short dclass, byte cred) { Message query; Message response; Record question; Record[] answers; int answerCount = 0, i = 0; Enumeration e; Name name = new Name(namestr); /*System.out.println("lookup of " + name + " " + Type.string(type));*/ if (!Type.isRR(type) && type != Type.ANY) return null; if (res == null) { try { eres = new ExtendedResolver(); } catch (UnknownHostException uhe) { System.out.println("Failed to initialize resolver"); System.exit(-1); } } if (cache == null) cache = new Cache(); CacheResponse cached = cache.lookupRecords(name, type, dclass, cred); /*System.out.println(cached);*/ if (cached.isSuccessful()) { RRset rrset = cached.answer(); answerCount = rrset.size(); e = rrset.rrs(); } else if (cached.isNegative()) { answerCount = 0; e = null; } else { question = Record.newRecord(name, type, dclass); query = Message.newQuery(question); if (res != null) response = res.send(query); else response = eres.send(query); short rcode = response.getHeader().getRcode(); if (rcode == Rcode.NOERROR || rcode == Rcode.NXDOMAIN) cache.addMessage(response); if (rcode != Rcode.NOERROR) return null; e = response.getSection(Section.ANSWER); while (e.hasMoreElements()) { Record r = (Record) e.nextElement(); if (matchType(r.getType(), type)) answerCount++; } e = response.getSection(Section.ANSWER); } if (answerCount == 0) return null; answers = new Record[answerCount]; while (e.hasMoreElements()) { Record r = (Record) e.nextElement(); if (matchType(r.getType(), type)) answers[i++] = r; } return answers; }