Thread: Patch to remove connection hook and JDK 1.3 dependencies
Attached is a patch to remove the ConnectionHook functionality and thus the JDK 1.3 dependency. For a further explanation see my posting to the JDBC list on Friday, explaining why this is being done. thanks, --Barry PS. In addition to the diffs in this patch, the file src/interfaces/jdbc/org/postgresql/core/ConnectionHook.java is obsoleted and needs to be removed from 7.2, but of course the file is still needed for 7.1 builds. *** ./interfaces/jdbc/build.xml.orig Fri Jun 29 19:06:30 2001 --- ./interfaces/jdbc/build.xml Fri Jun 29 19:09:20 2001 *************** *** 37,43 **** --> <target name="check_versions"> <available property="jdk1.2+" classname="java.lang.ThreadLocal" /> - <available property="jdk1.3+" classname="java.lang.StrictMath" /> <available property="jdk1.2e+" classname="javax.sql.DataSource" /> <available property="junit" classname="junit.framework.Test" /> </target> --- 37,42 ---- *************** *** 58,68 **** <property name="connectclass" value="org.postgresql.jdbc1.Connection" /> <available property="connectclass" value="org.postgresql.jdbc2.Connection" classname="java.lang.ThreadLocal" /> - <!-- comment out 1.3+ stuff --> - <property name="jdk13only" value="//" /> - <available property="jdk13only" value="" classname="java.lang.StrictMath" /> - <filter token="JDK1.3ONLY" value="${jdk13only}" /> - <!-- Some defaults --> <filter token="MAJORVERSION" value="${major}" /> <filter token="MINORVERSION" value="${minor}" /> --- 57,62 ---- *************** *** 104,110 **** <target name="compile" depends="prepare,check_versions,driver"> <javac srcdir="${src}" destdir="${dest}"> <include name="${package}/**" /> - <exclude name="${package}/core/ConnectionHook.java" unless="jdk1.3+" /> <exclude name="${package}/jdbc1/**" if="jdk1.2+" /> <exclude name="${package}/jdbc2/**" unless="jdk1.2+" /> <exclude name="${package}/largeobject/PGblob.java" unless="jdk1.2+" /> --- 98,103 ---- *** ./interfaces/jdbc/org/postgresql/Driver.java.in.orig Fri Jun 29 19:13:40 2001 --- ./interfaces/jdbc/org/postgresql/Driver.java.in Fri Jun 29 19:16:58 2001 *************** *** 36,44 **** // Placing it here, means that the driver is registered once only. java.sql.DriverManager.registerDriver(new Driver()); - // New in 7.1 - register ourselves with the JVM - JDK1.3+ only - @JDK1.3ONLY@org.postgresql.core.ConnectionHook.init(); - } catch (SQLException e) { e.printStackTrace(); } --- 36,41 ----
Your patch has been added to the PostgreSQL unapplied patches list at: http://candle.pha.pa.us/cgi-bin/pgpatches I will try to apply it within the next 48 hours. > > Attached is a patch to remove the ConnectionHook functionality and thus > the JDK 1.3 dependency. For a further explanation see my posting to the > JDBC list on Friday, explaining why this is being done. > > thanks, > --Barry > > PS. In addition to the diffs in this patch, the file > src/interfaces/jdbc/org/postgresql/core/ConnectionHook.java is obsoleted > and needs to be removed from 7.2, but of course the file is still needed > for 7.1 builds. > *** ./interfaces/jdbc/build.xml.orig Fri Jun 29 19:06:30 2001 > --- ./interfaces/jdbc/build.xml Fri Jun 29 19:09:20 2001 > *************** > *** 37,43 **** > --> > <target name="check_versions"> > <available property="jdk1.2+" classname="java.lang.ThreadLocal" /> > - <available property="jdk1.3+" classname="java.lang.StrictMath" /> > <available property="jdk1.2e+" classname="javax.sql.DataSource" /> > <available property="junit" classname="junit.framework.Test" /> > </target> > --- 37,42 ---- > *************** > *** 58,68 **** > <property name="connectclass" value="org.postgresql.jdbc1.Connection" /> > <available property="connectclass" value="org.postgresql.jdbc2.Connection" classname="java.lang.ThreadLocal" /> > > - <!-- comment out 1.3+ stuff --> > - <property name="jdk13only" value="//" /> > - <available property="jdk13only" value="" classname="java.lang.StrictMath" /> > - <filter token="JDK1.3ONLY" value="${jdk13only}" /> > - > <!-- Some defaults --> > <filter token="MAJORVERSION" value="${major}" /> > <filter token="MINORVERSION" value="${minor}" /> > --- 57,62 ---- > *************** > *** 104,110 **** > <target name="compile" depends="prepare,check_versions,driver"> > <javac srcdir="${src}" destdir="${dest}"> > <include name="${package}/**" /> > - <exclude name="${package}/core/ConnectionHook.java" unless="jdk1.3+" /> > <exclude name="${package}/jdbc1/**" if="jdk1.2+" /> > <exclude name="${package}/jdbc2/**" unless="jdk1.2+" /> > <exclude name="${package}/largeobject/PGblob.java" unless="jdk1.2+" /> > --- 98,103 ---- > *** ./interfaces/jdbc/org/postgresql/Driver.java.in.orig Fri Jun 29 19:13:40 2001 > --- ./interfaces/jdbc/org/postgresql/Driver.java.in Fri Jun 29 19:16:58 2001 > *************** > *** 36,44 **** > // Placing it here, means that the driver is registered once only. > java.sql.DriverManager.registerDriver(new Driver()); > > - // New in 7.1 - register ourselves with the JVM - JDK1.3+ only > - @JDK1.3ONLY@org.postgresql.core.ConnectionHook.init(); > - > } catch (SQLException e) { > e.printStackTrace(); > } > --- 36,41 ---- > > ---------------------------(end of broadcast)--------------------------- > TIP 2: you can get off all lists at once with the unregister command > (send "unregister YourEmailAddressHere" to majordomo@postgresql.org) -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000 + If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania 19026
Patch applied. Thanks. > > Attached is a patch to remove the ConnectionHook functionality and thus > the JDK 1.3 dependency. For a further explanation see my posting to the > JDBC list on Friday, explaining why this is being done. > > thanks, > --Barry > > PS. In addition to the diffs in this patch, the file > src/interfaces/jdbc/org/postgresql/core/ConnectionHook.java is obsoleted > and needs to be removed from 7.2, but of course the file is still needed > for 7.1 builds. > *** ./interfaces/jdbc/build.xml.orig Fri Jun 29 19:06:30 2001 > --- ./interfaces/jdbc/build.xml Fri Jun 29 19:09:20 2001 > *************** > *** 37,43 **** > --> > <target name="check_versions"> > <available property="jdk1.2+" classname="java.lang.ThreadLocal" /> > - <available property="jdk1.3+" classname="java.lang.StrictMath" /> > <available property="jdk1.2e+" classname="javax.sql.DataSource" /> > <available property="junit" classname="junit.framework.Test" /> > </target> > --- 37,42 ---- > *************** > *** 58,68 **** > <property name="connectclass" value="org.postgresql.jdbc1.Connection" /> > <available property="connectclass" value="org.postgresql.jdbc2.Connection" classname="java.lang.ThreadLocal" /> > > - <!-- comment out 1.3+ stuff --> > - <property name="jdk13only" value="//" /> > - <available property="jdk13only" value="" classname="java.lang.StrictMath" /> > - <filter token="JDK1.3ONLY" value="${jdk13only}" /> > - > <!-- Some defaults --> > <filter token="MAJORVERSION" value="${major}" /> > <filter token="MINORVERSION" value="${minor}" /> > --- 57,62 ---- > *************** > *** 104,110 **** > <target name="compile" depends="prepare,check_versions,driver"> > <javac srcdir="${src}" destdir="${dest}"> > <include name="${package}/**" /> > - <exclude name="${package}/core/ConnectionHook.java" unless="jdk1.3+" /> > <exclude name="${package}/jdbc1/**" if="jdk1.2+" /> > <exclude name="${package}/jdbc2/**" unless="jdk1.2+" /> > <exclude name="${package}/largeobject/PGblob.java" unless="jdk1.2+" /> > --- 98,103 ---- > *** ./interfaces/jdbc/org/postgresql/Driver.java.in.orig Fri Jun 29 19:13:40 2001 > --- ./interfaces/jdbc/org/postgresql/Driver.java.in Fri Jun 29 19:16:58 2001 > *************** > *** 36,44 **** > // Placing it here, means that the driver is registered once only. > java.sql.DriverManager.registerDriver(new Driver()); > > - // New in 7.1 - register ourselves with the JVM - JDK1.3+ only > - @JDK1.3ONLY@org.postgresql.core.ConnectionHook.init(); > - > } catch (SQLException e) { > e.printStackTrace(); > } > --- 36,41 ---- > > ---------------------------(end of broadcast)--------------------------- > TIP 2: you can get off all lists at once with the unregister command > (send "unregister YourEmailAddressHere" to majordomo@postgresql.org) -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000 + If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania 19026
Barry Lind wrote: > > Attached is a patch to remove the ConnectionHook functionality and thus > the JDK 1.3 dependency. For a further explanation see my posting to the > JDBC list on Friday, explaining why this is being done. > I don't see any post on Friday. Why is this being done? Now I'll have to code my own shutdown hooks. -- Joseph Shraibman jks@selectacast.net Increase signal to noise ratio. http://www.targabot.com
> Barry Lind wrote: > > > > Attached is a patch to remove the ConnectionHook functionality and thus > > the JDK 1.3 dependency. For a further explanation see my posting to the > > JDBC list on Friday, explaining why this is being done. > > > I don't see any post on Friday. Why is this being done? Now I'll have > to code my own shutdown hooks. The consensus was that the function didn't work or wasn't needed. We can always re-add it. I will wait for a discussion. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000 + If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania 19026
Bruce Momjian wrote: > > > Barry Lind wrote: > > > > > > Attached is a patch to remove the ConnectionHook functionality and thus > > > the JDK 1.3 dependency. For a further explanation see my posting to the > > > JDBC list on Friday, explaining why this is being done. > > > > > I don't see any post on Friday. Why is this being done? Now I'll have > > to code my own shutdown hooks. > > The consensus was that the function didn't work or wasn't needed. We > can always re-add it. I will wait for a discussion. > If it doesn't work that's one thing but I think it is needed. Whenever I shut down my java programs I get 'pq_recvbuf: unexpected EOF on client connection ' in my postgres log. I was going to make my own shutdown hooks when I moved to java 1.3 but I noticed that there were ones in the jdbc driver so I thought I didn't have to. And when I kept getting those messages I just thought I built the driver wrong. -- Joseph Shraibman jks@selectacast.net Increase signal to noise ratio. http://www.targabot.com
> > The consensus was that the function didn't work or wasn't needed. We > > can always re-add it. I will wait for a discussion. > > > If it doesn't work that's one thing but I think it is needed. Whenever > I shut down my java programs I get 'pq_recvbuf: unexpected EOF on client > connection ' in my postgres log. I was going to make my own shutdown > hooks when I moved to java 1.3 but I noticed that there were ones in the > jdbc driver so I thought I didn't have to. And when I kept getting > those messages I just thought I built the driver wrong. Are you using the current CVS jdbc driver from: http://jdbc.fastcrypt.com or an older version? I hope it is at least 7.1.X. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 853-3000 + If your life is a hard drive, | 830 Blythe Avenue + Christ can be your backup. | Drexel Hill, Pennsylvania 19026
I'm using the 7.1.2 driver. BTW having to add a line to your permission file for shutdown hooks is not a good reason to get rid of this feature. It most cases it would be extremely unlikely for an attacker to get a chance to add a shutdown hook to your jvm and if they do they've probably already got the means to do Bad Things. The java.policy file can have an entry to allow only code in org.postgres to add shutdown hooks (maybe we should put this in the documentation). The only case where it might matter is if you are trying to access postgres directly from an applet and you can't finely control the permissions of the applet sandbox. Bruce Momjian wrote: > > > > The consensus was that the function didn't work or wasn't needed. We > > > can always re-add it. I will wait for a discussion. > > > > > If it doesn't work that's one thing but I think it is needed. Whenever > > I shut down my java programs I get 'pq_recvbuf: unexpected EOF on client > > connection ' in my postgres log. I was going to make my own shutdown > > hooks when I moved to java 1.3 but I noticed that there were ones in the > > jdbc driver so I thought I didn't have to. And when I kept getting > > those messages I just thought I built the driver wrong. > > Are you using the current CVS jdbc driver from: > > http://jdbc.fastcrypt.com > > or an older version? I hope it is at least 7.1.X. > -- Joseph Shraibman jks@selectacast.net Increase signal to noise ratio. http://www.targabot.com
See: http://www.ca.postgresql.org/mhonarc/pgsql-jdbc/2001-06/msg00174.html thanks, --Barry Joseph Shraibman wrote: > Barry Lind wrote: > >>Attached is a patch to remove the ConnectionHook functionality and thus >>the JDK 1.3 dependency. For a further explanation see my posting to the >>JDBC list on Friday, explaining why this is being done. >> >> > I don't see any post on Friday. Why is this being done? Now I'll have > to code my own shutdown hooks. > >
If you shutdown the JVM without closing your connections this is the behavior I would expect in to see in that case. Your code should be closing any open connections to the database before exiting. This same behavior can be seen in psql as well. If psql exits unexpectedly (i.e. you kill a psql process) you will get the same 'unexpected EOF...' message on the server. thanks, --Barry Joseph Shraibman wrote: > Bruce Momjian wrote: > >>>Barry Lind wrote: >>> >>>>Attached is a patch to remove the ConnectionHook functionality and thus >>>>the JDK 1.3 dependency. For a further explanation see my posting to the >>>>JDBC list on Friday, explaining why this is being done. >>>> >>>> >>>I don't see any post on Friday. Why is this being done? Now I'll have >>>to code my own shutdown hooks. >>> >>The consensus was that the function didn't work or wasn't needed. We >>can always re-add it. I will wait for a discussion. >> >> > If it doesn't work that's one thing but I think it is needed. Whenever > I shut down my java programs I get 'pq_recvbuf: unexpected EOF on client > connection ' in my postgres log. I was going to make my own shutdown > hooks when I moved to java 1.3 but I noticed that there were ones in the > jdbc driver so I thought I didn't have to. And when I kept getting > those messages I just thought I built the driver wrong. > > > >
Joseph Shraibman wrote: > <snip> OK I looked at ConnectionHook in the cvs and there is obviously code there to close the connections, but where is the code that calls ConnectionHook.open()? That's probably the problem. Also a Vector should be used instead of an ArrayList because there could be multiple threads accessing the jdbc driver at the same time. It could be that open() and close() are only supposed to be called from code that is locked anyway but I can't verify that. Also I'm wondering why there is a ConnectionHook class at all. It seems to me it would be better to have this stuff in Connection itself and we wouldn't have to do that strange workaround of calling init(). If I can connect to the cvs I'll try and code it. -- Joseph Shraibman jks@selectacast.net Increase signal to noise ratio. http://www.targabot.com
Joseph Shraibman wrote: > <snip> > to do Bad Things. The java.policy file can have an entry to allow only > code in org.postgres to add shutdown hooks (maybe we should put this in > the documentation). > grant codeBase "file:///usr/local/pgsql/share/java/" { permission java.lang.RuntimePermission "shutdownHooks"; }; I think there is a way to grant permission based on what package a class is in (i.e. org.postgres) but I couln't find it. -- Joseph Shraibman jks@selectacast.net Increase signal to noise ratio. http://www.targabot.com