Recent changes (master)
Jens Axboe <[email protected]> Thu, 10 Jul 2025 06:00:01 -0600 (MDT)
| Newsgroups | org.kernel.vger.fio |
|---|---|
| Message-ID | <[email protected]> |
The following changes since commit 010b8ba409a18ec1edbf3b776fb7652f26a99b81:
Merge branch 'http-filename-fix' of https://github.com/sfc-gh-rnarubin/fio (2025-07-08 11:54:05 -0600)
are available in the Git repository at:
git://git.kernel.dk/fio.git master
for you to fetch changes up to eb0312ccc1058334e0a115b6534056bcdba7c533:
Merge branch 'security-token' of https://github.com/sfc-gh-rnarubin/fio (2025-07-09 16:52:06 -0600)
----------------------------------------------------------------
Jens Axboe (1):
Merge branch 'security-token' of https://github.com/sfc-gh-rnarubin/fio
Renar Narubin (1):
engines/http: Add S3 security token support
HOWTO.rst | 4 ++++
engines/http.c | 45 ++++++++++++++++++++++++++++++++++++++-------
fio.1 | 3 +++
3 files changed, 45 insertions(+), 7 deletions(-)
---
Diff of recent changes:
diff --git a/HOWTO.rst b/HOWTO.rst
index f082158a..e5ddc89d 100644
--- a/HOWTO.rst
+++ b/HOWTO.rst
@@ -3013,6 +3013,10 @@ with the caveat that when used on the command line, they must come after the
The S3 key/access id.
+.. option:: http_s3_security_token=str : [http]
+
+ The S3 security token.
+
.. option:: http_s3_sse_customer_key=str : [http]
The encryption customer key in SSE server side.
diff --git a/engines/http.c b/engines/http.c
index 217aa575..b893ec7a 100644
--- a/engines/http.c
+++ b/engines/http.c
@@ -56,6 +56,7 @@ struct http_options {
char *pass;
char *s3_key;
char *s3_keyid;
+ char *s3_security_token;
char *s3_region;
char *s3_sse_customer_key;
char *s3_sse_customer_algorithm;
@@ -144,6 +145,16 @@ static struct fio_option options[] = {
.category = FIO_OPT_C_ENGINE,
.group = FIO_OPT_G_HTTP,
},
+ {
+ .name = "http_s3_security_token",
+ .lname = "S3 security token",
+ .type = FIO_OPT_STR_STORE,
+ .help = "S3 security token",
+ .off1 = offsetof(struct http_options, s3_security_token),
+ .def = "",
+ .category = FIO_OPT_C_ENGINE,
+ .group = FIO_OPT_G_HTTP,
+ },
{
.name = "http_swift_auth_token",
.lname = "Swift auth token",
@@ -419,7 +430,7 @@ static void _add_aws_auth_header(CURL *curl, struct curl_slist *slist, struct ht
char dkey[128];
char creq[4096];
char sts[512];
- char s[512];
+ char s[2048];
char *uri_encoded = NULL;
char *dsha = NULL;
char *csha = NULL;
@@ -430,6 +441,8 @@ static void _add_aws_auth_header(CURL *curl, struct curl_slist *slist, struct ht
unsigned char sse_key[33] = {0};
char *sse_key_base64 = NULL;
char *sse_key_md5_base64 = NULL;
+ char security_token_header[2048] = {0};
+ char security_token_list_item[24] = {0};
time_t t = time(NULL);
struct tm *gtm = gmtime(&t);
@@ -438,6 +451,12 @@ static void _add_aws_auth_header(CURL *curl, struct curl_slist *slist, struct ht
strftime (date_iso, sizeof(date_iso), "%Y%m%dT%H%M%SZ", gtm);
uri_encoded = _aws_uriencode(uri);
+ if (o->s3_security_token != NULL) {
+ snprintf(security_token_header, sizeof(security_token_header),
+ "x-amz-security-token:%s\n", o->s3_security_token);
+ sprintf(security_token_list_item, "x-amz-security-token;");
+ }
+
if (o->s3_sse_customer_key != NULL)
strncpy((char*)sse_key, o->s3_sse_customer_key, sizeof(sse_key) - 1);
@@ -467,18 +486,21 @@ static void _add_aws_auth_header(CURL *curl, struct curl_slist *slist, struct ht
"x-amz-server-side-encryption-customer-algorithm:%s\n"
"x-amz-server-side-encryption-customer-key:%s\n"
"x-amz-server-side-encryption-customer-key-md5:%s\n"
+ "%s" /* security token if provided */
"x-amz-storage-class:%s\n"
"\n"
"host;x-amz-content-sha256;x-amz-date;"
"x-amz-server-side-encryption-customer-algorithm;"
"x-amz-server-side-encryption-customer-key;"
"x-amz-server-side-encryption-customer-key-md5;"
+ "%s"
"x-amz-storage-class\n"
"%s"
, method
, uri_encoded, o->host, dsha, date_iso
, o->s3_sse_customer_algorithm, sse_key_base64
- , sse_key_md5_base64, o->s3_storage_class, dsha);
+ , sse_key_md5_base64, security_token_header
+ , o->s3_storage_class, security_token_list_item, dsha);
} else {
snprintf(creq, sizeof(creq),
"%s\n"
@@ -487,12 +509,15 @@ static void _add_aws_auth_header(CURL *curl, struct curl_slist *slist, struct ht
"host:%s\n"
"x-amz-content-sha256:%s\n"
"x-amz-date:%s\n"
+ "%s" /* security token if provided */
"x-amz-storage-class:%s\n"
"\n"
- "host;x-amz-content-sha256;x-amz-date;x-amz-storage-class\n"
+ "host;x-amz-content-sha256;x-amz-date;%sx-amz-storage-class\n"
"%s"
, method
- , uri_encoded, o->host, dsha, date_iso, o->s3_storage_class, dsha);
+ , uri_encoded, o->host, dsha, date_iso
+ , security_token_header, o->s3_storage_class
+ , security_token_list_item, dsha);
}
csha = _gen_hex_sha256(creq, strlen(creq));
@@ -526,6 +551,11 @@ static void _add_aws_auth_header(CURL *curl, struct curl_slist *slist, struct ht
slist = curl_slist_append(slist, s);
}
+ if (o->s3_security_token != NULL) {
+ snprintf(s, sizeof(s), "x-amz-security-token: %s", o->s3_security_token);
+ slist = curl_slist_append(slist, s);
+ }
+
snprintf(s, sizeof(s), "x-amz-storage-class: %s", o->s3_storage_class);
slist = curl_slist_append(slist, s);
@@ -535,13 +565,14 @@ static void _add_aws_auth_header(CURL *curl, struct curl_slist *slist, struct ht
"x-amz-date;x-amz-server-side-encryption-customer-algorithm;"
"x-amz-server-side-encryption-customer-key;"
"x-amz-server-side-encryption-customer-key-md5;"
+ "%s"
"x-amz-storage-class,"
"Signature=%s",
- o->s3_keyid, date_short, o->s3_region, signature);
+ o->s3_keyid, date_short, o->s3_region, security_token_list_item, signature);
} else {
snprintf(s, sizeof(s), "Authorization: AWS4-HMAC-SHA256 Credential=%s/%s/%s/s3/aws4_request,"
- "SignedHeaders=host;x-amz-content-sha256;x-amz-date;x-amz-storage-class,Signature=%s",
- o->s3_keyid, date_short, o->s3_region, signature);
+ "SignedHeaders=host;x-amz-content-sha256;x-amz-date;%sx-amz-storage-class,Signature=%s",
+ o->s3_keyid, date_short, o->s3_region, security_token_list_item, signature);
}
slist = curl_slist_append(slist, s);
diff --git a/fio.1 b/fio.1
index 0071c364..cba1273b 100644
--- a/fio.1
+++ b/fio.1
@@ -2605,6 +2605,9 @@ The S3 secret key.
.BI (http)http_s3_keyid \fR=\fPstr
The S3 key/access id.
.TP
+.BI (http)http_s3_security_token \fR=\fPstr
+The S3 security token.
+.TP
.BI (http)http_s3_sse_customer_key \fR=\fPstr
The encryption customer key in SSE server side.
.TP