Skip to content

Commit b12a688

Browse files
Azure Vault Config Provider: reject empty secret name (#194)
* Improve empty secret name validation in Azure Vault Config Provider * Add unit test * Address review comment
1 parent 7c76828 commit b12a688

File tree

2 files changed

+32
-3
lines changed

2 files changed

+32
-3
lines changed

ojdbc-provider-azure/src/main/java/oracle/jdbc/provider/azure/configuration/AzureVaultURLParser.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,15 @@ static void parseVaultSecretUri(
7070

7171
String path = urlBuilder.getPath();
7272

73-
if (!path.contains("/secrets"))
73+
if (!path.contains("/secrets/"))
7474
throw new IllegalArgumentException("The Vault Secret URI should " +
75-
"contain \"/secrets\" following by the name of the Secret: " +
75+
"contain \"/secrets\" followed by the name of the Secret: " +
7676
vaultSecretUri);
7777

78-
String secretName = path.replace("/secrets", "");
78+
String secretName = path.replace("/secrets/", "");
79+
if (secretName.trim().isEmpty()){
80+
throw new IllegalArgumentException("Missing secret name in Vault URI: " + vaultSecretUri);
81+
}
7982
builder.add("value", KeyVaultSecretFactory.SECRET_NAME, secretName);
8083
}
8184
}

ojdbc-provider-azure/src/test/java/oracle/jdbc/provider/azure/configuration/AzureVaultSecretProviderTest.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,32 @@ public void test() {
7575
)));
7676
}
7777

78+
/**
79+
* Verifies that calling getSecret(...) with an empty secret name
80+
* is rejected by throwing an IllegalArgumentException whose message
81+
* indicates a missing secret name.
82+
*/
83+
@Test
84+
public void testEmptySecretNameThrows() {
85+
IllegalArgumentException ex = Assertions.assertThrows(
86+
IllegalArgumentException.class,
87+
() -> PROVIDER.getSecret(
88+
constructSecretProperties(
89+
TestProperties.getOrAbort(AzureTestProperty.AZURE_KEY_VAULT_URL),
90+
"", // <— empty secret path
91+
TestProperties.getOrAbort(AzureTestProperty.AZURE_CLIENT_ID),
92+
TestProperties.getOrAbort(AzureTestProperty.AZURE_CLIENT_SECRET),
93+
TestProperties.getOrAbort(AzureTestProperty.AZURE_TENANT_ID)
94+
)
95+
),
96+
"Expected getSecret(...) to throw when secret name is empty"
97+
);
98+
Assertions.assertTrue(
99+
ex.getMessage().toLowerCase().contains("missing secret name"),
100+
"Exception message should mention 'secret name', but was: " + ex.getMessage()
101+
);
102+
}
103+
78104
private Map<String,String> constructSecretProperties(
79105
String vaultUrl, String secretName, String clientId, String clientSecret, String tenantId) {
80106
Map<String,String> secretProperties = new HashMap<>();

0 commit comments

Comments
 (0)