]> WPIA git - gigi.git/blobdiff - src/org/cacert/gigi/ping/DNSPinger.java
Remove command invocations of "dig"
[gigi.git] / src / org / cacert / gigi / ping / DNSPinger.java
index a611a239bc361d07380473a8105a00010a6ca1ec..5e735e096fbcec40ca89655e58128c5c16895210 100644 (file)
@@ -1,72 +1,56 @@
 package org.cacert.gigi.ping;
 
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
 import java.util.Arrays;
-import java.util.LinkedList;
+import java.util.List;
+
+import javax.naming.NamingException;
 
 import org.cacert.gigi.Domain;
 import org.cacert.gigi.User;
+import org.cacert.gigi.util.DNSUtil;
 
 public class DNSPinger extends DomainPinger {
 
     @Override
     public String ping(Domain domain, String expToken, User u) {
+        String[] tokenParts = expToken.split(":", 2);
+        List<String> nameservers;
         try {
-            String[] tokenParts = expToken.split(":", 2);
-
-            Process p = Runtime.getRuntime().exec(new String[] {
-                    "dig", "+short", "NS", domain.getSuffix()
-            });
-            BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
-            String line;
-            LinkedList<String> nameservers = new LinkedList<String>();
-            while ((line = br.readLine()) != null) {
-                nameservers.add(line);
-            }
-            p.destroy();
-            StringBuffer result = new StringBuffer();
-            result.append("failed: ");
-            boolean failed = nameservers.isEmpty();
-            nameservers:
-            for (String NS : nameservers) {
-                String[] call = new String[] {
-                        "dig", "@" + NS, "+short", "TXT", "cacert-" + tokenParts[0] + "." + domain.getSuffix()
-                };
-                System.out.println(Arrays.toString(call));
-                p = Runtime.getRuntime().exec(call);
-                br = new BufferedReader(new InputStreamReader(p.getInputStream()));
-                String token = null;
-                boolean found = false;
-                while ((line = br.readLine()) != null) {
-                    if (line.isEmpty()) {
+            nameservers = Arrays.asList(DNSUtil.getNSNames(domain.getSuffix()));
+        } catch (NamingException e) {
+            return "No authorative nameserver found.";
+        }
+        StringBuffer result = new StringBuffer();
+        result.append("failed: ");
+        boolean failed = nameservers.isEmpty();
+        nameservers:
+        for (String NS : nameservers) {
+            boolean found = false;
+            try {
+                for (String token : DNSUtil.getTXTEntries("cacert-" + tokenParts[0] + "." + domain.getSuffix(), NS)) {
+                    if (token.isEmpty()) {
                         continue;
                     }
                     found = true;
-                    token = line.substring(1, line.length() - 1);
                     if (token.equals(tokenParts[1])) {
                         continue nameservers;
                     }
                 }
-                p.destroy();
-                result.append(NS);
-                if (found) {
-                    result.append(" DIFFER;");
-                } else {
-                    result.append(" EMPTY;");
-                }
-                failed = true;
-
+            } catch (NamingException e) {
+                found = false;
             }
-            if ( !failed) {
-                return PING_SUCCEDED;
+            result.append(NS);
+            if (found) {
+                result.append(" DIFFER;");
+            } else {
+                result.append(" EMPTY;");
             }
-            return result.toString();
-        } catch (IOException e) {
-            e.printStackTrace();
-            return "Connection closed";
+            failed = true;
+
         }
+        if ( !failed) {
+            return PING_SUCCEDED;
+        }
+        return result.toString();
     }
-
 }