Bug#705645: Sqlline fails with MS SQL Server JDBC data sources

Mark Kidwell Mark.Kidwell at westernunion.com
Wed Apr 17 23:44:08 UTC 2013


Package: sqlline
Version: 1.0.2-4

Hello,

Running the sqlline binary against a MS SQL Server JDBC data source results in the following error:

$ sqlline
sqlline version 1.0.2 by Marc Prud'hommeaux
sqlline>  !connect jdbc:sqlserver://X.X.X.X:1433;databaseName=MyDatabase
Connecting to jdbc:sqlserver://X.X.X.X:1433;databaseName=MyDatabase
Enter username for jdbc:sqlserver://X.X.X.X:1433;databaseName=MyDatabase: foo
Enter password for jdbc:sqlserver://X.X.X.X:1433;databaseName=MyDatabase: ***
Apr 17, 2013 7:34:46 PM com.microsoft.sqlserver.jdbc.TDSChannel enableSSL
INFO: java.security path: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/security
Security providers: [SUN version 1.6, SunRsaSign version 1.7, SunJSSE version 1.6, SunJGSS version 1.0, SunSASL version 1.5, XMLDSig version 1.0, SunPCSC version 1.6]
SSLContext provider info: Sun JSSE provider(PKCS12, SunX509 key/trust factories, SSLv3, TLSv1)
SSLContext provider services:
[SunJSSE: KeyFactory.RSA -> sun.security.rsa.RSAKeyFactory
  aliases: [1.2.840.113549.1.1, OID.1.2.840.113549.1.1]
, SunJSSE: KeyPairGenerator.RSA -> sun.security.rsa.RSAKeyPairGenerator
  aliases: [1.2.840.113549.1.1, OID.1.2.840.113549.1.1]
, SunJSSE: Signature.MD2withRSA -> sun.security.rsa.RSASignature$MD2withRSA
  aliases: [1.2.840.113549.1.1.2, OID.1.2.840.113549.1.1.2]
, SunJSSE: Signature.MD5withRSA -> sun.security.rsa.RSASignature$MD5withRSA
  aliases: [1.2.840.113549.1.1.4, OID.1.2.840.113549.1.1.4]
, SunJSSE: Signature.SHA1withRSA -> sun.security.rsa.RSASignature$SHA1withRSA
  aliases: [1.2.840.113549.1.1.5, OID.1.2.840.113549.1.1.5, 1.3.14.3.2.29, OID.1.3.14.3.2.29]
, SunJSSE: Signature.MD5andSHA1withRSA -> sun.security.ssl.RSASignature
, SunJSSE: KeyManagerFactory.SunX509 -> sun.security.ssl.KeyManagerFactoryImpl$SunX509
, SunJSSE: KeyManagerFactory.NewSunX509 -> sun.security.ssl.KeyManagerFactoryImpl$X509
, SunJSSE: TrustManagerFactory.SunX509 -> sun.security.ssl.TrustManagerFactoryImpl$SimpleFactory
, SunJSSE: TrustManagerFactory.PKIX -> sun.security.ssl.TrustManagerFactoryImpl$PKIXFactory
  aliases: [SunPKIX, X509, X.509]
, SunJSSE: SSLContext.SSL -> sun.security.ssl.SSLContextImpl
, SunJSSE: SSLContext.SSLv3 -> sun.security.ssl.SSLContextImpl
, SunJSSE: SSLContext.TLS -> sun.security.ssl.SSLContextImpl
, SunJSSE: SSLContext.TLSv1 -> sun.security.ssl.SSLContextImpl
, SunJSSE: SSLContext.Default -> sun.security.ssl.DefaultSSLContextImpl
, SunJSSE: KeyStore.PKCS12 -> sun.security.pkcs12.PKCS12KeyStore
]
java.ext.dirs: /usr/share/java/:/usr/local/share/java/
Error: The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "RSA premaster secret error". ClientConnectionId:656fc562-608b-4bb4-9bf1-29720f312884 (state=08S01,code=0)

According to other bug reports with similar errors, it's because java.ext.dirs overrides the automatic use of the jre/lib/ext directory (reference http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6382135). And indeed, manually updating the sqlline binary to add the correct ext dir does fix this for the above test. Here's my local patch, though there's probably a much better way to do this when java-wrappers is involved.

Thanks,
Mark

--- /usr/bin/sqlline    2009-07-13 15:08:44.000000000 -0400
+++ sqlline     2013-04-17 19:40:06.000000000 -0400
@@ -1,6 +1,7 @@
 #!/bin/sh

-JAVA_ARGS="-Djava.ext.dirs=/usr/share/java/:/usr/local/share/java/"
+EXT_DIRS=/usr/share/java/:/usr/local/share/java/
+

 # Include the wrappers utility script
 . /usr/lib/java-wrappers/java-wrappers.sh
@@ -11,6 +12,18 @@
 # Define our classpath
 find_jars jline sqlline

+# find jre/lib/ext
+EXT=$JAVA_HOME/lib/ext
+if [ ! -d $EXT ] ; then
+  EXT=$JAVA_HOME/jre/lib/ext
+  if [ ! -d $EXT ] ; then
+    echo "Can't find extension dir (jre/lib/ext)!" >&2
+    exit 1
+  fi
+fi
+
+JAVA_ARGS="-Djava.ext.dirs=$EXT:/usr/share/java/:/usr/local/share/java/"
+
 # Run SQLLine
 run_java sqlline.SqlLine $extra_args "$@"
The information transmitted, including any content in this communication is confidential, is intended only for the use of the intended recipient and is the property of The Western Union Company or its affiliates and subsidiaries. If you are not the intended recipient, you are hereby notified that any use of the information contained in or transmitted with the communication or dissemination, distribution, or copying of this communication is strictly prohibited. If you have received this communication in error, please notify the Western Union sender immediately by replying to this message and delete the original message



More information about the pkg-java-maintainers mailing list