X-Git-Url: https://code.wpia.club/?p=gigi.git;a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2Futil%2FDNSUtil.java;h=d0c772aff40861bacfced40503d55f21d58f0531;hp=e8a3a40d2edc179f3be6245badb51e9ad980f819;hb=b05ce94112d4aa98c6fe6eba0ceddf973d3f09b2;hpb=5dcfbec6497e6b11aff12b7c1a1e187f3b6b30fb diff --git a/src/org/cacert/gigi/util/DNSUtil.java b/src/org/cacert/gigi/util/DNSUtil.java index e8a3a40d..d0c772af 100644 --- a/src/org/cacert/gigi/util/DNSUtil.java +++ b/src/org/cacert/gigi/util/DNSUtil.java @@ -9,14 +9,14 @@ import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; import javax.naming.directory.InitialDirContext; +import org.cacert.gigi.util.CAA.CAARecord; + public class DNSUtil { private static InitialDirContext context; static { Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.dns.DnsContextFactory"); - // env.put(Context.AUTHORITATIVE, "true"); - // env.put(Context.PROVIDER_URL, "dns://ns.dyn.dogcraft.de"); try { context = new InitialDirContext(env); } catch (NamingException e) { @@ -27,7 +27,7 @@ public class DNSUtil { public static String[] getNSNames(String name) throws NamingException { Attributes dnsLookup = context.getAttributes(name, new String[] { - "NS" + "NS" }); return extractTextEntries(dnsLookup.get("NS")); } @@ -38,12 +38,16 @@ public class DNSUtil { env.put(Context.AUTHORITATIVE, "true"); env.put(Context.PROVIDER_URL, "dns://" + server); InitialDirContext context = new InitialDirContext(env); + try { - Attributes dnsLookup = context.getAttributes(name, new String[] { - "TXT" - }); + Attributes dnsLookup = context.getAttributes(name, new String[] { + "TXT" + }); + return extractTextEntries(dnsLookup.get("TXT")); + } finally { + context.close(); + } - return extractTextEntries(dnsLookup.get("TXT")); } private static String[] extractTextEntries(Attribute nsRecords) throws NamingException { @@ -59,11 +63,32 @@ public class DNSUtil { public static String[] getMXEntries(String domain) throws NamingException { Attributes dnsLookup = context.getAttributes(domain, new String[] { - "MX" + "MX" }); return extractTextEntries(dnsLookup.get("MX")); } + public static CAARecord[] getCAAEntries(String domain) throws NamingException { + Hashtable env = new Hashtable(); + env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.dns.DnsContextFactory"); + InitialDirContext context = new InitialDirContext(env); + + Attributes dnsLookup = context.getAttributes(domain, new String[] { + "257" + }); + Attribute nsRecords = dnsLookup.get("257"); + if (nsRecords == null) { + return new CAARecord[] {}; + } + CAA.CAARecord[] result = new CAA.CAARecord[nsRecords.size()]; + for (int i = 0; i < result.length; i++) { + byte[] rec = (byte[]) nsRecords.get(i); + + result[i] = new CAA.CAARecord(rec); + } + return result; + } + public static void main(String[] args) throws NamingException { if (args[0].equals("MX")) { System.out.println(Arrays.toString(getMXEntries(args[1]))); @@ -71,6 +96,8 @@ public class DNSUtil { System.out.println(Arrays.toString(getNSNames(args[1]))); } else if (args[0].equals("TXT")) { System.out.println(Arrays.toString(getTXTEntries(args[1], args[2]))); + } else if (args[0].equals("CAA")) { + System.out.println(Arrays.toString(getCAAEntries(args[1]))); } }