1 package org.cacert.gigi.ping;
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.io.InputStreamReader;
6 import java.util.LinkedList;
8 import org.cacert.gigi.Domain;
9 import org.cacert.gigi.User;
11 public class DNSPinger extends DomainPinger {
14 public String ping(Domain domain, String expToken, User u) {
16 String[] tokenParts = expToken.split(":", 2);
18 Process p = Runtime.getRuntime().exec(new String[] {
19 "dig", "+short", "NS", domain.getSuffix()
21 BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
23 LinkedList<String> nameservers = new LinkedList<String>();
24 while ((line = br.readLine()) != null) {
25 nameservers.add(line);
28 StringBuffer result = new StringBuffer();
29 result.append("failed: ");
30 boolean failed = nameservers.isEmpty();
32 for (String NS : nameservers) {
33 String[] call = new String[] {
34 "dig", "@" + NS, "+short", "TXT", "cacert-" + tokenParts[0] + "." + domain
36 p = Runtime.getRuntime().exec(call);
37 br = new BufferedReader(new InputStreamReader(p.getInputStream()));
39 boolean found = false;
40 while ((line = br.readLine()) != null) {
45 token = line.substring(1, line.length() - 1);
46 if (token.equals(tokenParts[1])) {
53 result.append(" DIFFER;");
55 result.append(" EMPTY;");
63 return result.toString();
64 } catch (IOException e) {
66 return "Connection closed";