]> WPIA git - gigi.git/blob - src/org/cacert/gigi/ping/DNSPinger.java
Remove command invocations of "dig"
[gigi.git] / src / org / cacert / gigi / ping / DNSPinger.java
1 package org.cacert.gigi.ping;
2
3 import java.util.Arrays;
4 import java.util.List;
5
6 import javax.naming.NamingException;
7
8 import org.cacert.gigi.Domain;
9 import org.cacert.gigi.User;
10 import org.cacert.gigi.util.DNSUtil;
11
12 public class DNSPinger extends DomainPinger {
13
14     @Override
15     public String ping(Domain domain, String expToken, User u) {
16         String[] tokenParts = expToken.split(":", 2);
17         List<String> nameservers;
18         try {
19             nameservers = Arrays.asList(DNSUtil.getNSNames(domain.getSuffix()));
20         } catch (NamingException e) {
21             return "No authorative nameserver found.";
22         }
23         StringBuffer result = new StringBuffer();
24         result.append("failed: ");
25         boolean failed = nameservers.isEmpty();
26         nameservers:
27         for (String NS : nameservers) {
28             boolean found = false;
29             try {
30                 for (String token : DNSUtil.getTXTEntries("cacert-" + tokenParts[0] + "." + domain.getSuffix(), NS)) {
31                     if (token.isEmpty()) {
32                         continue;
33                     }
34                     found = true;
35                     if (token.equals(tokenParts[1])) {
36                         continue nameservers;
37                     }
38                 }
39             } catch (NamingException e) {
40                 found = false;
41             }
42             result.append(NS);
43             if (found) {
44                 result.append(" DIFFER;");
45             } else {
46                 result.append(" EMPTY;");
47             }
48             failed = true;
49
50         }
51         if ( !failed) {
52             return PING_SUCCEDED;
53         }
54         return result.toString();
55     }
56 }