@@ -225,7 +225,7 @@ set_principal_key_with_keyring(const char *key_name,
225
225
LWLock * lock_files = tde_lwlock_enc_keys ();
226
226
bool already_has_key ;
227
227
GenericKeyring * new_keyring ;
228
- const KeyInfo * keyInfo = NULL ;
228
+ KeyInfo * keyInfo = NULL ;
229
229
230
230
/*
231
231
* Try to get principal key from cache.
@@ -238,14 +238,15 @@ set_principal_key_with_keyring(const char *key_name,
238
238
new_keyring = GetKeyProviderByName (provider_name , providerOid );
239
239
240
240
{
241
- KeyringReturnCodes kr_ret ;
241
+ KeyringReturnCodes return_code ;
242
242
243
- keyInfo = KeyringGetKey (new_keyring , key_name , & kr_ret );
243
+ keyInfo = KeyringGetKey (new_keyring , key_name , & return_code );
244
244
245
- if (kr_ret != KEYRING_CODE_SUCCESS )
245
+ if (return_code != KEYRING_CODE_SUCCESS )
246
246
{
247
247
ereport (ERROR ,
248
- errmsg ("could not successfully query key provider \"%s\"" , new_keyring -> provider_name ));
248
+ errmsg ("failed to retrieve principal key \"%s\" from key provider \"%s\"" , key_name , new_keyring -> provider_name ),
249
+ errdetail ("%s" , KeyringErrorCodeToString (return_code )));
249
250
}
250
251
}
251
252
@@ -289,6 +290,7 @@ set_principal_key_with_keyring(const char *key_name,
289
290
290
291
LWLockRelease (lock_files );
291
292
293
+ pfree (keyInfo );
292
294
pfree (new_keyring );
293
295
pfree (new_principal_key );
294
296
}
@@ -303,7 +305,7 @@ xl_tde_perform_rotate_key(XLogPrincipalKeyRotate *xlrec)
303
305
TDEPrincipalKey * new_principal_key ;
304
306
GenericKeyring * new_keyring ;
305
307
KeyInfo * keyInfo ;
306
- KeyringReturnCodes kr_ret ;
308
+ KeyringReturnCodes return_code ;
307
309
308
310
LWLockAcquire (tde_lwlock_enc_keys (), LW_EXCLUSIVE );
309
311
@@ -316,19 +318,20 @@ xl_tde_perform_rotate_key(XLogPrincipalKeyRotate *xlrec)
316
318
}
317
319
318
320
new_keyring = GetKeyProviderByID (xlrec -> keyringId , xlrec -> databaseId );
319
- keyInfo = KeyringGetKey (new_keyring , xlrec -> keyName , & kr_ret );
321
+ keyInfo = KeyringGetKey (new_keyring , xlrec -> keyName , & return_code );
320
322
321
- if (kr_ret != KEYRING_CODE_SUCCESS )
323
+ if (return_code != KEYRING_CODE_SUCCESS )
322
324
{
323
325
ereport (ERROR ,
324
- errmsg ("failed to retrieve principal key from keyring provider: \"%s\"" , new_keyring -> provider_name ),
325
- errdetail ("Error code: %d " , kr_ret ));
326
+ errmsg ("failed to retrieve principal key \"%s\" from key provider \"%s\"" , xlrec -> keyName , new_keyring -> provider_name ),
327
+ errdetail ("%s " , KeyringErrorCodeToString ( return_code ) ));
326
328
}
327
329
328
330
/* The new key should be on keyring by this time */
329
331
if (keyInfo == NULL )
330
332
{
331
- ereport (ERROR , errmsg ("failed to retrieve principal key from keyring for database %u." , xlrec -> databaseId ));
333
+ ereport (ERROR , errmsg ("failed to retrieve principal key \"%s\" from key provider \"%s\" for database %u" ,
334
+ xlrec -> keyName , new_keyring -> provider_name , xlrec -> databaseId ));
332
335
}
333
336
334
337
new_principal_key = palloc_object (TDEPrincipalKey );
@@ -347,6 +350,7 @@ xl_tde_perform_rotate_key(XLogPrincipalKeyRotate *xlrec)
347
350
348
351
LWLockRelease (tde_lwlock_enc_keys ());
349
352
353
+ pfree (keyInfo );
350
354
pfree (new_keyring );
351
355
pfree (new_principal_key );
352
356
}
@@ -514,7 +518,8 @@ pg_tde_create_principal_key_internal(Oid providerOid,
514
518
515
519
if (return_code != KEYRING_CODE_SUCCESS )
516
520
ereport (ERROR ,
517
- errmsg ("could not successfully query key provider \"%s\"" , provider -> provider_name ));
521
+ errmsg ("failed to retrieve principal key \"%s\" from key provider \"%s\"" , key_name , provider_name ),
522
+ errdetail ("%s" , KeyringErrorCodeToString (return_code )));
518
523
519
524
if (key_info != NULL )
520
525
ereport (ERROR ,
@@ -939,11 +944,17 @@ get_principal_key_from_keyring(Oid dbOid)
939
944
principalKeyInfo -> data .name , principalKeyInfo -> data .keyringId ));
940
945
941
946
keyInfo = KeyringGetKey (keyring , principalKeyInfo -> data .name , & keyring_ret );
947
+
948
+ if (keyring_ret != KEYRING_CODE_SUCCESS )
949
+ ereport (ERROR ,
950
+ errmsg ("failed to retrieve principal key \"%s\" from key provider \"%s\"" , principalKeyInfo -> data .name , keyring -> provider_name ),
951
+ errdetail ("%s" , KeyringErrorCodeToString (keyring_ret )));
952
+
942
953
if (keyInfo == NULL )
943
954
ereport (ERROR ,
944
955
errcode (ERRCODE_NO_DATA_FOUND ),
945
- errmsg ("failed to retrieve principal key %s from keyring with ID %d " ,
946
- principalKeyInfo -> data .name , principalKeyInfo -> data . keyringId ));
956
+ errmsg ("key \"%s\" not found in key provider \"%s\" " ,
957
+ principalKeyInfo -> data .name , keyring -> provider_name ));
947
958
948
959
if (!pg_tde_verify_principal_key_info (principalKeyInfo , & keyInfo -> data ))
949
960
ereport (ERROR ,
@@ -1184,11 +1195,21 @@ pg_tde_verify_provider_keys_in_use(GenericKeyring *modified_provider)
1184
1195
KeyInfo * proposed_key ;
1185
1196
1186
1197
proposed_key = KeyringGetKey (modified_provider , key_name , & return_code );
1198
+
1199
+ if (return_code != KEYRING_CODE_SUCCESS )
1200
+ {
1201
+ ereport (ERROR ,
1202
+ errmsg ("failed to retreive \"%s\" key from key provider \"%s\"" ,
1203
+ key_name , modified_provider -> provider_name ),
1204
+ errdetail ("%s" , KeyringErrorCodeToString (return_code )));
1205
+ }
1206
+
1187
1207
if (!proposed_key )
1188
1208
{
1189
1209
ereport (ERROR ,
1190
- errmsg ("could not fetch key \"%s\" used as server key from modified key provider \"%s\": %d" ,
1191
- key_name , modified_provider -> provider_name , return_code ));
1210
+ errcode (ERRCODE_NO_DATA_FOUND ),
1211
+ errmsg ("key \"%s\" not found in key provider \"%s\"" ,
1212
+ key_name , modified_provider -> provider_name ));
1192
1213
}
1193
1214
1194
1215
if (!pg_tde_verify_principal_key_info (existing_principal_key , & proposed_key -> data ))
@@ -1197,6 +1218,8 @@ pg_tde_verify_provider_keys_in_use(GenericKeyring *modified_provider)
1197
1218
errmsg ("key \"%s\" from modified key provider \"%s\" does not match existing server key" ,
1198
1219
key_name , modified_provider -> provider_name ));
1199
1220
}
1221
+
1222
+ pfree (proposed_key );
1200
1223
}
1201
1224
1202
1225
if (existing_principal_key )
@@ -1219,11 +1242,20 @@ pg_tde_verify_provider_keys_in_use(GenericKeyring *modified_provider)
1219
1242
KeyInfo * proposed_key ;
1220
1243
1221
1244
proposed_key = KeyringGetKey (modified_provider , key_name , & return_code );
1245
+ if (return_code != KEYRING_CODE_SUCCESS )
1246
+ {
1247
+ ereport (ERROR ,
1248
+ errmsg ("failed to retreive \"%s\" key used by database \"%s\" from key provider \"%s\"" ,
1249
+ key_name , database -> datname .data , modified_provider -> provider_name ),
1250
+ errdetail ("%s" , KeyringErrorCodeToString (return_code )));
1251
+ }
1252
+
1222
1253
if (!proposed_key )
1223
1254
{
1224
1255
ereport (ERROR ,
1225
- errmsg ("could not fetch key \"%s\" used by database \"%s\" from modified key provider \"%s\": %d" ,
1226
- key_name , database -> datname .data , modified_provider -> provider_name , return_code ));
1256
+ errcode (ERRCODE_NO_DATA_FOUND ),
1257
+ errmsg ("key \"%s\" not found in key provider \"%s\"" ,
1258
+ key_name , modified_provider -> provider_name ));
1227
1259
}
1228
1260
1229
1261
if (!pg_tde_verify_principal_key_info (existing_principal_key , & proposed_key -> data ))
@@ -1232,6 +1264,8 @@ pg_tde_verify_provider_keys_in_use(GenericKeyring *modified_provider)
1232
1264
errmsg ("key \"%s\" from modified key provider \"%s\" does not match existing key used by database \"%s\"" ,
1233
1265
key_name , modified_provider -> provider_name , database -> datname .data ));
1234
1266
}
1267
+
1268
+ pfree (proposed_key );
1235
1269
}
1236
1270
1237
1271
if (existing_principal_key )
0 commit comments