in kerby-backend/mysql-backend/src/main/java/org/apache/kerby/kerberos/kdc/identitybackend/MySQLIdentityBackend.java [285:337]
protected KrbIdentity doGetIdentity(final String principalName) throws KrbException {
KrbIdentity krbIdentity = null;
Connection connection = null;
PreparedStatement preIdentity = null;
ResultSet resIdentity = null;
try {
connection = dataSource.getConnection();
// Get identity from identity and key table
String stmIdentity = String.format("SELECT * FROM %s a left join %s b on "
+ "a.principal = b.principal where a.principal = ?", identityTable, keyInfoTable);
preIdentity = connection.prepareStatement(stmIdentity);
preIdentity.setString(1, principalName);
resIdentity = preIdentity.executeQuery();
List<EncryptionKey> keys = new ArrayList<>();
if (resIdentity.isBeforeFirst()) {
while (resIdentity.next()) {
if (krbIdentity == null) {
krbIdentity = new KrbIdentity(principalName);
krbIdentity.setKeyVersion(resIdentity.getInt("key_version"));
krbIdentity.setKdcFlags(resIdentity.getInt("kdc_flags"));
krbIdentity.setDisabled(resIdentity.getBoolean("disabled"));
krbIdentity.setLocked(resIdentity.getBoolean("locked"));
krbIdentity.setCreatedTime(new KerberosTime(resIdentity.getLong("created_time")));
krbIdentity.setExpireTime(new KerberosTime(resIdentity.getLong("expire_time")));
}
// Get key info
int kvno = resIdentity.getInt("kvno");
String keyType = resIdentity.getString("key_type");
EncryptionType eType = EncryptionType.fromName(keyType);
byte[] keyValue = resIdentity.getBytes("key_value");
EncryptionKey key = new EncryptionKey(eType, keyValue, kvno);
keys.add(key);
}
if (krbIdentity != null && keys.size() > 0) {
krbIdentity.addKeys(keys);
}
return krbIdentity;
} else {
return null;
}
} catch (SQLException e) {
LOG.error("Error occurred while getting identity. " + e.toString());
throw new KrbException("Failed to get identity. ", e);
} finally {
DbUtils.closeQuietly(preIdentity);
DbUtils.closeQuietly(resIdentity);
DbUtils.closeQuietly(connection);
}
}