]> WPIA git - gigi.git/blob - src/org/cacert/gigi/util/DNSUtil.java
FIX: coverity resource leaks.
[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         try {
19             context = new InitialDirContext(env);
20         } catch (NamingException e) {
21             e.printStackTrace();
22         }
23
24     }
25
26     public static String[] getNSNames(String name) throws NamingException {
27         Attributes dnsLookup = context.getAttributes(name, new String[] {
28             "NS"
29         });
30         return extractTextEntries(dnsLookup.get("NS"));
31     }
32
33     public static String[] getTXTEntries(String name, String server) throws NamingException {
34         Hashtable<String, String> env = new Hashtable<String, String>();
35         env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.dns.DnsContextFactory");
36         env.put(Context.AUTHORITATIVE, "true");
37         env.put(Context.PROVIDER_URL, "dns://" + server);
38         InitialDirContext context = new InitialDirContext(env);
39
40         Attributes dnsLookup = context.getAttributes(name, new String[] {
41             "TXT"
42         });
43         context.close();
44
45         return extractTextEntries(dnsLookup.get("TXT"));
46     }
47
48     private static String[] extractTextEntries(Attribute nsRecords) throws NamingException {
49         if (nsRecords == null) {
50             return new String[] {};
51         }
52         String[] result = new String[nsRecords.size()];
53         for (int i = 0; i < result.length; i++) {
54             result[i] = (String) nsRecords.get(i);
55         }
56         return result;
57     }
58
59     public static String[] getMXEntries(String domain) throws NamingException {
60         Attributes dnsLookup = context.getAttributes(domain, new String[] {
61             "MX"
62         });
63         return extractTextEntries(dnsLookup.get("MX"));
64     }
65
66     public static void main(String[] args) throws NamingException {
67         if (args[0].equals("MX")) {
68             System.out.println(Arrays.toString(getMXEntries(args[1])));
69         } else if (args[0].equals("NS")) {
70             System.out.println(Arrays.toString(getNSNames(args[1])));
71         } else if (args[0].equals("TXT")) {
72             System.out.println(Arrays.toString(getTXTEntries(args[1], args[2])));
73         }
74     }
75
76 }