import java.util.Map;
import java.util.Properties;
-import org.cacert.gigi.database.DatabaseConnection;
import org.cacert.gigi.database.GigiPreparedStatement;
import org.cacert.gigi.database.GigiResultSet;
final HashMap<String, CertificateProfile> myName = new HashMap<String, CertificateProfile>();
final HashMap<Integer, CertificateProfile> myId = new HashMap<Integer, CertificateProfile>();
- for (File f : new File("config/profiles").listFiles()) {
+ File profiledir = new File("config/profiles");
+ File[] profilelist = profiledir.listFiles();
+ if (null == profilelist) {
+ throw new Error("Unable to list available profiles from " + profiledir.getName());
+ }
+
+ for (File f : profilelist) {
Properties p = new Properties();
try (FileInputStream inStream = new FileInputStream(f)) {
p.load(inStream);
}
String[] parts = f.getName().split("\\.")[0].split("-", 2);
- GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT `keyname`, `include`, `requires`, `name` FROM `profiles` WHERE `id`=?");
- ps.setInt(1, Integer.parseInt(parts[0]));
- GigiResultSet rs = ps.executeQuery();
-
- if (rs.next()) {
- if ( !rs.getString("keyname").equals(parts[1])) {
- throw new Error("Config error. Certificate Profile mismatch");
- }
- if ( !rs.getString("include").equals(p.getProperty("include"))) {
- throw new Error("Config error. Certificate Profile mismatch");
- }
- if ( !rs.getString("requires").equals(p.getProperty("requires", ""))) {
- throw new Error("Config error. Certificate Profile mismatch");
+ try (GigiPreparedStatement ps = new GigiPreparedStatement("SELECT `keyname`, `include`, `requires`, `name` FROM `profiles` WHERE `id`=?")) {
+ ps.setInt(1, Integer.parseInt(parts[0]));
+ GigiResultSet rs = ps.executeQuery();
+
+ if (rs.next()) {
+ if ( !rs.getString("keyname").equals(parts[1])) {
+ throw new Error("Config error. Certificate Profile mismatch");
+ }
+ if ( !rs.getString("include").equals(p.getProperty("include"))) {
+ throw new Error("Config error. Certificate Profile mismatch");
+ }
+ if ( !rs.getString("requires").equals(p.getProperty("requires", ""))) {
+ throw new Error("Config error. Certificate Profile mismatch");
+ }
+ } else {
+ try (GigiPreparedStatement insert = new GigiPreparedStatement("INSERT INTO `profiles` SET `keyname`=?, `include`=?, `requires`=?, `name`=?, `id`=?")) {
+ insert.setString(1, parts[1]);
+ insert.setString(2, p.getProperty("include"));
+ insert.setString(3, p.getProperty("requires", ""));
+ insert.setString(4, p.getProperty("name"));
+ insert.setInt(5, Integer.parseInt(parts[0]));
+ insert.execute();
+ }
}
- } else {
- GigiPreparedStatement insert = DatabaseConnection.getInstance().prepare("INSERT INTO `profiles` SET `keyname`=?, `include`=?, `requires`=?, `name`=?, `id`=?");
- insert.setString(1, parts[1]);
- insert.setString(2, p.getProperty("include"));
- insert.setString(3, p.getProperty("requires", ""));
- insert.setString(4, p.getProperty("name"));
- insert.setInt(5, Integer.parseInt(parts[0]));
- insert.execute();
}
}
- GigiPreparedStatement ps = DatabaseConnection.getInstance().prepare("SELECT `id`, `keyname`, `name`, `requires`, `include` FROM `profiles`");
- GigiResultSet rs = ps.executeQuery();
- while (rs.next()) {
- CertificateProfile cp = new CertificateProfile(rs.getInt("id"), rs.getString("keyName"), rs.getString("name"), rs.getString("requires"), rs.getString("include"));
- myId.put(cp.getId(), cp);
- myName.put(cp.getKeyName(), cp);
+ try (GigiPreparedStatement ps = new GigiPreparedStatement("SELECT `id`, `keyname`, `name`, `requires`, `include` FROM `profiles`")) {
+ GigiResultSet rs = ps.executeQuery();
+ while (rs.next()) {
+ CertificateProfile cp = new CertificateProfile(rs.getInt("id"), rs.getString("keyName"), rs.getString("name"), rs.getString("requires"), rs.getString("include"));
+ myId.put(cp.getId(), cp);
+ myName.put(cp.getKeyName(), cp);
+ }
}
-
byName = Collections.unmodifiableMap(myName);
byId = Collections.unmodifiableMap(myId);
}
return false;
}
} else if (s.equals("codesign")) {
- if (actor.isInGroup(Group.CODESIGNING)) {
+ if ( !actor.isInGroup(Group.CODESIGNING)) {
+ return false;
+ }
+ } else if (s.equals("ocsp")) {
+ if ( !(owner instanceof Organisation)) {
+ return false;
+ }
+ Organisation o = (Organisation) owner;
+ if ( !o.isSelfOrganisation()) {
return false;
}
} else {