X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2FdbObjects%2FCACertificate.java;h=41401b6ddab883b84e10180f766bf1492882d212;hb=bd738ff4450f7fabe08c4ca5bd3f7597d0b011ef;hp=aa12d08f08b4d0ce400a6ebd8c3c4287162be97d;hpb=3256b7b19512a2e161e4ae3a8db706d671dc066f;p=gigi.git diff --git a/src/org/cacert/gigi/dbObjects/CACertificate.java b/src/org/cacert/gigi/dbObjects/CACertificate.java index aa12d08f..41401b6d 100644 --- a/src/org/cacert/gigi/dbObjects/CACertificate.java +++ b/src/org/cacert/gigi/dbObjects/CACertificate.java @@ -13,35 +13,37 @@ 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; public class CACertificate implements IdCachable { - final String keyname; + private final String keyname; - final int id; + private final int id; - CACertificate parent = null; + private CACertificate parent = null; - final X509Certificate cert; + private final X509Certificate cert; - final String link; + private final String link; 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; @@ -109,39 +111,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 = "http://g2.crt.cacert.org/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 = "http://g2.crt.cacert.org/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); } } } @@ -172,4 +177,5 @@ public class CACertificate implements IdCachable { public boolean isSelfsigned() { return this == getParent(); } + }