diff -ur /tmp/mysql-connector-java-5.0.4/src/com/mysql/jdbc/CharsetMapping.java /tmp/mysql-connector-java-5.0.4+/src/com/mysql/jdbc/CharsetMapping.java --- /tmp/mysql-connector-java-5.0.4/src/com/mysql/jdbc/CharsetMapping.java 2006-10-19 15:17:29.000000000 -0700 +++ /tmp/mysql-connector-java-5.0.4+/src/com/mysql/jdbc/CharsetMapping.java 2007-03-04 14:02:11.000000000 -0800 @@ -65,7 +65,7 @@ private static final Map MYSQL_TO_JAVA_CHARSET_MAP; static { - + System.out.println("CharsetMapping Static"); CHARSET_CONFIG.setProperty("javaToMysqlMappings", // // Note: This used to be stored in Charsets.properties, @@ -515,12 +515,11 @@ final static String getJavaEncodingForMysqlEncoding(String mysqlEncoding, Connection conn) throws SQLException { - - if (conn != null && conn.versionMeetsMinimum(4, 1, 0) && - "latin1".equalsIgnoreCase(mysqlEncoding)) { - return "Cp1252"; - } - + if (conn != null && conn.versionMeetsMinimum(4, 1, 0) && + "latin1".equalsIgnoreCase(mysqlEncoding)) { + return "Cp1252"; + } + return (String) MYSQL_TO_JAVA_CHARSET_MAP.get(mysqlEncoding); } diff -ur /tmp/mysql-connector-java-5.0.4/src/com/mysql/jdbc/Connection.java /tmp/mysql-connector-java-5.0.4+/src/com/mysql/jdbc/Connection.java --- /tmp/mysql-connector-java-5.0.4/src/com/mysql/jdbc/Connection.java 2006-10-19 15:17:29.000000000 -0700 +++ /tmp/mysql-connector-java-5.0.4+/src/com/mysql/jdbc/Connection.java 2007-03-04 14:18:34.000000000 -0800 @@ -85,6 +85,10 @@ */ public class Connection extends ConnectionProperties implements java.sql.Connection { + // debugging + static { + System.out.println("Connection Static"); + } /** * Used as a key for caching callable statements which (may) depend on * current catalog...In 5.0.x, they don't (currently), but stored procedure diff -ur /tmp/mysql-connector-java-5.0.4/src/com/mysql/jdbc/ConnectionProperties.java /tmp/mysql-connector-java-5.0.4+/src/com/mysql/jdbc/ConnectionProperties.java --- /tmp/mysql-connector-java-5.0.4/src/com/mysql/jdbc/ConnectionProperties.java 2006-10-19 15:17:29.000000000 -0700 +++ /tmp/mysql-connector-java-5.0.4+/src/com/mysql/jdbc/ConnectionProperties.java 2006-10-25 14:52:34.000000000 -0700 @@ -1128,6 +1128,11 @@ "Require SSL connection if useSSL=true? (defaults to 'false').", "3.1.0", SECURITY_CATEGORY, 3); + private BooleanConnectionProperty requireSSLcert = new BooleanConnectionProperty( + "requireSSLcert", true, + "Require SSL certificate if using SSL? (defaults to 'true').", + "3.1.0", SECURITY_CATEGORY, 3); + private StringConnectionProperty resourceId = new StringConnectionProperty( "resourceId", null, "A globally unique name that identifies the resource that this datasource or connection is " + @@ -2161,6 +2166,9 @@ public boolean getRequireSSL() { return this.requireSSL.getValueAsBoolean(); } + public boolean getRequireSSLcert() { + return this.requireSSLcert.getValueAsBoolean(); + } protected boolean getRetainStatementAfterResultSetClose() { return this.retainStatementAfterResultSetClose.getValueAsBoolean(); @@ -3224,6 +3232,9 @@ public void setRequireSSL(boolean property) { this.requireSSL.setValue(property); } + public void setRequireSSLcert(boolean property) { + this.requireSSLcert.setValue(property); + } public void setRetainStatementAfterResultSetClose(boolean flag) { this.retainStatementAfterResultSetClose.setValue(flag); diff -ur /tmp/mysql-connector-java-5.0.4/src/com/mysql/jdbc/ExportControlled.java /tmp/mysql-connector-java-5.0.4+/src/com/mysql/jdbc/ExportControlled.java --- /tmp/mysql-connector-java-5.0.4/src/com/mysql/jdbc/ExportControlled.java 2006-10-19 15:17:29.000000000 -0700 +++ /tmp/mysql-connector-java-5.0.4+/src/com/mysql/jdbc/ExportControlled.java 2007-01-09 22:21:34.000000000 -0800 @@ -58,9 +58,14 @@ */ protected static void transformSocketToSSLSocket(MysqlIO mysqlIO) throws CommunicationsException { - javax.net.ssl.SSLSocketFactory sslFact = (javax.net.ssl.SSLSocketFactory) javax.net.ssl.SSLSocketFactory - .getDefault(); - + javax.net.ssl.SSLSocketFactory sslFact = + (mysqlIO.connection.getRequireSSLcert()) + ? + (javax.net.ssl.SSLSocketFactory) + javax.net.ssl.SSLSocketFactory.getDefault() + : + (TrustingSSLSocketFactory) + TrustingSSLSocketFactory.getDefault2(); // long story try { mysqlIO.mysqlConnection = sslFact.createSocket( mysqlIO.mysqlConnection, mysqlIO.host, mysqlIO.port, true); @@ -91,4 +96,4 @@ private ExportControlled() { /* prevent instantiation */ } -} \ No newline at end of file +} diff -ur /tmp/mysql-connector-java-5.0.4/src/com/mysql/jdbc/MysqlIO.java /tmp/mysql-connector-java-5.0.4+/src/com/mysql/jdbc/MysqlIO.java --- /tmp/mysql-connector-java-5.0.4/src/com/mysql/jdbc/MysqlIO.java 2006-10-19 15:17:29.000000000 -0700 +++ /tmp/mysql-connector-java-5.0.4+/src/com/mysql/jdbc/MysqlIO.java 2006-12-26 02:18:43.000000000 -0800 @@ -1188,7 +1188,8 @@ // Passwords can be 16 chars long packet = new Buffer(packLength); - if ((this.clientParam & CLIENT_RESERVED) != 0) { + if ((this.clientParam & (CLIENT_PROTOCOL_41 | CLIENT_RESERVED)) + != 0) { if (versionMeetsMinimum(4, 1, 1)) { packet.writeLong(this.clientParam); packet.writeLong(this.maxThreeBytes); @@ -3819,7 +3820,8 @@ Buffer packet = new Buffer(packLength); - if ((this.clientParam & CLIENT_RESERVED) != 0) { + if ((this.clientParam & CLIENT_PROTOCOL_41 // CLIENT_RESERVED + ) != 0) { packet.writeLong(this.clientParam); } else { packet.writeInt((int) this.clientParam); @@ -3838,7 +3840,8 @@ secureAuth411(null, packLength, user, password, database, true); } } else { - if ((this.clientParam & CLIENT_RESERVED) != 0) { + if ((this.clientParam & CLIENT_PROTOCOL_41 // CLIENT_RESERVED + ) != 0) { packet.writeLong(this.clientParam); packet.writeLong(this.maxThreeBytes); } else { diff -ur /tmp/mysql-connector-java-5.0.4/src/com/mysql/jdbc/NonRegisteringDriver.java /tmp/mysql-connector-java-5.0.4+/src/com/mysql/jdbc/NonRegisteringDriver.java --- /tmp/mysql-connector-java-5.0.4/src/com/mysql/jdbc/NonRegisteringDriver.java 2006-10-19 15:17:28.000000000 -0700 +++ /tmp/mysql-connector-java-5.0.4+/src/com/mysql/jdbc/NonRegisteringDriver.java 2007-03-04 17:06:45.000000000 -0800 @@ -263,6 +263,7 @@ } try { + System.out.println("NonRegisteringDriver connect doing new com.mysql.jdbc.Connection"); // debug Connection newConn = new com.mysql.jdbc.Connection(host(props), port(props), props, database(props), url); diff -ur /tmp/mysql-connector-java-5.0.4/src/com/mysql/jdbc/TrustingSSLSocketFactory.java /tmp/mysql-connector-java-5.0.4+/src/com/mysql/jdbc/TrustingSSLSocketFactory.java --- /tmp/mysql-connector-java-5.0.4/src/com/mysql/jdbc/TrustingSSLSocketFactory.java 2006-10-26 11:04:34.000000000 -0700 +++ /tmp/mysql-connector-java-5.0.4+/src/com/mysql/jdbc/TrustingSSLSocketFactory.java 2007-01-09 22:19:58.000000000 -0800 @@ -0,0 +1,75 @@ +package com.mysql.jdbc; +import java.security.cert.*; +import javax.net.*; +import javax.net.ssl.*; +import java.net.*; +import java.io.*; +import java.io.IOException; + +public class TrustingSSLSocketFactory extends SSLSocketFactory { + class MyX509TrustManager implements X509TrustManager { + public void checkClientTrusted + (X509Certificate[] chain, String authType) { + // return without complaint + } + public void checkServerTrusted + (X509Certificate[] chain, String authType) + throws CertificateException{ + // return without complaint + } + public X509Certificate[] getAcceptedIssuers() { + return null; + } + } + + private SSLSocketFactory factory; + public TrustingSSLSocketFactory() { + try { + SSLContext sslcontext = SSLContext.getInstance( "TLS"); + sslcontext.init( null, // No KeyManager required + new X509TrustManager[] { new MyX509TrustManager()}, + new java.security.SecureRandom()); + factory = ( SSLSocketFactory) sslcontext.getSocketFactory(); + + } catch( Exception ex) { + ex.printStackTrace(); + } + } + + public static javax.net.ssl.SSLSocketFactory getDefault2() { + return new TrustingSSLSocketFactory(); + } + + public Socket createSocket( Socket socket, String s, int i, boolean + flag) + throws IOException { + return factory.createSocket( socket, s, i, flag); + } + + public Socket createSocket( InetAddress inaddr, int i, + InetAddress inaddr1, int j) throws IOException { + return factory.createSocket( inaddr, i, inaddr1, j); + } + + public Socket createSocket( InetAddress inaddr, int i) throws + IOException { + return factory.createSocket( inaddr, i); + } + + public Socket createSocket( String s, int i, InetAddress inaddr, int j) + throws IOException { + return factory.createSocket( s, i, inaddr, j); + } + + public Socket createSocket( String s, int i) throws IOException { + return factory.createSocket( s, i); + } + + public String[] getDefaultCipherSuites() { + return factory.getSupportedCipherSuites(); + } + + public String[] getSupportedCipherSuites() { + return factory.getSupportedCipherSuites(); + } +}