@@ -62,9 +62,6 @@ static JsonParseErrorType json_resp_scalar(void *state, char *token, JsonTokenTy
62
62
static JsonParseErrorType json_resp_object_field_start (void * state , char * fname , bool isnull );
63
63
static JsonParseErrorType parse_json_response (JsonVaultRespState * parse , JsonLexContext * lex );
64
64
65
- static struct curl_slist * curlList = NULL ;
66
-
67
- static bool curl_setup_token (VaultV2Keyring * keyring );
68
65
static char * get_keyring_vault_url (VaultV2Keyring * keyring , const char * key_name , char * out , size_t out_size );
69
66
static bool curl_perform (VaultV2Keyring * keyring , const char * url , CurlString * outStr , long * httpCode , const char * postData );
70
67
@@ -84,35 +81,13 @@ InstallVaultV2Keyring(void)
84
81
RegisterKeyProviderType (& keyringVaultV2Routine , VAULT_V2_KEY_PROVIDER );
85
82
}
86
83
87
- static bool
88
- curl_setup_token (VaultV2Keyring * keyring )
89
- {
90
- if (curlList == NULL )
91
- {
92
- char tokenHeader [256 ];
93
-
94
- strcpy (tokenHeader , "X-Vault-Token:" );
95
- strcat (tokenHeader , keyring -> vault_token );
96
-
97
- curlList = curl_slist_append (curlList , tokenHeader );
98
- if (curlList == NULL )
99
- return 0 ;
100
-
101
- curlList = curl_slist_append (curlList , "Content-Type: application/json" );
102
- if (curlList == NULL )
103
- return 0 ;
104
- }
105
-
106
- if (curl_easy_setopt (keyringCurl , CURLOPT_HTTPHEADER , curlList ) != CURLE_OK )
107
- return 0 ;
108
-
109
- return 1 ;
110
- }
111
-
112
84
static bool
113
85
curl_perform (VaultV2Keyring * keyring , const char * url , CurlString * outStr , long * httpCode , const char * postData )
114
86
{
115
87
CURLcode ret ;
88
+ struct curl_slist * curlList = NULL ;
89
+ char tokenHeader [256 ];
90
+
116
91
#if KEYRING_DEBUG
117
92
elog (DEBUG1 , "Performing Vault HTTP [%s] request to '%s'" , postData != NULL ? "POST" : "GET" , url );
118
93
if (postData != NULL )
@@ -126,29 +101,49 @@ curl_perform(VaultV2Keyring *keyring, const char *url, CurlString *outStr, long
126
101
if (!curlSetupSession (url , keyring -> vault_ca_path , outStr ))
127
102
return 0 ;
128
103
129
- if (!curl_setup_token (keyring ))
130
- return 0 ;
131
-
132
104
if (postData != NULL )
133
105
{
134
106
if (curl_easy_setopt (keyringCurl , CURLOPT_POSTFIELDS , postData ) != CURLE_OK )
135
107
return 0 ;
136
108
}
137
109
110
+ pg_snprintf (tokenHeader , sizeof (tokenHeader ),
111
+ "X-Vault-Token: %s" , keyring -> vault_token );
112
+ curlList = curl_slist_append (curlList , tokenHeader );
113
+ if (curlList == NULL )
114
+ return 0 ;
115
+
116
+ if (!curl_slist_append (curlList , "Content-Type: application/json" ))
117
+ {
118
+ curl_slist_free_all (curlList );
119
+ return 0 ;
120
+ }
121
+
122
+ if (curl_easy_setopt (keyringCurl , CURLOPT_HTTPHEADER , curlList ) != CURLE_OK )
123
+ {
124
+ curl_slist_free_all (curlList );
125
+ return 0 ;
126
+ }
127
+
138
128
ret = curl_easy_perform (keyringCurl );
139
129
if (ret != CURLE_OK )
140
130
{
141
131
elog (LOG , "curl_easy_perform failed with return code: %d" , ret );
132
+ curl_slist_free_all (curlList );
142
133
return 0 ;
143
134
}
144
135
145
136
if (curl_easy_getinfo (keyringCurl , CURLINFO_RESPONSE_CODE , httpCode ) != CURLE_OK )
137
+ {
138
+ curl_slist_free_all (curlList );
146
139
return 0 ;
140
+ }
147
141
148
142
#if KEYRING_DEBUG
149
143
elog (DEBUG2 , "Vault response [%li] '%s'" , * httpCode , outStr -> ptr != NULL ? outStr -> ptr : "" );
150
144
#endif
151
145
146
+ curl_slist_free_all (curlList );
152
147
return 1 ;
153
148
}
154
149
0 commit comments