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;
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;
CertificateFactory xf = CertificateFactory.getInstance("X509");
HashMap<X500Principal, X509Certificate> map = new HashMap<>();
HashMap<X500Principal, String> 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);
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`=? WHERE `id`=?")) {
+ q3.setInt(1, id);
+ q3.setInt(2, id);
+ q3.execute();
+ }
+ }
}
+ inserted.put(subj, id);
}
- inserted.put(subj, id);
}
}
}