/** * @return true if access for the candidate address should be permitted, false if access should be * denied. * @throws RuntimeException if no rule covers the candidate address. This would be the case if * this class is applied to some network protocol other than ipv4 or ipv6, without adding a * default rule for it. */ public boolean permitAccess(byte[] addr) { ensureAclsUptodate(); for (int i = 0; i < aclEntries.size(); i++) { if (((AclEntry) aclEntries.get(i)).matches(addr)) { AclEntry hit = (AclEntry) aclEntries.get(i); println( "Addr '" + ServerAcl.dottedNotation(addr) + "' matched rule #" + (i + 1) + ": " + hit); return hit.allow; } } throw new RuntimeException("No rule matches address '" + ServerAcl.dottedNotation(addr) + "'"); }
public void validateMask() throws AclFormatException { if (BitMap.hasAnyBitSet(BitMap.and(value, BitMap.not(mask)))) { throw new AclFormatException( "The base address '" + ServerAcl.dottedNotation(value) + "' is too specific for block-size-spec /" + bitBlockSize); } }
public String toString() { StringBuffer sb = new StringBuffer("Addrs "); sb.append( (value.length == 16) ? ("[" + ServerAcl.colonNotation(value) + ']') : ServerAcl.dottedNotation(value)); sb.append("/" + bitBlockSize + ' ' + (allow ? "ALLOW" : "DENY")); return sb.toString(); }