From 7631e12cdf8537f40c9b59b5d2e2f050c2df72d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20=C3=85strand?= Date: Mon, 5 May 2025 19:38:27 +0200 Subject: [PATCH] Use GenericKeyring* instead of void* As the parameter to ParseKeyringJSONOptions and in the state held while parsing the options. --- contrib/pg_tde/src/catalog/tde_keyring.c | 10 +++++++--- .../src/catalog/tde_keyring_parse_opts.c | 20 ++++++++----------- .../pg_tde/src/include/catalog/tde_keyring.h | 3 ++- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/contrib/pg_tde/src/catalog/tde_keyring.c b/contrib/pg_tde/src/catalog/tde_keyring.c index b20cbc20f4a..d8c0bb0c897 100644 --- a/contrib/pg_tde/src/catalog/tde_keyring.c +++ b/contrib/pg_tde/src/catalog/tde_keyring.c @@ -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 || diff --git a/contrib/pg_tde/src/catalog/tde_keyring_parse_opts.c b/contrib/pg_tde/src/catalog/tde_keyring_parse_opts.c index 46525cf788b..c8b23b6a6d3 100644 --- a/contrib/pg_tde/src/catalog/tde_keyring_parse_opts.c +++ b/contrib/pg_tde/src/catalog/tde_keyring_parse_opts.c @@ -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) { diff --git a/contrib/pg_tde/src/include/catalog/tde_keyring.h b/contrib/pg_tde/src/include/catalog/tde_keyring.h index e4f00e9ae65..42b708cb8f9 100644 --- a/contrib/pg_tde/src/include/catalog/tde_keyring.h +++ b/contrib/pg_tde/src/include/catalog/tde_keyring.h @@ -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 */