diff options
Diffstat (limited to 'dev-java/jdbc-postgresql')
3 files changed, 242 insertions, 0 deletions
diff --git a/dev-java/jdbc-postgresql/Manifest b/dev-java/jdbc-postgresql/Manifest index 35e4d379c500..00473cf85741 100644 --- a/dev-java/jdbc-postgresql/Manifest +++ b/dev-java/jdbc-postgresql/Manifest @@ -5,3 +5,4 @@ DIST postgresql-jdbc-9.2-1004.src.tar.gz 1842921 SHA256 eeadff0d830cd19a4f52a948 DIST postgresql-jdbc-9.3-1100.src.tar.gz 1852465 SHA256 e6be53d4cda04735f5f147d2296acb9a22630b062fa3a4ef894073f23efc6d55 SHA512 43968a62f9443739721016ede186b2f41fa6db2d1ef319cd65059f8715e90eda7c7f568995b293578c39e04d43085cfdfece587500f99ed1a49964c12d8c747a WHIRLPOOL 9bf218936a00df00fb4b4f6ed6c3bbe06cdcfcd14d306a4f7bf3073e83f1c51bc85c0a061c2e04790bcebf9183b8aabd056522fa5d18b0734a4aec34b3ab14a0 DIST postgresql-jdbc-9.4-1201.src.tar.gz 1909810 SHA256 96b079611038c0ffff6bb8d22d51ada0cb82c8eb3bd3a9294055963cc638fda7 SHA512 6fd543e325de931ee6c33fe4b1daf53d7baa91061afc9dc1687c4b202430cbcf2a7e3fb047f9e1d88f4d39b8f4f85a98f2b930205ceba414212dfcbaaf108883 WHIRLPOOL 3245227c875d44d82109a5700e06ed3d5bcc75469cd9333c98a7b396b2db1e2ac1da002db19f632afed262929cd7e9a3d8f93d2b24321e103b815383f8fc0a05 DIST postgresql-jdbc-9.4-1203.src.tar.gz 1909858 SHA256 ce2fd309778d9453f012fa85c99071b42cbd62f3ce06d53a4b8aaeb53ac51322 SHA512 9ac059714fb411cf52b1a03ce4991179cc032f17060e733c454f0e41bd8da64c64e718ec131a7d875e334719fd572452c77dbed9ba119eca6cf2f066a3511013 WHIRLPOOL c8581872dfe1495deef2335def51e54d7094c26c6034f26220a63bb657c452181ba996fd6def975d7532dc87a7dba49dd8111c07f9c8e9823917988fd36c9609 +DIST postgresql-jdbc-9.4-1204.src.tar.gz 2018904 SHA256 c22862ce505c501115e9f72ae10cd8b5a02ff7f8c7c2f1475f4035b3c85f170b SHA512 659e60fe3ea54f87396d9f32521799d78381a87530c167e903820f3990facc04f3e145685a9c40d74ba3167a404c144fefa781568b9cea2910399cfe2632f25e WHIRLPOOL e5703de1053b5136656c496b4d9518b8044d6a27d431d054d1c48101364b6a999cb4c97295aecca99edf8cb80bf3b2a4b60b740901b9c3f15340eb51197e9cc1 diff --git a/dev-java/jdbc-postgresql/files/jdbc-postgresql-9.4_p1204-remove-sspi.patch b/dev-java/jdbc-postgresql/files/jdbc-postgresql-9.4_p1204-remove-sspi.patch new file mode 100644 index 000000000000..16996892b192 --- /dev/null +++ b/dev-java/jdbc-postgresql/files/jdbc-postgresql-9.4_p1204-remove-sspi.patch @@ -0,0 +1,138 @@ +--- a/org/postgresql/core/v3/ConnectionFactoryImpl.java 2015-10-09 20:55:53.000000000 +0200 ++++ b/org/postgresql/core/v3/ConnectionFactoryImpl.java 2015-10-14 20:42:48.816753341 +0200 +@@ -32,7 +32,6 @@ + import org.postgresql.hostchooser.HostChooserFactory; + import org.postgresql.hostchooser.HostRequirement; + import org.postgresql.hostchooser.HostStatus; +-import org.postgresql.sspi.SSPIClient; + import org.postgresql.util.GT; + import org.postgresql.util.HostSpec; + import org.postgresql.util.MD5Digest; +@@ -394,11 +393,7 @@ + // or an authentication request + + String password = PGProperty.PASSWORD.get(info); +- +- /* SSPI negotiation state, if used */ +- SSPIClient sspiClient = null; + +- try { + authloop: + while (true) + { +@@ -514,88 +509,16 @@ + case AUTH_REQ_SSPI: + /* + * Use GSSAPI if requested on all platforms, via JSSE. +- * +- * For SSPI auth requests, if we're on Windows attempt native SSPI +- * authentication if available, and if not disabled by setting a +- * kerberosServerName. On other platforms, attempt JSSE GSSAPI +- * negotiation with the SSPI server. +- * +- * Note that this is slightly different to libpq, which uses SSPI +- * for GSSAPI where supported. We prefer to use the existing Java +- * JSSE Kerberos support rather than going to native (via JNA) calls +- * where possible, so that JSSE system properties etc continue +- * to work normally. +- * +- * Note that while SSPI is often Kerberos-based there's no guarantee +- * it will be; it may be NTLM or anything else. If the client responds +- * to an SSPI request via GSSAPI and the other end isn't using Kerberos +- * for SSPI then authentication will fail. + */ +- final String gsslib = PGProperty.GSS_LIB.get(info); +- final boolean usespnego = PGProperty.USE_SPNEGO.getBoolean(info); +- +- boolean useSSPI = false; ++ org.postgresql.gss.MakeGSS.authenticate(pgStream, host, ++ user, password, ++ PGProperty.JAAS_APPLICATION_NAME.get(info), ++ PGProperty.KERBEROS_SERVER_NAME.get(info), ++ logger, ++ PGProperty.USE_SPNEGO.getBoolean(info)); ++ ++ break; + +- /* +- * Use SSPI if we're in auto mode on windows and have a +- * request for SSPI auth, or if it's forced. Otherwise +- * use gssapi. If the user has specified a Kerberos server +- * name we'll always use JSSE GSSAPI. +- */ +- if (gsslib.equals("gssapi")) +- logger.debug("Using JSSE GSSAPI, param gsslib=gssapi"); +- else if (areq == AUTH_REQ_GSS && !gsslib.equals("sspi")) +- logger.debug("Using JSSE GSSAPI, gssapi requested by server and gsslib=sspi not forced"); +- else +- { +- /* Determine if SSPI is supported by the client */ +- sspiClient = new SSPIClient(pgStream, +- PGProperty.SSPI_SERVICE_CLASS.get(info), +- /* Use negotiation for SSPI, or if explicitly requested for GSS */ +- areq == AUTH_REQ_SSPI || (areq == AUTH_REQ_GSS && usespnego), +- logger); +- +- useSSPI = sspiClient.isSSPISupported(); +- logger.debug("SSPI support detected: " + useSSPI); +- +- if (!useSSPI) { +- /* No need to dispose() if no SSPI used */ +- sspiClient = null; +- +- if (gsslib.equals("sspi")) +- throw new PSQLException("SSPI forced with gsslib=sspi, but SSPI not available; set loglevel=2 for details", +- PSQLState.CONNECTION_UNABLE_TO_CONNECT); +- } +- +- logger.debug("Using SSPI: " + useSSPI + ", gsslib="+gsslib+" and SSPI support detected"); +- } +- +- if (useSSPI) +- { +- /* SSPI requested and detected as available */ +- sspiClient.startSSPI(); +- } +- else +- { +- /* Use JGSS's GSSAPI for this request */ +- org.postgresql.gss.MakeGSS.authenticate(pgStream, host, +- user, password, +- PGProperty.JAAS_APPLICATION_NAME.get(info), +- PGProperty.KERBEROS_SERVER_NAME.get(info), +- logger, +- usespnego); +- } +- +- break; +- +- case AUTH_REQ_GSS_CONTINUE: +- /* +- * Only called for SSPI, as GSS is handled by an inner loop +- * in MakeGSS. +- */ +- sspiClient.continueSSPI(l_msgLen - 8); +- break; +- + case AUTH_REQ_OK: + /* Cleanup after successful authentication */ + if (logger.logDebug()) +@@ -616,18 +539,6 @@ + throw new PSQLException(GT.tr("Protocol error. Session setup failed."), PSQLState.PROTOCOL_VIOLATION); + } + } +- } finally { +- /* Cleanup after successful or failed authentication attempts */ +- if (sspiClient != null) +- { +- try { +- sspiClient.dispose(); +- } catch (RuntimeException ex) { +- logger.log("Unexpected error during SSPI context disposal", ex); +- } +- +- } +- } + + } + diff --git a/dev-java/jdbc-postgresql/jdbc-postgresql-9.4_p1204.ebuild b/dev-java/jdbc-postgresql/jdbc-postgresql-9.4_p1204.ebuild new file mode 100644 index 000000000000..64c4e76023cf --- /dev/null +++ b/dev-java/jdbc-postgresql/jdbc-postgresql-9.4_p1204.ebuild @@ -0,0 +1,103 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI="5" + +JAVA_PKG_IUSE="doc source" + +inherit eutils java-pkg-2 java-ant-2 + +MY_PN="postgresql-jdbc" +MY_PV="${PV/_p/-}" +MY_P="${MY_PN}-${MY_PV}.src" + +DESCRIPTION="JDBC Driver for PostgreSQL" +SRC_URI="http://jdbc.postgresql.org/download/${MY_P}.tar.gz" +HOMEPAGE="http://jdbc.postgresql.org/" + +LICENSE="POSTGRESQL" +SLOT="0" +KEYWORDS="~amd64 ~ppc ~ppc64 ~x86" +IUSE="test" + +DEPEND=" + >=virtual/jdk-1.6 + doc? ( + dev-libs/libxslt + app-text/docbook-xsl-stylesheets + ) + test? ( + >=dev-db/postgresql-9.3[server] + dev-java/ant-junit + dev-java/junit:4 + dev-java/xml-commons + )" +RDEPEND=">=virtual/jre-1.6" + +RESTRICT="test" # Requires external postgresql server setup + +S="${WORKDIR}/postgresql-jdbc-${MY_PV}.src" + +java_prepare() { + # Strip build.xml of maven deps + sed -i -e '/<classpath.*dependency\.compile\.classpath/c\' build.xml || die + sed -i -e '/<classpath.*dependency\.runtime\.classpath/c\' build.xml || die + sed -i -e '/<classpath.*dependency\.test\.classpath/c\' build.xml || die + sed -i -e '/<target name="artifact-version"/,/<[/]target>/{s/depends="maven-dependencies"//}' build.xml || die + sed -i -e '/<target name="compile"/ s/,maven-dependencies//' build.xml || die + + # Remove SSPI, it pulls in Waffle-JNA and is only used on Windows + sed -i -e '/<include.*sspi/c\' build.xml || die + rm -vrf org/postgresql/sspi || die "Error removing sspi" + epatch "${FILESDIR}"/${PN}-9.4_p1204-remove-sspi.patch + + # FIXME @someone who cares: enable through osgi flag? + sed -i -e '/<include.*osgi/c\' build.xml || die + sed -i -e '/<test.*osgi/c\' build.xml || die + rm -vrf org/postgresql/osgi || die "Error removing osgi" + rm -vrf org/postgresql/test/osgi || die "Error removing osgi tests" + epatch "${FILESDIR}"/${PN}-9.4_p1201-remove-osgi.patch + + java-pkg_clean +} + +JAVA_ANT_REWRITE_CLASSPATH="yes" +EANT_DOC_TARGET="publicapi" + +src_compile() { + EANT_BUILD_TARGET="release-version jar" + java-pkg-2_src_compile + + # There is a task that creates this doc but I didn't find a way how to use system catalog + # to lookup the stylesheet so the 'doc' target is rewritten here to use system call instead. + if use doc; then + mkdir -p "${S}/build/doc" || die + xsltproc -o "${S}/build/doc/pgjdbc.html" http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl \ + "${S}/doc/pgjdbc.xml" || die + fi +} + +src_test() { + einfo "In order to run the tests successfully, you have to have:" + einfo "1) PostgreSQL server running" + einfo "2) database 'test' defined with user 'test' with password 'test'" + einfo " as owner of the database" + einfo "3) plpgsql support in the 'test' database" + einfo + einfo "You can find a general info on how to perform these steps at" + einfo "https://wiki.gentoo.org/wiki/PostgreSQL" + + ANT_TASKS="ant-junit" eant test -Dgentoo.classpath=$(java-pkg_getjars --build-only "junit-4,xml-commons") +} + +src_install() { + java-pkg_newjar build/jars/postgresql*.jar jdbc-postgresql.jar + + if use doc ; then + java-pkg_dojavadoc build/publicapi + dohtml build/doc/pgjdbc.html + fi + + use source && java-pkg_dosrc org +} |