X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2Femail%2FEmailProvider.java;h=3e6d3493acc317c4272ec14a845b1cb19f0d7f39;hb=5e56c8322c407bcb17bea38ceeac83fc96446c7e;hp=e82a44d72f0571f09ad3423864711a4120b1386e;hpb=44db0452c9f29cb97fd928b8e7684299c89ea844;p=gigi.git diff --git a/src/org/cacert/gigi/email/EmailProvider.java b/src/org/cacert/gigi/email/EmailProvider.java index e82a44d7..3e6d3493 100644 --- a/src/org/cacert/gigi/email/EmailProvider.java +++ b/src/org/cacert/gigi/email/EmailProvider.java @@ -10,14 +10,15 @@ import java.security.Key; import java.security.PrivateKey; import java.security.cert.Certificate; import java.security.cert.X509Certificate; -import java.sql.PreparedStatement; -import java.sql.SQLException; -import java.util.LinkedList; import java.util.Properties; import java.util.regex.Pattern; +import javax.naming.NamingException; + import org.cacert.gigi.crypto.SMIME; import org.cacert.gigi.database.DatabaseConnection; +import org.cacert.gigi.database.GigiPreparedStatement; +import org.cacert.gigi.util.DNSUtil; public abstract class EmailProvider { @@ -68,7 +69,12 @@ public abstract class EmailProvider { String[] parts = address.split("@", 2); String domain = parts[1]; - LinkedList mxhosts = getMxHosts(domain); + String[] mxhosts; + try { + mxhosts = DNSUtil.getMXEntries(domain); + } catch (NamingException e1) { + return "MX lookup for your hostname failed."; + } for (String host : mxhosts) { try (Socket s = new Socket(host, 25); BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); PrintWriter pw = new PrintWriter(s.getOutputStream())) { @@ -103,15 +109,11 @@ public abstract class EmailProvider { pw.print("QUIT\r\n"); pw.flush(); - try { - PreparedStatement statmt = DatabaseConnection.getInstance().prepare("insert into `pinglog` set `when`=NOW(), `email`=?, `result`=?, `uid`=?"); - statmt.setString(1, address); - statmt.setString(2, line); - statmt.setInt(3, forUid); - statmt.execute(); - } catch (SQLException e) { - e.printStackTrace(); - } + GigiPreparedStatement statmt = DatabaseConnection.getInstance().prepare("insert into `pinglog` set `when`=NOW(), `email`=?, `result`=?, `uid`=?"); + statmt.setString(1, address); + statmt.setString(2, line); + statmt.setInt(3, forUid); + statmt.execute(); if (line == null || !line.startsWith("250")) { return line; @@ -122,33 +124,12 @@ public abstract class EmailProvider { } } - try { - PreparedStatement statmt = DatabaseConnection.getInstance().prepare("insert into `pinglog` set `when`=NOW(), `email`=?, `result`=?, `uid`=?"); - statmt.setString(1, address); - statmt.setString(2, "Failed to make a connection to the mail server"); - statmt.setInt(3, forUid); - statmt.execute(); - } catch (SQLException e) { - e.printStackTrace(); - } + GigiPreparedStatement statmt = DatabaseConnection.getInstance().prepare("insert into `pinglog` set `when`=NOW(), `email`=?, `result`=?, `uid`=?"); + statmt.setString(1, address); + statmt.setString(2, "Failed to make a connection to the mail server"); + statmt.setInt(3, forUid); + statmt.execute(); return FAIL; } - private static LinkedList getMxHosts(String domain) throws IOException { - LinkedList mxhosts = new LinkedList(); - Process dig = Runtime.getRuntime().exec(new String[] { - "dig", "+short", "MX", domain - }); - try (BufferedReader br = new BufferedReader(new InputStreamReader(dig.getInputStream()))) { - String line; - while ((line = br.readLine()) != null) { - String[] mxparts = line.split(" ", 2); - if (mxparts.length != 2) { - continue; - } - mxhosts.add(mxparts[1].substring(0, mxparts[1].length() - 1)); - } - } - return mxhosts; - } }