Use GenericKeyring* instead of void*

As the parameter to ParseKeyringJSONOptions and in the state held while
parsing the options.
pull/220/head
Anders Åstrand 4 months ago committed by AndersAstrand
parent da52b54cd5
commit 7631e12cdf
  1. 10
      contrib/pg_tde/src/catalog/tde_keyring.c
  2. 20
      contrib/pg_tde/src/catalog/tde_keyring_parse_opts.c
  3. 3
      contrib/pg_tde/src/include/catalog/tde_keyring.h

@ -835,7 +835,8 @@ load_file_keyring_provider_options(char *keyring_options)
file_keyring->keyring.type = FILE_KEY_PROVIDER;
ParseKeyringJSONOptions(FILE_KEY_PROVIDER, file_keyring, keyring_options, strlen(keyring_options));
ParseKeyringJSONOptions(FILE_KEY_PROVIDER, (GenericKeyring *) file_keyring,
keyring_options, strlen(keyring_options));
if (file_keyring->file_name == NULL || file_keyring->file_name[0] == '\0')
{
@ -855,7 +856,9 @@ load_vaultV2_keyring_provider_options(char *keyring_options)
vaultV2_keyring->keyring.type = VAULT_V2_KEY_PROVIDER;
ParseKeyringJSONOptions(VAULT_V2_KEY_PROVIDER, vaultV2_keyring, keyring_options, strlen(keyring_options));
ParseKeyringJSONOptions(VAULT_V2_KEY_PROVIDER,
(GenericKeyring *) vaultV2_keyring,
keyring_options, strlen(keyring_options));
if (vaultV2_keyring->vault_token == NULL || vaultV2_keyring->vault_token[0] == '\0' ||
vaultV2_keyring->vault_url == NULL || vaultV2_keyring->vault_url[0] == '\0' ||
@ -880,7 +883,8 @@ load_kmip_keyring_provider_options(char *keyring_options)
kmip_keyring->keyring.type = KMIP_KEY_PROVIDER;
ParseKeyringJSONOptions(KMIP_KEY_PROVIDER, kmip_keyring, keyring_options, strlen(keyring_options));
ParseKeyringJSONOptions(KMIP_KEY_PROVIDER, (GenericKeyring *) kmip_keyring,
keyring_options, strlen(keyring_options));
if (strlen(kmip_keyring->kmip_host) == 0 ||
strlen(kmip_keyring->kmip_port) == 0 ||

@ -102,11 +102,8 @@ typedef struct JsonKeyringState
{
ProviderType provider_type;
/*
* Caller's options to be set from JSON values. Expected either
* `VaultV2Keyring` or `FileKeyring`
*/
void *provider_opts;
/* Caller's options to be set from JSON values. */
GenericKeyring *provider_opts;
/*
* A field hierarchy of the current branch, field[level] is the current
@ -138,12 +135,11 @@ static char *get_file_kring_value(const char *path, const char *field_name);
/*
* Parses json input for the given provider type and sets the provided options
* out_opts should be a palloc'd `VaultV2Keyring` or `FileKeyring` struct as the
* respective option values will be mem copied into it.
* Parses json input for the given provider type and sets the provided options.
* out_opts should be a palloc'd keyring object matching the provider_type.
*/
void
ParseKeyringJSONOptions(ProviderType provider_type, void *out_opts, char *in_buf, int buf_len)
ParseKeyringJSONOptions(ProviderType provider_type, GenericKeyring *out_opts, char *in_buf, int buf_len)
{
JsonLexContext *jlex;
JsonKeyringState parse = {0};
@ -390,9 +386,9 @@ json_kring_scalar(void *state, char *token, JsonTokenType tokentype)
static JsonParseErrorType
json_kring_assign_scalar(JsonKeyringState *parse, JsonKeyringField field, char *value)
{
VaultV2Keyring *vault = parse->provider_opts;
FileKeyring *file = parse->provider_opts;
KmipKeyring *kmip = parse->provider_opts;
VaultV2Keyring *vault = (VaultV2Keyring *) parse->provider_opts;
FileKeyring *file = (FileKeyring *) parse->provider_opts;
KmipKeyring *kmip = (KmipKeyring *) parse->provider_opts;
switch (field)
{

@ -43,7 +43,8 @@ extern void delete_key_provider_info(char *provider_name,
Oid databaseId, bool write_xlog);
extern void redo_key_provider_info(KeyringProviderRecordInFile *xlrec);
extern void ParseKeyringJSONOptions(ProviderType provider_type, void *out_opts,
extern void ParseKeyringJSONOptions(ProviderType provider_type,
GenericKeyring *out_opts,
char *in_buf, int buf_len);
#endif /* TDE_KEYRING_H */

Loading…
Cancel
Save