]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
tool: add AWS HTTP v4 Signature support
authorMatthias Gatto <matthias.gatto@outscale.com>
Thu, 9 Jul 2020 10:04:55 +0000 (12:04 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 21 Dec 2020 15:28:03 +0000 (16:28 +0100)
Signed-off-by: Matthias Gatto <matthias.gatto@outscale.com>
src/tool_cfgable.c
src/tool_cfgable.h
src/tool_getparam.c
src/tool_help.c
src/tool_operate.c

index 4c06d3557b730058f315c5696db838697c95f94c..ff05c295b3c81b04ba743c6fffb1ed1f2dca48d0 100644 (file)
@@ -168,6 +168,8 @@ static void free_config_fields(struct OperationConfig *config)
 
   Curl_safefree(config->ftp_account);
   Curl_safefree(config->ftp_alternative_to_user);
+
+  Curl_safefree(config->aws_sigv4_provider);
 }
 
 void config_free(struct OperationConfig *config)
index dc1c5e557cbb134e8d99fc6383b1d3335f32f568..ad0d4023350ec75af12b8bb129dd98e16fa24ca3 100644 (file)
@@ -284,6 +284,7 @@ struct OperationConfig {
                                      0 is valid. default: CURL_HET_DEFAULT. */
   bool haproxy_protocol;          /* whether to send HAProxy protocol v1 */
   bool disallow_username_in_url;  /* disallow usernames in URLs */
+  char *aws_sigv4_provider;
   struct GlobalConfig *global;
   struct OperationConfig *prev;
   struct OperationConfig *next;   /* Always last in the struct */
index c57506609b11177c2855d96faf20239cbfaca777..91c2786632e3bc18fbb70cab86d83885f311ec85 100644 (file)
@@ -113,6 +113,7 @@ static const struct LongShort aliases[]= {
   {"*t", "proxy-ntlm",               ARG_BOOL},
   {"*u", "crlf",                     ARG_BOOL},
   {"*v", "stderr",                   ARG_FILENAME},
+  {"*V", "aws-sigv4",             ARG_STRING},
   {"*w", "interface",                ARG_STRING},
   {"*x", "krb",                      ARG_STRING},
   {"*x", "krb4",                     ARG_STRING},
@@ -803,6 +804,10 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
         config->crlf = toggle;
         break;
 
+      case 'V': /* --aws-sigv4 */
+        config->authtype |= CURLAUTH_AWS_SIGV4;
+        GetStr(&config->aws_sigv4_provider, nextarg);
+        break;
       case 'v': /* --stderr */
         if(strcmp(nextarg, "-")) {
           FILE *newfile = fopen(nextarg, FOPEN_WRITETEXT);
index c78f98fa954454587b3f8700ed4b2922145dcaf1..d47e56e71ed39a07a36c9dc8c1305cb40ff2e162 100644 (file)
@@ -817,6 +817,8 @@ static const struct helptxt helptext[] = {
   {"-A, --user-agent <name>",
    "Send User-Agent <name> to server",
    CURLHELP_IMPORTANT | CURLHELP_HTTP},
+  {"    --aws-sigv4 <provider1[:provider2]>",
+   "Use HTTP AWS V4 Signature", CURLHELP_HTTP},
   {"-v, --verbose",
    "Make the operation more talkative",
    CURLHELP_IMPORTANT | CURLHELP_VERBOSE},
index 90522e1e947c25bca097dad7987f6021e13e733e..82a03f829a99ef7d32f5a54e2872d50fbe4c79e6 100644 (file)
@@ -1661,6 +1661,8 @@ static CURLcode single_transfer(struct GlobalConfig *global,
           my_setopt_str(curl, CURLOPT_SSLKEYTYPE, config->key_type);
           my_setopt_str(curl, CURLOPT_PROXY_SSLKEYTYPE,
                         config->proxy_key_type);
+          my_setopt_str(curl, CURLOPT_AWS_SIGV4,
+                        config->aws_sigv4_provider);
 
           if(config->insecure_ok) {
             my_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);