Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Handle URLs correctly in error conditions DAT-9882 #2709

Merged
merged 11 commits into from
Apr 19, 2022
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,12 @@ public class JdbcConnection implements DatabaseConnection {
private static final Pattern PROXY_USER = Pattern.compile(".*(?:thin|oci)\\:(.+)/@.*");

static {
PATTERN_JDBC.add(PatternPair.of(Pattern.compile("(?i)(.*)"), Pattern.compile("(?i);password=[^;]*")));
PATTERN_JDBC.add(PatternPair.of(Pattern.compile("(?i)(.*)"), Pattern.compile("(?i)[?&:;]password=[^;&]*")));
PATTERN_JDBC.add(PatternPair.of(Pattern.compile("(?i)(.*)"), Pattern.compile("(?i)[?&:;]user(.*?)=(.+)[^;&]")));
PATTERN_JDBC.add(PatternPair.of(Pattern.compile("(?i)(.*)"), Pattern.compile("(?i)[?&:;]private_key_file(.*?)=[^;&]*")));
PATTERN_JDBC.add(PatternPair.of(Pattern.compile("(?i)(.*)"), Pattern.compile("(?i)[?&:;]accountkey=[^;&]*")));
PATTERN_JDBC.add(PatternPair.of(Pattern.compile("(?i)jdbc:oracle:thin(.*)"), Pattern.compile("(?i)/(.*)((?=@))")));
PATTERN_JDBC.add(PatternPair.of(Pattern.compile("(?i)jdbc:mysql(.*)"), Pattern.compile("(?i)/(.*)((?=@))")));
}

public JdbcConnection() {
Expand All @@ -41,7 +45,7 @@ public int getPriority() {
@Override
public void open(String url, Driver driverObject, Properties driverProperties) throws DatabaseException {
String driverClassName = driverObject.getClass().getName();
String errorMessage = "Connection could not be created to " + url + " with driver " + driverClassName;
String errorMessage = "Connection could not be created to " + sanitizeUrl(url) + " with driver " + driverClassName;
try {
this.con = driverObject.connect(url, driverProperties);
if (this.con == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,18 @@ class JdbcConnectionTest extends Specification {

where:
input | output
"jdbc:jtds:sqlserver://localhost:1433/proCatalog;user=my_user;password=my_password;" | "jdbc:jtds:sqlserver://localhost:1433/proCatalog;user=my_user;"
"jdbc:jtds:sqlserver://localhost:1433/proCatalog;user=my_user;password=my_password" | "jdbc:jtds:sqlserver://localhost:1433/proCatalog;user=my_user"
"jdbc:jtds:sqlserver://localhost:1433/proCatalog;password=my_password;user=my_user;" | "jdbc:jtds:sqlserver://localhost:1433/proCatalog;user=my_user;"
"jdbc:jtds:sqlserver://localhost:1433/proCatalog;user=my_user;" | "jdbc:jtds:sqlserver://localhost:1433/proCatalog;user=my_user;"
"jdbc:postgresql://localhost:6432/intuserdb?user=proschema&password=proschema" | "jdbc:postgresql://localhost:6432/intuserdb"
"jdbc:postgresql://localhost:6432/intuserdb?password=proschema&user=proschema" | "jdbc:postgresql://localhost:6432/intuserdb"
"jdbc:mysql://dude:secret@localhost:3306/lbcat" | "jdbc:mysql:@localhost:3306/lbcat"
"jdbc:mysql://localhost:3306/lbcat?user=dude&password=secret" | "jdbc:mysql://localhost:3306/lbcat"
"jdbc:snowflake://ba89345.us-east-2.aws.snowflakecomputing.com?warehouse=COMPUTE_WH&db=lbcat&schema=public&user=dude&password=Password123" | "jdbc:snowflake://ba89345.us-east-2.aws.snowflakecomputing.com?warehouse=COMPUTE_WH&db=lbcat&schema=public"
"jdbc:snowflake://ba89345.us-east-2.aws.snowflakecomputing.com?warehouse=COMPUTE_WH&db=lbcat&schema=public&password=Password123&user=dude" | "jdbc:snowflake://ba89345.us-east-2.aws.snowflakecomputing.com?warehouse=COMPUTE_WH&db=lbcat&schema=public"
"jdbc:snowflake://ba89345.us-east-2.aws.snowflakecomputing.com?warehouse=COMPUTE_WH&db=lbcat&schema=public&user=lbcat&private_key_file=/home/dude/rsa_key.p8&private_key_file_pwd=dudeabides" | "jdbc:snowflake://ba89345.us-east-2.aws.snowflakecomputing.com?warehouse=COMPUTE_WH&db=lbcat&schema=public"
"jdbc:cosmosdb:AccountEndpoint=myAccountEndpoint;AccountKey=myAccountKey;" | "jdbc:cosmosdb:AccountEndpoint=myAccountEndpoint;"
"jdbc:jtds:sqlserver://localhost:1433/proCatalog;user=my_user;password=my_password;" | "jdbc:jtds:sqlserver://localhost:1433/proCatalog;"
"jdbc:jtds:sqlserver://localhost:1433/proCatalog;user=my_user;password=my_password" | "jdbc:jtds:sqlserver://localhost:1433/proCatalog"
"jdbc:jtds:sqlserver://localhost:1433/proCatalog;password=my_password;user=my_user;" | "jdbc:jtds:sqlserver://localhost:1433/proCatalog;"
"jdbc:jtds:sqlserver://localhost:1433/proCatalog;user=my_user;" | "jdbc:jtds:sqlserver://localhost:1433/proCatalog;"
"jdbc:oracle:thin:user/password@host:1521/db" | "jdbc:oracle:thin:user@host:1521/db"
"jdbc:oracle:thin:@host:1521/db" | "jdbc:oracle:thin:@host:1521/db"
null | null
Expand Down