protected KrbIdentity doGetIdentity()

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);
        }
    }