]> WPIA git - gigi.git/blob - src/org/cacert/gigi/util/DNSUtil.java
Remove command invocations of "dig"
[gigi.git] / src / org / cacert / gigi / util / DNSUtil.java
1 package org.cacert.gigi.util;
2
3 import java.util.Arrays;
4 import java.util.Hashtable;
5
6 import javax.naming.Context;
7 import javax.naming.NamingException;
8 import javax.naming.directory.Attribute;
9 import javax.naming.directory.Attributes;
10 import javax.naming.directory.InitialDirContext;
11
12 public class DNSUtil {
13
14     private static InitialDirContext context;
15     static {
16         Hashtable<String, String> env = new Hashtable<String, String>();
17         env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.dns.DnsContextFactory");
18         // env.put(Context.AUTHORITATIVE, "true");
19         // env.put(Context.PROVIDER_URL, "dns://ns.dyn.dogcraft.de");
20         try {
21             context = new InitialDirContext(env);
22         } catch (NamingException e) {
23             e.printStackTrace();
24         }
25
26     }
27
28     public static String[] getNSNames(String name) throws NamingException {
29         Attributes dnsLookup = context.getAttributes(name, new String[] {
30             "NS"
31         });
32         return extractTextEntries(dnsLookup.get("NS"));
33     }
34
35     public static String[] getTXTEntries(String name, String server) throws NamingException {
36         Hashtable<String, String> env = new Hashtable<String, String>();
37         env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.dns.DnsContextFactory");
38         env.put(Context.AUTHORITATIVE, "true");
39         env.put(Context.PROVIDER_URL, "dns://" + server);
40         InitialDirContext context = new InitialDirContext(env);
41
42         Attributes dnsLookup = context.getAttributes(name, new String[] {
43             "TXT"
44         });
45
46         return extractTextEntries(dnsLookup.get("TXT"));
47     }
48
49     private static String[] extractTextEntries(Attribute nsRecords) throws NamingException {
50         if (nsRecords == null) {
51             return new String[] {};
52         }
53         String[] result = new String[nsRecords.size()];
54         for (int i = 0; i < result.length; i++) {
55             result[i] = (String) nsRecords.get(i);
56         }
57         return result;
58     }
59
60     public static String[] getMXEntries(String domain) throws NamingException {
61         Attributes dnsLookup = context.getAttributes(domain, new String[] {
62             "MX"
63         });
64         return extractTextEntries(dnsLookup.get("MX"));
65     }
66
67     public static void main(String[] args) throws NamingException {
68         if (args[0].equals("MX")) {
69             System.out.println(Arrays.toString(getMXEntries(args[1])));
70         } else if (args[0].equals("NS")) {
71             System.out.println(Arrays.toString(getNSNames(args[1])));
72         } else if (args[0].equals("TXT")) {
73             System.out.println(Arrays.toString(getTXTEntries(args[1], args[2])));
74         }
75     }
76
77 }