X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2FdbObjects%2FCACertificate.java;h=3e8af82274704ffe728f9463c8d18004b80c1fe1;hb=73ac9fa5e36efef14464f40294e43ef85fadf320;hp=cc5bcd8935c43fdcf795a8649839503e71fcc0d9;hpb=444f1446c71f312156ebf36dab990f045f3e2c83;p=gigi.git diff --git a/src/org/cacert/gigi/dbObjects/CACertificate.java b/src/org/cacert/gigi/dbObjects/CACertificate.java index cc5bcd89..3e8af822 100644 --- a/src/org/cacert/gigi/dbObjects/CACertificate.java +++ b/src/org/cacert/gigi/dbObjects/CACertificate.java @@ -13,7 +13,6 @@ import java.util.HashMap; import javax.security.auth.x500.X500Principal; -import org.cacert.gigi.database.DatabaseConnection; import org.cacert.gigi.database.GigiPreparedStatement; import org.cacert.gigi.database.GigiResultSet; import org.cacert.gigi.util.ServerConstants; @@ -32,17 +31,19 @@ public class CACertificate implements IdCachable { private CACertificate(int id) { this.id = id; - GigiPreparedStatement conn = DatabaseConnection.getInstance().prepare("SELECT `keyname`, `parentRoot`, `link` FROM `cacerts` WHERE `id`=?"); - conn.setInt(1, id); - GigiResultSet res = conn.executeQuery(); - if ( !res.next()) { - throw new IllegalArgumentException(); - } - keyname = res.getString("keyname"); - link = res.getString("link"); - int parentRoot = res.getInt("parentRoot"); - if (res.next()) { - throw new RuntimeException("DB is broken"); + int parentRoot; + try (GigiPreparedStatement conn = new GigiPreparedStatement("SELECT `keyname`, `parentRoot`, `link` FROM `cacerts` WHERE `id`=?")) { + conn.setInt(1, id); + GigiResultSet res = conn.executeQuery(); + if ( !res.next()) { + throw new IllegalArgumentException(); + } + keyname = res.getString("keyname"); + link = res.getString("link"); + parentRoot = res.getInt("parentRoot"); + if (res.next()) { + throw new RuntimeException("DB is broken"); + } } if (parentRoot == id) { parent = this; @@ -88,7 +89,11 @@ public class CACertificate implements IdCachable { CertificateFactory xf = CertificateFactory.getInstance("X509"); HashMap map = new HashMap<>(); HashMap names = new HashMap<>(); - for (File f : scandir.listFiles()) { + File[] scandirfiles = scandir.listFiles(); + if (null == scandirfiles) { + scandirfiles = new File[0]; + } + for (File f : scandirfiles) { X509Certificate cert = (X509Certificate) xf.generateCertificate(new FileInputStream(f)); X500Principal princip = cert.getSubjectX500Principal(); map.put(princip, cert); @@ -110,39 +115,42 @@ public class CACertificate implements IdCachable { X500Principal subj = toInsert.getSubjectX500Principal(); boolean self = toInsert.getIssuerX500Principal().equals(subj); - GigiPreparedStatement q = DatabaseConnection.getInstance().prepare("SELECT `id`, `parentRoot` FROM `cacerts` WHERE `keyname`=?"); - q.setString(1, names.get(subj)); - GigiResultSet res = q.executeQuery(); - int id; - if (res.next()) { - id = res.getInt("id"); - if (res.getInt("parentRoot") != (self ? id : inserted.get(toInsert.getIssuerX500Principal()))) { - throw new Error("Invalid DB structure: " + subj + "->" + inserted.get(toInsert.getIssuerX500Principal()) + " vs " + res.getInt("parentRoot")); - } - } else { - String link; - String keyname = names.get(subj); - if ( !keyname.contains("_")) { - link = "https://g2.crt." + ServerConstants.getSuffix() + "/g2/" + keyname + ".crt"; + try (GigiPreparedStatement q = new GigiPreparedStatement("SELECT `id`, `parentRoot` FROM `cacerts` WHERE `keyname`=?")) { + q.setString(1, names.get(subj)); + GigiResultSet res = q.executeQuery(); + int id; + if (res.next()) { + id = res.getInt("id"); + if (res.getInt("parentRoot") != (self ? id : inserted.get(toInsert.getIssuerX500Principal()))) { + throw new Error("Invalid DB structure: " + subj + "->" + inserted.get(toInsert.getIssuerX500Principal()) + " vs " + res.getInt("parentRoot")); + } } else { - String[] parts = keyname.split("_"); - link = "https://g2.crt." + ServerConstants.getSuffix() + "/g2/" + parts[1] + "/" + parts[0] + "-" + parts[2] + ".crt"; - - } - GigiPreparedStatement q2 = DatabaseConnection.getInstance().prepare("INSERT INTO `cacerts` SET `parentRoot`=?, `keyname`=?, `link`=?"); - q2.setInt(1, self ? 0 : inserted.get(toInsert.getIssuerX500Principal())); - q2.setString(2, keyname); - q2.setString(3, link); - q2.execute(); - id = q2.lastInsertId(); - if (self) { - GigiPreparedStatement q3 = DatabaseConnection.getInstance().prepare("UPDATE `cacerts` SET `parentRoot`=?, `id`=?"); - q3.setInt(1, id); - q3.setInt(2, id); - q3.execute(); + String link; + String keyname = names.get(subj); + if ( !keyname.contains("_")) { + link = "https://g2.crt." + ServerConstants.getSuffix() + "/g2/" + keyname + ".crt"; + } else { + String[] parts = keyname.split("_"); + link = "https://g2.crt." + ServerConstants.getSuffix() + "/g2/" + parts[1] + "/" + parts[0] + "-" + parts[2] + ".crt"; + + } + try (GigiPreparedStatement q2 = new GigiPreparedStatement("INSERT INTO `cacerts` SET `parentRoot`=?, `keyname`=?, `link`=?")) { + q2.setInt(1, self ? 0 : inserted.get(toInsert.getIssuerX500Principal())); + q2.setString(2, keyname); + q2.setString(3, link); + q2.execute(); + id = q2.lastInsertId(); + } + if (self) { + try (GigiPreparedStatement q3 = new GigiPreparedStatement("UPDATE `cacerts` SET `parentRoot`=?, `id`=?")) { + q3.setInt(1, id); + q3.setInt(2, id); + q3.execute(); + } + } } + inserted.put(subj, id); } - inserted.put(subj, id); } } }