Skip to content

Commit bedd272

Browse files
authored
Merge pull request #7829 from dannyzaken/danny-fixes
2 parents 1930684 + ccf16e3 commit bedd272

13 files changed

+133
-4
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
DELETE /first.bucket/delete=me HTTP/1.1
2+
Host: localhost:8080
3+
Accept: */*
4+
amz-sdk-invocation-id: EF88870A-D2F2-4869-8C7E-E8CBE7AB395E
5+
amz-sdk-request: attempt=1
6+
authorization: AWS4-HMAC-SHA256 Credential=QlBdp923Pnpu2qxn9Qpj/20240220/us-east-1/s3/aws4_request, SignedHeaders=amz-sdk-invocation-id;amz-sdk-request;content-type;host;x-amz-api-version;x-amz-content-sha256;x-amz-date, Signature=13280d4f99f7a63ef393357a2326b22578c1bbac7de8ff6f7df0cfdc63d5905b
7+
content-type: application/xml
8+
user-agent: aws-sdk-cpp/1.11.265 ua/2.0 md/aws-crt#0.26.2 os/Darwin/23.1.0 md/arch#arm64 lang/c++#C++11 md/Clang#15.0.0 cfg/retry-mode#default api/S3
9+
x-amz-api-version: 2006-03-01
10+
x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
11+
x-amz-date: 20240220T171138Z
12+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
DELETE /first.bucket/delete%253Dme HTTP/1.1
2+
Host: localhost:8080
3+
Accept: */*
4+
amz-sdk-invocation-id: EE0251F1-826D-4EBB-B159-378C14854857
5+
amz-sdk-request: attempt=1
6+
authorization: AWS4-HMAC-SHA256 Credential=QlBdp923Pnpu2qxn9Qpj/20240220/us-east-1/s3/aws4_request, SignedHeaders=amz-sdk-invocation-id;amz-sdk-request;content-type;host;x-amz-api-version;x-amz-content-sha256;x-amz-date, Signature=fc002fbd73313210dadeac0bf9f80206a48da9246582169fe60392c0c31e8fe7
7+
content-type: application/xml
8+
user-agent: aws-sdk-cpp/1.11.265 ua/2.0 md/aws-crt#0.26.2 os/Darwin/23.1.0 md/arch#arm64 lang/c++#C++11 md/Clang#15.0.0 cfg/retry-mode#default api/S3
9+
x-amz-api-version: 2006-03-01
10+
x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
11+
x-amz-date: 20240220T172701Z
12+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
DELETE /first.bucket/delete$me HTTP/1.1
2+
Host: localhost:8080
3+
Accept: */*
4+
amz-sdk-invocation-id: 831BAFD2-3E57-40CB-A9C9-876C43B2E7C0
5+
amz-sdk-request: attempt=1
6+
authorization: AWS4-HMAC-SHA256 Credential=QlBdp923Pnpu2qxn9Qpj/20240220/us-east-1/s3/aws4_request, SignedHeaders=amz-sdk-invocation-id;amz-sdk-request;content-type;host;x-amz-api-version;x-amz-content-sha256;x-amz-date, Signature=8fd38603d2e5c6b61ec1c1ab8aa2fc7c1aaebcd5e1391dff92da466210200421
7+
content-type: application/xml
8+
user-agent: aws-sdk-cpp/1.11.265 ua/2.0 md/aws-crt#0.26.2 os/Darwin/23.1.0 md/arch#arm64 lang/c++#C++11 md/Clang#15.0.0 cfg/retry-mode#default api/S3
9+
x-amz-api-version: 2006-03-01
10+
x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
11+
x-amz-date: 20240220T172923Z
12+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
DELETE /first.bucket/delete&me HTTP/1.1
2+
Host: localhost:8080
3+
Accept: */*
4+
amz-sdk-invocation-id: BFC38AFC-66CF-4F5A-8EAE-192296673B6E
5+
amz-sdk-request: attempt=1
6+
authorization: AWS4-HMAC-SHA256 Credential=QlBdp923Pnpu2qxn9Qpj/20240220/us-east-1/s3/aws4_request, SignedHeaders=amz-sdk-invocation-id;amz-sdk-request;content-type;host;x-amz-api-version;x-amz-content-sha256;x-amz-date, Signature=1af41893baf86eaf8f8bd6763c1b2a99057ebdcfd7c4e847e12d77a38f5ff01b
7+
content-type: application/xml
8+
user-agent: aws-sdk-cpp/1.11.265 ua/2.0 md/aws-crt#0.26.2 os/Darwin/23.1.0 md/arch#arm64 lang/c++#C++11 md/Clang#15.0.0 cfg/retry-mode#default api/S3
9+
x-amz-api-version: 2006-03-01
10+
x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
11+
x-amz-date: 20240220T173217Z
12+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
DELETE /first.bucket/delete,me HTTP/1.1
2+
Host: localhost:8080
3+
Accept: */*
4+
amz-sdk-invocation-id: 3AD05F0E-D931-44EA-A656-DE518B0F85A9
5+
amz-sdk-request: attempt=1
6+
authorization: AWS4-HMAC-SHA256 Credential=QlBdp923Pnpu2qxn9Qpj/20240220/us-east-1/s3/aws4_request, SignedHeaders=amz-sdk-invocation-id;amz-sdk-request;content-type;host;x-amz-api-version;x-amz-content-sha256;x-amz-date, Signature=d3a39b0d940a512607d800e36017c9092a99b72b83e12553f770a21d0d7f9445
7+
content-type: application/xml
8+
user-agent: aws-sdk-cpp/1.11.265 ua/2.0 md/aws-crt#0.26.2 os/Darwin/23.1.0 md/arch#arm64 lang/c++#C++11 md/Clang#15.0.0 cfg/retry-mode#default api/S3
9+
x-amz-api-version: 2006-03-01
10+
x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
11+
x-amz-date: 20240220T173648Z
12+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
DELETE /first.bucket/delete:me HTTP/1.1
2+
Host: localhost:8080
3+
Accept: */*
4+
amz-sdk-invocation-id: ED8C1574-32D6-4EF1-9CB8-33D6783CD626
5+
amz-sdk-request: attempt=1
6+
authorization: AWS4-HMAC-SHA256 Credential=QlBdp923Pnpu2qxn9Qpj/20240220/us-east-1/s3/aws4_request, SignedHeaders=amz-sdk-invocation-id;amz-sdk-request;content-type;host;x-amz-api-version;x-amz-content-sha256;x-amz-date, Signature=ef4f57b1e3a205d0d0642dc917e84509ae14940032a5864d2db4ec5da5487166
7+
content-type: application/xml
8+
user-agent: aws-sdk-cpp/1.11.265 ua/2.0 md/aws-crt#0.26.2 os/Darwin/23.1.0 md/arch#arm64 lang/c++#C++11 md/Clang#15.0.0 cfg/retry-mode#default api/S3
9+
x-amz-api-version: 2006-03-01
10+
x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
11+
x-amz-date: 20240220T173742Z
12+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
DELETE /first.bucket/delete@me HTTP/1.1
2+
Host: localhost:8080
3+
Accept: */*
4+
amz-sdk-invocation-id: 38361583-8810-4C35-8DF0-B8EFEDA78780
5+
amz-sdk-request: attempt=1
6+
authorization: AWS4-HMAC-SHA256 Credential=QlBdp923Pnpu2qxn9Qpj/20240220/us-east-1/s3/aws4_request, SignedHeaders=amz-sdk-invocation-id;amz-sdk-request;content-type;host;x-amz-api-version;x-amz-content-sha256;x-amz-date, Signature=7139b924dabf8f09c4d913d98c01d3620767cb3c3e07bb80977e780f564e79b6
7+
content-type: application/xml
8+
user-agent: aws-sdk-cpp/1.11.265 ua/2.0 md/aws-crt#0.26.2 os/Darwin/23.1.0 md/arch#arm64 lang/c++#C++11 md/Clang#15.0.0 cfg/retry-mode#default api/S3
9+
x-amz-api-version: 2006-03-01
10+
x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
11+
x-amz-date: 20240220T173837Z
12+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
DELETE /first.bucket/delete%3Dme HTTP/1.1
2+
User-Agent: aws-sdk-nodejs/2.1550.0 darwin/v20.9.0 promise
3+
Content-Type: application/octet-stream
4+
X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
5+
Content-Length: 0
6+
Host: 127.0.0.1:8080
7+
X-Amz-Date: 20240220T174429Z
8+
Authorization: AWS4-HMAC-SHA256 Credential=QlBdp923Pnpu2qxn9Qpj/20240220/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=e8320f51d20857850f9194ed3878447b3c3cdb9f3924c4a7564751bee37646c8
9+
Connection: close
10+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
DELETE /first.bucket/delete%40me HTTP/1.1
2+
User-Agent: aws-sdk-nodejs/2.1550.0 darwin/v20.9.0 promise
3+
Content-Type: application/octet-stream
4+
X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
5+
Content-Length: 0
6+
Host: 127.0.0.1:8080
7+
X-Amz-Date: 20240220T174541Z
8+
Authorization: AWS4-HMAC-SHA256 Credential=QlBdp923Pnpu2qxn9Qpj/20240220/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=83c3f9484aeeff7fb1ff0e6cd7634471a6128bd4c1b0fa9433f8c3b7bd7d4f67
9+
Connection: close
10+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
DELETE /first.bucket/delete%24me HTTP/1.1
2+
User-Agent: aws-sdk-nodejs/2.1550.0 darwin/v20.9.0 promise
3+
Content-Type: application/octet-stream
4+
X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
5+
Content-Length: 0
6+
Host: 127.0.0.1:8080
7+
X-Amz-Date: 20240220T174607Z
8+
Authorization: AWS4-HMAC-SHA256 Credential=QlBdp923Pnpu2qxn9Qpj/20240220/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=c4963b728534483bebb29ba487511a93a39695d1f5786aca32482753631fc281
9+
Connection: close
10+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
DELETE /first.bucket/delete%253Dme HTTP/1.1
2+
User-Agent: aws-sdk-nodejs/2.1550.0 darwin/v20.9.0 promise
3+
Content-Type: application/octet-stream
4+
X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
5+
Content-Length: 0
6+
Host: 127.0.0.1:8080
7+
X-Amz-Date: 20240220T174649Z
8+
Authorization: AWS4-HMAC-SHA256 Credential=QlBdp923Pnpu2qxn9Qpj/20240220/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=928ca61d630f826daf8c8f59ade2af4f7bd7b0876204c2673650970c25f435ef
9+
Connection: close
10+

src/test/unit_tests/test_signature_utils.js

+5-3
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,17 @@ mocha.describe('signature_utils', function() {
2424
const SECRETS = {
2525
'AKIDEXAMPLE': 'wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY',
2626
'123': 'abc',
27+
'QlBdp923Pnpu2qxn9Qpj': 'YLIkByxr/V5LiBJIpZS+TpQvuFSYqDAD3bG5ePaY'
2728
};
2829

2930
const http_server = http.createServer(accept_signed_request);
3031

3132
mocha.before(function() {
3233
return new Promise((resolve, reject) =>
3334
http_server
34-
.once('listening', resolve)
35-
.once('error', reject)
36-
.listen());
35+
.once('listening', resolve)
36+
.once('error', reject)
37+
.listen());
3738
});
3839

3940
mocha.after(function() {
@@ -46,6 +47,7 @@ mocha.describe('signature_utils', function() {
4647
add_tests_from(path.join(SIG_TEST_SUITE, 'awssdknodejs'), '.sreq');
4748
add_tests_from(path.join(SIG_TEST_SUITE, 'awssdkjava'), '.sreq');
4849
add_tests_from(path.join(SIG_TEST_SUITE, 'awssdkruby2'), '.sreq');
50+
add_tests_from(path.join(SIG_TEST_SUITE, 'awssdkcpp'), '.sreq');
4951
add_tests_from(path.join(SIG_TEST_SUITE, 'cyberduck'), '.sreq');
5052
add_tests_from(path.join(SIG_TEST_SUITE, 'postman'), '.sreq');
5153
add_tests_from(path.join(SIG_TEST_SUITE, 'presigned'), '.sreq');

src/util/signature_utils.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,11 @@ const HEADERS_MAP_FOR_AWS_SDK = {
202202
function _aws_request(req, region, service) {
203203
const v2_signature = _.isUndefined(region) && _.isUndefined(service);
204204
const u = url.parse(req.originalUrl.replace(/%2F/g, '/'), true);
205+
// for S3 we decode and escape the URI components to handle cpp sdk behaior, which for a few charecters (e.g. =,?$@)
206+
// it does not escape it in the request but escapes it for the signature calculations.
207+
// see https://github.com/noobaa/noobaa-core/issues/7784
205208
const pathname = service === 's3' ?
206-
u.pathname :
209+
u.pathname.split('/').map(c => AWS.util.uriEscape(decodeURIComponent(c))).join('/') :
207210
path.normalize(decodeURI(u.pathname));
208211
const query = _.omit(
209212
req.query,

0 commit comments

Comments
 (0)