]> WPIA git - gigi.git/blobdiff - src/org/cacert/gigi/ping/SSLPinger.java
fix: SQL change database call pattern
[gigi.git] / src / org / cacert / gigi / ping / SSLPinger.java
index ec63a787d98e866c535baa419576fb17c5dd10a5..6dab6b524ff51684e944db780b5f20b9becb69b9 100644 (file)
@@ -27,8 +27,8 @@ import javax.net.ssl.TrustManagerFactory;
 import javax.security.cert.X509Certificate;
 
 import org.cacert.gigi.dbObjects.Certificate;
+import org.cacert.gigi.dbObjects.CertificateOwner;
 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, CertificateOwner 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;
         }
 
     }
@@ -85,7 +89,7 @@ public class SSLPinger extends DomainPinger {
         Socket s = sch.socket();
         InputStream is = s.getInputStream();
         OutputStream os = s.getOutputStream();
-        os.write(("<stream:stream to=\"" + domain + "\" xmlns=\"jabber:" + (server ? "server" : "client") + "\"" + " xmlns:stream=\"http://etherx.jabber.org/streams\" version=\"1.0\">").getBytes());
+        os.write(("<stream:stream to=\"" + domain + "\" xmlns=\"jabber:" + (server ? "server" : "client") + "\"" + " xmlns:stream=\"http://etherx.jabber.org/streams\" version=\"1.0\">").getBytes("UTF-8"));
         os.flush();
         os.write("<starttls xmlns=\"urn:ietf:params:xml:ns:xmpp-tls\"/>".getBytes("UTF-8"));
         os.flush();
@@ -145,8 +149,9 @@ public class SSLPinger extends DomainPinger {
         }
     }
 
-    private String test(SocketChannel sch, String domain, User subject) {
+    private String test(SocketChannel sch, String domain, CertificateOwner subject) {
         try {
+            sch.socket().setSoTimeout(5000);
             SSLContext sc = SSLContext.getInstance("SSL");
             try {
                 TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");
@@ -208,6 +213,9 @@ public class SSLPinger extends DomainPinger {
 
             BigInteger serial = first.getSerialNumber();
             Certificate c = Certificate.getBySerial(serial.toString(16));
+            if (c == null) {
+                return "Certificate not found: Serial " + serial.toString(16) + " missing.";
+            }
             if (c.getOwner().getId() != subject.getId()) {
                 return "Owner mismatch";
             }