X-Git-Url: https://code.wpia.club/?p=gigi.git;a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2Fping%2FDNSPinger.java;h=5e735e096fbcec40ca89655e58128c5c16895210;hp=a611a239bc361d07380473a8105a00010a6ca1ec;hb=5dcfbec6497e6b11aff12b7c1a1e187f3b6b30fb;hpb=98410d964cfab49b45c5e56c4f9577f6527f400b diff --git a/src/org/cacert/gigi/ping/DNSPinger.java b/src/org/cacert/gigi/ping/DNSPinger.java index a611a239..5e735e09 100644 --- a/src/org/cacert/gigi/ping/DNSPinger.java +++ b/src/org/cacert/gigi/ping/DNSPinger.java @@ -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 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 nameservers = new LinkedList(); - 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(); } - }