Skip to content

Commit 6dd73dd

Browse files
authored
fix(middleware-sdk-s3-control): ignore IP address in host prefix dedupe (#4944)
1 parent 86691eb commit 6dd73dd

File tree

5 files changed

+39
-3
lines changed

5 files changed

+39
-3
lines changed

packages/middleware-sdk-s3-control/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
"@aws-sdk/middleware-bucket-endpoint": "*",
2525
"@aws-sdk/types": "*",
2626
"@aws-sdk/util-arn-parser": "*",
27+
"@aws-sdk/util-endpoints": "*",
2728
"@smithy/protocol-http": "^1.1.0",
2829
"@smithy/types": "^1.1.0",
2930
"tslib": "^2.5.0"

packages/middleware-sdk-s3-control/src/host-prefix-deduplication/deduplicateHostPrefix.spec.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,11 @@ describe(deduplicateHostPrefix.name, () => {
1414

1515
expect(deduplicateHostPrefix("12345.abcdefgh.12345.12345.host.com")).toEqual("12345.abcdefgh.12345.12345.host.com");
1616
});
17+
18+
it("should not act on IP hostnames", () => {
19+
expect(deduplicateHostPrefix("1.2.3.4")).toEqual("1.2.3.4");
20+
expect(deduplicateHostPrefix("1.2.3.4:80")).toEqual("1.2.3.4:80");
21+
expect(deduplicateHostPrefix("10.10.10.10")).toEqual("10.10.10.10");
22+
expect(deduplicateHostPrefix("10.10.10.10:80")).toEqual("10.10.10.10:80");
23+
});
1724
});
Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
1+
import { isIpAddress } from "@aws-sdk/util-endpoints";
2+
13
/**
24
* @example
35
* 12345.12345.____.com should become 12345.____.com.
46
*/
57
export const deduplicateHostPrefix = (hostname: string): string => {
6-
const [prefix1, prefix2, ...rest] = hostname.split(".");
7-
if (prefix1 === prefix2) {
8-
return [prefix1, ...rest].join(".");
8+
const [p1, p2, p3, p4, ...rest] = hostname.split(".");
9+
if (isIpAddress(`${p1}.${p2}.${p3}.${parseInt(p4, 10)}`)) {
10+
return hostname;
11+
}
12+
if (p1 === p2) {
13+
return [p2, p3, p4, ...rest].join(".");
914
}
1015
return hostname;
1116
};

packages/middleware-sdk-s3-control/src/middleware-sdk-s3-control.integ.spec.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,28 @@ describe("middleware-sdk-s3-control", () => {
2323
expect.hasAssertions();
2424
});
2525

26+
it("doesn't dedupe host prefixes for IP addresses", async () => {
27+
const client = new S3Control({
28+
region: "snow",
29+
endpoint: "https://10.10.10.10:8000/path?query=query",
30+
useFipsEndpoint: false,
31+
useDualstackEndpoint: false,
32+
disableHostPrefix: true,
33+
});
34+
35+
requireRequestsFrom(client).toMatch({
36+
hostname: /^10.10.10.10$/,
37+
port: /^8000$/,
38+
});
39+
40+
await client.listAccessPoints({
41+
AccountId: "123456789012",
42+
Bucket: "my-bucket",
43+
});
44+
45+
expect.hasAssertions();
46+
});
47+
2648
it("parses outpost ARNs", async () => {
2749
const client = new S3Control({
2850
region: "us-west-2",
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
export * from "./lib/aws/partition";
2+
export * from "./lib/isIpAddress";
23
export * from "./resolveEndpoint";
34
export * from "./types";

0 commit comments

Comments
 (0)