Use GenericKeyring* instead of void*

As the parameter to ParseKeyringJSONOptions and in the state held while
parsing the options.
pull/220/head
Anders Åstrand 5 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; 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') 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; 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' || if (vaultV2_keyring->vault_token == NULL || vaultV2_keyring->vault_token[0] == '\0' ||
vaultV2_keyring->vault_url == NULL || vaultV2_keyring->vault_url[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; 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 || if (strlen(kmip_keyring->kmip_host) == 0 ||
strlen(kmip_keyring->kmip_port) == 0 || strlen(kmip_keyring->kmip_port) == 0 ||

@ -102,11 +102,8 @@ typedef struct JsonKeyringState
{ {
ProviderType provider_type; ProviderType provider_type;
/* /* Caller's options to be set from JSON values. */
* Caller's options to be set from JSON values. Expected either GenericKeyring *provider_opts;
* `VaultV2Keyring` or `FileKeyring`
*/
void *provider_opts;
/* /*
* A field hierarchy of the current branch, field[level] is the current * 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 * 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 * out_opts should be a palloc'd keyring object matching the provider_type.
* respective option values will be mem copied into it.
*/ */
void 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; JsonLexContext *jlex;
JsonKeyringState parse = {0}; JsonKeyringState parse = {0};
@ -390,9 +386,9 @@ json_kring_scalar(void *state, char *token, JsonTokenType tokentype)
static JsonParseErrorType static JsonParseErrorType
json_kring_assign_scalar(JsonKeyringState *parse, JsonKeyringField field, char *value) json_kring_assign_scalar(JsonKeyringState *parse, JsonKeyringField field, char *value)
{ {
VaultV2Keyring *vault = parse->provider_opts; VaultV2Keyring *vault = (VaultV2Keyring *) parse->provider_opts;
FileKeyring *file = parse->provider_opts; FileKeyring *file = (FileKeyring *) parse->provider_opts;
KmipKeyring *kmip = parse->provider_opts; KmipKeyring *kmip = (KmipKeyring *) parse->provider_opts;
switch (field) switch (field)
{ {

@ -43,7 +43,8 @@ extern void delete_key_provider_info(char *provider_name,
Oid databaseId, bool write_xlog); Oid databaseId, bool write_xlog);
extern void redo_key_provider_info(KeyringProviderRecordInFile *xlrec); 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); char *in_buf, int buf_len);
#endif /* TDE_KEYRING_H */ #endif /* TDE_KEYRING_H */

Loading…
Cancel
Save