Skip to content

Commit 894bbc3

Browse files
committed
PG-2379 Allow different principal keys for relation key file migration
The code assumed that all databases would use the same principal key which is generally not true. This fix loads the principal key for each database as needed.
1 parent f27fc09 commit 894bbc3

1 file changed

Lines changed: 7 additions & 10 deletions

File tree

src/access/pg_tde_tdemap.c

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -989,8 +989,6 @@ pg_tde_migrate_smgr_keys_file(void)
989989
DIR *dir;
990990
LWLock *lock_pk = tde_lwlock_enc_keys();
991991
struct dirent *file;
992-
TDEPrincipalKey *principal_key = NULL;
993-
TDESignedPrincipalKeyInfo signed_key_info;
994992

995993
/*
996994
* No real need in lock here as the func should be called only on the
@@ -1016,6 +1014,8 @@ pg_tde_migrate_smgr_keys_file(void)
10161014
TDEFileHeader fheader;
10171015
MapFromDiskEntry read_map_entry;
10181016
TDEMapEntry new_entry;
1017+
TDEPrincipalKey *principal_key;
1018+
TDESignedPrincipalKeyInfo signed_key_info;
10191019

10201020

10211021
dbOid = strtoul(file->d_name, &suffix, 10);
@@ -1047,17 +1047,14 @@ pg_tde_migrate_smgr_keys_file(void)
10471047
* The old file exists and it's not empty, hence a principal key
10481048
* should exist as well.
10491049
*/
1050+
principal_key = GetPrincipalKey(dbOid, LW_EXCLUSIVE);
10501051
if (principal_key == NULL)
10511052
{
1052-
principal_key = GetPrincipalKey(dbOid, LW_EXCLUSIVE);
1053-
if (principal_key == NULL)
1054-
{
1055-
ereport(ERROR,
1056-
errmsg("could not get server principal key"),
1057-
errdetail("Failed to migrate the keys file of %u database.", dbOid));
1058-
}
1059-
pg_tde_sign_principal_key_info(&signed_key_info, principal_key);
1053+
ereport(ERROR,
1054+
errmsg("failed to retrieve principal key for database %u", dbOid),
1055+
errdetail("Failed to migrate the keys file of database %u.", dbOid));
10601056
}
1057+
pg_tde_sign_principal_key_info(&signed_key_info, principal_key);
10611058

10621059
new_fd = pg_tde_open_file_write(tmp_db_map_path, &signed_key_info, true, &write_pos);
10631060

0 commit comments

Comments
 (0)