diff -urN openjdk.orig/hotspot/src/os/linux/vm/os_linux.cpp openjdk/hotspot/src/os/linux/vm/os_linux.cpp --- openjdk.orig/hotspot/src/os/linux/vm/os_linux.cpp 2007-10-12 18:25:55.000000000 -0400 +++ openjdk/hotspot/src/os/linux/vm/os_linux.cpp 2007-10-12 18:26:02.000000000 -0400 @@ -387,6 +387,10 @@ "javax.net.ssl.trustStorePassword", ""); + // Use the system zoneinfo files, if present + Arguments::PropertyList_add (&sp, + "user.zoneinfo.dir", "/usr/share/javazi"); + #undef malloc #undef getenv #undef EXTENSIONS_DIR --- ../openjdkb23/openjdk/jdk/src/share/classes/sun/util/calendar/ZoneInfoFile.java 2007-10-30 04:38:28.000000000 -0400 +++ openjdk/jdk/src/share/classes/sun/util/calendar/ZoneInfoFile.java 2007-11-13 13:16:52.000000000 -0500 @@ -28,6 +28,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; +import java.security.AccessControlException; import java.io.IOException; import java.lang.ref.SoftReference; import java.security.AccessController; @@ -1021,11 +1022,29 @@ byte[] buffer = null; try { - String homeDir = AccessController.doPrivileged( - new sun.security.action.GetPropertyAction("java.home")); - final String fname = homeDir + File.separator + "lib" + File.separator - + "zi" + File.separator + fileName; - buffer = (byte[]) AccessController.doPrivileged(new PrivilegedExceptionAction() { + String zi_dir = (String) AccessController.doPrivileged(new sun.security.action.GetPropertyAction("user.zoneinfo.dir")); + File dir = null; + if (zi_dir != null) + dir = new File(zi_dir); + + // Some minimal sanity checking + if (dir != null) { + try { + File f = new File(dir, "ZoneInfoMappings"); + if (!f.exists()) + dir = null; + } catch (AccessControlException ace) { + dir = null; + } + } + + if (dir == null) { + String homeDir = (String) AccessController.doPrivileged(new sun.security.action.GetPropertyAction("java.home")); + zi_dir = homeDir + File.separator + "lib" + File.separator + + "zi"; + } + final String fname = zi_dir + File.separator + fileName; + buffer = (byte[]) AccessController.doPrivileged(new PrivilegedExceptionAction() { public Object run() throws IOException { File file = new File(fname); if (!file.canRead()) {