X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2Fping%2FSSLPinger.java;h=acc36adc47650e584b11226f59b5d6869d4b6218;hb=6d65334306c8b7bd10fbbfa07bc8f38475ff6d08;hp=dc8cdd0074c1d5b7163bfc00c0c2ca49ca484954;hpb=c9be5d5111b4bb5d1089d3cf5b380adb7836ef5b;p=gigi.git diff --git a/src/org/cacert/gigi/ping/SSLPinger.java b/src/org/cacert/gigi/ping/SSLPinger.java index dc8cdd00..acc36adc 100644 --- a/src/org/cacert/gigi/ping/SSLPinger.java +++ b/src/org/cacert/gigi/ping/SSLPinger.java @@ -19,16 +19,16 @@ import javax.net.ssl.SNIHostName; import javax.net.ssl.SNIServerName; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLEngine; -import javax.net.ssl.TrustManagerFactory; +import javax.net.ssl.SSLEngineResult.HandshakeStatus; import javax.net.ssl.SSLEngineResult.Status; import javax.net.ssl.SSLException; -import javax.net.ssl.SSLEngineResult.HandshakeStatus; import javax.net.ssl.SSLParameters; +import javax.net.ssl.TrustManagerFactory; import javax.security.cert.X509Certificate; -import org.cacert.gigi.Certificate; -import org.cacert.gigi.Domain; -import org.cacert.gigi.User; +import org.cacert.gigi.dbObjects.Certificate; +import org.cacert.gigi.dbObjects.Domain; +import org.cacert.gigi.dbObjects.User; public class SSLPinger extends DomainPinger { @@ -43,10 +43,11 @@ public class SSLPinger extends DomainPinger { } @Override - public String ping(Domain domain, String configuration, User u) { + public void ping(Domain domain, String configuration, User u, int confId) { try (SocketChannel sch = SocketChannel.open()) { + sch.socket().setSoTimeout(5000); String[] parts = configuration.split(":", 2); - sch.connect(new InetSocketAddress(domain.getSuffix(), Integer.parseInt(parts[0]))); + sch.socket().connect(new InetSocketAddress(domain.getSuffix(), Integer.parseInt(parts[0])), 5000); if (parts.length == 2) { switch (parts[1]) { case "xmpp": @@ -64,9 +65,12 @@ public class SSLPinger extends DomainPinger { } } - return test(sch, domain.getSuffix(), u); + String res = test(sch, domain.getSuffix(), u); + enterPingResult(confId, res, res, null); + return; } catch (IOException e) { - return "Connecton failed"; + enterPingResult(confId, "error", "connection Failed", null); + return; } } @@ -76,7 +80,7 @@ public class SSLPinger extends DomainPinger { InputStream is = s.getInputStream(); OutputStream os = s.getOutputStream(); scanFor(is, "\n"); - os.write("ENABLE STARTTLS\r\n".getBytes()); + os.write("ENABLE STARTTLS\r\n".getBytes("UTF-8")); os.flush(); scanFor(is, "\n"); } @@ -85,9 +89,9 @@ public class SSLPinger extends DomainPinger { Socket s = sch.socket(); InputStream is = s.getInputStream(); OutputStream os = s.getOutputStream(); - os.write(("").getBytes()); + os.write(("").getBytes("UTF-8")); os.flush(); - os.write("".getBytes()); + os.write("".getBytes("UTF-8")); os.flush(); scanFor(is, ""); @@ -109,13 +113,13 @@ public class SSLPinger extends DomainPinger { Socket s = sch.socket(); InputStream is = s.getInputStream(); readSMTP(is); - s.getOutputStream().write("EHLO ssl.pinger\r\n".getBytes()); + s.getOutputStream().write("EHLO ssl.pinger\r\n".getBytes("UTF-8")); s.getOutputStream().flush(); readSMTP(is); - s.getOutputStream().write("HELP\r\n".getBytes()); + s.getOutputStream().write("HELP\r\n".getBytes("UTF-8")); s.getOutputStream().flush(); readSMTP(is); - s.getOutputStream().write("STARTTLS\r\n".getBytes()); + s.getOutputStream().write("STARTTLS\r\n".getBytes("UTF-8")); s.getOutputStream().flush(); readSMTP(is); } @@ -147,6 +151,7 @@ public class SSLPinger extends DomainPinger { private String test(SocketChannel sch, String domain, User subject) { try { + sch.socket().setSoTimeout(5000); SSLContext sc = SSLContext.getInstance("SSL"); try { TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509"); @@ -208,7 +213,10 @@ public class SSLPinger extends DomainPinger { BigInteger serial = first.getSerialNumber(); Certificate c = Certificate.getBySerial(serial.toString(16)); - if (c.getOwnerId() != subject.getId()) { + if (c == null) { + return "Certificate not found"; + } + if (c.getOwner().getId() != subject.getId()) { return "Owner mismatch"; } return PING_SUCCEDED;