mirror of
https://github.com/curl/curl.git
synced 2024-12-15 06:40:09 +08:00
29c4aa00a1
Handle canonical headers and signed headers creation as explained here: https://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html The algo tells that signed and canonical must contain at last host and x-amz-date. So we check whatever thoses are present in the curl http headers list. If they are, we use the one enter by curl user, otherwise we generate them. then we to lower, and remove space from each http headers plus host and x-amz-date, then sort them all by alphabetical order. This patch also fix a bug with host header, which was ignoring the port. Closes #7966
75 lines
2.4 KiB
C
75 lines
2.4 KiB
C
/***************************************************************************
|
|
* _ _ ____ _
|
|
* Project ___| | | | _ \| |
|
|
* / __| | | | |_) | |
|
|
* | (__| |_| | _ <| |___
|
|
* \___|\___/|_| \_\_____|
|
|
*
|
|
* Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
*
|
|
* This software is licensed as described in the file COPYING, which
|
|
* you should have received as part of this distribution. The terms
|
|
* are also available at https://curl.haxx.se/docs/copyright.html.
|
|
*
|
|
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
* copies of the Software, and permit persons to whom the Software is
|
|
* furnished to do so, under the terms of the COPYING file.
|
|
*
|
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
* KIND, either express or implied.
|
|
*
|
|
* SPDX-License-Identifier: curl
|
|
*
|
|
***************************************************************************/
|
|
|
|
#include "test.h"
|
|
|
|
#include "memdebug.h"
|
|
|
|
int test(char *URL)
|
|
{
|
|
CURL *curl;
|
|
CURLcode res = TEST_ERR_MAJOR_BAD;
|
|
struct curl_slist *connect_to = NULL;
|
|
struct curl_slist *list = NULL;
|
|
unsigned char data[] = {0x70, 0x6f, 0x73, 0x74, 0, 0x44, 0x61, 0x74, 0x61};
|
|
|
|
if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
|
|
fprintf(stderr, "curl_global_init() failed\n");
|
|
return TEST_ERR_MAJOR_BAD;
|
|
}
|
|
|
|
curl = curl_easy_init();
|
|
if(!curl) {
|
|
fprintf(stderr, "curl_easy_init() failed\n");
|
|
curl_global_cleanup();
|
|
return TEST_ERR_MAJOR_BAD;
|
|
}
|
|
|
|
test_setopt(curl, CURLOPT_VERBOSE, 1L);
|
|
test_setopt(curl, CURLOPT_POST, 1L);
|
|
test_setopt(curl, CURLOPT_AWS_SIGV4, "provider1:provider2:region:service");
|
|
test_setopt(curl, CURLOPT_USERPWD, "keyId:SecretKey");
|
|
test_setopt(curl, CURLOPT_HEADER, 0L);
|
|
test_setopt(curl, CURLOPT_URL, URL);
|
|
if(libtest_arg2) {
|
|
connect_to = curl_slist_append(connect_to, libtest_arg2);
|
|
}
|
|
test_setopt(curl, CURLOPT_CONNECT_TO, connect_to);
|
|
list = curl_slist_append(list, "Content-Type: application/json");
|
|
test_setopt(curl, CURLOPT_HTTPHEADER, list);
|
|
test_setopt(curl, CURLOPT_POSTFIELDS, data);
|
|
test_setopt(curl, CURLOPT_POSTFIELDSIZE, (long)sizeof(data));
|
|
|
|
res = curl_easy_perform(curl);
|
|
|
|
test_cleanup:
|
|
|
|
curl_slist_free_all(connect_to);
|
|
curl_slist_free_all(list);
|
|
curl_easy_cleanup(curl);
|
|
curl_global_cleanup();
|
|
|
|
return res;
|
|
}
|